关系逻辑

Moq框架简单使用

孤者浪人 提交于 2019-12-02 14:39:16
Moq框架简单使用 系列目录 Moq库简介及安装 Moq简介 Moq是.net平台下的一个非常流行的模拟库,只要有一个接口它就可以动态生成一个对象,底层使用的是Castle的动态代理功能. 它的流行赖于依赖注入模式的兴起,现在越来越多的分层架构使用依赖注入的方式来解耦层与层之间的关系.最为常见的是数据层和业务逻辑层之间的依赖注入,业务逻辑层不再强依赖数据层对象,而是依赖数据层对象的接口,在IOC容器里完成依赖的配置. 这种解耦给单元测试带来了巨大的便利,使得对业务逻辑的测试可以脱离对数据层的依赖,单元测试的粒度更小,更容易排查出问题所在. 大家可能都知道,数据层的接口往往有很多方法,少则十几个,多则几十个.我们如果在单元测试的时候把接口切换为假实现,即使实现类全是空也需要大量代码,并且这些代码不可重用,一旦接口层改变不但要更改真实数据层实现还要修改这些专为测试做的假实现.这显然是不小的工作量. 幸好有Moq,它可以在编译时动态生成接口的代理对象.大大提高了代码的可维护性,同时也极大减少工作量. 除了动态创建代理外,Moq还可以进行行为测试,触发事件等. Moq安装 Moq安装非常简单,在Nuget里面搜索moq,第一个结果便是moq框架,点击安装即可. Moq简单使用 本示例中要使用到的代码如下 public class MyDto { public string Name {

小白也看得懂的 Spring IoC 核心流程介绍

穿精又带淫゛_ 提交于 2019-12-02 12:40:18
前言 本文将用最通俗易懂的文字介绍 Spring IoC 中的核心流程,主要用于帮助初学者快速了解 IoC 的核心流程,也可以用作之前源码分析文章的总结。本着简单的初衷,本文会省略掉大量流程,只介绍最重要的步骤。 基础概念 1、IoC 和 DI IoC (Inversion of Control),即控制反转。这不是一种新的技术,而是 Spring 的一种设计思想。 在传统的程序设计,我们直接在对象内部通过 new 来创建对象,是程序主动去创建依赖对象;而在 Spring 中有专门的一个容器来创建和管理这些对象,并将对象依赖的其他对象注入到该对象中,这个容器我们一般称为 IoC 容器。 所有的类的创建、销毁都由 Spring 来控制,也就是说控制对象生存周期的不再是引用它的对象,而是 Spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被 Spring 控制,所以这叫控制反转。 DI(Dependency Injection),即依赖注入,由 Martin Fowler 提出。可以认为 IoC 和 DI 其实是同一个概念的不同角度描述。 依赖注入是指组件之间的依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。

PHP代码审计————通用代码审计思路

血红的双手。 提交于 2019-12-02 11:37:45
前言 本小节我们就来总结一下在PHP代码审计中常用到的代码审计思路 敏感函数回溯参数过程 根据敏感函数的来逆向追踪参数的传递过程,是目前使用的最多的一种方式,因为大多数漏洞是由于函数的使用不当造成的。另外非函数使用不当的漏洞,如sql注入,也有一些特征,比如select、insert等,再结合from和where等关键字,我们就可以判读是否是一条SQL语句,通过对字符串的识别分析,就能判读这个sql语句里面的参数有没有使用单引号过滤,或者根据我们的经验来判断。 就像是HTTP头里面的HTTP_CLIENT_IP和HTTP_X_FORWARDFOR等获取到的IP地址经常没有安全过滤就直接拼接到了SQL语句中,并且由于它们是在$_SERVERE变量中不受GPC的影响,那我们就可以去查找HTTP_CLIENT_IP和HTTP_X_FORWARDFOR关键字来快速寻找漏洞。 这种方式的 优点 是只需要搜索相关敏感关键字,即可以快速第挖掘想要的漏洞,具有可定向挖掘和高效、高质量的优点。 缺点 是由于没有通读代码对程序的整体框架了解不够深入,在挖掘漏洞时定位利用点会花费一点时间,另外对逻辑漏洞挖掘覆盖不到。 通读全文代码 前面提到的根据敏感关键字来回溯传入的参数,是一种逆向追踪的思路,我们也提到了这种方式的优点与缺点,实际上在需要快速寻找漏洞的情况下用回溯参数的方式是非常有效的

DDD领域驱动设计基本理论知识总结

南楼画角 提交于 2019-12-02 11:22:59
原文地址: https://www.cnblogs.com/netfocus/archive/2011/10/10/2204949.html 领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见 这篇 文章。 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD。领域驱动设计分为两个阶段: 以一种领域专家、设计人员、开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型; 由领域模型驱动软件设计,用代码来实现该领域模型; 由此可见,领域驱动设计的核心是建立正确的领域模型。 为什么建立一个领域模型是重要的 领域驱动设计告诉我们,在通过软件实现一个业务系统时,建立一个领域模型是非常重要和必要的,因为领域模型具有以下特点: 领域模型是对具有某个边界的领域的一个抽象,反映了领域内用户业务需求的本质;领域模型是有边界的,只反应了我们在领域内所关注的部分; 领域模型只反映业务,和任何技术实现无关;领域模型不仅能反映领域中的一些实体概念,如货物,书本,应聘记录,地址,等;还能反映领域中的一些过程概念,如资金转账,等; 领域模型确保了我们的软件的业务逻辑都在一个模型中

利用逻辑回归进行简单的人群分类解决广告推荐问题

五迷三道 提交于 2019-12-02 07:01:06
一、什么是逻辑回归?   逻辑回归又称对数几率回归是离散选择法模型之一,逻辑回归是一种用于解决监督学习问题的学习算法,进行逻辑回归的目的是使训练数据的标签值与预测出来的值之间的误差最小化。logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。 Logistic回归模型的适用条件: 因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。 残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。 自变量和Logistic概率是线性关系 各观测对象间相互独立 原理:   如果直接将线性回归的模型扣到Logistic回归中,会造成方程二边取值区间不同和普遍的非直线关系。因为Logistic中因变量为二分类变量,某个概率作为方程的因变量估计值取值范围为0-1,但是,方程右边取值范围是无穷大或者无穷小。所以,才引入Logistic回归。 Logistic回归实质:   发生概率除以没有发生概率再取对数。就是这个不太繁琐的变换改变了取值区间的矛盾和因变量自变量间的曲线关系。究其原因,是发生和未发生的概率成为了比值

分布式锁(逻辑时钟)原理 Leslie Lamport论文笔记

泄露秘密 提交于 2019-12-02 05:36:47
分布式系统中的时间、时钟和事件顺序 论文笔记 这篇笔记主要是用于记录阅读《Time, Clocks, and the Ordering of Events in a Distributed System》论文的要点以及我自己对于分布式系统时钟的理解。之前已经阅读过这篇文章几次了,每次阅读都对自己很有帮助。因此写下这篇论文笔记可以帮助自己进一步加深理解。 1978年Lamport在这篇论文中主要讨论的是分布式系统下的时钟和事件序问题,摒弃了物理时钟,提出了逻辑时钟的概念来解决分布式系统中区分事件发生的时序问题。 文章目录 分布式系统中的时间、时钟和事件顺序 论文笔记 分布式系统概念 物理时钟vs逻辑时钟 事件序列 偏序 全序 全序与偏序的比较 逻辑时钟Logical Clocks 逻辑时钟定义 逻辑时钟原理 用全序关系解决分布式互斥问题(分布式锁资源抢占) 分布式系统概念 分布式系统由不同的进程组成,不同进程可以经由消息通信。这篇论文说的分布式系统是从广义上来说的,一个互联网中的多计算机节点是分布式系统;单台机器的CPU、内存等内部组件也共同构成了一个分布式系统。事实上,如果相比组件内事件发生间隔而言,组件间的消息通信延迟不能忽略的话,这个系统就可以被认为是分布式系统。 物理时钟vs逻辑时钟 为什么分布式系统不适用物理时钟(physical clock)记录事件

Mysql 三大特性详解

£可爱£侵袭症+ 提交于 2019-12-02 05:11:27
Mysql 三大特性详解 Mysql Innodb后台线程 工作方式 首先Mysql进程模型是单进程多线程的。所以我们通过ps查找mysqld进程是只有一个。 体系架构 InnoDB存储引擎的架构如下图所以,是由多个内存块组成的内存池,同时又多个后台线程进行工作,文件是存储磁盘上的数据。 后台线程 上面看到一共有四种后台线程,每种线程都在不停地做自己的工作,他们的分工如下: Master Thread: 是最核心的线程,主要负责将缓冲池中的数据异步刷新的磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲(INSERT BUFFER),UNDO页的回收等。下面几个线程其实是为了分担主线程的压力而在最新的版本中添加的。 IO Thread: InnoDB使用大量的异步IO来处理请求。IO Thread的主要工作就是负责IO请求的回调(call back)处理。异步IO可以分为4个,分别是:write, read, insert buffer 和 log IO thread。 Purge Thread: undo log是用来保证事务的,当一个事务正常提交后,这个undo log可能就不再使用了。purge thread就是用来清除这部分log已经分配的undo页的。 Page Cleaner Thread: 主要是把脏页的刷新从主线程中拿到单独的线程,减轻主线程的压力

数电、第四章

冷暖自知 提交于 2019-12-02 05:10:18
组合逻辑电路 一、概述 1.从功能上:任意时刻的输出仅取决于该时刻的输入 2.电路结构上:不含记忆(存储)元件。 二、逻辑功能的描述 1.组合逻辑电路框图 2.组合逻辑函数 三、组合逻辑电路的分析方法 1.所谓分析一个给定的逻辑电路,就是要通过分析找出电路的逻辑功能。 分析过程: ~从电路的输入到输出逐级写出逻辑函数式,最后得到数输出与输入关系的函数。 ~用公式化简法或者卡诺图化简法将得到的函数式化简变换使得逻辑关系简洁明了。 ~为了使电路的逻辑功能更加直观,有时,还可以将逻辑函数转换为真值表的形式。 四、组合逻辑电路的设计方法。 根据给出的实际逻辑问题,求出实现这一逻辑功能的的最简单逻辑电路,这就是设计组合电路时要完成的工作。 所谓最简: ···电路所用的器件数量最少 ···器件种类最少 ···器件连线再少 五、设计步骤 1.逻辑抽象 ··分析因果关系,确定输入输出变量 ··定义逻辑状态的含义(赋值) ··列出真值表 2.写出函数式 3.选定器件类型 4.根据所选的器件,对逻辑式化简(用门)变换式进行相应的描述。 5.画出逻辑电路 六、常用组合逻辑电路 1.编码器:将输入的每一个高低电平信号编成一个对应的二进制代码 类别: 普通编码器、特点:任何时刻只允许输入一个编码信号。 优先编码器、特点:允许用时输入多个信号,但只对其中优先权最高的一个进行编码。 实例:74HC148 2

sklearn逻辑回归实战

≡放荡痞女 提交于 2019-12-02 04:03:26
目录 题目要求 ex2data1.txt处理 方案一:无多项式特征 方案二:引入多项式特征 ex2data2.txt处理 两份数据 ex2data1.txt ex2data2.txt 题目要求 根据学生两门课的成绩和是否入学的数据,预测学生能否顺利入学:利用 ex2data1.txt 和 ex2data2.txt 中的数据,进行逻辑回归和预测。 数据放在最后边。 ex2data1.txt处理 作散点图可知,决策大致符合线性关系,但还是有弯曲(非线性),用线性效果并不好,因此可用两种方案:方案一,无多项式特征;方案二,有多项式特征。 方案一:无多项式特征 对ex2data1.txt中的数据进行逻辑回归,无多项式特征 代码实现如下: """ 对ex2data1.txt中的数据进行逻辑回归(无多项式特征) """ from sklearn.model_selection import train_test_split from matplotlib.colors import ListedColormap from sklearn.linear_model import LogisticRegression import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = [

百度小程序性能优化

喜欢而已 提交于 2019-12-02 02:48:21
引子 : 一个指标引发的血案 https://www.cnblogs.com/Sherlock09/p/11726885.html 性能优化 进入移动互联网时代,传统Web开发技术(HTML,CSS,JavaScript)风光不再,客户端技术(iOS以及Android)依靠良好的体验重新崛起。但是客户端技术的开发效率始终无法与Web技术抗衡,同时会受到诸多平台层面的限制。在这一大背景下,小程序独特的架构诞生了,它将Web前端技术与传统的客户端技术结合在一起,其目的是在开发效率上超过传统的客户端技术,在使用体验上超越传统的Web前端技术。由于小程序的架构区别于传统的Web前端技术,开发者在开发过程可能会遇到一些性能上的问题。本文旨在介绍百度小程序一些实现原理和优化手段,帮助开发者优化自己的小程序。 一 小程序运行时简介 在传统的Web前端项目中,所有代码全部运行在浏览器中。而小程序提供的运行环境有两种,分为逻辑层和视图层。假设现在开发者的小程序项目中有两个页面 pages/index和pages/home ,那么逻辑层代码指的是 app.js 与 pages/index/index.js 还有 pages/home/home.js ,视图层代码指的是 pages/index/index.swan 和 pages/home/home.swan