- 博客(43)
- 收藏
- 关注
转载 设计模式——享元模式
享元模式就是如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用创建新的对象。享元模式是为数不多的、只为提升系统性能而生的设计模式。它的主要作用就是复用大对象(重量级对象),以节省内存空间和对象创建时间。 我们这里以绘制一个有样式的字体来说明吧,有的时候我们想绘制一个纯色的文字,比如红色,那么我们可能需要创建很多的实例,通常来说,这些实例的差别不大,这个时候,我们可
2017-10-07 21:11:06 297
原创 设计模式——装饰者模式
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。不改变接口的前提下,增强所考虑的类的性能。 何时使用: 1)需要扩展一个类的功能,或给一个类增加附加责任。 2)需要动态的给一个对象增加功能,这些功能可以再动态地撤销。 3)需要增加一些基本功能的排列组合而产生的非常大量的功能,从而使继承变得 不现实。 实例场
2017-10-06 10:29:59 269
转载 设计模式——桥接模式
桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。 桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量,桥接模式直白的说就是将深度垂直继承关系拉平转化成横向的一对多或者多对多关联关系 生活场景: 就拿汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通
2017-10-05 15:42:56 278
原创 设计模式——中介模式
中介模式:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。 类图: 中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。 中介者实现类:从抽象中介者继承而
2017-10-04 06:34:16 461
原创 设计模式——备忘录模式
备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。 使用场景: 在做
2017-10-04 06:33:07 251
转载 设计模式——代理模式
代理模式使用代理对象完成用户请求,屏蔽用户对真实对象的访问。现实世界的代理人被授权执行当事人的一些事宜,无需当事人出面,从第三方的角度看,似乎当事人并不存在,因为他只和代理人通信。而事实上代理人是要有当事人的授权,并且在核心问题上还需要请示当事人。 在软件设计中,使用代理模式的意图也很多,比如因为安全原因需要屏蔽客户端直接访问真实对象,或者在远程调用中需要使用代理类处理远程方法调用的技术细节 (如
2017-10-03 19:10:22 225
原创 设计模式——观察者模式
观察者的定义:观察者模式(又被称为发布-订阅模式),属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 使用场景: A对象(观察者)对B对象(被观察者)的某种变化高度敏感,需要在B变化的一瞬间做出反应。举个例子,新闻里喜闻乐见的警察抓小偷,警察需要在小偷伸手作案的时候实施抓捕。在
2017-09-24 10:49:28 203
原创 设计模式——建造者模式
建造者模式的定义是:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。本质就是将共同的构造方法高度提炼形成所有对象共有,这样的话不同达到一个方法在不同调用场景下产生不同对象(总流程不变变得只是代码实现)。 使用场景: 楼房是千差万别的,楼房的外形,层数,内部房间的数量,房间的装饰都不一样。但是对于建造者来说,抽象出来的建筑流程是确定的。因为建筑一座楼房,都可以归纳为几
2017-08-13 10:56:23 219
原创 Clean Code 阅读总结
一、好的代码重要顺序: 1. 经过所有测试的代码 2. 没有重复的代码 3. 体现系统中的全部设计理念 4. 包括尽量少的实体 例如类、方法、函数等等 5. 大师程序员把系统当成故事来讲,而不是当成程序来讲。他们使用选定的工具来构建所要讲的故事。 二、类、方法、字段命名要求 1.类名一般用名词来命名方法一般用动词或者动词短语命名
2017-08-11 17:40:00 348
原创 设计模式——策略模式
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得可以根据具体场景来使用不同算法。策略模式使得算法可以在不影响到客户端的情况下发生变化。 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,
2017-08-09 22:29:45 266
原创 设计模式——过滤模式
过滤模式是开发人员根据业务需求对过滤器进行组合也就是多角度过滤对象,来达到获取聚合的目的。 使用场景: 创建对象的时候需要将对象插入到数据库之前对对象中的字段进行验证,有的对象需要验证一个字段有的需要验证多个字段,这种情况我们可以通过对过滤器进行组合来实现对某一个对象中的一个或者多个属性达到验证的目的。 可以根据对象对不同对过滤器进行组合实现过滤器的插拔式。 代码走起来: 代码所要实现的场
2017-08-07 22:42:09 451
原创 设计模式——原型模式
原型模式可以动态的创建一个对象而不需要提供专门的new()操作,这无疑是一种非常有效的方式,快速的创建一个新的对象。 一、使用场景: 1、如果说我们的对象类型不是刚开始就能确定,而是这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的类型更容易。 2、获取某一个特定状态下的对象,这个前提很重要,这点怎么理解呢,例如有的时候我们需要对比一个对象经过处理后的状态和处理前的状
2017-07-30 11:30:44 276
原创 设计模式——单例模式
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 关键点: 1)一个类只有一个实例 2)它必须自行创建这个实例 3)它必须自行向整个系统提供这个实例 一、应用场景 一般数据底层封装的connection db连接、Read File、WCF、Mongodb等非托管资源,因为每一次操作目标对象的时候都需要new一个
2017-07-29 12:38:27 197
转载 委托和事件理解(转)
众所周知在面试中,经常有些崽子面试官会问些“事件和委托”的关系,也许一路走来的程序员大多都会被问到这个,那么对于这个高频的”事件和委托“问题,如何回击呢?首先我从最经典的一套面试题说起,用事件来实现 “猫爪老鼠“,这是一个从网上copy过来的一个例子。static void Main(string[] args) { Mouse mouse = new Mou
2017-06-16 09:51:16 288
转载 ManualResetEvent(转)
ManualResetEvent 用于线程同步,通知一个或多个线程某事件已经发生。通常用于一个线程执行的任务必须在其他线程的任务执行之前完成。 ManualResetEvent状态分为两种:终止状态和非终止状态。当某一任务完成时,将ManualResetEvent设置为终止状态,这样其他等待的线程(一个或多个)将开始执行自己的任务。 注意:一旦它被终止,它将保持终止状态,直到它被手动重置。代码示
2017-06-13 19:35:02 283
原创 ManualResetEven小知识点
关于ManualResetEven简单用法: 一、构造函数 // 摘要: //用一个指示是否将初始状态设置为终止的布尔值初始化 System.Threading.ManualResetEvent 类的新实例。 // 参数: // initialState: // 如果为 true,则将初始状态设置为终止;如果为 false,则将初始状态设置为非终止。 public Man
2017-06-02 16:42:42 315
原创 C# Quartz作业调度配置
什么是Quartz Quartz是是一个开源的作业调度框架,Quartz根据用户设定的时间规则来执行作业,使用场景:在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知、定时关闭网上商城的用户还未支付的订单等等。Quartz运用场景 作业场景:公司商城平台中客户未支付的订单超过半个小时未支付就要清理掉 1) . 数据库中订单主表主要字段如下: 2) .下
2017-05-28 17:06:22 14857 1
原创 Thread同步—锁、信号量
一、锁Monitor(控制每个线程之间通信的执行顺) 1. Monitor(控制线程间通信顺序) 说到锁的时候通常都会想到Lock,Lock确实减少了我们不必要的劳动并且让代码更可观,但是如果我们要进行控制每个线程之间通信的执行顺序,则必须使用原生类,这里要注意一个问题就是“锁住什么”的问题,一般情况下我们锁住的都是静态对象,我们知道静态对象属于类级别,当有很多线程共同访问的时候,那个静
2017-05-07 18:59:10 489
原创 XSS简单预防
原理 跨站脚本(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。 我们常常听到“注入”(Injection),如SQL注入,那么到底“注入”是什么?注入本质上就是把输入的数据变成可执行的程序语句。SQL注入是如此,XSS也如此,只不过XSS一般注入的是恶意的脚本代码,这些脚本代码可以用来获取合法用户的数据,如Cook
2017-05-06 19:43:41 511
原创 Thread常用方法
Join 方法 该方法可以让并发行处理变成串行化,具体看下面代码。 static void Main(string[] args) { Thread thread = new Thread(new ThreadStart(Run)); thread.Start(); thread.Join(); // 该死的t.Join(),害的我主线程必须
2017-05-02 22:39:56 397
转载 Linq系列—linq语法和扩展方法关系
转载至NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解) 我们知道LINQ所支持的查询范围主要在IEnumerable、IQueryable这两个方面,对于我们想要扩展LINQ的查询能力也主要集中在这两块。很多时候我们在编写应用框架的时候,都会自己去实现IEnumerble对象,一般不会用系统提供的集合类,这样为了框架的OO性,上下文连贯性,更模型化。如果
2017-04-04 16:03:58 1838
转载 Linq系列—设计模式
转载NET深入解析LINQ框架(二:LINQ优雅的前奏)1】.LINQ框架的主要设计模型到了这里我们似乎隐隐约约的能看见LINQ的原理,它不是空中花园,它是有基础的。在上面的一系列新特性的支持下,微软通过大面积的构建扩展方法使得上述特性能连贯的互相作用,形成自然的集成查询框架。上面的这些特性都属于语言为了LINQ而做的增强,也可以说是设计者们在不断的探索新的比较符合现代开发体系的语言特性,也越来越多
2017-04-04 15:46:45 417 1
转载 Linq系列—扩展方法
参考NET深入解析LINQ框架 C#的扩展方法解说扩展方法就是允许在不修改类型的内部代码的情况下为类型添加独立的行为。 扩展方法的本意在于不修改对象内部代码的情况下对对象进行添加行为。这种方便性大大提高了我们对程序的扩展性,虽这小小的扩展性在代码上来看不微不足道,但是如果使用巧妙的话将发挥很大的作用。扩展方法对LINQ的支撑非常重要,很多对象原本构建与.NET2.0的框架上,LINQ是.NET3
2017-04-04 12:18:51 946
转载 Linq系列—委托
转载至C#中的委托和事件引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和
2017-04-04 11:16:46 604
转载 Linq系列—泛型
转载之泛型的理解和使用日常生活中的事物都是有类型的,比如我们说“一个女人”,那么“女”就是这个人的类型。我们可以说“女人都是水做的”,那么听者都知道这是在说“女”这种类型的人。再比如你去肉店买肉,你可以对老板说“我要十斤猪肉”,那么老板一定知道你是在要“猪”这种类型的肉。日常生活中的这些语言都是带有类型的,但是在日常生活中还有一些语言是不带类型的。比如我们经常说“人是贪婪的”,这里的人就没有类型之分
2017-04-04 10:07:04 707
转载 Linq系列—简介
一、Linq简介 Linq产生背景 在LINQ未出现之前,我们需要掌握很多针对不同数据源查询的接口技术,对于OBJECT集合我们需要进行重复而枯燥的循环迭代。对于数据库我们需要使用诸多T-SQL\PL-SQL之类的数据库查询语言。对于XML我们需要使用XMLDOM编程接口或者XPATH之类的东西,需要我们掌握的东西太多太多,即费力又容易忘。此时LINQ的出现大大减轻了代码的工作量,不在需
2017-04-04 09:18:49 515
转载 一次偶然的ajax请求导致status为canceled的原因
学习好文章如图所示,这只是一个很简单的登录请求。 刚看到这个请求返回状态时,也是觉着很诧异。经过确认参数等情况,发现并没有什么异常,且进行第二次登录操作时会返回正常。排查思路:发现url在第一次登录操作后由原来的 [*/login.html]更改为[*/login.html?email=123%40qq.com&password=123123]。这是一个很明显的get请求方式,而login操作
2017-03-07 15:42:09 50578 19
转载 httpClient 简介
http简介Http协议是实现不同端点间数据传输的重要协议,在了解httpClient首先要了解什么是http协议。 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是
2017-03-06 23:44:32 797
转载 转 SQL Server 查询处理中的各个阶段(SQL执行顺序)
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。如果没有在查询中指定某
2017-01-02 19:28:13 264
转载 转 C# 文件下载四方法
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;
2016-12-29 16:08:09 278
转载 原始类型扩展方法—this参数修饰符
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。它们的第一个参数指定该方法作用于哪个
2016-12-20 17:22:55 372
转载 数据库命名规则
数据库命名规范: 1. 数据库名: 1 用产品或项目的名字命名; 2 Pascal Case,如SmartSport; 3 避免使用特殊字符,如数字,下划线,空格之类; 4 尽量避免使用缩写表名 1 使用Pascal Case 2 避免使用特殊字符,如数字,下划线,空格之类; 3
2016-12-20 11:52:46 569
原创 SQL Server 发展简史
数据库的发展阶段 1.手工阶段 人类数据的存储的意识一直存在.起先数据主要记录在竹简、锦帛之中,随着造纸术的发明纸张的广泛使用数据存储更加方便快捷;在二十世纪五十年代,美国为满足军事需求,开始对制动化设备进行开发和研究。其中,取得突出成绩的是冯.诺依曼倡导的”冯.诺依曼机“,它基于二进制表示计算机内部数据、存储数据、顺序执行等原则造出真正意义上的计算机,虽然冯.诺依曼制造出来的计算机只是实现
2016-12-19 11:54:12 7770
原创 C#中索引器简单使用
微软官方描述:索引器允许类或结构的实例就像数组一样进行索引。索引器形态类似于,不同之处在于它们的取值函数采用参数。 通俗理解:索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可以使用数组访问运算符([ ])来访问该类的实例。 索引的代码结构接近与类的属性定义,都是通过get和set来进行相
2016-12-16 14:37:40 370
原创 反射学习
public class RefectionClass { // 反射的定义:审查元数据并收集关於它的类型信息的能力,元数据(编辑后的基本数据单元)就是一大堆表,编译器会创建一个类定义表,一个字段定义表,一个方法定义表等,System.Reflection命名空间包含的几个类,允许你反射(解析)这些元数据的代码 //一、反射的作用: //动态的创建类型的实例,将类型邦定到现
2016-12-15 11:37:16 405
转载 转载 IO文件操作
1.文件操作:File (1)void AppendAllText(string path, string contents)(2)bool Exists(string path) (3)string[] ReadAllLines(string path),读取文本文件到字符串数组中(4)string ReadAllText(string path),读取文本文件到字符串中(5)void Wri
2016-12-14 15:37:39 273
转载 left join on and与left join on where的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在使用left jion时,on和where条件的区别如下:1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全
2016-12-13 17:56:10 291
转载 数据库的订阅和发布
发布订阅份为两个步骤:1、发布。2、订阅。首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅。发布可以发布一张表的部分数据,也可以对整张表进行发布。下面分别介绍发布、订阅的过程。 一、发布。发布需要用实际的服务器名称,不能使用服务器的IP地址进行。能发布的信息包括【表】、【存储过程】、【用户函数】如果使用IP会有错误,如下图: 具体发布过程如下: 1
2016-12-12 20:27:01 7585
原创 欢迎使用CSDN-markdown编辑器
Nginx安装配置 Nginx 安装 1. 解压nginx安装包 2. 关闭防火墙、杀毒软件,检查服务器上的ip是否是固定的(ip不设置固定会变的话会出错的) 3. 因为nginx软件默认的安装端口是80所以在安装nginx之前首先检查当前系统是否已经有别的软件占用该软件如果别的服务已经占用80端口的话;解决方法有两种如下: 一 关闭占用80端口的进程 二 修改nginx
2016-12-12 20:10:35 266
原创 nginx 在window在的安装部署
Nginx安装配置Nginx 安装1. 解压nginx安装包2. 关闭防火墙、杀毒软件,检查服务器上的ip是否是固定的(ip不设置固定会变的话会出错的)3. 因为nginx软件默认的安装端口是80所以在安装nginx之前首先检查当前系统是否已经有别的软件占用该软件如果别的服务已经占用80端口的话;解决方法有两种如下:1.关闭占用80端口的进程2.修改nginx配置文件,修改
2016-12-12 19:59:15 463
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人