左耳朵耗子|程序員練級(jí)寶典

月光博客6月12日發(fā)表了《寫給新手程序員的一封信》见间,翻譯自《An open letter to those who want to start programming》侣背,我的朋友(他在本站的id是Mailper)告訴我闷旧,他希望在酷殼上看到一篇更具操作性的文章吮蛹。因?yàn)樗彩窍矚g編程和技術(shù)的家伙最冰,于是萝毛,我讓他把他的一些學(xué)習(xí)Python和Web編程的一些點(diǎn)滴總結(jié)一下狸演。于是他給我發(fā)來了一些他的心得和經(jīng)歷言蛇,我在把他的心得做了不多的增改,并根據(jù)我的經(jīng)歷增加了“進(jìn)階”一節(jié)宵距。這是一篇由新手和我這個(gè)老家伙根據(jù)我們的經(jīng)歷完成的文章腊尚。

我的這個(gè)朋友把這篇文章取名叫Build Your Programming Technical Skills,我實(shí)在不知道用中文怎么翻譯满哪,但我在寫的過程中婿斥,我覺得這很像一個(gè)打網(wǎng)游做任務(wù)升級(jí)的一個(gè)過程,所以取名叫“技術(shù)練級(jí)攻略”哨鸭,題目有點(diǎn)大民宿,呵呵,這個(gè)標(biāo)題純粹是為了好玩像鸡。這里僅僅是在分享Mailper和我個(gè)人的學(xué)習(xí)經(jīng)歷笋籽。(注:省去了我作為一個(gè)初學(xué)者曾經(jīng)學(xué)習(xí)過的一些技術(shù)(今天明顯過時(shí)了),如:Delphi/Power builder偎血,也省去了我學(xué)過的一些我覺得沒意思的技術(shù)Lotus Notes/ActiveX/COM/ADO/ATL/.NET? ……)

前言

你是否覺得自己從學(xué)校畢業(yè)的時(shí)候只做過小玩具一樣的程序?走入職場(chǎng)后哪怕沒有什么經(jīng)驗(yàn)也可以把以下這些課外練習(xí)走一遍(朋友的抱怨:學(xué)校課程總是從理論出發(fā)着绷,作業(yè)項(xiàng)目都看不出有什么實(shí)際作用,不如從工作中的需求出發(fā))

建議:

不要亂買書锌云,不要亂追新技術(shù)新名詞荠医,基礎(chǔ)的東西經(jīng)過很長(zhǎng)時(shí)間積累而且還會(huì)在未來至少10年通用。

回顧一下歷史桑涎,看看歷史上時(shí)間線上技術(shù)的發(fā)展彬向,你才能明白明天會(huì)是什么樣。

一定要?jiǎng)邮止ダ洌硬还芏嗝春?jiǎn)單娃胆,建議至少自己手敲一遍看看是否理解了里頭的細(xì)枝末節(jié)。

一定要學(xué)會(huì)思考讲衫,思考為什么要這樣缕棵,而不是那樣。還要舉一反三地思考涉兽。

注:你也許會(huì)很奇怪為什么下面的東西很偏Unix/Linux,這是因?yàn)槲矣X得Windows下的編程可能會(huì)在未來很沒有前途篙程,原因如下:

現(xiàn)在的用戶界面幾乎被兩個(gè)東西主宰了枷畏,1)Web,2)移動(dòng)設(shè)備iOS或Android虱饿。Windows的圖形界面不吃香了拥诡。

越來越多的企業(yè)在用成本低性能高的Linux和各種開源技術(shù)來構(gòu)架其系統(tǒng),Windows的成本太高了氮发。

微軟的東西變得太快了渴肉,很不持久,他們完全是在玩弄程序員爽冕。詳情參見《Windows編程革命史》

所以仇祭,我個(gè)人認(rèn)為以后的趨勢(shì)是前端是Web+移動(dòng),后端是Linux+開源颈畸。開發(fā)這邊基本上沒Windows什么事乌奇。

啟蒙入門

1、 學(xué)習(xí)一門腳本語言眯娱,例如Python/Ruby

可以讓你擺脫對(duì)底層語言的恐懼感礁苗,腳本語言可以讓你很快開發(fā)出能用得上的小程序。實(shí)踐項(xiàng)目:

處理文本文件徙缴,或者csv (關(guān)鍵詞 python csv, python open, python sys) 讀一個(gè)本地文件试伙,逐行處理(例如 word count,或者處理log)

遍歷本地文件系統(tǒng) (sys, os, path),例如寫一個(gè)程序統(tǒng)計(jì)一個(gè)目錄下所有文件大小并按各種條件排序并保存結(jié)果

跟數(shù)據(jù)庫(kù)打交道 (python sqlite)疏叨,寫一個(gè)小腳本統(tǒng)計(jì)數(shù)據(jù)庫(kù)里條目數(shù)量

學(xué)會(huì)用各種print之類簡(jiǎn)單粗暴的方式進(jìn)行調(diào)試

學(xué)會(huì)用Google (phrase, domain, use reader to follow tech blogs)

為什么要學(xué)腳本語言吱抚,因?yàn)樗麄儗?shí)在是太方便了,很多時(shí)候我們需要寫點(diǎn)小工具或是腳本來幫我們解決問題考廉,你就會(huì)發(fā)現(xiàn)正規(guī)的編程語言太難用了秘豹。

2、 用熟一種程序員的編輯器(不是IDE) 和一些基本工具

Vim / Emacs / Notepad++昌粤,學(xué)會(huì)如何配置代碼補(bǔ)全既绕,外觀,外部命令等涮坐。

Source Insight (或 ctag)

使用這些東西不是為了Cool凄贩,而是這些編輯器在查看、修改代碼/配置文章/日志會(huì)更快更有效率袱讹。

3疲扎、 熟悉Unix/Linux Shell和常見的命令行

如果你用windows,至少學(xué)會(huì)用虛擬機(jī)里的linux捷雕, vmware player是免費(fèi)的椒丧,裝個(gè)Ubuntu吧

一定要少用少用圖形界面。

學(xué)會(huì)使用man來查看幫助

文件系統(tǒng)結(jié)構(gòu)和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …

學(xué)會(huì)使用一些文本操作命令 sed/awk/grep/tail/less/more …

學(xué)會(huì)使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…

了解/etc目錄下的各種配置文章救巷,學(xué)會(huì)查看/var/log下的系統(tǒng)日志壶熏,以及/proc下的系統(tǒng)運(yùn)行信息

了解正則表達(dá)式,使用正則表達(dá)式來查找文件浦译。

對(duì)于程序員來說Unix/Linux比Windows簡(jiǎn)單多了棒假。(參看我四年前CSDN的博文《其實(shí)Unix很簡(jiǎn)單》)學(xué)會(huì)使用Unix/Linux你會(huì)發(fā)現(xiàn)圖形界面在某些時(shí)候?qū)嵲谑翘y用了,相當(dāng)?shù)叵喈?dāng)?shù)亟档凸ぷ餍省?/p>

4精盅、 學(xué)習(xí)Web基礎(chǔ)(HTML/CSS/JS) + 服務(wù)器端技術(shù) (LAMP)

未來必然是Web的世界帽哑,學(xué)習(xí)WEB基礎(chǔ)的最佳網(wǎng)站是W3School。

學(xué)習(xí)HTML基本語法

學(xué)習(xí)CSS如何選中HTML元素并應(yīng)用一些基本樣式(關(guān)鍵詞:box model)

學(xué)會(huì)用 ?Firefox + Firebug 或 chrome 查看你覺得很炫的網(wǎng)頁結(jié)構(gòu)叹俏,并動(dòng)態(tài)修改妻枕。

學(xué)習(xí)使用Javascript操縱HTML元件。理解DOM和動(dòng)態(tài)網(wǎng)頁(http://oreilly.com/catalog/9780596527402) 網(wǎng)上有免費(fèi)的章節(jié)她肯,足夠用了佳头。或參看 DOM 晴氨。

學(xué)會(huì)用 ?Firefox + Firebug 或 chrome 調(diào)試Javascript代碼(設(shè)置斷點(diǎn)康嘉,查看變量,性能籽前,控制臺(tái)等)

在一臺(tái)機(jī)器上配置Apache 或 Nginx

學(xué)習(xí)PHP亭珍,讓后臺(tái)PHP和前臺(tái)HTML進(jìn)行數(shù)據(jù)交互敷钾,對(duì)服務(wù)器相應(yīng)瀏覽器請(qǐng)求形成初步認(rèn)識(shí)。實(shí)現(xiàn)一個(gè)表單提交和反顯的功能肄梨。

把PHP連接本地或者遠(yuǎn)程數(shù)據(jù)庫(kù) MySQL(MySQL 和 SQL現(xiàn)學(xué)現(xiàn)用夠了)

跟完一個(gè)名校的網(wǎng)絡(luò)編程課程(例如:http://www.stanford.edu/~ouster/cgi-bin/cs142-fall10/index.php ) 不要覺得需要多于一學(xué)期時(shí)間阻荒,大學(xué)生是全職一學(xué)期選3-5門課,

你業(yè)余時(shí)間一定可以跟上

學(xué)習(xí)一個(gè)javascript庫(kù)(例如jQuery 或 ExtJS)+ ?Ajax (異步讀入一個(gè)服務(wù)器端圖片或者數(shù)據(jù)庫(kù)內(nèi)容)+JSON數(shù)據(jù)格式众羡。

HTTP: The Definitive Guide 讀完前4章你就明白你每天上網(wǎng)用瀏覽器的時(shí)候發(fā)生的事情了(proxy, gateway, browsers)

做個(gè)小網(wǎng)站(例如:一個(gè)小的留言板侨赡,支持用戶登錄,Cookie/Session粱侣,增羊壹、刪、改齐婴、查油猫,上傳圖片附件,分頁顯示)

買個(gè)域名柠偶,租個(gè)空間情妖,做個(gè)自己的網(wǎng)站。

進(jìn)階加深

1诱担、 C語言和操作系統(tǒng)調(diào)用

重新學(xué)C語言毡证,理解指針和內(nèi)存模型,用C語言實(shí)現(xiàn)一下各種經(jīng)典的算法和數(shù)據(jù)結(jié)構(gòu)该肴。推薦《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》情竹、《算法導(dǎo)論》和《編程珠璣》。

學(xué)習(xí)(麻省理工免費(fèi)課程)計(jì)算機(jī)科學(xué)和編程導(dǎo)論

學(xué)習(xí)(麻省理工免費(fèi)課程)C語言內(nèi)存管理

學(xué)習(xí)Unix/Linux系統(tǒng)調(diào)用(Unix高級(jí)環(huán)境編程)匀哄,,了解系統(tǒng)層面的東西雏蛮。

用這些系統(tǒng)知識(shí)操作一下文件系統(tǒng)涎嚼,用戶(實(shí)現(xiàn)一個(gè)可以拷貝目錄樹的小程序)

用fork/wait/waitpid寫一個(gè)多進(jìn)程的程序,用pthread寫一個(gè)多線程帶同步或互斥的程序挑秉。多進(jìn)程多進(jìn)程購(gòu)票的程序法梯。

用signal/kill/raise/alarm/pause/sigprocmask實(shí)現(xiàn)一個(gè)多進(jìn)程間的信號(hào)量通信的程序。

學(xué)會(huì)使用gcc和gdb來編程和調(diào)試程序(參看我的《用gdb調(diào)試程序》)

學(xué)會(huì)使用makefile來編譯程序犀概。(參看我的《跟我一起寫makefile》)

IPC和Socket的東西可以放到高級(jí)中來實(shí)踐立哑。

學(xué)習(xí)Windows SDK編程(Windows 程序設(shè)計(jì) ,MFC程序設(shè)計(jì))

寫一個(gè)窗口姻灶,了解WinMain/WinProcedure铛绰,以及Windows的消息機(jī)制。

寫一些程序來操作Windows SDK中的資源文件或是各種圖形控件产喉,以及作圖的編程捂掰。

學(xué)習(xí)如何使用MSDN查看相關(guān)的SDK函數(shù)敢会,各種WM_消息以及一些例程。

這本書中有很多例程这嚣,在實(shí)踐中請(qǐng)不要照抄鸥昏,試著自己寫一個(gè)自己的例程。

不用太多于精通這些東西姐帚,因?yàn)镚UI正在被Web取代吏垮,主要是了解一下Windows 圖形界面的編程。@virushuo 說:“ 我覺得GUI確實(shí)不那么熱門了罐旗,但充分理解GUI工作原理是很重要的膳汪。包括移動(dòng)設(shè)備開發(fā),如果沒有基礎(chǔ)知識(shí)仍然很吃力尤莺÷梅螅或者說移動(dòng)設(shè)備開發(fā)必須理解GUI工作,或者在win那邊學(xué)颤霎,或者在mac/iOS上學(xué)”媳谁。

2、學(xué)習(xí)Java

Java 的學(xué)習(xí)主要是看經(jīng)典的Core Java 《Java 核心技術(shù)編程》和《Java編程思想》(有兩卷友酱,我僅鏈了第一卷晴音,足夠了,因?yàn)镴ava的圖形界面了解就可以了)

學(xué)習(xí)JDK缔杉,學(xué)會(huì)查閱Java API Doc http://download.oracle.com/javase/6/docs/api/

了解一下Java這種虛擬機(jī)語言和C和Python語言在編譯和執(zhí)行上的差別锤躁。從C、Java或详、Python思考一下“跨平臺(tái)”這種技術(shù)系羞。

學(xué)會(huì)使用IDE Eclipse,使用Eclipse 編譯霸琴,調(diào)試和開發(fā)Java程序椒振。

建一個(gè)Tomcat的網(wǎng)站,嘗試一下JSP/Servlet/JDBC/MySQL的Web開發(fā)梧乘。把前面所說的那個(gè)PHP的小項(xiàng)目試著用JSP和Servlet實(shí)現(xiàn)一下澎迎。

3、Web的安全與架構(gòu)

學(xué)習(xí)HTML5选调,網(wǎng)上有很多很多教程夹供,以前酷殼也介紹過很多,我在這里就不羅列了仁堪。

學(xué)習(xí)Web開發(fā)的安全問題(參考新浪微博被攻擊的這個(gè)事哮洽,以及Ruby的這篇文章)

學(xué)習(xí)HTTP Server的rewrite機(jī)制,Nginx的反向代理機(jī)制枝笨,fast-cgi(如:PHP-FPM)

學(xué)習(xí)Web的靜態(tài)頁面緩存技術(shù)袁铐。

學(xué)習(xí)Web的異步工作流處理揭蜒,數(shù)據(jù)Cache,數(shù)據(jù)分區(qū)剔桨,負(fù)載均衡屉更,水平擴(kuò)展的構(gòu)架。

實(shí)踐任務(wù):

使用HTML5的canvas 制作一些Web動(dòng)畫洒缀。

嘗試在前面開發(fā)過的那個(gè)Web應(yīng)用中進(jìn)行SQL注入瑰谜,JS注入,以及XSS攻擊树绩。

把前面開發(fā)過的那個(gè)Web應(yīng)用改成構(gòu)造在Nginx + PHP-FPM + 靜態(tài)頁面緩存的網(wǎng)站

4萨脑、學(xué)習(xí)關(guān)系型數(shù)據(jù)庫(kù)

你可以安裝MSSQLServer或MySQL來學(xué)習(xí)數(shù)據(jù)庫(kù)。

學(xué)習(xí)教科書里數(shù)據(jù)庫(kù)設(shè)計(jì)的那幾個(gè)范式饺饭,1NF渤早,2NF,3NF瘫俊,……

學(xué)習(xí)數(shù)據(jù)庫(kù)的存過鹊杖,觸發(fā)器,視圖扛芽,建索引骂蓖,游標(biāo)等。

學(xué)習(xí)SQL語句川尖,明白表連接的各種概念(參看《SQL ?Join的圖示》)

學(xué)習(xí)如何優(yōu)化數(shù)據(jù)庫(kù)查詢(參看《MySQL的優(yōu)化》)

實(shí)踐任務(wù):設(shè)計(jì)一個(gè)論壇的數(shù)據(jù)庫(kù)登下,至少滿足3NF,使用SQL語句查詢本周叮喳,本月的最新文章被芳,評(píng)論最多的文章,最活躍用戶馍悟。

5筐钟、一些開發(fā)工具

學(xué)會(huì)使用SVN或Git來管理程序版本。

學(xué)會(huì)使用JUnit來對(duì)Java進(jìn)行單元測(cè)試赋朦。

學(xué)習(xí)C語言和Java語言的coding standard 或 coding guideline。(我N年前寫過一篇關(guān)C語言非常簡(jiǎn)單的文章——《編程修養(yǎng)》李破,這樣的東西你可以上網(wǎng)查一下宠哄,一大堆)。

推薦閱讀《代碼大全》《重構(gòu)》《代碼整潔之道》

高級(jí)深入

1嗤攻、C++ / Java 和面向?qū)ο?/p>

我個(gè)人以為學(xué)好C++毛嫉,Java也就是舉手之勞。但是C++的學(xué)習(xí)曲線相當(dāng)?shù)亩父玖狻2贿^承粤,我覺得C++是最需要學(xué)好的語言了暴区。參看兩篇趣文“C++學(xué)習(xí)信心圖” 和“21天學(xué)好C++”

學(xué)習(xí)(麻省理工免費(fèi)課程)C++面向?qū)ο缶幊?/p>

讀我的 “如何學(xué)好C++”中所推薦的那些書至少兩遍以上(如果你對(duì)C++的理解能夠深入到像我所寫的《C++虛函數(shù)表解析》或是《C++對(duì)象內(nèi)存存局(上)(下)》,或是《C/C++返回內(nèi)部靜態(tài)成員的陷阱》那就非常不錯(cuò)了)

然后反思為什么C++要干成這樣辛臊,Java則不是仙粱?你一定要學(xué)會(huì)對(duì)比C++和Java的不同。比如彻舰,Java中的初始化伐割,垃圾回收,接口刃唤,異常隔心,虛函數(shù),等等尚胞。

實(shí)踐任務(wù):

用C++實(shí)現(xiàn)一個(gè)BigInt硬霍,支持128位的整形的加減乘除的操作。

用C++封裝一個(gè)數(shù)據(jù)結(jié)構(gòu)的容量笼裳,比如hash table唯卖。

用C++封裝并實(shí)現(xiàn)一個(gè)智能指針(一定要使用模板)。

《設(shè)計(jì)模式》必需一讀侍咱,兩遍以上耐床,思考一下,這23個(gè)模式的應(yīng)用場(chǎng)景楔脯。主要是兩點(diǎn):1)鐘愛組合而不是繼承撩轰,2)鐘愛接口而不是實(shí)現(xiàn)。(也推薦《深入淺出設(shè)計(jì)模式》)

實(shí)踐任務(wù):

使用工廠模式實(shí)現(xiàn)一個(gè)內(nèi)存池昧廷。

使用策略模式制做一個(gè)類其可以把文本文件進(jìn)行左對(duì)齊堪嫂,右對(duì)齊和中對(duì)齊。

使用命令模式實(shí)現(xiàn)一個(gè)命令行計(jì)算器木柬,并支持undo和redo皆串。

使用修飾模式實(shí)現(xiàn)一個(gè)酒店的房間價(jià)格訂價(jià)策略——旺季,服務(wù)眉枕,VIP恶复、旅行團(tuán)、等影響價(jià)格的因素速挑。

學(xué)習(xí)STL的用法和其設(shè)計(jì)概念 ?- 容器谤牡,算法,迭代器姥宝,函數(shù)子翅萤。如果可能,請(qǐng)讀一下其源碼腊满。

實(shí)踐任務(wù):嘗試使用面向?qū)ο筇酌础TL培己,設(shè)計(jì)模式、和WindowsSDK圖形編程的各種技能

做一個(gè)貪吃蛇或是俄羅斯方塊的游戲胚泌。支持不同的級(jí)別和難度省咨。

做一個(gè)文件瀏覽器,可以瀏覽目錄下的文件诸迟,并可以對(duì)不同的文件有不同的操作茸炒,文本文件可以打開編輯,執(zhí)行文件則執(zhí)行之阵苇,mp3或avi文件可以播放壁公,圖片文件可以展示圖片。

學(xué)習(xí)C++的一些類庫(kù)的設(shè)計(jì)绅项,如: MFC(看看候捷老師的《深入淺出MFC》) 紊册,Boost, ACE, ?CPPUnit,STL (STL可能會(huì)太難了快耿,但是如果你能了解其中的設(shè)計(jì)模式和設(shè)計(jì)那就太

好了囊陡,如果你能深入到我寫的《STL string類的寫時(shí)拷貝技術(shù)》那就非常不錯(cuò)了,ACE需要很強(qiáng)在的系統(tǒng)知識(shí)掀亥,參見后面的“加強(qiáng)對(duì)系統(tǒng)的了解”)

Java是真正的面向?qū)ο蟮恼Z言撞反,Java的設(shè)計(jì)模式多得不能再多,也是用來學(xué)習(xí)面向?qū)ο蟮脑O(shè)計(jì)模式的最佳語言了(參看Java中的設(shè)計(jì)模式)搪花。

推薦閱讀《Effective Java》 and 《Java解惑》

學(xué)習(xí)Java的框架遏片,Java的框架也是多,如Spring, Hibernate撮竿,Struts 等等吮便,主要是學(xué)習(xí)Java的設(shè)計(jì),如IoC等幢踏。

Java的技術(shù)也是爛多髓需,重點(diǎn)學(xué)習(xí)J2EE架構(gòu)以及JMS, RMI, 等消息傳遞和遠(yuǎn)程調(diào)用的技術(shù)房蝉。

學(xué)習(xí)使用Java做Web Service (官方教程在這里)

實(shí)踐任務(wù): 嘗試在Spring或Hibernate框架下構(gòu)建一個(gè)有網(wǎng)絡(luò)的Web Service的遠(yuǎn)程調(diào)用程序僚匆,并可以在兩個(gè)Service中通過JMS傳遞消息。

C++和Java都不是能在短時(shí)間內(nèi)能學(xué)好的搭幻,C++玩是的深白热,Java玩的是廣,我建議兩者選一個(gè)粗卜。我個(gè)人的學(xué)習(xí)經(jīng)歷是:

深究C++(我深究C/C++了十來年了)

學(xué)習(xí)Java的各種設(shè)計(jì)模式。

2纳击、加強(qiáng)系統(tǒng)了解

重要閱讀下面的幾本書:

《Unix編程藝術(shù)》了解Unix系統(tǒng)領(lǐng)域中的設(shè)計(jì)和開發(fā)哲學(xué)续扔、思想文化體系攻臀、原則與經(jīng)驗(yàn)。你一定會(huì)有一種醍醐灌頂?shù)母杏X纱昧。

《Unix網(wǎng)絡(luò)編程卷1刨啸,套接字》這是一本看完你就明白網(wǎng)絡(luò)編程的書。重要注意TCP识脆、UDP设联,以及多路復(fù)用的系統(tǒng)調(diào)用select/poll/epoll的差別。

《TCP/IP詳解 卷1:協(xié)議》- 這是一本看完后你就可以當(dāng)網(wǎng)絡(luò)黑客的書灼捂。了解以太網(wǎng)的的運(yùn)作原理离例,了解TCP/IP的協(xié)議,運(yùn)作原理以及如何TCP的調(diào)優(yōu)悉稠。

實(shí)踐任務(wù):

理解什么是阻塞(同步IO)宫蛆,非阻塞(異步IO),多路復(fù)用(select, poll, epoll)的IO技術(shù)的猛。

寫一個(gè)網(wǎng)絡(luò)聊天程序耀盗,有聊天服務(wù)器和多個(gè)聊天客戶端(服務(wù)端用UDP對(duì)部分或所有的的聊天客戶端進(jìn)Multicast或Broadcast)。

寫一個(gè)簡(jiǎn)易的HTTP服務(wù)器卦尊。

《Unix網(wǎng)絡(luò)編程卷2叛拷,進(jìn)程間通信》信號(hào)量,管道岂却,共享內(nèi)存忿薇,消息等各種IPC…… 這些技術(shù)好像有點(diǎn)老掉牙了,不過還是值得了解淌友。

實(shí)踐任務(wù):

主要實(shí)踐各種IPC進(jìn)程序通信的方法煌恢。

嘗試寫一個(gè)管道程序,父子進(jìn)程通過管道交換數(shù)據(jù)震庭。

嘗試寫一個(gè)共享內(nèi)存的程序瑰抵,兩個(gè)進(jìn)程通過共享內(nèi)存交換一個(gè)C的結(jié)構(gòu)體數(shù)組。

學(xué)習(xí)《Windows核心編程》一書器联。把CreateProcess二汛,Windows線程、線程調(diào)度拨拓、線程同步(Event, ?信號(hào)量肴颊,互斥量)、異步I/O渣磷,內(nèi)存管理婿着,DLL,這幾大塊搞精通。

實(shí)踐任務(wù):使用CreateProcess啟動(dòng)一個(gè)記事本或IE竟宋,并監(jiān)控該程序的運(yùn)行提完。把前面寫過的那個(gè)簡(jiǎn)易的HTTP服務(wù)用線程池實(shí)現(xiàn)一下。寫一個(gè)DLL的鉤子程序監(jiān)控指定窗口的關(guān)閉事件丘侠,或是記錄某個(gè)窗口的按鍵徒欣。

有了多線程、多進(jìn)程通信蜗字,TCP/IP打肝,套接字,C++和設(shè)計(jì)模式的基本挪捕,你可以研究一下ACE了粗梭。使用ACE重寫上述的聊天程序和HTTP服務(wù)器(帶線程池)

實(shí)踐任務(wù):通過以上的所有知識(shí),嘗試

寫一個(gè)服務(wù)端給客戶端傳大文件担神,要求把100M的帶寬用到80%以上楼吃。(注意,磁盤I/O和網(wǎng)絡(luò)I/O可能會(huì)很有問題妄讯,想一想怎么解決孩锡,另外,請(qǐng)注意網(wǎng)絡(luò)傳輸最大單元MTU)

了解BT下載的工作原理亥贸,用多進(jìn)程的方式模擬BT下載的原理躬窜。

3、系統(tǒng)架構(gòu)

負(fù)載均衡炕置。HASH式的荣挨,純動(dòng)態(tài)式的。(可以到Google學(xué)術(shù)里搜一些關(guān)于負(fù)載均衡的文章讀讀)

多層分布式系統(tǒng) – 客戶端服務(wù)結(jié)點(diǎn)層朴摊、計(jì)算結(jié)點(diǎn)層默垄、數(shù)據(jù)cache層,數(shù)據(jù)層甚纲。J2EE是經(jīng)典的多層結(jié)構(gòu)口锭。

CDN系統(tǒng) – 就近訪問,內(nèi)容邊緣化介杆。

P2P式系統(tǒng)鹃操,研究一下BT和電驢的算法。比如:DHT算法春哨。

服務(wù)器備份荆隘,雙機(jī)備份系統(tǒng)(Live-Standby和Live-Live系統(tǒng)),兩臺(tái)機(jī)器如何通過心跳監(jiān)測(cè)對(duì)方赴背?集群主結(jié)點(diǎn)備份椰拒。

虛擬化技術(shù)晶渠,使用這個(gè)技術(shù),可以把操作系統(tǒng)當(dāng)應(yīng)用程序一下切換或重新配置和部署耸三。

學(xué)習(xí)Thrift乱陡,二進(jìn)制的高性能的通訊中間件,支持?jǐn)?shù)據(jù)(對(duì)象)序列化和多種類型的RPC服務(wù)仪壮。

學(xué)習(xí)Hadoop。Hadoop框架中最核心的設(shè)計(jì)就是:MapReduce和HDFS胳徽。MapReduce的思想是由Google的一篇論文所提及而被廣為流傳的积锅,簡(jiǎn)單的一句話解釋MapReduce就是“任務(wù)的分解與結(jié)果的匯總”。HDFS是Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System)的縮寫养盗,為分布式計(jì)算存儲(chǔ)提供了底層支持缚陷。

了解NoSQL數(shù)據(jù)庫(kù)(有人說可能是一個(gè)過渡炒作的技術(shù)),不過因?yàn)槌笠?guī)模以及高并發(fā)的純動(dòng)態(tài)型網(wǎng)站日漸成為主流往核,而SNS類網(wǎng)站在數(shù)據(jù)存取過程中有著實(shí)時(shí)性等剛性需求箫爷,這使得目前NoSQL數(shù)據(jù)庫(kù)慢慢成了人們所關(guān)注的焦點(diǎn),并大有成為取代關(guān)系型數(shù)據(jù)庫(kù)而成為未來主流數(shù)據(jù)存儲(chǔ)模式的趨勢(shì)聂儒。當(dāng)前NoSQL數(shù)據(jù)庫(kù)很多虎锚,大部分都是開源的,其中比較知名的有:MemcacheDB衩婚、Redis窜护、Tokyo Cabinet(升級(jí)版為Kyoto Cabinet)、Flare非春、MongoDB柱徙、CouchDB、Cassandra奇昙、Voldemort等护侮。

寫了那么多,回顧一下储耐,覺得自己相當(dāng)?shù)挠谐删透醒虺酢OM蠹也灰獓樦易约哼@十來年也在不斷地學(xué)習(xí)弧岳,今天我也在學(xué)習(xí)中凳忙,人生本來就是一個(gè)不斷學(xué)習(xí)和練級(jí)的過程。不過禽炬,一定有漏的涧卵,也有不對(duì)的,還希望大家補(bǔ)充和更正腹尖。(我會(huì)根據(jù)大家的反饋隨時(shí)更新此文)歡迎大家通過我的微博(@左耳朵耗子)和twitter(@haoel)和我交流柳恐。

—– 更新 ?2011/07/19 —–

1)有朋友奇怪為什么我在這篇文章開頭說了web+移動(dòng),卻沒有在后面提到iOS/Android的前端開發(fā)。因?yàn)槲倚睦镉幸环N感覺乐设,移動(dòng)設(shè)備上的UI最終也會(huì)被Javascript取代讼庇。大家可以用iPhone或Android看看google+,你就會(huì)明白了近尚。

2)有朋友說我這里的東西太多了蠕啄,不能為了學(xué)習(xí)而學(xué)習(xí),我非常同意戈锻。我在文章的前面也說了要思考歼跟。另外,千萬不要以為我說的這些東西是一些新的技術(shù)格遭,這份攻略里95%以上的全是基礎(chǔ)哈街。而且都是久經(jīng)考驗(yàn)的基礎(chǔ)技術(shù)。即是可以讓你一通百通的技術(shù)拒迅,也是可以讓你找到一份不錯(cuò)工作的技術(shù)骚秦。

3)有朋友說學(xué)這些東西學(xué)完都40了,還不如想想怎么去掙錢璧微。我想告訴大家作箍,一是我今年還沒有40歲,二是學(xué)無止境啊往毡,三是我不覺得掙錢有多難蒙揣,難的是怎么讓你值那么多錢?

無論是打工還是創(chuàng)業(yè)开瞭,是什么東西讓你自己的價(jià)值懒震,讓你公司的價(jià)值更值錢?別的地方我不敢說嗤详,對(duì)于互聯(lián)網(wǎng)或IT公司來說个扰,技術(shù)實(shí)力絕對(duì)是其中之一。

4)有朋友說技術(shù)都是工具葱色,不應(yīng)該如此癡迷這句話沒有錯(cuò)递宅,有時(shí)候我們需要更多的是抬起頭來看看技術(shù)以外的事情,或者是說我們?cè)谧骷夹g(shù)的時(shí)候不去思考為什么會(huì)有這個(gè)技術(shù)苍狰,為什么不是別的办龄,問題不在于技術(shù),問題在于我們死讀書淋昭,讀死書俐填,成了技術(shù)的書呆子。

5) 對(duì)于NoSQL翔忽,最近比較火英融,但我對(duì)其有點(diǎn)保守盏檐,所以,我只是說了解就可以驶悟。對(duì)于Hadoop胡野,我覺得其在分布式系統(tǒng)上有巨大的潛力,所以需要學(xué)習(xí)痕鳍。 對(duì)于關(guān)系型數(shù)據(jù)庫(kù)硫豆,的確是很重要的東西,這點(diǎn)是我的疏忽笼呆,在原文里補(bǔ)充够庙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抄邀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昼榛,老刑警劉巖境肾,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胆屿,居然都是意外死亡奥喻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門非迹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來环鲤,“玉大人,你說我怎么就攤上這事憎兽±淅耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵纯命,是天一觀的道長(zhǎng)西剥。 經(jīng)常有香客問我,道長(zhǎng)亿汞,這世上最難降的妖魔是什么瞭空? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮疗我,結(jié)果婚禮上咆畏,老公的妹妹穿的比我還像新娘。我一直安慰自己吴裤,他們只是感情好旧找,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嚼摩,像睡著了一般钦讳。 火紅的嫁衣襯著肌膚如雪矿瘦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天愿卒,我揣著相機(jī)與錄音缚去,去河邊找鬼。 笑死琼开,一個(gè)胖子當(dāng)著我的面吹牛易结,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柜候,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼搞动,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了渣刷?” 一聲冷哼從身側(cè)響起鹦肿,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辅柴,沒想到半個(gè)月后箩溃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碌嘀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年涣旨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片股冗。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡霹陡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出止状,到底是詐尸還是另有隱情烹棉,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布导俘,位于F島的核電站峦耘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏旅薄。R本人自食惡果不足惜辅髓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望少梁。 院中可真熱鬧洛口,春花似錦、人聲如沸凯沪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妨马。三九已至挺举,卻和暖如春杀赢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背湘纵。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工脂崔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梧喷。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓砌左,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親铺敌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汇歹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 本文把程序員所需掌握的關(guān)鍵知識(shí)總結(jié)為三大類19個(gè)關(guān)鍵概念,然后給出了掌握每個(gè)關(guān)鍵概念所需的入門書籍偿凭,必讀書籍产弹,以及...
    dle_oxio閱讀 11,124評(píng)論 6 244
  • 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文鏈接:http://lucida.me...
    那一天_9446閱讀 3,253評(píng)論 4 81
  • 前言:程序員工作兩三年后,基本上都會(huì)考慮自己的未來發(fā)展方向弯囊。發(fā)展的路徑不外乎:程序員-系統(tǒng)分析員-架構(gòu)師-技術(shù)經(jīng)理...
    yangfei02821閱讀 974評(píng)論 0 6
  • 本系列文章所描述的所有類或接口都是基于 JDK 1.7的源碼取视,在其它 JDK 的實(shí)現(xiàn)方式中可能會(huì)有所不同。 一常挚、實(shí)...
    FlySheep_ly閱讀 593評(píng)論 0 0
  • 幸福的旁邊閱讀 2,608評(píng)論 5 5