索引:html
.NET框架基础知识[1] - http://www.cnblogs.com/haoyifei/p/5643689.html前端
.NET框架基础知识[2] - http://www.cnblogs.com/haoyifei/p/5646288.html程序员
通过了四年的工做,我已经跳槽6次了。这四年我所有都使用C#进行开发,除了得到到的offer以外,还面试失败或拒掉了很多offer,加起来面试的次数至少有30次。这些面试有质量很高的,也有泛泛而谈的,不一样面试有时候还会问到几乎相同的问题,经过对问题的深刻程度,能够大体判断一家公司和面试官的水平。面试
跳槽就是为了更好的生活。而改善生活须要有强大的业务能力,说服面试官在众多候选人中选择你做为胜利者。在若干年的工做学习中,个人水平也慢慢上升,一开始是什么都不会,后来会一些东西,到如今也能够从面试官的问题中,大概了解到他/她的水平如何。算法
不一样类型的公司的面试题目也略有不一样,而这些题目要不表明着你面试经过以后可能在实际工做中遇到的问题,要么就是面试官但愿经过题目了解你我的的水平如何。例如Facebook,Google,BAT这种综合性公司在校招的时候,面对的都是应届大学生,他们没有什么可能会对搜索引擎十分专精,或者擅长天然语言语义分析。他们会的只是四年的大学计算机教育而已,面试完了以后,这些胜出者也不知道本身会去哪一个组作什么方向的工做。因此这时候,给他们出题也不能考搜索引擎,大数据,而只能考最general的内容,那无非就是计算机基础知识和算法了。shell
而社招大部分状况下,面试官但愿你第一天面试经过,次日就能上班,而且来之能战。因此这时候问题基本都是你未来工做可能会遇到的问题。面试官但愿你研究过这些问题,而且证实本身能作的比别人更好。固然,面试官也但愿你的基础知识水平牢固,不会在开发,部署,测试等基本流程上一问三不知。例如,我曾经面试过三家投行,他们都但愿面试者熟悉WPF或者Winform。因此,其中的两家问到了工做线程如何修改UI线程控件的内容这个经典问题。对于这个经典的情境,你不只须要知道若是是按照常规的方法处理会发生什么(UI线程控件的内容只能被拥有控件的线程修改),还要知道怎么解决(Winform使用委托,WPF使用Dispatcher)。并且,你还能够提,若是你的应用是ASP.NET Web Application,则你须要反其道而行之,使用ConfigureAwait强制令系统不进行任何线程的切换。若是面试官知道你在说什么,他/她必定会很开心。若是面试官表现的一脸懵比,你能够在心中为这家公司下降一个档次。数据库
当你回答问题时,若是你能够答的超乎面试官的意料,则他们给你开的工资可能也会出乎你的意料。例如,对于简单的问题“如何实现一个单例模式”,若是你只是给出了很简单的一个构造函数,则面试官可能会以为你对线程安全不够敏感(固然比较弱的面试官可能会很高兴) 。若是你加了双重锁检查,面试官会问你第一个if是作什么的。若是你也知道,而且还能够解释清楚,为何须要双重锁检查,面试官会以为很满意。若是你甚至还能够提一句,在不少依赖注入工具中,只须要一个函数就能保证对象在全局都是单例的,例如autofac就有这个功能。面试官将会很是爽,而后话题可能会转到ioc,或者谈谈天气。编程
外国人问问题有时候不按常理出牌(或者你能够理解为,外国人的常理就是那样)。我遇到过的比较有趣的问题有:说出你以为c#好的任意一个理由(我给出的答案是它的语法天然易懂,且比较优雅,背后编译器做的大量工做你能够不用知道。例证如lambda表达式和async与await关键字),为何c语言被命名为c,说出你自学某语言时看过的书籍,你最喜欢哪一种数据结构等。这些问题没有标准答案,你须要结合事例解释你的答案。对付这种问题,死记硬背是没有什么用的,你须要理解或者在背书的基础上,造成你本身的观点。小程序
在学习的过程当中,我泛泛阅读了若干本经典书籍,固然还有不少本正放在书架上供着,我可能一生也不会去看或者理解的了(例如“编译原理”)。我也看了不少博客,其中有大量现成的代码可供直接使用。我认为,做为一个立志奋发图强的.NET + C# 程序员,应该了解的知识包括:c#
上面这些若是你基本都会的八九不离十,你在任何一家公司均可以胜任一个后端程序员了。但若是你面试的职位还须要你写点API,以便让前端的哥们使用,那你还要粗浅的了解如下内容:
1. Web基础,包括五层模型,get和post的区别,http协议的一些状态码以及IIS的基本设定。对这个话题的深刻了解,能够搞一本计算机网络方面的书籍,里面有详细的关于五层模型,TCP和IP协议的细节。若是你不是应聘网络方面的专家级别职位,我不认为它们是十分必要的。固然,若是你立志成为这方面的专家,请遵循http://coolshell.cn/articles/4990.html
2. Web服务。Web服务具备悠久的历史,最经典的两种方式SOAP和Restful的区别要知道。另外,微软对于这两种方式都给出了本身的实现,即WCF和WebAPI。
3. 对MVC有必定的了解。了解如何利用工具,对你的API进行自动化或非自动化的集成测试。
4. OWIN。微软的OWIN帮助咱们从ASP.NET又臭又长的生命周期解脱出来,今后咱们能够定义本身的生命周期。新的ASP.NET Core中也是这样,生命周期已经成为历史。咱们要了解OWIN基本的工做方式,以及它如何和ioc工具进行配合。另外,经过OWIN,咱们的工程能够和IIS解耦,能够用其余的工具代替笨重的IIS。
5. 对于金融交易系统,须要特别关注一下SignalR。它集成了服务器和用户进行通信的几种方式,从常规的轮询,到服务器主动发送讯息,以及如今经常使用的WebSocket。它会根据状况自行选用它认为最合适的方式。
上面的内容并不包括前端,这是由于我以为全栈工程师十分不现实(由于前端的内容和后端几乎是同样多的,而光掌握后端的内容,也须要至少3-5年的时间),因此不打算朝这个方向努力,并且我对前端的了解也十分皮毛。固然,只会简单的HTML和jQuery,可不能称本身是一个合格的前端工程师。
在漫漫的学习过程当中,咱们不只要打牢基础,还要时刻关注新技术的动向。C# 6推出来一段时间了(虽然其中并无什么重大的改进),C# 7也立刻就要问世。ASP.NET Core的推出,把前端的打包和测试拉上了台面,同时令Angular JS 成为官方前端语言。对于后端来讲,也许你没有机会为公司贡献Angular JS代码,但把握住新技术的演进流程,也会对整个知识体系的融会贯通有重要的做用。
我已经写了很多笔记,虽然大部分都是抄别人的。我在这里也打算效仿博客园众位前辈,弄一个面试题系列,其中不彻底包含上述的全部内容,望各位大大不吝赐教。毕竟互相交流,人人都能受益。那么废话少说,咱们立刻开始。