Fork me on GitHub

2017年7月19日

程序集加载和反射

摘要: 一、程序集加载 1,根据程序集名称查找程序集 2,根据程序集文件路径名(包含扩展名)查找程序集 3,加载程序集时,确保程序集中的任何代码不会执行 二、反射的性能 1,反射的两个缺点①反射造成编译时无法保证类型安全性。由于反射严重依赖字符串,所以会丧失编译时的类型安全性。例如,执行Type.GetTy 阅读全文

posted @ 2017-07-19 20:50 *Hunter 阅读(438) 评论(1) 推荐(0) 编辑

2017年7月14日

6,EasyNetQ-基于Topic的路由

摘要: RabbitMQ具有非常酷的功能,基于主题的路由,允许订阅者基于多个标准过滤消息。 主题是与邮件一起发布的点分隔的单词列表。 例子是“stock.usd.nyse”或“book.uk.london”或“a.b.c”,这些单词可以是你喜欢的任何东西,但通常是消息的一些属性。 主题字符串的限制为255个 阅读全文

posted @ 2017-07-14 11:19 *Hunter 阅读(1539) 评论(0) 推荐(0) 编辑

5,EasyNetQ-Send Receive

摘要: 而发布/订阅和请求/响应模式是位置透明的,因为您不需要指定消息的消费者所在的位置,发送/接收模式专门用于通过命名队列进行通信。 它也不会对可以通过队列发送的消息的类型做任何假设。 这意味着您可以通过同一个队列发送不同类型的消息。 要发送消息,请使用IBus上的发送方法,指定要发送消息的队列的名称和消 阅读全文

posted @ 2017-07-14 11:08 *Hunter 阅读(800) 评论(0) 推荐(0) 编辑

2017年7月13日

CLR寄宿和AppDomain

摘要: 一、CLR寄宿 .net framework在windows平台的顶部允许。者意味着.net framework必须用windows能理解的技术来构建。所有托管模块和程序集文件必须使用windows PE文件格式,而且要么是windows exe文件,要么是DLL文件 1,MSCorEE.dll(垫 阅读全文

posted @ 2017-07-13 21:43 *Hunter 阅读(1216) 评论(0) 推荐(1) 编辑

4,EasyNetQ-Request Response

摘要: EasyNetQ还支持请求/响应消息传递模式。 这使得客户端/服务器应用程序变得容易,客户机/服务器应用程序在客户端向服务器发出请求,然后处理请求并返回响应。 与传统的RPC机制不同,EasyNetQ请求/响应操作不具有名称,而是简单地由请求/响应消息类型对定义。 此外,与传统的RPC机制(包括大多 阅读全文

posted @ 2017-07-13 17:49 *Hunter 阅读(830) 评论(0) 推荐(0) 编辑

3,EasyNetQ-发布/订阅

摘要: 一、发布 在发布/订阅模式中的角色是彼此陌生的。 一个发布者只是向世界说这个已经发生了,一位订阅者告诉世界“我在乎这个”。 在这个模型中,没有人关心特定的事件是很好的。 消息可能有一个订阅者,可能有200个,或者可能没有。 发布者不应该关心。 EasyNetQ实现这种模式。 如果您开始发布,并且没有 阅读全文

posted @ 2017-07-13 17:00 *Hunter 阅读(804) 评论(0) 推荐(0) 编辑

2,EasyNetQ-日志记录

摘要: EasyNetQ提供了一个IEasyNetQLogger接口: 实现IEasyNetQLogger接口 使用日志记录 阅读全文

posted @ 2017-07-13 16:51 *Hunter 阅读(808) 评论(0) 推荐(0) 编辑

1,EasyNetQ-链接到RabbitMQ

摘要: 一、链接到RabbitMQ 1,创建连接 注意不能有空格 1)host(必填): 例如:host=localhost或者host=192.168.2.56或者host=myhost.mydomain.com 使用标准格式主机:端口(host=myhost.com:5673) 如果省略端口号,默认端口 阅读全文

posted @ 2017-07-13 16:26 *Hunter 阅读(1005) 评论(0) 推荐(0) 编辑

2017年7月4日

大型网站技术架构

摘要: 一、瞬时响应:网站的高性能架构 1,web前端性能优化 ①浏览器访问优化 减少http请求 使用浏览器缓存 启用压缩 css放在页面最上面,JavaScript放在页面最下面 减少cookie传输 ②CDN加速 ③反向代理 2,应用服务器性能优化 ①分布式缓存 ②异步操作(消息队列) ③使用集群 ④ 阅读全文

posted @ 2017-07-04 21:02 *Hunter 阅读(198) 评论(0) 推荐(0) 编辑

2017年7月1日

托管堆和垃圾回收

摘要: 一、托管堆基础 1,访问一个资源(文件、内存缓冲区、屏幕空间、网络连接、数据库资源等)所需的步骤 ①调用IL指令newobj,为代表资源的类型分配内存(一般使用c# new操作符来完成) ②初始化内存,设置资源的初始状态并使资源可用。类型的实例构造器负责设置初始状态 ③访问类型的成员来使用资源(有必 阅读全文

posted @ 2017-07-01 16:36 *Hunter 阅读(1097) 评论(0) 推荐(0) 编辑

2017年6月26日

RabbitMQ for windows

摘要: 一、搭建环境 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitMQ之前要先安装Erlang。 erlang:http://www.erlang.org/download.html rabbitmq:http://www.rabbitmq.com/download.h 阅读全文

posted @ 2017-06-26 23:21 *Hunter 阅读(532) 评论(0) 推荐(0) 编辑

2017年6月24日

异常和状态管理

摘要: 一、异常处理机制 1,应该在try中放置多少代码?取决于状态管理。如果在一个try块中执行多个可能抛出同一个异常类型的操作,但不同的操作有不同的异常恢复措施,则应该将每个操作都放到他自己的try块中,这样才能正确地恢复状态2,try、finally,catch执行顺序 3,finally设计 二、S 阅读全文

posted @ 2017-06-24 15:33 *Hunter 阅读(203) 评论(0) 推荐(0) 编辑

2017年6月22日

可空值类型

摘要: [Serializable,StructLayout(LayoutKind.Sequential)] public struct Nullable where T : struct { //这两个字段标识状态 private Boolean hasValue = false;//假定null internal T value = d... 阅读全文

posted @ 2017-06-22 21:41 *Hunter 阅读(154) 评论(0) 推荐(0) 编辑

2017年6月19日

Log4net

摘要: 参考文档:http://www.cnblogs.com/LiZhiW/p/4317198.html 一、关联配置文件 1,三种配置方式的方式 ① 默认web.config/app.config ② 独立配置文件(<项目名称>.exe. log4net)(例如ConsoleApplication1.e 阅读全文

posted @ 2017-06-19 13:04 *Hunter 阅读(222) 评论(0) 推荐(0) 编辑

2017年6月18日

定制特性

摘要: 1,定制特性 ①C#允许用一个前缀明确指定特性要应用的目标元素 ②AttributeUsage. Inherited(特性应用于基类时,是否同时应用于派生类和重写的方法) 2,检测定制特性 方法名称 说明 IsDefined 至少有一个指定的Attribute派生类的实例与目标关联,就会返回true 阅读全文

posted @ 2017-06-18 13:58 *Hunter 阅读(169) 评论(0) 推荐(0) 编辑

2017年6月12日

委托

摘要: 1,委托基础 ①System.MulticastDelegate派生自System.Delegate,后者派生自System.Object。由于历史原因造成两个委托类(MulticastDelegate、Delegate)。即使创建的所有委托类型都将MulticastDelegate作为基类,个别情 阅读全文

posted @ 2017-06-12 21:56 *Hunter 阅读(187) 评论(0) 推荐(0) 编辑

2017年6月3日

数组

摘要: 1,所有数组都隐式派生自System.Array 2,所有数组都隐式实现IEnumerable,ICollecation,IList ①创建一个0基数组类型时,CLR自动是数组类型实现IEnumberable<T>,ICollection<T>,IList<T>。同时,还为数组类型的所有基类型实现这 阅读全文

posted @ 2017-06-03 18:12 *Hunter 阅读(188) 评论(0) 推荐(0) 编辑

2017年5月27日

枚举类型和位标志

摘要: 一、枚举类型 1,编译枚举时,C#编译器把每个符号转换成类型的一个常量字段。例如将Color枚举类型看成以下代码 简单的说,枚举是一个结构,其中定义了一组常量字段和一个实例字段。常量字段会嵌入程序集的元数据中,并可以通过反射来访问 2,以下代码显示了如何声明一个基础类型为byte的枚举类型: 3,枚 阅读全文

posted @ 2017-05-27 21:00 *Hunter 阅读(368) 评论(0) 推荐(0) 编辑

2017年5月3日

字符串

摘要: 一、StringComparison 1,出于编程目的而比较字符串时,应该总数使用StringComparison.Ordinal或者StringComparison. OrdinalIgnoreCase。忽略语言文化是字符串比较最快的方式 2,要以语言文化正确的方式来比较字符串(通常为了向用户显示 阅读全文

posted @ 2017-05-03 20:42 *Hunter 阅读(280) 评论(0) 推荐(0) 编辑

2017年4月28日

哈希一致性算法实现思路

摘要: 我用代码模拟了一下,不知道是不是这个思路? 阅读全文

posted @ 2017-04-28 10:08 *Hunter 阅读(229) 评论(0) 推荐(0) 编辑

2017年4月27日

字符、字符串和文本处理

摘要: 一、StringComparison 阅读全文

posted @ 2017-04-27 20:54 *Hunter 阅读(197) 评论(0) 推荐(0) 编辑

2017年4月24日

接口

摘要: 一、显示接口方法实现(EIMI) 将定义方法的那个接口的名称作为方法的前缀 public class SimpleType : IDisposable { public void Dispose() { Console.WriteLine("SimpleType Dispose"); } //定义E 阅读全文

posted @ 2017-04-24 22:09 *Hunter 阅读(146) 评论(0) 推荐(0) 编辑

2017年4月18日

泛型

摘要: 一,泛型的优势 1,源代码保护使用泛型算法的开发人员不需要访问算法的源代码。然而,使用c++模板的泛型技术时,算法的源代码必须提供给准备使用算法的用户2,类型安全将泛型算法应用于一个具体的类型时,编译器和CLR能理解开发人员的意图,并保证只有与指定数据类型兼容的对象才能用于算法。试图使用不兼容的类型 阅读全文

posted @ 2017-04-18 21:48 *Hunter 阅读(106) 评论(0) 推荐(0) 编辑

2017年4月10日

事件

摘要: 一、设计要公开事件的类型1,第一步:定义类型来容纳所有需要发送给事件通知接受者的附加信息 2,第二步:定义事件成员 3,第三步:定义负责引发事件的方法来通知事件的登记对象4,第四部:定义方法将输入转化为期望事件 //第一步:定义类型来容纳所有需要发送给事件通知接受者的附加信息 public clas 阅读全文

posted @ 2017-04-10 21:45 *Hunter 阅读(151) 评论(0) 推荐(0) 编辑

2017年4月7日

Expression表达式树 案例

摘要: 1,Expression.Invoke 案例: 一、QueryFilter using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.T 阅读全文

posted @ 2017-04-07 15:34 *Hunter 阅读(3117) 评论(0) 推荐(0) 编辑

2017年4月6日

栈帧

摘要: 1, 什么是栈帧? 在调用方法的时候,内存从栈的顶部开始分配,保存和方法关联的一些数据项。这块内存叫方法的栈帧 2,栈帧包含的内存保存如下内容 ①返回地址,也就是在方法退出的时候继续执行的位置 ②这些参数分配的内存,就是这方法的值参数,或者还可能是参数数组(如果有的话) ③各种和方法调用相关的其他管 阅读全文

posted @ 2017-04-06 12:38 *Hunter 阅读(351) 评论(0) 推荐(0) 编辑

2017年4月5日

属性

摘要: 匿名类型 //定义类型,构造实例,并初始化属性 var o1 = new {Name = "zhang"};①编译器会判断每个表达式的类型,推断类型的私有字段②为每个字段创建公共只读属性③创建一个构造器接受这些表达式,把表达式的求值结果初始化只读字段④编译器还会重写Object的Equeals和Ge 阅读全文

posted @ 2017-04-05 21:23 *Hunter 阅读(152) 评论(0) 推荐(0) 编辑

2017年3月21日

方法

摘要: 一、实例构造器和类(引用类型) 1,极少数情况下可以在不调用实例构造器的前提下创建类型的实例①Object的MemberwiseClone方法②运行时序列化器反序列化对象时,通常也不需要调用构造器 由于有三个构造器,所以编译器生成三次初始化m_x,m_s,m_d的代码 每个构造器初始化一次。可以在一 阅读全文

posted @ 2017-03-21 22:01 *Hunter 阅读(136) 评论(0) 推荐(0) 编辑

2017年3月20日

常量和字段

摘要: 1.类型的各种成员 成员 说明 常量 指出数据值恒定不变的符号。一般设计为静态的 字段 ①表示数据值。 ⑤静态字段:类型状态的一部分 ③实例字段:对象状态的一部分 ④建议将字段设计为私有,防止类型或对象的状态被类型外部的代码破坏 实例构造器 将实例字段初始化 类型构造器 将静态字段初始化 方法 ①方 阅读全文

posted @ 2017-03-20 21:22 *Hunter 阅读(537) 评论(0) 推荐(0) 编辑

2017年3月13日

Dynamic

摘要: 1,dynamic和var ①var声明局部变量只是一种简化语法,它要求编译器更具表达式推断具体数据类型 ②var关键字只能在方法内部声明局部变量,而dynamic关键字可用于局部变量、字段和草书 ③表达式不能转型为var,但能转型为dynamic ④必须显式初始化用var声明的变量,而无需初始化用 阅读全文

posted @ 2017-03-13 21:10 *Hunter 阅读(193) 评论(0) 推荐(0) 编辑

2017年3月8日

对象哈希码

摘要: 1,为什么要定义GetHashCode方法 类型定义Equals之所以还要定义GetHashCode,是由于在Hashtable和Dictionary类型以及其他一些集合的实现中,要求对象必须具有相同哈希码才被视为相等。所以,重写Equals就必须重写GetHashCode方法,确保相等性算法和对象 阅读全文

posted @ 2017-03-08 21:22 *Hunter 阅读(904) 评论(0) 推荐(0) 编辑

2017年3月2日

装箱与拆箱

摘要: 一、装箱机制: 1,在托管堆中分配内存。分配的内存量是值类型各字段所需的内存量,还要加上托管堆中所有对象都有的两个额外成员(类型对象指针和同步块索引)所需的内存量2,值类型字段复制到新分配的堆内存3,返回对象地址。现在该地址是对象的引用;值类型成了引用类型 二、拆箱机制 1,获取已装箱值类型对象中的 阅读全文

posted @ 2017-03-02 21:29 *Hunter 阅读(185) 评论(0) 推荐(0) 编辑

2017年2月27日

值类型与引用类型

摘要: 一、使用引用类型要认清一下四个事实 1,内存必须从托管堆分配 2,堆上分配的每个对象都有一个额外成员,这些对象必须初始化 3,对象中的其他字节(为字段而设)总是设为零 4,从托管堆分配对象时,可能强制执行一次垃圾回收 二、哪些是引用类型,哪些是值类型 1,任何称为“类”的类型都是引用类型(例如:Sy 阅读全文

posted @ 2017-02-27 21:03 *Hunter 阅读(181) 评论(0) 推荐(0) 编辑

2017年2月22日

基元类型

摘要: 什么是基元类型?编译器直接支持的数据类型 C#基元类型 FCL类型 符合CLS 说明 Sbyte System.SByte 否 有符号8位值 byte System.Byte 是 无符号8位值 Short System.Int16 是 有符号16位值 Ushort System.UInt16 否 无 阅读全文

posted @ 2017-02-22 20:38 *Hunter 阅读(805) 评论(0) 推荐(0) 编辑

2017年2月20日

运行时的相互关系

摘要: 1,Windows进程已启动,CLR已加载到其中,托管堆已初始化,创建了一个线程(分配1MB栈空间),线程已经执行了一些代码,马上要调用M3方法了 1,JIT编译器将M3的IL代码转换成本机CPU指令时,会确认M3内部引用的所有类型(Employee、Int32、Manager、String)是否都 阅读全文

posted @ 2017-02-20 21:32 *Hunter 阅读(202) 评论(0) 推荐(1) 编辑

类型基础

摘要: 一、实例类型 Employee e=new Employee("ConstructorParaml")1,计算类型及其所有基类型(一直到System.Object)中定义的所有实例字段需要的字节数。堆上每个对象都需要一些额外成员,包括“类型对象指针”和“同步块索引”。CLR利用这些成员管理对象。额外 阅读全文

posted @ 2017-02-20 21:30 *Hunter 阅读(184) 评论(0) 推荐(0) 编辑

2017年2月14日

程序集

摘要: 1,弱命名和强命名程序集的部署方式 程序集种类 可以私有部署 可以全局部署 弱命名 是 否 强命名(需要使用发布者的公钥/私钥进行签名) 是 是 注:利用辅助类System.Reflection.AssemblyName构造程序集名称,并获取程序集名称的各个组成部分 2,两个(或更多)公司可能生成具 阅读全文

posted @ 2017-02-14 20:17 *Hunter 阅读(221) 评论(0) 推荐(0) 编辑

2017年2月5日

程序集版本资源信息

摘要: 1,版本号:表展示了示例版本号:2.5.719.2。前两个编号构成了公众对版本号的理解。公众会将这个例子看成是程序集的2.5版本。第三个编号719是程序集的build号。如果公司每天都生成程序集,那么每天都应该递增这个build号。最后一个编号2指出当前build的修订次数。如果因为某个原因,公司某 阅读全文

posted @ 2017-02-05 19:18 *Hunter 阅读(408) 评论(0) 推荐(1) 编辑

元数据概述

摘要: 元数据是由几个表构成的二进制数据块。有三种表,分别是定义表(definition table)、引用表(reference table)和清单表(manifest table) 1,常用的元数据定义表 元数据定义名称 说明 ModuleDef 总是包含对模块进行标识的一个记录项; 包含:模块文件名, 阅读全文

posted @ 2017-02-05 19:11 *Hunter 阅读(737) 评论(0) 推荐(1) 编辑

2017年1月22日

“公共语言规范”(CLS)

摘要: 一、什么是“公共语言规范”(CLS) 定义了一个最小公共集,任何编译器只有支持这个功能集,生成的类型才能兼容其他符合CLS、面向CLR的语言生成的组件 二、CLS规则 类型的每个成员要么是字段(数据),要么是方法(行为),为简化编程,语言往往提供了额外的抽象 该类型还有另一些节点未列出,包括.cla 阅读全文

posted @ 2017-01-22 20:39 *Hunter 阅读(1045) 评论(0) 推荐(0) 编辑

导航

AmazingCounters.com