天天看點

腳踏實地,不要飄忽不定

前言:老老實實,紮紮實實,把基本動學好,不要動辄“架構”,“模式”。 很有段時間沒有寫部落格了,不知道大家想我了沒有!呵呵!

      最近接觸到了不少開發人員,有剛剛踏入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的知識,了解一些垃圾回收的機制,了解什麼是對象複蘇,知道委托和事件是怎麼做的,知道對象在哪裡配置設定的等等。起碼先把把語言關過了,再談後面!

    今天算是即興發言!有機會大家一起探讨!

繼續閱讀