• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            A Za, A Za, Fighting...

            堅(jiān)信:勤能補(bǔ)拙

            程序員技術(shù)練級(jí)攻略

            來(lái)源: http://coolshell.cn/articles/4990.html


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

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

            前言

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

            建議:

            • 不要亂買(mǎi)書(shū),不要亂追新技術(shù)新名詞,基礎(chǔ)的東西經(jīng)過(guò)很長(zhǎng)時(shí)間積累而且還會(huì)在未來(lái)至少10年通用。
            • 回顧一下歷史,看看歷史上時(shí)間線上技術(shù)的發(fā)展,你才能明白明天會(huì)是什么樣。
            • 一定要?jiǎng)邮?,例子不管多么?jiǎn)單,建議至少自己手敲一遍看看是否理解了里頭的細(xì)枝末節(jié)。
            • 一定要學(xué)會(huì)思考,思考為什么要這樣,而不是那樣。還要舉一反三地思考。

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

            • 現(xiàn)在的用戶(hù)界面幾乎被兩個(gè)東西主宰了,1)Web,2)移動(dòng)設(shè)備iOS或Android。Windows的圖形界面不吃香了。
            • 越來(lái)越多的企業(yè)在用成本低性能高的Linux和各種開(kāi)源技術(shù)來(lái)構(gòu)架其系統(tǒng),Windows的成本太高了。
            • 微軟的東西變得太快了,很不持久,他們完全是在玩弄程序員。詳情參見(jiàn)《Windows編程革命史

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

            啟蒙入門(mén)

            1、 學(xué)習(xí)一門(mén)腳本語(yǔ)言,例如Python/Ruby

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

            • 處理文本文件,或者csv (關(guān)鍵詞 python csv, python open, python sys) 讀一個(gè)本地文件,逐行處理(例如 word count,或者處理log)
            • 遍歷本地文件系統(tǒng) (sys, os, path),例如寫(xiě)一個(gè)程序統(tǒng)計(jì)一個(gè)目錄下所有文件大小并按各種條件排序并保存結(jié)果
            • 跟數(shù)據(jù)庫(kù)打交道 (python sqlite),寫(xiě)一個(gè)小腳本統(tǒng)計(jì)數(shù)據(jù)庫(kù)里條目數(shù)量
            • 學(xué)會(huì)用各種print之類(lèi)簡(jiǎn)單粗暴的方式進(jìn)行調(diào)試
            • 學(xué)會(huì)用Google (phrase, domain, use reader to follow tech blogs)

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

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

            • Vim / Emacs / Notepad++,學(xué)會(huì)如何配置代碼補(bǔ)全,外觀,外部命令等。
            • Source Insight (或 ctag)

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

            3、 熟悉Unix/Linux Shell和常見(jiàn)的命令行

            • 如果你用windows,至少學(xué)會(huì)用虛擬機(jī)里的linux, vmware player是免費(fèi)的,裝個(gè)Ubuntu吧
            • 一定要少用少用圖形界面。
            • 學(xué)會(huì)使用man來(lái)查看幫助
            • 文件系統(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á)式來(lái)查找文件。

            對(duì)于程序員來(lái)說(shuō)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)

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

            • 學(xué)習(xí)HTML基本語(yǔ)法
            • 學(xué)習(xí)CSS如何選中HTML元素并應(yīng)用一些基本樣式(關(guān)鍵詞:box model)
            • 學(xué)會(huì)用  Firefox + Firebug 或 chrome 查看你覺(jué)得很炫的網(wǎng)頁(yè)結(jié)構(gòu),并動(dòng)態(tài)修改。
            • 學(xué)習(xí)使用Javascript操縱HTML元件。理解DOM和動(dòng)態(tài)網(wǎng)頁(yè)(http://oreilly.com/catalog/9780596527402) 網(wǎng)上有免費(fèi)的章節(jié),足夠用了?;騾⒖?nbsp;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 ) 不要覺(jué)得需要多于一學(xué)期時(shí)間,大學(xué)生是全職一學(xué)期選3-5門(mén)課,你業(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è)小的留言板,支持用戶(hù)登錄,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁(yè)顯示)
            • 買(mǎi)個(gè)域名,租個(gè)空間,做個(gè)自己的網(wǎng)站。

            進(jìn)階加深

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

            • 重新學(xué)C語(yǔ)言,理解指針和內(nèi)存模型,用C語(yǔ)言實(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語(yǔ)言?xún)?nèi)存管理
            • 學(xué)習(xí)Unix/Linux系統(tǒng)調(diào)用(Unix高級(jí)環(huán)境編程),,了解系統(tǒng)層面的東西。
              • 用這些系統(tǒng)知識(shí)操作一下文件系統(tǒng),用戶(hù)(實(shí)現(xiàn)一個(gè)可以拷貝目錄樹(shù)的小程序)
              • 用fork/wait/waitpid寫(xiě)一個(gè)多進(jìn)程的程序,用pthread寫(xiě)一個(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來(lái)編程和調(diào)試程序(參看我的《用gdb調(diào)試程序》)
              • 學(xué)會(huì)使用makefile來(lái)編譯程序。(參看我的《跟我一起寫(xiě)makefile》)
              • IPC和Socket的東西可以放到高級(jí)中來(lái)實(shí)踐。
            • 學(xué)習(xí)Windows SDK編程(Windows 程序設(shè)計(jì) MFC程序設(shè)計(jì)
              • 寫(xiě)一個(gè)窗口,了解WinMain/WinProcedure,以及Windows的消息機(jī)制。
              • 寫(xiě)一些程序來(lái)操作Windows SDK中的資源文件或是各種圖形控件,以及作圖的編程。
              • 學(xué)習(xí)如何使用MSDN查看相關(guān)的SDK函數(shù),各種WM_消息以及一些例程。
              • 這本書(shū)中有很多例程,在實(shí)踐中請(qǐng)不要照抄,試著自己寫(xiě)一個(gè)自己的例程。
              • 不用太多于精通這些東西,因?yàn)镚UI正在被Web取代,主要是了解一下Windows 圖形界面的編程。@virushuo 說(shuō):“ 我覺(jué)得GUI確實(shí)不那么熱門(mén)了,但充分理解GUI工作原理是很重要的。包括移動(dòng)設(shè)備開(kāi)發(fā),如果沒(méi)有基礎(chǔ)知識(shí)仍然很吃力。或者說(shuō)移動(dòng)設(shè)備開(kāi)發(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ī)語(yǔ)言和C和Python語(yǔ)言在編譯和執(zhí)行上的差別。從C、Java、Python思考一下“跨平臺(tái)”這種技術(shù)。
            • 學(xué)會(huì)使用IDE Eclipse,使用Eclipse 編譯,調(diào)試和開(kāi)發(fā)Java程序。
            • 建一個(gè)Tomcat的網(wǎng)站,嘗試一下JSP/Servlet/JDBC/MySQL的Web開(kāi)發(fā)。把前面所說(shuō)的那個(gè)PHP的小項(xiàng)目試著用JSP和Servlet實(shí)現(xiàn)一下。
            3、Web的安全與架構(gòu)
            • 學(xué)習(xí)HTML5,網(wǎng)上有很多很多教程,以前酷殼也介紹過(guò)很多,我在這里就不羅列了。
            • 學(xué)習(xí)Web開(kāi)發(fā)的安全問(wèn)題(參考新浪微博被攻擊的這個(gè)事,以及Ruby的這篇文章
            • 學(xué)習(xí)HTTP Server的rewrite機(jī)制,Nginx的反向代理機(jī)制,fast-cgi(如:PHP-FPM
            • 學(xué)習(xí)Web的靜態(tài)頁(yè)面緩存技術(shù)。
            • 學(xué)習(xí)Web的異步工作流處理,數(shù)據(jù)Cache,數(shù)據(jù)分區(qū),負(fù)載均衡,水平擴(kuò)展的構(gòu)架。
            • 實(shí)踐任務(wù):
              • 使用HTML5的canvas 制作一些Web動(dòng)畫(huà)。
              • 嘗試在前面開(kāi)發(fā)過(guò)的那個(gè)Web應(yīng)用中進(jìn)行SQL注入,JS注入,以及XSS攻擊。
              • 把前面開(kāi)發(fā)過(guò)的那個(gè)Web應(yīng)用改成構(gòu)造在Nginx + PHP-FPM + 靜態(tài)頁(yè)面緩存的網(wǎng)站

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

            • 你可以安裝MSSQLServer或MySQL來(lái)學(xué)習(xí)數(shù)據(jù)庫(kù)。
            • 學(xué)習(xí)教科書(shū)里數(shù)據(jù)庫(kù)設(shè)計(jì)的那幾個(gè)范式,1NF,2NF,3NF,……
            • 學(xué)習(xí)數(shù)據(jù)庫(kù)的存過(guò),觸發(fā)器,視圖,建索引,游標(biāo)等。
            • 學(xué)習(xí)SQL語(yǔ)句,明白表連接的各種概念(參看《SQL  Join的圖示》)
            • 學(xué)習(xí)如何優(yōu)化數(shù)據(jù)庫(kù)查詢(xún)(參看《MySQL的優(yōu)化》)
            • 實(shí)踐任務(wù):設(shè)計(jì)一個(gè)論壇的數(shù)據(jù)庫(kù),至少滿(mǎn)足3NF,使用SQL語(yǔ)句查詢(xún)本周,本月的最新文章,評(píng)論最多的文章,最活躍用戶(hù)。

            5、一些開(kāi)發(fā)工具

            • 學(xué)會(huì)使用SVN或Git來(lái)管理程序版本。
            • 學(xué)會(huì)使用JUnit來(lái)對(duì)Java進(jìn)行單元測(cè)試。
            • 學(xué)習(xí)C語(yǔ)言和Java語(yǔ)言的coding standard 或 coding guideline。(我N年前寫(xiě)過(guò)一篇關(guān)C語(yǔ)言非常簡(jiǎn)單的文章——《編程修養(yǎng)》,這樣的東西你可以上網(wǎng)查一下,一大堆)。
            • 推薦閱讀《代碼大全》《重構(gòu)》《代碼整潔之道

            高級(jí)深入

            1、C++ / Java 和面向?qū)ο?/strong>

            我個(gè)人以為學(xué)好C++,Java也就是舉手之勞。但是C++的學(xué)習(xí)曲線相當(dāng)?shù)亩?。不過(guò),我覺(jué)得C++是最需要學(xué)好的語(yǔ)言了。參看兩篇趣文“C++學(xué)習(xí)信心圖” 和“21天學(xué)好C++

            • 學(xué)習(xí)(麻省理工免費(fèi)課程)C++面向?qū)ο缶幊?/a>
            • 讀我的 “如何學(xué)好C++”中所推薦的那些書(shū)至少兩遍以上(如果你對(duì)C++的理解能夠深入到像我所寫(xiě)的《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)鐘愛(ài)組合而不是繼承,2)鐘愛(ài)接口而不是實(shí)現(xiàn)。(也推薦《深入淺出設(shè)計(jì)模式》)
            • 實(shí)踐任務(wù):
              • 使用工廠模式實(shí)現(xiàn)一個(gè)內(nèi)存池。
              • 使用策略模式制做一個(gè)類(lèi)其可以把文本文件進(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ū)ο?、STL,設(shè)計(jì)模式、和WindowsSDK圖形編程的各種技能
              • 做一個(gè)貪吃蛇或是俄羅斯方塊的游戲。支持不同的級(jí)別和難度。
              • 做一個(gè)文件瀏覽器,可以瀏覽目錄下的文件,并可以對(duì)不同的文件有不同的操作,文本文件可以打開(kāi)編輯,執(zhí)行文件則執(zhí)行之,mp3或avi文件可以播放,圖片文件可以展示圖片。
            • 學(xué)習(xí)C++的一些類(lèi)庫(kù)的設(shè)計(jì),如: MFC(看看候捷老師的《深入淺出MFC》) ,Boost, ACE,  CPPUnit,STL (STL可能會(huì)太難了,但是如果你能了解其中的設(shè)計(jì)模式和設(shè)計(jì)那就太好了,如果你能深入到我寫(xiě)的《STL string類(lèi)的寫(xiě)時(shí)拷貝技術(shù)》那就非常不錯(cuò)了,ACE需要很強(qiáng)在的系統(tǒng)知識(shí),參見(jiàn)后面的“加強(qiáng)對(duì)系統(tǒng)的了解”)
            • Java是真正的面向?qū)ο蟮恼Z(yǔ)言,Java的設(shè)計(jì)模式多得不能再多,也是用來(lái)學(xué)習(xí)面向?qū)ο蟮脑O(shè)計(jì)模式的最佳語(yǔ)言了(參看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中通過(guò)JMS傳遞消息。

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

            • 深究C++(我深究C/C++了十來(lái)年了)
            • 學(xué)習(xí)Java的各種設(shè)計(jì)模式。

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

            重要閱讀下面的幾本書(shū):

            • Unix編程藝術(shù)》了解Unix系統(tǒng)領(lǐng)域中的設(shè)計(jì)和開(kāi)發(fā)哲學(xué)、思想文化體系、原則與經(jīng)驗(yàn)。你一定會(huì)有一種醍醐灌頂?shù)母杏X(jué)。
            • Unix網(wǎng)絡(luò)編程卷1,套接字》這是一本看完你就明白網(wǎng)絡(luò)編程的書(shū)。重要注意TCP、UDP,以及多路復(fù)用的系統(tǒng)調(diào)用select/poll/epoll的差別。
            • TCP/IP詳解 卷1:協(xié)議》- 這是一本看完后你就可以當(dāng)網(wǎng)絡(luò)黑客的書(shū)。了解以太網(wǎng)的的運(yùn)作原理,了解TCP/IP的協(xié)議,運(yùn)作原理以及如何TCP的調(diào)優(yōu)。
            • 實(shí)踐任務(wù):
              • 理解什么是阻塞(同步IO),非阻塞(異步IO),多路復(fù)用(select, poll, epoll)的IO技術(shù)。
              • 寫(xiě)一個(gè)網(wǎng)絡(luò)聊天程序,有聊天服務(wù)器和多個(gè)聊天客戶(hù)端(服務(wù)端用UDP對(duì)部分或所有的的聊天客戶(hù)端進(jìn)Multicast或Broadcast)。
              • 寫(xiě)一個(gè)簡(jiǎn)易的HTTP服務(wù)器。
            • Unix網(wǎng)絡(luò)編程卷2,進(jìn)程間通信》信號(hào)量,管道,共享內(nèi)存,消息等各種IPC…… 這些技術(shù)好像有點(diǎn)老掉牙了,不過(guò)還是值得了解。
            • 實(shí)踐任務(wù):
              • 主要實(shí)踐各種IPC進(jìn)程序通信的方法。
              • 嘗試寫(xiě)一個(gè)管道程序,父子進(jìn)程通過(guò)管道交換數(shù)據(jù)。
              • 嘗試寫(xiě)一個(gè)共享內(nèi)存的程序,兩個(gè)進(jìn)程通過(guò)共享內(nèi)存交換一個(gè)C的結(jié)構(gòu)體數(shù)組。
            • 學(xué)習(xí)《Windows核心編程》一書(shū)。把CreateProcess,Windows線程、線程調(diào)度、線程同步(Event,  信號(hào)量,互斥量)、異步I/O,內(nèi)存管理,DLL,這幾大塊搞精通。
            • 實(shí)踐任務(wù):使用CreateProcess啟動(dòng)一個(gè)記事本或IE,并監(jiān)控該程序的運(yùn)行。把前面寫(xiě)過(guò)的那個(gè)簡(jiǎn)易的HTTP服務(wù)用線程池實(shí)現(xiàn)一下。寫(xiě)一個(gè)DLL的鉤子程序監(jiān)控指定窗口的關(guān)閉事件,或是記錄某個(gè)窗口的按鍵。
            • 有了多線程、多進(jìn)程通信,TCP/IP,套接字,C++和設(shè)計(jì)模式的基本,你可以研究一下ACE了。使用ACE重寫(xiě)上述的聊天程序和HTTP服務(wù)器(帶線程池)
            • 實(shí)踐任務(wù):通過(guò)以上的所有知識(shí),嘗試
              • 寫(xiě)一個(gè)服務(wù)端給客戶(hù)端傳大文件,要求把100M的帶寬用到80%以上。(注意,磁盤(pán)I/O和網(wǎng)絡(luò)I/O可能會(huì)很有問(wèn)題,想一想怎么解決,另外,請(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) – 客戶(hù)端服務(wù)結(jié)點(diǎn)層、計(jì)算結(jié)點(diǎn)層、數(shù)據(jù)cache層,數(shù)據(jù)層。J2EE是經(jīng)典的多層結(jié)構(gòu)。
            • CDN系統(tǒng) – 就近訪問(wèn),內(nèi)容邊緣化。
            • P2P式系統(tǒng),研究一下BT和電驢的算法。比如:DHT算法。
            • 服務(wù)器備份,雙機(jī)備份系統(tǒng)(Live-Standby和Live-Live系統(tǒng)),兩臺(tái)機(jī)器如何通過(guò)心跳監(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ì)象)序列化和多種類(lèi)型的RPC服務(wù)。
            • 學(xué)習(xí)Hadoop。Hadoop框架中最核心的設(shè)計(jì)就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇論文所提及而被廣為流傳的,簡(jiǎn)單的一句話(huà)解釋MapReduce就是“任務(wù)的分解與結(jié)果的匯總”。HDFS是Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System)的縮寫(xiě),為分布式計(jì)算存儲(chǔ)提供了底層支持。
            • 了解NoSQL數(shù)據(jù)庫(kù)(有人說(shuō)可能是一個(gè)過(guò)渡炒作的技術(shù)),不過(guò)因?yàn)槌笠?guī)模以及高并發(fā)的純動(dòng)態(tài)型網(wǎng)站日漸成為主流,而SNS類(lèi)網(wǎng)站在數(shù)據(jù)存取過(guò)程中有著實(shí)時(shí)性等剛性需求,這使得目前NoSQL數(shù)據(jù)庫(kù)慢慢成了人們所關(guān)注的焦點(diǎn),并大有成為取代關(guān)系型數(shù)據(jù)庫(kù)而成為未來(lái)主流數(shù)據(jù)存儲(chǔ)模式的趨勢(shì)。當(dāng)前NoSQL數(shù)據(jù)庫(kù)很多,大部分都是開(kāi)源的,其中比較知名的有:MemcacheDB、Redis、Tokyo Cabinet(升級(jí)版為Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。

            寫(xiě)了那么多,回顧一下,覺(jué)得自己相當(dāng)?shù)挠谐删透?。希望大家不要嚇著,我自己這十來(lái)年也在不斷地學(xué)習(xí),今天我也在學(xué)習(xí)中,人生本來(lái)就是一個(gè)不斷學(xué)習(xí)和練級(jí)的過(guò)程。不過(guò),一定有漏的,也有不對(duì)的,還希望大家補(bǔ)充和更正。(我會(huì)根據(jù)大家的反饋隨時(shí)更新此文)歡迎大家通過(guò)我的微博(@左耳朵耗子)和twitter(@haoel)和我交流。

            —– 更新  2011/07/19 —–

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

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

            3)有朋友說(shuō)學(xué)這些東西學(xué)完都40了,還不如想想怎么去掙錢(qián)。我想告訴大家,一是我今年還沒(méi)有40歲,二是學(xué)無(wú)止境啊,三是我不覺(jué)得掙錢(qián)有多難,難的是怎么讓你值那么多錢(qián)?無(wú)論是打工還是創(chuàng)業(yè),是什么東西讓你自己的價(jià)值,讓你公司的價(jià)值更值錢(qián)?別的地方我不敢說(shuō),對(duì)于互聯(lián)網(wǎng)或IT公司來(lái)說(shuō),技術(shù)實(shí)力絕對(duì)是其中之一。

            4)有朋友說(shuō)技術(shù)都是工具,不應(yīng)該如此癡迷這句話(huà)沒(méi)有錯(cuò),有時(shí)候我們需要更多的是抬起頭來(lái)看看技術(shù)以外的事情,或者是說(shuō)我們?cè)谧骷夹g(shù)的時(shí)候不去思考為什么會(huì)有這個(gè)技術(shù),為什么不是別的,問(wèn)題不在于技術(shù),問(wèn)題在于我們死讀書(shū),讀死書(shū),成了技術(shù)的書(shū)呆子。

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

            (全文完,轉(zhuǎn)載時(shí)請(qǐng)注明作者和出處)




            posted on 2011-07-24 09:57 simplyzhao 閱讀(210) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): G_其他

            導(dǎo)航

            <2011年8月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統(tǒng)計(jì)

            • 隨筆 - 209
            • 文章 - 0
            • 評(píng)論 - 7
            • 引用 - 0

            常用鏈接

            留言簿(1)

            隨筆分類(lèi)

            隨筆檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            狠狠久久综合| 伊人 久久 精品| 国产精品无码久久久久| 久久精品中文字幕有码| 一级女性全黄久久生活片免费 | 久久96国产精品久久久| 四虎国产精品免费久久久| 亚洲午夜久久久| 精品久久久久久国产91| 欧美日韩精品久久久久| 亚洲va中文字幕无码久久不卡| 97久久超碰国产精品旧版| 性做久久久久久免费观看| 97久久天天综合色天天综合色hd | 国产福利电影一区二区三区,免费久久久久久久精 | 久久99精品国产麻豆宅宅 | 久久久久九九精品影院| 人妻精品久久无码区| 狠狠久久综合伊人不卡| 色偷偷久久一区二区三区| 久久青青草原精品国产软件| 亚洲狠狠婷婷综合久久久久 | 日韩va亚洲va欧美va久久| MM131亚洲国产美女久久| 一本综合久久国产二区| 国产精品久久久久一区二区三区 | 久久人人爽人人爽AV片| 国产精品久久久久影院嫩草| 热久久视久久精品18| 狠狠色丁香婷婷久久综合不卡| 欧美亚洲国产精品久久久久| 狠狠久久综合伊人不卡| 欧美一区二区精品久久| 亚洲中文字幕无码久久2017| 久久伊人精品青青草原日本| 久久―日本道色综合久久| 久久人人爽爽爽人久久久| 久久中文字幕人妻丝袜| 日日狠狠久久偷偷色综合0| 久久高清一级毛片| 国产精品VIDEOSSEX久久发布|