关系逻辑

AOP的理解

拈花ヽ惹草 提交于 2019-11-26 17:16:10
描述:对于AOP术语一些总结以及相关的案例 标签:Spring 面向切面编程 目录 {:toc} 几个术语的基本解释 通知 直接明白的说就是你想要的功能(为了更清晰的逻辑,让你的业务逻辑去关注本身的业务,而不是去想其他的事情,这些其他的事情包括,比如安全、事务、日志等) 连接点 就是允许你使用通知的地方,比如每个方法的前后或者抛出异常时都是连接点。Spring只支持方法连接点 切入点 比如说,你的一个类里有15个方法,那不就是几十个连接点了,但是你不可能在所有方法上面都写一个通知吧,你只是想让其中几个方法,就可以使用 切点去筛选连接点 ,选中那几个你想要的方法 切面 切面就是通知和切入点的集合,也就是一个类。没连接点什么事情,连接点就是为了让你更好的去理解切点。通知说明了干什么和什么时候干(通过@Before @After等注解就可以明白),而切入点说明了在哪里干(指定到底是哪个方法) 引入 允许我们向现有的类(目标类)添加新方法属性。其实说白了就是切面类(这里不就是定义了切入点 通知嘛),就是切面类可以为目标类添加新方法属性。 目标 也就是上面提到的目标类,也就是需要被通知的对象。这个目标类的话就是我们的真正业务逻辑,而不是其他事情(其他事情在切面类中去做,上面提到的日志、事务等) 代理 怎么实现整套AOP机制的,都是通过代理 织入

Raid

霸气de小男生 提交于 2019-11-26 17:12:20
RAID:处理磁盘冗余 为什么学习? 1、解决了数据的读写速率 2、解决了磁盘冗余 RAID是什么? Redundant Arrays of Independent Drivers 冗余 数组 独立的 独立磁盘构成的具有冗余能力的阵列 个别磁盘提供数据所产生加成效果提升整个磁盘系统效能 raid分为哪几类? 1、外接式磁盘阵列柜 2、内接式磁盘阵列卡 3、软件来仿真实现raid 常见的raid卡型号: 华为SR130 RAID卡 不做缓存 ​ SR430c 做缓存 戴尔H730P 做缓存 ​ H330 不做缓存 raid开卡需要驱动 raid类型: raid0 (不含检验与冗余的条带存储):至少2块盘,只有按条带存储数 特点:提高数据的存储速度,但是没有备份,不能容灾。可用容量100% 应用场景:对数据要求不高的场景下。 raid1 (不含校验的镜像存储):至少2块盘,只有镜像 特点:不能解决数据存取速度的问题,但是可容灾。可用容量50% 应用场景:对数据的要求很高的场景下。 *raid5 (数据块级别的分布式校验条带存储):至少3块盘,可以提高存取速度 特点:存储的有存储数据和校验数据,可以容灾(允许一个盘坏),可用容量是(n-1/n)。 应用场景:折中了Raid0和Raid1的优缺点,可适用于大部分场景。 raid6 至少4块盘,可以提高存储速率 特点

在阿里Java大牛们都是这样对Java项目代码分层的

倾然丶 夕夏残阳落幕 提交于 2019-11-26 16:51:38
作者:咖啡拿铁 代码分层,对于任何一个Java开发来说应该都不陌生。一个好的层次划分不仅可以能使代码结构更加清楚,还可以使项目分工更加明确,可读性大大提升,更加有利于后期的维护和升级。 从另外一个角度来看,好的代码分层架构,应该是可以很好的匹配上单一职责原则的。这样就可以降低层与层之间的依赖,还能最大程度的复用各层的逻辑。本文就来介绍下Java 项目的代码到底应该如何分层。 1.背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。 的确在这些人眼中分层只是一个形式,前辈们的代码这么写的,其他项目代码这么写的,那么我也这么跟着写。但是在真正的团队开发中每个人的习惯都不同,写出来的代码必然带着自己的标签,有的人习惯controller写大量的业务逻辑,有的人习惯在service中之间调用远程服务,这样就导致了每个人的开发代码风格完全不同,后续其他人修改的时候,一看,我靠这个人写的代码和我平常的习惯完全不同,修改的时候到底是按着自己以前的习惯改

RHCE实验记录总结

戏子无情 提交于 2019-11-26 16:23:04
不管是运维还是开发系统的了解下Linux或者系统的温习整理一下Linux知识点无疑是较好的,这篇文章是对RHCSA&RHCE实验进行一个汇总,是我为了做实验方便(并分享给朋友)的一篇文章。 前言 开卷有益 准备考 RHCSA (红帽认证系统管理员) RHCE ( 红帽认证工程师) 想做下Linux实验巩固下实操技能 测试下自己现在Linux的技能掌握度 环境提示 系统版本:Centos7 虚拟环境:文章下方 虚拟环境安装 虚拟环境常用管理命令 整体总结 1、看下第一个实验的例子,其实要是重置密码步骤:第一步干了什么、第二步干了什么也是可以重置密码的(仅仅是做好这个实验而已) 2、拿第一个实验例子举例,做完实验看下总结 这个实验每一步的上下游关系(如果有的话) 每一步是干了什么,有什么意义 总结思考 RHCSA实验 恢复root密码 实验成果说明: 1、在忘记root密码的情况下如何恢复root密码 2、恢复root密码为redhat 实验前环境初始化: 1、重置server系统:rht-vmctl reset server 2、打开GUI(图形页面):rht-vmctl view server 3、在servser上执行命令初始化环境:lab rootpw setup 具体实验步骤: 1、重启操作系统,然后在启动加载器菜单中终端倒计时 1.1.

Task2-逻辑回归算法梳理

穿精又带淫゛_ 提交于 2019-11-26 16:11:33
Task2 主要整理逻辑回归相关算法。 逻辑回归与线性回归的联系与区别 联系 逻辑回归本质上还是线性回归, 只是在特征到结果的映射中加入了一层函数映射, 即先把特征线性求和, 然后使用函数 g(z) 将连续结果值映射到 (0, 1) 之间, 我们将线性回归模型的表达式代入到 Logistic(Sigmoid) 函数之中, 就得到了逻辑回归的表达式: 区别 最本质区别: 逻辑回归处理的是分类问题, 线性回归处理的是回归问题. 在逻辑回归中, 因变量的取值是一个 二元分布(不是二项分布). 而线性回归中实际上求解的是对真实函数关系的一个近似拟合。 逻辑回归的原理 逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。 Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别) 回归模型中,y是一个定性变量,比如y=0或1,logistic方法主要应用于研究某些事件发生的概率 逻辑回归损失函数推导及优化 Cost函数和J函数如下,它们是基于最大似然估计推导得到的。 推导过程: 1.求代价函数 概率综合起来写成: 取似然函数为: 对数似然函数为: 最大似然估计就是求使l(θ)取最大值时的θ,其实这里可以使用梯度上升法求解

PetShop 4 详解(转载)

本小妞迷上赌 提交于 2019-11-26 15:03:56
最近一段时间在研究petShop,希望能通过了解petShop的设计理念,整理出一套重用性强,适合自己在小项目中使用的架构。以作日后使用。 petshop4.0 详解之一(系统架构设计) 前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来。这种争论不可避免带有浓厚的商业色彩,对于我们开发人员而言,没有必要过多关注。然而PetShop随着版本的不断更新,至现在基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,却又很多可以借鉴之处。PetShop是一个小型的项目,系统架构与代码都比较简单,却也凸现了许多颇有价值的设计与开发理念。本系列试图对PetShop作一个全方位的解剖,依据的代码是PetShop4.0,可以从链接http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp中获得。 一、PetShop的系统架构设计 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层,如图所示: 图一:三层的分层式结构

一条 SQL 在 Apache Spark 之旅

青春壹個敷衍的年華 提交于 2019-11-26 11:28:30
转载自过往记忆大数据 https://www.iteblog.com/archives/2561.html Spark SQL 是 Spark 众多组件中技术最复杂的组件之一,它同时支持 SQL 查询和 DataFrame DSL。通过引入了 SQL 的支持,大大降低了开发人员的学习和使用成本。目前,整个 SQL 、 Spark ML、Spark Graph 以及 Structured Streaming 都是运行在 Catalyst Optimization & Tungsten Execution 之上的,如下图所示: 所以,正常的 SQL 执行先会经过 SQL Parser 解析 SQL,然后经过 Catalyst 优化器处理,最后到 Spark 执行。而 Catalyst 的过程又分为很多个过程,其中包括: Analysis:主要利用 Catalog 信息将 Unresolved Logical Plan 解析成 Analyzed logical plan; Logical Optimizations:利用一些 Rule (规则)将 Analyzed logical plan 解析成 Optimized Logical Plan; Physical Planning:前面的 logical plan 不能被 Spark 执行,而这个过程是把 logical plan

Android 开发中的架构模式 -- MVC / MVP / MVVM

本秂侑毒 提交于 2019-11-26 11:27:22
【 这是 ZY 第 15 篇原创技术文章 】 预备知识 了解 Android 基本开发 看完本文可以达到什么程度 了解如何分析一个架构模式 掌握 MVC,MVP,MVVM 架构定义和实现 阅读前准备工作 clone CommonTec 项目,其中 architecture 模块是本文架构模式的对应的示例代码 文章概览 一、什么是架构 关于架构的定义,其实在很多书籍和文章中都是不同的,很难做一个统一。这里列举两个定义: 在维基百科里是这样定义的: 软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。 在 IEEE 软件工程标准词汇中是这样定义的: 架构是以组件、组件之间的关系、组件与环境之间的关系为内容的某一系统的基本组织结构,以及指导上述内容设计与演化的原理。 关于更多的定义,推荐阅读《软件架构设计:程序员向架构师转型必备》第二章 ... 在看过茫茫多的架构定义以后,我理解的架构是这样的: 为了解决 特定的问题 而提出 按照 特定的原则 将系统整体进行模块/组件/角色的划分 建立模块/组件/角色间的 沟通机制 具体解释一下,首先是要有特定的问题,没有问题空谈架构,仿佛是空中楼阁,没有实用价值,而对应到不同的问题,会有不同的解决方式。

SEGL指令详解

二次信任 提交于 2019-11-26 10:19:34
带锁存的7段码显示指令 实例 格式: SEGL D0 Y20 K1 [ S.] [D.] [n] 注: [D.]只能使用Y 功能: 将D0中的二进制数据转换成BCD码,送到连接在Y端口上的带锁存的7段码显示器中进行显示。 说明: 1. D0中的数据为二进制形式,其数值范围为0~9999(十进制);     2. 本指令必须使用晶体管输出;      3. 应使用恒定扫描周期(扫描周期为10ms以上);      注:M8039:恒定扫描,接通时,PLC以D8039中的内容为扫描周期运行程序。      4. n=K0~K7,由PLC与显示器的数值输入及位选信号的逻辑关系确定: PLC的逻辑: 输出端子状态为“1”时输出高电平――为“正逻辑”; 输出端子状态为“1”时输出低电平――为“负逻辑”; 显示器数值输入: 输入高电平作为“1”――为“正逻辑”; 输入低电平作为“1”――为“负逻辑”; 显示器位选信号: 选通信号为高电平时选通――为“正逻辑”; 选通信号为低电平时选通――为“负逻辑”; 来源: https://www.cnblogs.com/iBoundary/p/11317772.html

C++程序的耦合性设计

梦想与她 提交于 2019-11-26 10:19:28
声明:本文部分采用和参考《代码里的世界观-通往架构师之路》中内容,可以说是该书中耦合性一章的读后感,感谢该书的作者余叶老师的无私分享。 1.什么是耦合? 耦合其实就是程序之间的相关性。 程序之间绝对没有相关性是不可能的,否则也不可能在一个程序中启动,如下图: 这是一个Linux中socket TCP编程的程序流程图,在图中的TCP服务器端,socket()、bind()接口、listen()接口、accept()接口之间肯定存在着相关(就是要调用下一个接口程序必需先调用前一个接口),也就是耦合,否则整个TCP服务器端就建立不起来,以及改变了bind()中的传入的数据,比如端口号,那么接下来的listen()监听的端口,accept()接收连接的端口也会改变,所以它们之间有很强的相关性,属于紧耦合。所以耦合就是代码的相关性,如果还不明白,也没关系,继续看下去,相信你会懂的,哈哈。 2.耦合的形式 (1)数据之间耦合 在同一个结构体或者类中,如: typedef struct Person { int age; char* name; }Person; class Person { private: int age_m; bool namePresent_m; std::string name_m; }; 在上面的结构体和类中,年龄和名字两个基本数据单元组合成了一个人数据单元