12 2010 档案

微软面试题 状态机
摘要:已知 圆盘上有4个开关 分布在正方形的4个角上1.每个开关都只有两个状态 开或者关 ; 触摸一下开关 它的状态就会互相转换(开-关 关-开)2.你看不到现在开关的状态是什么,你也不能通过触摸判断现在的开关是开还是关3.每一次操作你可以选择改变一个开关的状态,或者改变两个开关的状态4.操作完成后 ,圆盘会随机转动, (也就是说你下一次操作的时候这些开关的位置都已经移动了)5.由于正方形的相邻点和对角点距离不一样 ,那么在你改变两个开关的时候,你可以通过这个判断你改变的是对角点还是相邻点6.当开关完全打开或者完全关闭的时候, 外面有个灯就会亮起来, 那么恭喜你 你搞定了问:有没有一种严格的流程 阅读全文

posted @ 2010-12-31 09:45 听说读写 阅读(1758) 评论(2) 推荐(1) 编辑

面试:等车时间
摘要:已知我家门口的公交站有两班公交车.其中一辆每隔M分钟经过我家门口.另外一辆每隔N分钟经过我家门口.我随便等到一辆车都可以坐车去上班....那么平均情况下 我要等多久 才能等到一辆车??应用场景是在做地图寻路算法的时候....要计算等车时间, (用于估计你要多久才能到达目的地).一个很简单的提示:如果只有一辆车M,平均时间是M/2,如果多了一辆车n...用的时间必然小于M/2.PS: 有很多朋友会认为答案是(M+N)/2 这明显是不对的 因为我只要随便等到一辆车就能上班了.PS: M*N/(M+N)也是错的.PS:我也不知道什么时候出门等车啦 ,也不知道m和n什么时候发车,反正就是随机的.附上一 阅读全文

posted @ 2010-12-22 22:52 听说读写 阅读(926) 评论(3) 推荐(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 听说读写 阅读(12237) 评论(1) 推荐(2) 编辑

OData 1-4 OData语法(上)
摘要:假设目前提供OData的服务地址是http://localhost:9527/ODataService.svc提供的服务内容如下所示 (提供了一个WagerInformations)代码1.基础查询   1)列出所有的WagerInformations    http://localhost:9527/ODataService.svc/WagerInformations  2)按照主键查询    http://localhost:9527/ODataService.svc/WagerInformations(1)    PS:在.net里面一般使用DataServiceKeyAttrib 阅读全文

posted @ 2010-12-21 10:51 听说读写 阅读(26433) 评论(3) 推荐(0) 编辑

OData 1-3 自定义身份验证和OData
摘要:和windows身份验证相比,在实际程序中应用更多的是自定义身份验证1.在WCF服务内做身份验证 代码这里我目前还有一些疑问,例如这里客户端的数据是非结构化的,虽然方法名称 列名什么都有,但是要自己实现分析代码以确定客户访问的是什么权限(例如什么表 什么列) 总归是麻烦的希望有微软官方的实现或者第三方实现(目前我还没有找到)2.使用HttpModule做验证.  其实这个方法实现和wcf内实现是一样的...只是放的地方不一样而已3.OAuth WRAP 阅读全文

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

OData 1-2 windows 身份验证和OData
摘要:windows 身份验证和OData1.服务器端  1) 集成身份验证    在使用IIS作为服务宿主的情况下,需要打开集成身份验证,关闭匿名身份验证    windows身份验证要求请求中包含以下的http header: (以下例子是服务器发生401时给客户端的错误提示)    WWW-Authenticate: NTLM     WWW-Authenticate: Negotiate    其中NTLM意味着你需要使用windows身份验证    Negotiate意味着客户端可以尝试Kerberos身份验证  2)基本身份验证    当你把IIS配置为基本身份验证的时候    服务器返 阅读全文

posted @ 2010-12-20 16:43 听说读写 阅读(3303) 评论(0) 推荐(1) 编辑

OData 1-1 入门:实现一个简单的OData服务
摘要:1.什么是OData:开放数据协议(OData)是一个查询和更新数据的Web协议。OData应用了web技术如HTTP、Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务和存储的信息访问2.OData 优势(个人看法)  1)一种通用的跨语言的协议,  2)基于.net的实现可以非常方便的实现一些功能(例如在客户端使用lambda表达式, 使用odata 传递请求到server,最后服务器返回一个结果集 , 注意 过滤排序什么操作是在服务器实现的,我个人觉得这个功能封装的很彻底,实现也很酷)以下代码就是一个最简单的OData的实现代码如果需要对多个不同对象实现OData 阅读全文

posted @ 2010-12-20 15:08 听说读写 阅读(12341) 评论(3) 推荐(2) 编辑

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

posted @ 2010-12-13 17:42 听说读写 阅读(779) 评论(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 听说读写 阅读(405) 评论(0) 推荐(0) 编辑

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

posted @ 2010-12-09 15:44 听说读写 阅读(989) 评论(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 听说读写 阅读(318) 评论(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 听说读写 阅读(768) 评论(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 听说读写 阅读(356) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 5-1 何时对托管资源使用Finalize
摘要:Finalize方法常用于回收非托管资源,以防止资源泄露在较少的情况下它也会被用于托管资源1.构造函数中如果抛出异常, 那么只有Finalize方法才会被执行,在这里可以回收一些已经分配的资源(Dispose不会被执行!!!)当然:Finalize方法的执行时间还是下一次GC的时候(依然不确定时间)如果不实现该方法将会造成资源泄露以下代码演示了在这种情况代码所以一般情况下为了完全避免资源泄露例如Memory leak, 通常将类实现为以下的方式代码 阅读全文

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

.net 4.0 同步集合类 System.Collections.Concurrent
摘要:.net 4.0 位于System.Collections.Concurrent 命名空间下增加了一些同步的集合类顾名思义就是线程安全的集合类他包括ConcurrentStack, ConcurrentQueue, and ConcurrentBag等1.内部使用InterLocked实现同步功能2.在使用foreach 遍历这些集合的时候(GetEnumerator) ,这些集合内部会创建一个快... 阅读全文

posted @ 2010-12-02 17:27 听说读写 阅读(593) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 4-2 线程和锁的一些使用原则
摘要:1.如果可以,尽可能使用线程池中的线程, 因为自己创建,维护销毁一个线程会极大的消耗CPU和内存资源,如果需要定时工作,那么请使用System.Threading.Timer2.在读多写少的情况,使用读写锁ReaderWriterLockSlim (不要使用ReaderWriterLock), 因为这样读操作之间不会互斥3.尽量不要使用递归的锁 ,当然Moniter是个例外,他虽然使用了递归, 但... 阅读全文

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

别拿Thread当定时器使用...
摘要:经常可以看到很多程序使用Thread当作定时器(Timer)使用,例如定时检查数据,定时清空缓存什么的就像以下代码代码可能有的朋友已经注意到,在压力比较大的Asp.net网站中这个Thread经常不能正常的工作,也许这个线程会永远不会再起来.......那么定时任务也就泡汤了PS:如果是console的主线程 (标记了STAThreadAttribute ) 则可以正常的苏醒和睡眠另外一个原因就是每个Thread都是很昂贵的,能不用就不用,(我的另外一个文章有提到,一个线程至少1m内存还要考虑给GC 和上下文调度造成的压力)一般情况下建议使用System.Threading.Timer 来执行 阅读全文

posted @ 2010-12-01 16:28 听说读写 阅读(4218) 评论(1) 推荐(0) 编辑

C#的值类型内存分配总是和上下文有关,而不总是在堆栈上
摘要:总是很常见到一些说法是值类型总是分配在堆栈上,引用类型总是分配在堆上(google搜索大约10万条记录- -)最近仔细思考了一下发现有点问题....当然我个人水平有限, 有什么差错还请大家指正个人总结的c#值类型和应用类型的分配应该是:  应用类型肯定在托管堆上,值类型总是和上下文有关1.类的实例成员, 类是引用类型,总是分配在堆上,那么a的内存就在ClassA的实例的内存里,也必然在堆上[代码]... 阅读全文

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

CLR via C# 读书笔记 4-1 线程同步-常见的锁,原生用户模式和核心模式 (上)
摘要:本文主要描述为了保证线程同步和数据安全采用的若干种不同方案以锁为例:1.用户模式(User-Mode)比核心模式(Kernel-Mode)快很多2.windows操作系统无法发现用户模式的锁 (即使已经被Blocked了) ,所以线程池也不会为此新建一个线程处理新的请求3.核心模式的锁可以使得线程停止运行, 这样就不会浪费CPU,只是浪费内存(条件满足的时候,windows会唤醒之前休眠的线程继续... 阅读全文

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

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示