Wosign(沃通)免费证书申请 http://freessl.wosign.com/freessl申请免费证书
免费SSL证书Let’s Encrypt安装使用教程 官网https://letsencrypt.org/
startssl免费证书申请 https://www.startssl.com/Account
Wosign(沃通)免费证书申请 http://freessl.wosign.com/freessl申请免费证书
免费SSL证书Let’s Encrypt安装使用教程 官网https://letsencrypt.org/
startssl免费证书申请 https://www.startssl.com/Account
点评:这是10年的一篇网络文章,现在看看,发现也是值得滴。语法糖,还是要了解一下,万一别人用了,看不懂,这不很尴尬么~~
———————————————
首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。这让java开发人员羡慕不已,呵呵。
1. 经过简化的Property
早些时候我们这样声明Property
private string _myName;
public string MyName
{
get { return _myName; }
set { _myName = value; }
}
千篇一律的这样声明,没有多大意义,于是C#的设计人员将这个千篇一律的工作交给了编译器帮我们做了,我们现在可以这样声明
public string MyName { get; set; }
当然他不会牺牲灵活性,我们可以单独给get或者set设定访问限制符,例如
public string MyName { get; protected internal set; }
2. 经过两次变异的委托写法
在.net 1.1时我们不得不声明方法后才在委托中使用,在.net 2.0之后我们可以使用匿名委托,他不单可以简化写法,还可以在匿名委托中访问范围内的变量;再后来拉姆达表达式来了,写法就更简便了。
class MyClass
{
public delegate void DoSomething(int a);
//定义方法委托
private void DoIt(int a) {
Console.WriteLine(a);
}
private void HowtoDo(DoSomething doMethod,int a) {
doMethod(a);
}
public static void Main(string[] args) {
MyClass mc = new MyClass();
//调用定义的方法委托
mc.HowtoDo(new DoSomething(mc.DoIt), 10);
int x = 10;
//使用匿名委托
mc.HowtoDo(delegate(int a){
Console.WriteLine(a + x);
},10);
//使用lamda表达式
mc.HowtoDo(a=>Console.WriteLine(a+x),10);
Console.ReadLine();
}
}
3. 集合类的声明
之前我们声明一个List并给list赋初始值,必须得这么写:
List<string> list = new List<string>();
list.Add("a一");
list.Add("b二");
list.Add("c三");
现在不需要了,直接写就可以了
List<string> list = new List<string> {
"def","OK"
};
4. 集合类各个项的操作
我们为了逐个处理集合中的项,需要这么写:
foreach (string item in list)
{
Console.WriteLine(item);
}
现在不需要了,这样就可以了
list.ForEach(a => Console.WriteLine(a));
代码是不是清爽了很多。
5. using == try finally
为了在使用完毕时释放资源,我们经常要用using,using实质上就是try fiannaly的一个语法糖而已。例如
StreamWriter sw = null;
try
{
sw = new StreamWriter("d:\abc.txt");
sw.WriteLine("test");
}
finally {
if(sw!= null) sw.Dispose();
}
上面的代码可以简化为:
using (var sw = new StreamWriter("d:\abc.txt")) {
sw.WriteLine("test");
}
6. 可爱的var
var的意义时不必写声明的类型,编译器会根据后面对var的赋值判断它的类型,var的类型一旦确认就不能再改变,它只能作为局部变量使用,不能用做字段也不能用做参数声明。
例如:
var writer = new StreamWriter(path);
for(var i=0;i<100;i++){}
7. 问号的演变
老掉牙的一个问号+冒号
var b = 3;
var a = b > 9?b.ToString():”0”+b;
新宝宝两个问号 ??,它表示左边的变量如果为null则值为右边的变量,否则就是左边的变量值
string a = null;
var b = a??””;
8. 类型实例化的语法糖
public class Abc
{
public int ID { get; set; }
public string Name { get; set; }
public string Url { get; set; }
}
我们没有为上面的类声明构造函数,但是我们可以像下面的形式来实例化它
public static void Main(string[] args) {
var abc = new Abc{
ID=1,
Name="yukaizhao",
Url="http://yukaizhao.cnblogs.com/"
};
}
9. 传说中的扩展方法
在c#3.5时引入了扩展方法,我们可以在不修改类源码的情况下给类增加实例方法,这个很有意义。它的实质也是一种语法糖的实现
例如我们给String类扩展一个IsNumber的方法:
public static class StringExt {
static private Regex regexNumber = new Regex("\\d+");
static public bool IsNumber(this string input)
{
if (string.IsNullOrEmpty(input))
{
return false;
}
return regexNumber.IsMatch(input);
}
}
我们可以在String实例上调用这个方法了
1
2
var abc = “123”;
var isNumber = abs.IsNumber();
10.使用匿名类
1
2
3
var a = new {
ID = 1,Name=”yukaizhao”,BlogUrl=”http://www.cnblogs.com/yukaizhao/”
};
匿名类在linq to sql或者entity framework中返回查询数据时很好用。
如果大家还有更多的语法糖,欢迎分享。同时希望大家享受语法糖,因为他可以给我们带来方便,请不要对它嗤之以鼻,也没必要对它嗤之以鼻。
微博:http://weibo.com/yukaizhao 推荐 牧童*红杏*墙
转自:http://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html
全文转,放点个人评论:其中有一两本是看过的,没有太大的印象了。不管写得多好多牛B,随着时间的流逝,都over了。
——————————————-
“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。”
很多程序员响应,他们在推荐时也写下自己的评语。以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书。其实除了前10本之外,推荐数前30左右的书籍都算经典,伯乐在线整理编译这个问答贴,同时摘译部分推荐人的评语。下面就按照各本书的推荐数排列。
1. 《代码大全》史蒂夫·迈克康奈尔
推荐数:1684
“优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。” —— Joel Spolsky
对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中99%的观念。– esac
2. 《程序员修炼之道》
推荐数:1504
对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。或许他们还是在校生,但对要自己做什么,还感觉不是很安全。就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮,但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个P2P的音乐交换网络图,那这本书就适合你了。—— Joel
3. 《计算机程序的构造和解释》
推荐数:916

就个人而言,这本书目前为止对我影响醉倒的一本编程书。
《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。其他书籍则处理算法。这些书都有自己所属的位置。
然而《计算机程序的构造和解释》与这些不同。这是一本会启发你的书,它会燃起你编写出色程序的热情;它还将教会你认识并欣赏美;它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。
同时,你将会学到其他东西,函数式编程(第三章)、惰性计算、元编程、虚拟机、解释器和编译器。
一些人认为此书不适合新手。个人认为,虽然我并不完全认同要有一些编程经验才能读此书,但我还是一定推荐给初学者。毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。此书或许需要多做努力(尤其你在做练习的时候,你也应当如此),但这个价是对得起这本书的。
你还不确信么?那就读读第一版的前言或序言。网上有免费的电子版。-Antti Sykäri
4. 《C程序设计语言》
推荐数:774
这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。(这对理解“底层”非常重要)—— Nathan
5. 《算法导论》
推荐数:671
《代码大全》教你如何正确编程;《人月神话》教你如何正确管理;《设计模式》教你如何正确设计……
在我看来,代码只是一个工具,并非精髓。开发软件的主要部分是创建新算法或重新实现现有算法。其他部分则像重新组装乐高砖块或创建“管理”层。我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他“管理”细节则留给其他人…… —— Ran Biron
6. 《重构:改善既有代码的设计》
推荐数:617
我想我不得不推荐《重构》:改进现有代码的设计。—— Martin
我必须承认,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序,而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler
7. 《设计模式》
推荐数:617
就我而言,我认为四人帮编著的《设计模式》是一本极为有用的书。虽然此书并不像其他建议一样有关“元”编程,但它强调封装诸如模式一类的优秀编程技术,因而鼓励其他人提出新模式和反模式(antipatterns),并运用于编程对话中。—— Chris Jester-Young
8. 《人月神话》
推荐数:588
9. 《计算机程序设计艺术》
推荐数:542
这是高德纳倾注心血写的一本书。—— Peter Coulton
10. 《编译原理》(龙书)
推荐数:462
我很奇怪,居然没人提到龙书。(或许已有推荐,我没有看到)。我从没忘过此书的第一版封面。此书让我知道了编译器是多么地神奇绝妙。- DB
11. 《深入浅出设计模式》
推荐数:445
我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。一旦你了解了解了基本原则,可以去看四人帮的那本圣经了。- Calanus
12. 《哥德尔、艾舍尔、巴赫书:集异璧之大成》
推荐数:437
如果下昂真正深入阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。他极为深入研究了程序员每日都要面对的问题:递归、验证、证明和布尔代数。这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是非常值得的。 – Jonik
13. 《代码整洁之道》
推荐数:329
虽然《代码整洁之道》和《代码大全》有很多共同之处,但它有更为简洁更为实际的清晰例子。 – Craig P. Motlin
14. 《Effective C++》和《More Effective C++》
推荐数:297
在我职业生涯早期,Scott Meyer的《Effective C++》和后续的《More Effective C++》都对我的编程能力有着直接影响。正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其他人可能要花费数年。
去年对我影响最大的一本书是《大教堂与市集》,该书教会我很有关开源开发过程如何运作,和如何处理我代码中的Bug。 – John Channing
15. 《编程珠玑》
推荐数:282
尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。 – Matt Warren
16. 《修改代码的艺术》by Michael Feathers
我认为没有任何一本书能向这本书一样影响了我的编程观点。它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。- Wolfbyte
同意。很多开发人员讨论用干净的石板来编写软件。但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy
17. 《编码:隐匿在计算机软硬件背后的语言》
我推荐Charles Petzold的《编码》。在这个充满工具和IDE的年代,很多复杂度已经从程序员那“抽取”走了,这本书一本开眼之作。 – hemil
18. 《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance》
对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。不管你做什么事,总是要力求完美,彻底了解你手中的工具和任务,更为重要的是,要有乐趣(因为如果你做事有乐趣,一切将自发引向更好的结果)。 – akr
(编注:关于这本书,也可以看看阮一峰的读后感。)
19. 《Peopleware / 人件集:人性化的软件开发》
Demarco 和 Lister 表明,软件开发中的首要问题是人,并非技术。他们的答案并不简单,只是令人难以置信的成功。第二版新增加了八章内容。 – Eduardo Molteni
20. 《Coders at Work / 编程人生》
一本非常有影响力的书,可以从中学到一些业界顶级人士的经验,了解他们如何思考并工作。 – Jahanzeb Farooq
21. 《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生!》
虽然这本书可能有点偏题,但不管你信不信,这本书曾在计算机科学专业课程的阅读列表之上。一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511
22. 《Effective Java 中文版》
此书第二版教你如何编写漂亮并高效的代码,虽然这是一本Java书,但其中有很多跨语言的理念。 – Marcio Aguiar
23. 《Patterns of Enterprise Application Architecture / 企业应用架构模式》
很奇怪,还没人推荐 Martin Fowler 的《企业应用架构模式》- levi rosol
24. 《The Little Schemer》和《The Seasoned Schemer》 nmiranda
这两本是LISP的英文书,尚无中文版。美国东北大学网站上也有电子版。
25. 《交互设计之路》英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》该书作者:Alan Cooper,人称Visual Basic之父,交互设计之父。
本书是基于众多商务案例,讲述如何创建更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。本书列举了很多真实可信的实际例子,说明目前在软件产品和基于软件的高科技产品中,普遍存在着“难用”的问题。作者认为,“难用”问题是由这些产品中存在着的高度“认知摩擦”引起的,而产生这个问题的根源在于现今软件开发过程中欠缺了一个为用户利益着想的前期“交互设计”阶段。“难用”的产品不仅损害了用户的利益,最终也将导致企业的失败。本书通过一些生动的实例,让人信服地讲述了由作者倡导的“目标导向”交互设计方法在解决“难用”问题方面的有效性,证实了只有改变现有观念,才能有效地在开发过程中引入交互设计,将产品的设计引向成功。
本书虽然是一本面向商务人员而编写的书,但也适合于所有参与软件产品和基于软件的高科技产品开发的专业人士,以及关心软件行业和高科技行业现状与发展的人士阅读。
他还有另一本中文版著作:《About Face 3 交互设计精髓》
26. 《Why’s (Poignant) Guide to Ruby 》
如果你不是程序员,阅读此书可能会很有趣,但如果你已经是个程序员,可能会有点乏味。
27.《Unix编程艺术》
It is useful regardless operating system you use. – J.F. Sebastian
不管你使用什么操作系统,这本书都很有用。 – J.F. Sebastian
28. 《Practices of an Agile Developer / 高效程序员的45个习惯:敏捷开发修炼之道》
45个习惯,分为7个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。
每一个具体的习惯里,一开始提出一个谬论,然后展开分析,之后有正队性地提出正确的做法,并设身处地地讲出了正确做法给你个人的“切身感受”,最后列出几条注意事项,帮助你修正自己的做法(“平衡的艺术”)。
29. 《Test-Driven Development by Example. / 测试驱动开发》
前面已经提到的很多书都启发了我,并影响了我,但这本书每位程序员都应该读。它向我展示了单元测试和TDD的重要性,并让我很快上手。 – Curro
我不关心你的代码有多好或优雅。如果你没有测试,你或许就如同没有编写代码。这本书得到的推荐数应该更高些。人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但如果你的软件有一堆bug,谈论那些东西毫无意义。– Adam Gent
30. 《Don’t Make Me Think / 点石成金:访客至上的网页设计秘笈》
取决于你所追求的目标。我喜欢《代码大全》是因纯编程,《点石成金》是一本有关UI设计的卓越书籍。 – Justin Standard
作者: zhangweiwen 来源: 博客园 发布时间: 2013-02-23 21:22 阅读: 16895 次 推荐: 43 原文链接 [收藏]
用Visual Studio等IDE写C#的Hello World非常简单,但脱离了IDE你能不能打印出Hello World呢?这不是说工作时脱离IDE,而是学习一下CLR的执行模型.
using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args) {
Console.WriteLine("Hello World!");
Console.ReadKey();
}
}
}

如无意外,将会编译出Hello.exe,能打印出Hello World。
CLR程序的执行过程大致分为两步,编译期和运行期,编译期过程大致如下图:
其中编译期逻辑上也可分为两步:
执行上面两步就可以得到一个XX.dll或XX.exe的程序集,就像上面的Hello.exe。
编译器如何知道要编译成托管模块还是资源文件?其实是必须明确告诉编译器每个文件的怎么编译,这个对应Visual Studio的文件属性的生成操作.
右击任何Visual Studio解决资源方案的文件–>属性–>生成操作:
指定Class1为嵌入的资源,用ILSpy查看会发现只是把Class1嵌入到程序集中,名称为:命名空间.文件名:
你甚至可以将一张图片设为编译让编译器试图去编译它,不过会报错。
上面生成了程序集,程序集内的是IL代码,它还不是可运行的代码。IL是与CPU无关的机器语言,直到程序集被调用,才会由JIT(Just-in-Time,实时)编译器编译为本机代码(CPU指令)。在运行时,CLR执行如下步骤:
程序集的可执行代码在需要的时候由JIT编译器编译,然后本机代码(CPU指令)就被缓存以备后来的程序中执行。一旦应用程序终止,编译好的本机代码也会被丢弃。
例如如果将上面的代码改为:
static void Main(string[] args) {
Console.WriteLine("Hello");
Console.WriteLine("World!");
Console.ReadKey();
}
第一个WriteLine需要先JIT编译,再执行。而由于已编译WriteLine的代码,所以第二个WriteLine会直接执行内存块中的代码,跳过JIT编译。
由于分配内存、JIT编译过程等,所以程序会在第一次运行时造成一些性能损失,写ASP.NET时这种感觉特变明显,按了F5会等很久才会显示首页。
下面模拟感受这个过程。用一大堆类延长内存分配的时间,参考这个文件HelloWorld.cs(博客园不支持txt格式):
再次运行命令:csc /out:Hello.exe HelloWorld.txt,得到Hello.exe,执行时发现有一定的延迟才会打印出Hello World。
使用.NET提供的NGen.exe,可以将IL代码编译成本机代码,可以解决上面的问题。NGen.exe有两个作用:
再次运行 Visual Studio 2008(2005,2010) 命令提示程序
运行如下命令:ngen install Hello.exe:

命令完成(在我的机器大概要10秒左右,到能再次输入命令才完成)后,运行Hello.exe会发现马上就能打印出Hello World,没有任何延迟。
参考:
CLR via C# 第3版
C#图解教程
作者: 张志敏 发布时间: 2014-11-24 11:45 阅读: 21325 次 推荐: 22 原文链接 [收藏]
OWIN 的全称是 “Open Web Interface for .NET”, OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口, 其目的是为了实现服务器与应用之间的解耦, 鼓励为 .NET Web 应用开发简单模块。
OWIN 是一个开源开放的标准, 有助于建设 .NET 开发的开源生态环境,OWIN 定义了如下几个概念:
服务器 (Server)
HTTP 服务器直接与客户端交互, 并用 OWIN 语义处理请求,服务器需要一个适配层将客户请求转换 成 OWIN 语义。 支持 OWIN 的服务器有 Katana 和 Nowin 。
Web 框架 (Web Framework)
构建在 OWIN 之上的自包含的独立组件, 向 Web 应用提供可用的对象模型或者接口。 Web 框架可 能需要一个适配层来转换 OWIN 语义。 支持 OWIN 的 Web 框架有:
Web 应用 (Web Application)
一个特定的 Web 应用, 通常构建在 Web 框架之上, 使用 OWIN 兼容的服务器运行。
中间件 (Middleware)
特定目的的服务器和应用之间的可插拔组件, 可以监视、 路由、 修改请求与响应。
宿主 (Host)
应用与服务器所在的进程, 主要负责应用的启动, 有些服务器自身也是宿主, 比如 Nowin 。
正如上面所说, OWIN 定义了 .NET Web 服务器与 .NET Web 应用之间的标准接口, 将应用与服务器 解耦, 使得便携式 .NET Web 应用以及跨平台的愿望成为现实, 标准的 OWIN 应用可以在任何 OWIN 兼容的服务器上运行, 不再依赖与 Windows 和 IIS 。
OWIN 通过 NuGet 包的形式发布, 获取和使用都非常方便。 下面就先建立一个最简单的 OWIN 应用:
打开 Xamarin Studio, 新建一个 C# 命令行程序, 如下图所示:

然后打开项目属性, 确认目标框架设置为 Mono/.NET 4.5 , 如下图所示:

向项目中添加如下几个 NuGet 包:
添加一个 OWIN Startup 类, 代码如下:
public class Startup {
public void Configuration(IAppBuilder appBuilder) {
appBuilder.Run(HandleRequest);
}
static Task HandleRequest(IOwinContext context) {
context.Response.ContentType = "text/plain";
return context.Response.WriteAsync("Hello, world!");
}
}
OWIN 约定的处理请求的代理类型是:
Func<IOWinContext, Task> handler
对应上面 Startup 类的 HandleRequest 方法, 所以上面的 Startup 类就定义了一个最简单的 OWIN 应用, 向客户端输出 Hello, World!
在自动生成的 Program.cs 文件中的 Main 方法中添加如下代码, 来启动 OWIN 应用:
class MainClass {
public static void Main(string[] args) {
var url = "http://localhost:8080/";
var startOpts = new StartOptions(url) {
};
using (WebApp.Start<Startup>(startOpts)) {
Console.WriteLine("Server run at " + url + " , press Enter to exit.");
Console.ReadLine();
}
}
}
现在开始运行程序, 命令行显示如下:

打开浏览器, 访问 http://localhost:8080/ , 得到的响应如下:

到目前为止, 没有 Windows , 更没有 IIS , OWIN 应用就能正常运行了。
StackOverflow 是一个 IT 技术问答网站,用户可以在网站上提交和回答问题。当下的 StackOverflow 已拥有 400 万个用户,4000 万个回答,月 PV5.6 亿,世界排行第 54。然而值得关注的是,支撑他们网站的全部服务器只有 25 台,并且都保持着非常低的资源使用率,这是一场高有效性、负载均衡、缓存、数据库、搜索及高效代码上的较量。近日,High Scalability 创始人 Todd Hoff 根据 Marco Cecconi 的演讲视频“ The architecture of StackOverflow”以及 Nick Craver 的博文“ What it takes to run Stack Overflow”总结了 StackOverflow 的成功原因。
意料之中,也是意料之外,Stack Overflow 仍然重度使用着微软的产品。他们认为既然微软的基础设施可以满足需求,又足够便宜,那么没有什么理由去做根本上的改变。而在需要的地方,他们同样使用了 Linux。究其根本,一切都是为了性能。
另一个值得关注的地方是,Stack Overflow 仍然使用着纵向扩展策略,没有使用云。他们使用了 384GB 的内存和 2TB 的 SSD 来支撑 SQL Servers,如果使用 AWS 的话,花费可想而知。没有使用云的另一个原因是 Stack Overflow 认为云会一定程度上的降低性能,同时也会给优化和排查系统问题增加难度。此外,他们的架构也并不需要横向扩展。峰值期间是横向扩展的杀手级应用场景,然而他们有着丰富的系统调整经验去应对。该公司仍然坚持着 Jeff Atwood 的名言——硬件永远比程序员便宜。
Marco Ceccon 曾提到,在谈及系统时,有一件事情必须首先弄明白——需要解决问题的类型。首先,从简单方面着手,StackExchange 究竟是用来做什么的——首先是一些主题,然后围绕这些主题建立社区,最后就形成了这个令人敬佩的问答网站。
其次则是规模相关。StackExchange 在飞速增长,需要处理大量的数据传输,那么这些都是如何完成的,特别是只使用了 25 台服务器,下面一起追根揭底:
状态
平台
UI
服务器
SSD
高可用性
数据库
编码
缓存
部署
协作
编制预算
测试
监视/日志
关于云
性能至上
学到的知识
1. 为什么使用 MS 产品的同时还使用 Redis?什么好用用什么,不要做无必要的系统之争,比如 C# 在 Windows 机器上运行最好,我们使用 IIS;Redis 在*nix 机器上可以得到充分发挥,我们使用*nix。
2. Overkill 即策略。平常的利用率并不能代表什么,当某些特定的事情发生时,比如备份、重建等完全可以将资源使用拉满。
3. 坚固的 SSD。所有数据库都建立在 SSD 之上,这样可以获得 0 延时。
4. 了解你的读写负载。
5. 高效的代码意味着更少的主机。只有新项目上线时才会因为特殊需求增加硬件,通常情况下是添加内存,但在此之外,高效的代码就意味着 0 硬件添加。所以经常只讨论两个问题:为存储增加新的 SSD;为新项目增加硬件。
6. 不要害怕定制化。SO 在 Tag 上使用复杂查询,因此专门开发了所需的 Tag Engine。
7. 只做必须做的事情。之所以不需要测试是因为有一个活跃的社区支撑,比如,开发者不用担心出现“Square Wheel”效应,如果开发者可以制作一个更更轻量级的组件,那就替代吧。
8. 注重硬件知识,比如 IL。一些代码使用 IL 而不是C#。聚焦 SQL 查询计划。使用 web server 的内存转储究竟做了些什么。探索,比如为什么一个 split 会产生 2GB 的垃圾。
9. 切勿官僚作风。总有一些新的工具是你需要的,比如,一个编辑器,新版本的 Visual Studio,降低提升过程中的一切阻力。
10. 垃圾回收驱动编程。SO 在减少垃圾回收成本上做了很多努力,跳过类似 TDD 的实践,避免抽象层,使用静态方法。虽然极端,但是确实打造出非常高效的代码。
11. 高效代码的价值远远超出你想象,它可以让硬件跑的更快,降低资源使用,切记让代码更容易被程序员理解。