摘要:
这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,权当一次互联网资料的补充。 阅读全文
随笔档案-2009年03月
使用IronPython检测ASP.NET程序状况(下)
2009-03-25 09:03 by Jeffrey Zhao, 27930 阅读, 收藏, 编辑
摘要:
在上一篇文章中,我们在一个请求中执行了IronPython代码,通过这个方法我们可以轻松地的检查系统运行的状态,或对系统进行一些简单修改。但是这种做法只能检查系统在当前时刻的状态,在很多情况下,我们需要对系统的请求进行一段时间的采样。对于简单的数据(例如每秒执行的请求数量,请求时间),我们可以通过查看Performance Monitor中相关的计数器来获得一些概要的数据。但是,如果我们需要获取一些系统的详细状态,甚至是需要根据需要进行动态改变的自定义需求,则势必要深入到系统内部进行数据采集。那么,我们该怎么做呢? 阅读全文
使用IronPython检测ASP.NET程序状况(上)
2009-03-23 09:09 by Jeffrey Zhao, 15656 阅读, 收藏, 编辑
摘要:
在维护一些生产环境中的ASP.NET应用程序时,老赵经常会感到“力不从心”。虽然我们可以建立丰富有效的监控或日志等维护机制,但是调试和分析一次程序经常需要耗费大量的脑细胞。因为我们可以使用的工具大都非常抽象,即使是一个非常微小的问题,也要用较多的时间才能发现“哦,原来是这个变量的值进入了一种奇怪的状态”。如果我们有一种机制,可以直观地检查生产环境中正在运行的程序的状态,那么一定可以大大方便我们的工作。 阅读全文
老赵看博客园首页
2009-03-21 21:00 by Jeffrey Zhao, 14000 阅读, 收藏, 编辑
摘要:
不知道从什么时候开始,争论一篇文章是不是应该上首页成为博客园的一种流行。无论从任何角度出发,一旦谈起“文章质量”必然会有朋友会牵扯到“首页”(见《和谐社区,和谐技术》),然后动辄又抡起一句“你没有资格评论文章能不能上首页”。关于一些吵架的方式,逻辑方面的问题,有机会老赵再慢慢讨论,现在先来谈谈“首页”方面的问题,让老赵也掺和一下。 阅读全文
重大利好消息:微软原版技术图书大幅降价
2009-03-21 02:21 by Jeffrey Zhao, 9076 阅读, 收藏, 编辑
摘要:
虽说放首页不太妥当,不过趁着周末“萧条期”老赵还是破例一把吧。:) 阅读全文
谈表达式树的缓存(5):引入散列值
2009-03-20 01:40 by Jeffrey Zhao, 13663 阅读, 收藏, 编辑
摘要:
到目前为止,我们已经实现了三种缓存方式:首先我们设法构建唯一字符串,但是由于它的代价较高,于是我们使用了前缀树进行存储;又由于前缀树在实际操作中所花的时间和空间都有不令人满意之处,我们又引入了二叉搜索树。那么二叉搜索树又有什么缺点呢? 阅读全文
谈表达式树的缓存(4):使用二叉搜索树(AVL树)
2009-03-19 09:05 by Jeffrey Zhao, 12033 阅读, 收藏, 编辑
摘要:
上一篇文章中谈到的前缀树实现方式,时间复杂度从理论上来讲已经达到了最优,而空间复杂度理论上也可以做到较优。但是理论和实际是有差别的,而对于上文前缀树的实现来说,这两方面并不是非常理想。因此,虽然事实上前缀树是老赵第一个真正实现的缓存方法,但是对此并不满意,也想着有什么办法可以进行优化。不如尝试一下使用二叉搜索树?
阅读全文
谈表达式树的缓存(3):使用前缀树
2009-03-18 01:24 by Jeffrey Zhao, 14639 阅读, 收藏, 编辑
摘要:
在上一篇文章里我们设法将前缀树构造为一个唯一的字符串,然后使用字符串作为key缓存在字典中。这个想法非常直接,做法也不困难(在遍历时记录详细信息便可)。不过事实上,老赵在思考表达式树的缓存问题时,这种字符串拼接的方式只存在于脑海当中,而上文的实现是为了这一系列文章的完整性而特地编写的。这是因为它的缺点较为明显,正如上文所述,字符串拼接操作较为耗时耗资源,且很容易生成一个长度可观的字符串(并非不能优化,不过实现就复杂了)。于是我们现在设法选择另一个解决方案来处理这个问题。 阅读全文
谈表达式树的缓存(2):由表达式树生成字符串
2009-03-17 00:58 by Jeffrey Zhao, 12758 阅读, 收藏, 编辑
摘要:
谈到使用表达式树作为key进行缓存,您脑海中最早浮现出来的解决方案是什么?老赵看来,大部分朋友的第一反应自然就是将作为key的表达式树,使用一定规则生成一个字符串。那么我们就先使用这个办法来解决问题。 阅读全文
谈表达式树的缓存(1):引言
2009-03-16 09:29 by Jeffrey Zhao, 17270 阅读, 收藏, 编辑
摘要:
表达式树(Expression Tree)是.NET 3.5中引入的一种表达方式。表达式树的运用十分广泛,可以直观地表现出各种“数据”,甚至“逻辑”和“行为”。老赵现在希望可以找到一种较为通用的,能够根据表达式树进行缓存的解决方案。在这一系列文章中,老赵希望可以重现自己在思考这个问题的时候所形成的完整思考路径。相比最终解决方案,这可能才是更有价值的东西。至少我觉得讨论一下这个问题也是非常有意思的事情。而且从一定程度上说,这些思考能够在一定程度上体现出算法设计与数据结构的美妙之处。 阅读全文
大家在开发ASP.NET应用程序时感觉有哪些值得讨论的话题呢?
2009-03-13 16:03 by Jeffrey Zhao, 8979 阅读, 收藏, 编辑
摘要:
不知道大家在开发ASP.NET过程中时,会产生哪些思考呢?这些思考可以是开发方式上的,可以是部署运营上的,可以是测试实践上的——只要不是某某具体问题该怎么解决,某段代码里是否有某个Bug,只要是值得议论的话题,都可以提出。最好是具体某个问题,例如XX和XX的优劣或选择,而不是简单的说“XX方面的问题” 我想调查一下,希望可以多做一些思考和总结。 谢谢大家。 阅读全文
招聘中高级.NET开发人员(上海柏盛网络技术有限公司)
2009-03-13 15:47 by Jeffrey Zhao, 7424 阅读, 收藏, 编辑
摘要:
工作职责 开发产品功能,包括架构、设计、开发以及单元测试;保证按时交付高质量的软件服务/组件; 在开发以及产品环境下进行调试排错,快速解决客户问题; 配合项目管理和测试团队,满足项目进度计划; 为开发团队提供技术领导与支持,对初级开发人员进行辅助和指导; 应聘要求 扎实的计算机科学基础; 超过两年的ASP.NET Web应用程序开发经验,对ASP.NET框架以及C#或VB.NET语言有... 阅读全文
警惕匿名方法造成的变量共享
2009-03-13 09:03 by Jeffrey Zhao, 32073 阅读, 收藏, 编辑
摘要:
匿名方法是强大的,但是也会造成一些令人难以察觉的陷阱。 阅读全文
一个简单的性能计数器:CodeTimer
2009-03-10 09:03 by Jeffrey Zhao, 48213 阅读, 收藏, 编辑
摘要:
有数据,有真相,相信大家在平时的工作或学习过程中,都需要比较几种不同方法或实现之间的性能差距。在这些时候,往往就需要我们不断地创建Stopwatch,打开,关闭,然后打印时间。这种一遍又一遍的重复终有一天会让人忍无可忍,因此如果能有一个“标准”的性能计数器,那应该可以让生活轻松许多。这个性能计数器不用复杂,够用就好;也不需要考虑扩展性,要扩展时直接修改代码就够了;同样不需要考虑输出格式,直接打印在Console就行。 阅读全文
iReaper:WebCast视频下载辅助工具
2009-03-09 23:37 by Jeffrey Zhao, 16926 阅读, 收藏, 编辑
摘要:
MSDN WebCast中心设计的愈发有些奇怪了,下载视频也变得越来越复杂,已经有不少朋友向老赵询问视频该如何下载。虽然我觉得……找视频嘛……仔细点,总归找得到……不过有个辅助工具帮助大家偷这么个懒还是有些好处的。最近忙着工作、学习和研究,一直没有时间去写这篇“推广”。不过一直拖下去也不是办法啊,试用一下似乎倒也不错,就让更多朋友知道一下吧。 iReaper可以帮助大家下载MSDN WebCast... 阅读全文
尽可能摆脱对HttpContext的依赖
2009-03-09 09:17 by Jeffrey Zhao, 13446 阅读, 收藏, 编辑
摘要:
我们继续《ASP.NET MVC单元测试最佳实践》,今天主要谈论HttpContext的依赖问题。简单说来:虽然已经可以对HttpContext进行Mock(这点增强了可测试性),但是过度依赖HttpContext对于单元测试来说也是一个伤害。这是HttpContext对象的天性所致:它实在太复杂了。因此,我们的代码要尽可能减少对HttpContext的依赖。 阅读全文
请别埋没了URL Routing
2009-03-05 09:04 by Jeffrey Zhao, 13795 阅读, 收藏, 编辑
摘要:
我们现在把数据转化的工作交给URL Routing,它的职责原本就是从URL中提取数据——任意类型的数据,以及把数据转化为URL,我们现在只是充分利用了URL Routing的功能而已。事实上,我建议任何使用URL表示的数据,都把转化的职责转移到URL Routing这一层,因为这是我们基本上无可避免地需要根据数据来生成URL。那么Model Binder难道就没有用了吗?当然不是。URL Routing负责从URL中提取数据,而Model Binder则用于从其他方面来获取参数。
打开视野,发挥程序员的敏捷思路,生活就会变得更加美好。 阅读全文
名家语录(持续更新)
2009-03-03 15:03 by Jeffrey Zhao, 8408 阅读, 收藏, 编辑
摘要:
Jeffrey Richter评“微软平台更新过于迅速”
Robert Martin评“程序员十大必读论文”事件 阅读全文
老赵减肥记:减肥?跟玩儿似的。
2009-03-03 09:08 by Jeffrey Zhao, 11715 阅读, 收藏, 编辑
摘要:
老赵成功减肥,各中冷暖自知,与大家共勉。有志者事竟成,不是骗小孩的。 阅读全文
所有程序员都应该至少读上两遍的十篇论文
2009-03-02 10:29 by Jeffrey Zhao, 14796 阅读, 收藏, 编辑
摘要:
转载自刘江老师的博文《所有程序员都应该至少读上两遍的十篇论文》。关于读论文的重要性我不多作解释,事实上我也解释不清,但是可以确定的是,论文让我感受到技术之美,是一件很惬意的事情。当然,我们不一定要读“前沿”的内容,但是一些经典的论文是不能错过的。 阅读全文
Model Binder机制的缺陷
2009-03-02 09:08 by Jeffrey Zhao, 12636 阅读, 收藏, 编辑
摘要:
Model Binder提供了一种机制,将请求中的数据转化成Action方法的参数。但是它是唯一的做法吗?它真是合适的做法吗?本文提出了Model Binder机制的一个缺陷,并且在下一篇文章中提出解决方案。 阅读全文