2012年5月26日

Windows Azure Quick Start - Hello World

摘要: 准备工作: Visual Studio 2010 SP1, Windows azure SDKhttp://www.microsoft.com/en-us/download/details.aspx?id=15658 备注:(visual studio 2011 现在还不支持widnows azure的开发) 申请帐号(免费,需要信用卡号) https://www.windowsazure.com/en-us/pricing/free-trial/1.新建一个普通项目(这边用的是一个MVC3项目)2.右键点击项目文件,选择 Add Windows Azure Deployment...阅读全文

posted @ 2012-05-26 20:04 听说读写 阅读(8) 评论(0) 编辑

TFS 2011 Preview Quickstart

摘要: Team Foundation Service 2011 QuickstartTFS 2010已经挺好用的了,但是技术总是在不断进步的,TFS2011又出来了,微软的技术更新总是挺快的...1. TFS 2010 Server配置是很麻烦的, 使用 TFS Azure就节省了配置server的时间2. TFS 2011 在较多方面有增强,我个人比较喜欢的team explorer的搜索功能,还有那个feedback manager/tool都挺好用的TFS 2011 的新的feature 可以查看以下文章:http://blogs.msdn.com/b/visualstudioalm/arch阅读全文

posted @ 2012-05-26 09:00 听说读写 阅读(12) 评论(0) 编辑

2012年5月21日

一个简单的.net写日志方法 - 可能的改进点

摘要: 昨天有个朋友在评论的时候问我如下代码在web开发中有什么问题public void Log(string msg){System.IO.File.AppendAllText(Server.MapPath("~/log.txt"), msg);}这里能说的点太多了....只好新开一个文章来说,而且也只是选重点的说功能1.线程不安全 asp.net是原生的多线程的框架,那么日志类必须是多线程安全的, 该类库内部使用了File类来附加日志,而这个部分不是线程安全的,这里有一个BUG (windows资源.例如网络 文件 在asp.net中都要注意多线程同步) 改进方案:最最简单的阅读全文

posted @ 2012-05-21 12:32 听说读写 阅读(2719) 评论(1) 编辑

2012年5月19日

.net 开发人员面试题 - 多线程

摘要: 最近园子里好多人谈到了招聘面试,特别是多线程这个问题出现了很多次;多线程也是我在面试中很喜欢问的一个题目,和大家分享一下(仅限.net)为什么喜欢在面试中问这个问题 因为这是一个很好的了解面试者知识深度的问题,在现代CPU都是多核的背景下,多线程作为一种能充分发挥CPU资源的技术使用的越来越广泛. 而且这个问题可以把普通的应用开发人员(增删改查)和有一定技术深度/专研精神的人区分出来 (此外:没吃过猪肉好歹要见过猪跑吧,没见过猪跑...这个就有点诡异了)背景: 面试.net中高级软件工程师/架构师 (事先可能不知道对方的目标等级,要在这次面试过程中确定, 多线程不是初级/中级开发人员...阅读全文

posted @ 2012-05-19 16:01 听说读写 阅读(3170) 评论(36) 编辑

2012年5月16日

.net 开发人员的瓶颈和职业发展

摘要: 现在社会比前几年浮躁了,越来越多的人抱怨薪水低,高薪工作不好找;诚然这有CPI的压力,可是也有很多人没有认清自己的职业发展.很多.net程序员个各种纠结,想拿高薪又拿不到,想提高又不知道怎么能提高.我也经历过这样的阶段.......各种纠结和迷茫,各种悲剧......不知道路在何方,在此我把我的经验和看法分享给大家,希望能给大家一点帮助.(本文只代表我的个人观点)关于职业/薪水瓶颈的问题:(在本文中,我们假设薪水就是能力的真实体现,不考虑运气等因素,并且薪水以上海为标准,其他城市乘以相对比例)瓶颈一: 入门 (薪水<0) 在这个阶段没有老师就是各种悲剧,各种概念的混合,各种纠结,各种蒙.阅读全文

posted @ 2012-05-16 22:31 听说读写 阅读(9305) 评论(109) 编辑

2012年5月8日

PPT - Garbage Collection in .Net (内存管理)

摘要: Garbage Collection in .Net描述了.Net GC原理高性能和稳定性Demo最佳实践PPT下载:http://files.cnblogs.com/PurpleTide/GC.pptx范例代码下载:http://files.cnblogs.com/PurpleTide/Code.7z工具: windbg sos sosex备注:很多内容是口述的,ppt只是大纲阅读全文

posted @ 2012-05-08 21:35 听说读写 阅读(72) 评论(5) 编辑

2012年5月4日

.Net常识 值类型和引用类型

摘要: 值类型和引用类型是.net里面的一个基本概念在面试的时候也经常遇到关于这个概念有很多误解,经常听到下面的说法1.两者的区别是值类型分配在堆栈上,引用类型分配在堆上 这句话不对,至少不准确2.值类型性能更好, 这句话要考虑情况先补充一些背景资料常见的值类型有:大部分原生类型,例如int float long 各种自己定义的结构体等等常见的引用类型有:string 各种Class 数组(包括int[]这种的)堆栈:在这里指的是执行堆栈堆:在这里指的是托管堆,就是LOH+G0+G1+G2让我们先来看看第一点:两者的区别是值类型分配在堆栈上,引用类型分配在堆上1.假设在一个方法里面有一个语句是 v..阅读全文

posted @ 2012-05-04 10:19 听说读写 阅读(978) 评论(5) 编辑

2012年5月3日

【设计原则和建议】 类

摘要: 类是C#中最重要的一个概念,也是最难表述的一个概念1.类的职责一定要清晰 不要设计超级类 尽量精简这条其实比较难准确的表述,更多的是要靠设计人员的经验;2.如果类中不存在实例成员,那么将类设计为static的3.如果可以,将类设计为sealed的 性能, 调用可能的虚方法对性能是有损失 防止意外的行为, protected的成员会被子类修改,有的时候会造成不可预料的结果 降低复杂度4.避免嵌套太深的继承关系 理由和第三点一致5.避免嵌套类 类中的类...有的时候和命名空间有冲突,会让人迷糊 而且每次使用也很麻烦6.如果类中有实现了IDispose的成员,或者是父类实现了IDis...阅读全文

posted @ 2012-05-03 20:22 听说读写 阅读(54) 评论(1) 编辑

2012年3月20日

读书笔记 - 软件的组成->测试

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

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

Why Sessionless Web Application ?

摘要: 什么是Sessionless Web Application Session相信大部分朋友都听说过,不使用Session的程序就是Sessionless, (注意,只是不用Session,并不代表不用Cookies,当然我们也要尽可能的少依赖cookis)为什么Sessionless (stateless)Session往往是在某一台机器的内存中的,往往一台机器宕机以后,Session信息就丢失了.如果不需要保持Session,应用程序和架构设计将会比较简单,维护也会更简单为了保持Session 粘性, 某用户在第一次访问之后的每一次访问都要回到上一次访问的那台服务器那么,如果一台服务器压..阅读全文

posted @ 2012-03-20 20:52 听说读写 阅读(735) 评论(5) 编辑

2012年3月19日

读书笔记 - 自动化部署的优势

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

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

2012年3月18日

轻量级 Lock Free 线程安全的 Queue<T> 的C#2.0实现

摘要: 最近在维护一些C# 2.0的代码....发现各种线程不安全的实现2.0里面又没有ConcurrentCollection的相关类不得已,自己写了一个,本来想用传统的lock实现的, 不过考虑到其中的操作非常轻量级...最终还是用了Lock Free使用原子操作 InterLocked 替换掉常用的lock关键字 public sealed class SafedQueue<T> { #region private Fields private int isTaked = 0; private Queue<T> queue = new Que...阅读全文

posted @ 2012-03-18 13:37 听说读写 阅读(76) 评论(0) 编辑

2012年3月16日

Lock Free ObjectPool<T>的C#实现 (对象池)

摘要: 最近实现了一个LockFree的对象池主要的想法是: 1.复用构造出来的对象 2.避免重复创建和销毁对象对GC造成的压力 3.避免重复创建对象造成的资源消耗最适合的场景是: 1.构造对象很慢,并且需要构造很多个对象的情况主要技术特征: 1. C#4.0的实现(可以降级到2.0) 2. 内部没有使用普通的lock,而是使用Lock Free的实现方式 3. 将常用的取回对象的方式,换成委托运行, 这样的话ObjectPool可以帮你自动将对象压回队列 4. ObjectPool支持对象池上下限的设置(如果移除该功能性能还会提高很多!)以下是实现代码: /// <summar...阅读全文

posted @ 2012-03-16 22:22 听说读写 阅读(1144) 评论(5) 编辑

2012年3月15日

Katama hash 算法的C#实现

摘要: Katama hash 是经常在分布式解决方案中见到的算法,网上已经有很多文章介绍这个算法或者其他的hash一致性算法前一阵子正好在做一个分布式系统的时候需要实现该算法,在网上找了找,发现用C#实现的都不是很好。。有一个搜索出来结果最前面最多的实现,性能没有优化过,代码可读性也不是很好。。然后各个C#的memcached library中的实现又耦合的太紧了,所以自己搞了下面的这段代码(参考了这位朋友的实现http://www.cnblogs.com/daizhj/archive/2010/08/24/1807324.html)还有Beit的实现using System;using Syste阅读全文

posted @ 2012-03-15 20:25 听说读写 阅读(58) 评论(0) 编辑

在 Visual Studio 单元测试中使用CallContext 导致的 Unit Test Adapter threw exception: Type is not resolved for member... 异常

摘要: 该问题的表现形式是: 在运行单元测试(或其他的VS测试类型)的时候 抛出异常Unit Test Adapter threw exception: Type is not resolved for member... 但是同样的测试在应用程序/网站中都没有问题该问题的根本原因是:Visual Studio运行测试代码的时候实际上是在一个独立的AppDomain中运行的,该AppDomain 无法找到CallContext中存储的类型所以抛出了这个异常,不过这个异常信息非常不清晰,只看异常信息很难找到问题原因目前为止有3个解决方案: 1.拷贝DLL到QAAgent32.exe所在的目录 (一...阅读全文

posted @ 2012-03-15 19:20 听说读写 阅读(847) 评论(1) 编辑