随笔分类 -  读书笔记

读书笔记 - 软件的组成->测试
摘要:一个可运行的软件由四个部分组成 1. 可执行的代码 2. 配置 3. 运行环境 4. 数据任何一个部分发生变化都会软件的行为发生变化在很多团队中往往他们只测试代码;而忽略了,或者没有完整的测试其他几个因素,因此在之后的部署过程中会遇到不少的问题频繁的小规模测试(一般是每次check-in都会触发一次测试)可以较好的保证代码的质量这里就需要AAT(Automatic Acceptance Test) 和一个持续 集成/构建/测试 的过程再结合以适当的手动测试,可以较好的保证软件的质量我们的测试一般要覆盖到以下的环节 1.成功的编译 2.成功的单元测试 3.满足软件质量标准,如代码覆... 阅读全文

posted @ 2012-03-20 21:16 听说读写 阅读(382) 评论(0) 推荐(0) 编辑

读书笔记 - 自动化部署的优势
摘要:自动化部署和手动部署比较的优势1.手动部署容易出现错误,而自动化错误概率很低 (会出错)2.如果部署过程不是自动化的,那么这个过程既不可重复也不可靠,需要很多的时间进行调试和排错(需要额外的时间)3.手动部署的流程往往需要记录在文档中,这个文档需要额外的维护时间,而且往往和最新版本的部署不是一致的(更新滞后),而且经常也是不完整的 自动化部署脚本往往没有这个方面的问题4.自动化部署本质上是鼓励协作的,对于有一定水平的人员来说,通过看部署脚本来了解部署流程往往比通过文档来理解部署流程来的容易 这里并不是说文档不重要,文档可以很好的给人一个大的印象(Big Picture),而细节部分 通过直.. 阅读全文

posted @ 2012-03-19 23:11 听说读写 阅读(2450) 评论(0) 推荐(0) 编辑

复习HTTP 14.4 HTTP Header Accept-Language
摘要:HTTP Header中的 Accept-Language 浏览器支持的语言和区域同样的 他也支持多个选项,并且支持q值例如 Accept-Language: en-US,en;q=0.8首选en-US, 然后是en注: en-US 是标准的美国英文表示方式, en代表语言是英文 US代表区域是美国 阅读全文

posted @ 2011-08-22 21:24 听说读写 阅读(4773) 评论(0) 推荐(0) 编辑

复习HTTP 14.3 HTTP Header - Accept-Encoding
摘要:HTTP Header中Accept-Encoding 是浏览器发给服务器,声明浏览器支持的编码类型的常见的有 Accept-Encoding: compress, gzip //支持compress 和gzip类型 Accept-Encoding: //默认是identity Accept-Encoding: * //支持所有类型 Accept-Encoding: compress;q=0.5, gzip;q=1.0 //按顺序支持 gz... 阅读全文

posted @ 2011-08-22 17:51 听说读写 阅读(7651) 评论(0) 推荐(0) 编辑

算法基础 几个常见的比较排序
摘要:排序算法 时间复杂度 最差时间复杂度冒泡 O(n*n)插入 O(n*n)选择 O(n*n)归并O(nLogn)堆 O(nLogn)快速O(nLogn) O(n*n) 一般来说 最常用的排序是快速排序 ,实现简单 效率快, 对比对排序和归并排序, 快速排序的系数比较小,所以都是NlogN的时候会比较快PS: 在数据量比较小的时候最好别用归并排序...不过数据量小的时候这个时间无所谓啦在大数据量或者特殊情况或者特别优化的情况下 还是有算法比快速排序快的 只是比较少遇到PS2:已经有很多证明,比较排序的时间复杂度不可能低于nLogn最近难得有空重新拿起算法导论看一遍..blog这里就当作笔记吧... 阅读全文

posted @ 2011-04-13 16:08 听说读写 阅读(408) 评论(0) 推荐(0) 编辑

读书笔记 算法导论 快速排序 QuickSort 使用最后一个元素作为pivot
摘要:快速排序是实际编程应用中最常见的排序方式他有非常好的性能最差情况的时间复杂度为 O(N平方)平均情况的时间复杂度为O(N logN) ,而且拥有一个非常小的系数并且空间复杂度也非常小 就是O(N)不过这个算法也是比较难理解的...以下是一个使用最后一个元素作为pivot的快速算法实现using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace IntroduceToAlgorithm{ public 阅读全文

posted @ 2011-04-05 17:46 听说读写 阅读(681) 评论(0) 推荐(0) 编辑

读书笔记 算法导论 堆排序
摘要:感觉自己算法不给力额...对基本概念和基本操作都不够熟悉准备吧整个算法导论过一遍...把大部分常用的东西自己写一遍做it真是辛苦啊...先弄个常用的堆吧堆可以用作堆排序,优先队列等等情况using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace IntroduceToAlgorithm{ public class MaxHeap { /// <summary> /// check the 阅读全文

posted @ 2011-04-05 15:56 听说读写 阅读(398) 评论(0) 推荐(0) 编辑

C#动态生成代码和程序集
摘要:以下代码动态生成cs文件编译为Assembly 之后可以使用AppDomain.Load 加载程序集,并新建类型[代码] 阅读全文

posted @ 2011-02-17 16:33 听说读写 阅读(7527) 评论(0) 推荐(1) 编辑

某项目要调用现有的100多个DLL 五 自动封装跨域调用的逻辑
摘要:上文说到了可以通过继承的方式实现Class的可序列化那么目前准备采用的方案如下1.为所有输入输出参数 实现可序列化 (原来已经序列化的就不必了)2.在本域生成一个代理类, 负责封装所有输入参数 并调用远程域的方法3.在独立域生成一个代理类,负责接收输入参数 调用实际的方法,并且包装返回值调用流程 本身代码 -> 本地代理类 -> 封装输入参数 - > 跨域访问 -> 接收输入参数 并调用实际的DLL -> 封装返回值 -> 本地代理类接收返回参数一共要动态生成3个Assembly一个保存 本域的代理类程序集一个保存 独立域的代理类程序集还有一个保存所有的实体 阅读全文

posted @ 2011-02-17 15:40 听说读写 阅读(400) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 6-4 监控AppDomain资源使用
摘要:可以通过将AppDomain.MonitoringIsEnabled 设置为true开启监控域的资源之后可以通过访问以下属性获取域的资源消耗  1. MonitoringSurvivedMemorySize 2. MonitoringSurvivedProcessMemorySize 3. MonitoringTotalAllocatedMemorySize 4. MonitoringTotalProcessorTime不过这里有些非常恶心的地方  1. 开启监控是全局的..你不能只能只监控某个域  2. 开了就关不掉了....如果在将MonitoringIsEnabled 设置为ture以后 阅读全文

posted @ 2011-01-07 11:41 听说读写 阅读(1126) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 6-3 跨域访问的性能问题
摘要:以下代码演示了跨域访问的性能问题大约不跨域比跨域快100多倍....代码test result in my machine:10117532 阅读全文

posted @ 2011-01-06 15:29 听说读写 阅读(1286) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 6-2 不同AppDomain之间的通信
摘要:跨AppDomain通信有两种方式  1.Marshal By reference : 传递引用  2.Marshal By Value : 把需要传递的对象 通过序列化反序列化的方式传递过去(值拷贝)    只有标记为 可序列化 Serializable 的类才能通过 Marshal By Value的方式通信以下代码描述了几种跨域通信的情况1.AppDomain是CLR的内部行为,windows完全不清楚有AppDomain的存在2.在新的域中加载Assembly和Type最好用完整限定名(如果直接加载Type, CLR会自动加载Type所在的和所用到的Assembly)3.默认情况下新建 阅读全文

posted @ 2011-01-06 14:00 听说读写 阅读(3750) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 6-1 AppDomain(应用程序域)
摘要:每一个托管程序启动的时候都会至少启动一个默认生成一个AppDomainAppDomain提供了隔离的功能  1)一个应用程序域不能直接访问其他应用程序域中的对象  2)应用程序域可以被卸载, 你无法卸载一个已经加载的程序域,不过你可以选择卸载一个应用程序域  3)应用程序域可以拥有独立的权限  4)应用程序域可以拥有独立的配置(app.config 什么的....)一般来说,如果两个应用程序域加载了同样的dll(例如System.dll) 那么这个被加载的dll需要2倍的内存并同时存在于这两个应用程序域.有些Assembly是应用程序域中立的(例如MSCorLib.dll) ,这些dll在被多 阅读全文

posted @ 2011-01-06 11:52 听说读写 阅读(491) 评论(0) 推荐(0) 编辑

OData 1-5 OData语法(下)
摘要:接上篇 http://www.cnblogs.com/PurpleTide/archive/2010/12/21/1912299.html 7) $expand 包含属性和关系  假设的WagerInformation拥有一个属性 UserInformation User 表示用户信息, 另一个属性 IEnumerableCommonInformation Commons 表示评论信息  使用 http://localhost:9527/ODataService.svc/WagerInformations?$expand=User ,Commons   返回的信息中就会包含相 阅读全文

posted @ 2010-12-21 11:46 听说读写 阅读(12235) 评论(1) 推荐(2) 编辑

CLR via C# 读书笔记 5-7 GC的工作模式
摘要:垃圾回收目前支持两种工作模式, 并且在进程运行过程中无法修改这个工作模式1.工作站模式,该模式为客户端应用程序优化,GC假设当前机器上还有其他应用程序并且它们都没有完全占用CPU,工作站还有两个子模式  1)支持同时收集    会有更好的交互体验,因此适用于GUI应用程序,通常这个模式会占用更多的内存,并且性能更差  2)不支持同时收集2.服务器模式,该模式为服务器端应用程序优化,该模式假设当前应用程序是服务器上唯一的应用程序,该模式会导致托管堆被分隔为多个部分,每一个CPU一份.并且这些部分是可以并行执行的,默认情况下应用程序运行在工作站模式,并且支持同时收集(Asp.net和Sqlserv 阅读全文

posted @ 2010-12-13 17:42 听说读写 阅读(778) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 5-6 垃圾回收的Generation
摘要:直接用代码和注释说明问题吧~~代码第一次感觉一个对象的Finalize要等这么久....当然,如果在0代对象的时候就被回收了 就没这么麻烦了- -# PS:GC的简单逻辑:  1.遍历Generation 0 没用的拉出去杀掉,还有用的升级到Generation 1 ,  2.如果空间已经过了, 就不继续回收了 ,返回  3.如果空间还不够或者Generation 1 也满了, 把G1没用的拉出去烧了祭天,然后还活着的升级到G2  4.如果有必要 继续回收G2...如果g2也不够了 那么就OutOfMemoryException ....  参数:GC在初始化完成的时候Generation 0 阅读全文

posted @ 2010-12-10 10:30 听说读写 阅读(404) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 5-5 预留大内存
摘要:在进行需要很大内存空间的计算时,非常容易发生OutOfMemoryExceptionSystem.Runtime.MemoryFailPoint提供了在运行需要大内存的计算前进行内存检查的功能在调用该方法的时候执行了以下步骤(如果不完全确定所需的内存大小,可以传近似值)1.检查系统的页面文件是否有足够大的可用空间,检查进程中是否有足够的连续虚拟地址空间2.如果这里没有足够的空间,就会启动GC尝试回收一些内存3.如果GC之后依然没有足够的页面文件空间,,尝试扩大页面文件,如果页面文件大小还是没法达到要求,抛出InsufficientMemoryException4.如果进程中没有足够的连续虚拟地 阅读全文

posted @ 2010-12-09 15:44 听说读写 阅读(987) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 5-4 在使用非托管资源情况下的GC
摘要:有些时候,非托管资源会占用大量的内存, 而托管资源只占用一点资源,那么GC很难估计是否应该对这个资源进行垃圾回收,因为很难满足原来提到过的GC回收的条件(例如Gnereation 0 满了)为了解决这个情况,GC提供了以下两个方法[代码]所有包含大型非托管资源的托管类应该使用这些方法告诉GC他们准备使用多少内存由此,GC在内部监控内存压力,当内存压力很大的时候,就会执行一次GCGC.AddMemoryPressure 和 HandleCollector.Add其实内部也是使用GC.Collect方法来回收内存过多的调用GC.Collect在这里会造成性能损耗,不过性能损耗总比程序崩溃来的好.. 阅读全文

posted @ 2010-12-09 14:46 听说读写 阅读(316) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 5-3 对象复活(Resurrection)
摘要:1. 对象复活当GC想调用一个对象的Finalize方法的时候GC会强制这个对象处于 活 的状态只有当Finalize方法调用完成以后,这个对象才会永久的消失主要原因是:Finalize方法中可能使用到这个对象的字段(Field),所以Finalize的过程中需要保证可以访问这些字段,所以要保证对象处在 活的状态当Finalize方法执行完成的时候,这个对象才会真正的消失2. 应用场景一般情况下需要尽量避免使用对象复活,除非是一个对象需要被重复的使用,(其实我觉得还不如不回收这个对象呢,就让他一直活着吧)3.当一个静态字段被Finalize的时候[代码]当SomeType对象的Finalize 阅读全文

posted @ 2010-12-08 16:38 听说读写 阅读(765) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 5-2 为什么不使用Finalize
摘要:1.在创建对象的时候,Finalize需要更多的时间, 因为需要把对象放到Finalization List 中2.Finalize会让你的应用程序运行的更慢,因为在GC的时候需要对每个对象执行额外的检查3.Finalize会对内存造成更大的压力(Heap的内存分配问题)4.Finalize执行时间是不确定的,如果是使用需要独占的资源例如File, 那么下一个想使用文件的人无法确定什么时候才能使用它所需要的文件, 这种情况还是尽快使用Dispose或者Close释放资源比较好,这同时意味着,你无法手动控制Finalize的执行和它的执行顺序PS:什么时候执行Finalize1.托管堆中0代 阅读全文

posted @ 2010-12-06 13:12 听说读写 阅读(355) 评论(0) 推荐(0) 编辑

导航