摘要: 对于一个需要处理高并发的系统而言,可以从多个层面去解决这个问题。1、数据库系统:数据库系统可以采取集群策略以保证某台数据库服务器的宕机不会影响整个系统,并且通过负载均衡策略来降低每一台数据库服务器的压力(当然用一台服务器应付一般而言没啥问题,找一台当备机放着应付宕机就行,如果一台应付不了,那么再加一台,但是备机还是要的,至少一台),另外采取读/写分离的方法降低数据库负载,再加上分库和分表进一步降低数据库负载,从而可以从容地应对高并发问题。当然成本会比较高,毕竟要这么多服务器。2、分布式缓存系统:建立分布式缓存系统是至关重要的,所有的读写都先进入缓存系统,然后由缓存系统来安排从数据库系统/源服务 阅读全文
posted @ 2013-08-07 10:20 loofywang 阅读(2533) 评论(6) 推荐(3) 编辑
摘要: 较为详细的整个请求处理流程Application: BeginRequestApplication: PreAuthenticateRequestApplication: AuthenticateRequestApplication: PostAuthenticateRequestApplication: PreAuthorizeRequestApplication: AuthorizeRequestApplication: PostAuthorizeRequestApplication: PreResolveRequestCacheApplication: ResolveRequestCac 阅读全文
posted @ 2013-07-24 21:09 loofywang 阅读(640) 评论(1) 推荐(1) 编辑
摘要: 四人帮的那本书并没有讲到并发或者分布式或者实时程序的设计模式。设计模式是把过去成功的并且被重复使用的设计经验以人们能够有效利用的方式记录下来。一个设计模式有四个基本要素:1. 模式名称:用于记住该模式并且可以和他人进行交流。2. 问题:该模式用于解决的问题,也即该模式应用的领域。3. 解决方案:对该模式的具体描述。4. 效果:该模式应用的效果及影响,以及使用该模式需要权衡的问题。设计模式可以按照目的和范围进行分类。以下为设计模式分类图:创建型结构型行为型类Factory MethodAdapterInterpreterTemplate Method对象Abstract FactoryBuild 阅读全文
posted @ 2013-07-23 11:47 loofywang 阅读(2066) 评论(5) 推荐(4) 编辑
摘要: CLR对类型/结构的字段的排列,可以通过System.Runtime.InteropServices.StructLayoutAttribute来指定,它有三个值,LayoutKind.Auto指CLR自动排列字段;LayoutKind.Sequential指按开发人员声明字段的顺序排列字段;LayoutKind.Explicit表示使用偏移量来排列字段,它要和FieldOffset()一同使用,是精确定位。比如:[StructLayout(LayoutKind.Explicit)] struct S1{[FieldOffset(0)]int a;[FieldOffset(0)]int b;} 阅读全文
posted @ 2013-05-09 15:55 loofywang 阅读(699) 评论(0) 推荐(0) 编辑
摘要: 类和接口的访问权限默认是internal,接口成员不能添加访问修饰符,默认是public,类成员默认是private的。C#中静态类不能实现接口,它里面所有的成员(包括成员类型,方法等)必须是静态的。CLR不支持partial,那只是C#的语法,所以partial class必须用C#写。virtual和override,前者用于父类标识可重构的成员,后者用于子类的重构,virtual方法最好少用,因为性能会降低。因为非virtual方法,CLR可以很快定位到这个方法的出处,而virtual方法,CLR得先去找调用该方法的对象是哪个类型的,在确定类型之后才能定位方法的出处,如果派生层次很多很复 阅读全文
posted @ 2013-05-03 10:27 loofywang 阅读(2517) 评论(14) 推荐(8) 编辑
摘要: .Net 2.0相对于.Net 1.1增加了局部类,泛型和匿名委托。匿名委托struct和class的区别1. struct是值类型,class是引用类型,值类型在Stack上分配,引用类型在Heap上分配。2. struct无法继承,class可以继承。3. struct无默认构造器,但可添加构造器,无析构函数,无法用abstract, sealed, protected关键字(因为无法继承),可以不使用new初始化。 class有默认构造器,有析构函数,可以用abstract, sealed, protected关键字,必须用new初始化。protected和internal的区别prot 阅读全文
posted @ 2013-04-19 11:24 loofywang 阅读(576) 评论(0) 推荐(0) 编辑
摘要: .Net Framework主要有两部分组成,CLR+类库。3C: CTS(Common Type System), CLS(Common Language Specification), CLR(Common Language Runtime)。CTS是个类型标准,任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射,从而使符合CTS的各种语言之间可以无缝互操作,CTS还提供了语言间的继承,例如C#类继承VB.Net类。CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。也就是说两种不同语言之间要 阅读全文
posted @ 2013-04-18 17:10 loofywang 阅读(1384) 评论(1) 推荐(1) 编辑
摘要: javascript跨域有两种情况:1、基于同一父域的子域之间,如:a.c.com和b.c.com2、基于不同的父域之间,如:www.a.com和www.b.com3、端口的不同,如:www.a.com:8080和www.a.com:80884、协议不同,如:http://www.a.com和https://www.a.com对于情况3和4,需要通过后台proxy来解决,具体方式如下:a、在发起方的域下创建proxy程序b、发起方的js调用本域下的proxy程序c、proxy将请求发送给接收方并获取相应数据d、proxy将获得的数据返回给发起方的js发起方页面代码如下:<form id= 阅读全文
posted @ 2012-02-29 18:01 loofywang 阅读(1748) 评论(6) 推荐(1) 编辑
摘要: 做负载均衡,nginx用得比较多,它有四个策略,即1、RR(轮询) --- 根据请求的时间先后顺序发送给后端不同的服务器,另外高级一点的话,可以通过设置权重来把多一点的请求发送给性能好的服务器2、IP Hash --- 根据IP的hash值发送给后端固定的服务器,可以解决Session共享问题,如果服务器down了,则在之前的hash值基础上再计算一次然后分配。3、Fair --- 根据后端服务器的响应时间来分配,时间短的优先。4、URL Hash --- 根据URL的hash值发送给后端固定的服务器,如果某些URL有缓存可以放在一台服务器上,同样也可以解决Session共享问题。Sessio 阅读全文
posted @ 2012-02-27 17:21 loofywang 阅读(1163) 评论(2) 推荐(0) 编辑
摘要: ASP.Net的状态管理1、查询字符串(Query String)对于特殊字符,当需要作为查询字符串的一部分时,需要调用Server.UrlEncode方法进行编码,在获取该查询字符串时,需要调用Server.UrlDecode来解码。查询字符串可以用来保存一些简单的信息,但是它的容量有限且有一定的安全风险。2、隐藏域(HiddenField)隐藏域可以用于保存一些简单的、不敏感的信息(因为隐藏域保存的信息是可以被用户看到的),为了能够使用并处理隐藏域里的值必须使用Http Post方法提交,而不是用URL链接或者Http Get方法提交。存储过多的信息在隐藏域中会使页面尺寸变大,从而使加载一 阅读全文
posted @ 2011-03-29 17:35 loofywang 阅读(657) 评论(0) 推荐(0) 编辑