脚踏实地,不要飘忽不定
脚踏实地,不要飘忽不定
前言:老老实实,扎扎实实,把基本动学好,不要动辄“架构”,“模式”。 很有段时间没有写博客了,不知道大家想我了没有!呵呵!
最近接触到了不少开发人员,有刚刚踏入IT的,也有刚刚毕业的,也有已经工作了好几年的,总是问我一些比较莫名其妙的问题:“如何培养抽象的思维?”,“如何学习架构?“等等诸如之类的问题。之所以说”莫名其妙“,是因为这些问题任谁也不好回答,看起来是个问题,其实等于没有问!
在后来和这些开发人员讨论的过程中,发现很多的基本都是“随大流,舍本逐末”。例如,认为ASP.NET就是拖控件,如果会开发自定义控件的,就算是牛X了。学了一点JQuery,越是网页中到处是JQuery,开始鄙视服务端控件。学了一点Ajax,所有的请求都是异步的了。学习了MVVM,就算是精通WPF,SL了。学习了.NET中的反射,不得了了:高级东西啊,到处用!学习了一点设计模式,于是认为“已经精通架构设计”,架构就是“设计模式”等。
有些朋友也认为“做网站“没有技术含量,我就随便问了几个问题,例如:如何一ASP.NET站点,并且全球的用户量不断增加,已经达到了日访问量上百万,以后还会增加,于是性能成为了很大的问题,如何解决?
1. 请求优化,开启多少TCP链接,是否DNS缓存,
2. 页面加载优化:页面资源加载策略(js,css,图片,都是各不相同的)
3. Web Farm负载均衡使用
a. 负载均衡的原理
4. IIS优化,例如数据压缩,IIS内核缓存。
5. 数据读取优化,例如采用缓存,减小数据库压力(可以提出分布式缓存问题)
6. 缓存的相关策略,例如缓存什么数据,缓存多长时间。
7. 数据库分压问题:
a. 如,什么时候需要采用数据群集技术,
b. 如何进行数据库读写分离,
c. 如何进行主动数据库之前的数据同步,
d. 如何对数据库进行水平拆分,
e. 如何对数据库进行垂直拆分。
有时候,只要反问一个简单问题,那些人基本就熄了:既然你精通ASP.NET,能不能把 从在浏览器中输入一个Url地址开发,到看到这个页面的输出,这其中涉及到的每个过程具体的描述一下?
到现在为止,还没有见过几个人能够把这个过程描述清楚的,很多人都是简单的描述:发送请求,IIS接受,ASP.NET 运行时处理,返回结果。稍微好点的还知道有个“页面生命周期”?如果问问“请求经过的管道处理周期”,基本就看不住了。如果随意在其中任意挑一个小细节问下去,很多人就开始打马虎眼了!
其实上面的问题,回答起来,是需要一定的功力的,从浏览器发送TCP请求,通过DNS寻找域名,然后“三次握手”,然后服务器开始处理,http.sys检测,IIS接受请求,加载ASP.NET运行时,然后为初始化Domain,读一些config,加载相应的权限等等。
很多时候就是这样,对技术,很多的开发人员都大体上知道是个什么东西,如果稍微深入细节一点,知道的人就很少了。一旦问了问题,或者在做设计的时候,考虑的往往就不周详,漏洞百出!其实有个体会“知道的越多,发现自己知道的越少”!“细节决定成败!”
也曾经告诉一些做.NET开发的朋友,把基本功能搞好(这里不是指的计算机学科的那些基本可能)。例如,知道程序集是什么东西,有什么组成,什么是清单,PE表头,知道一些IL的知识,了解一些垃圾回收的机制,了解什么是对象复苏,知道委托和事件是怎么做的,知道对象在哪里分配的等等。起码先把把语言关过了,再谈后面!
今天算是即兴发言!有机会大家一起探讨!