C++和Java都不是能在短時間內能學好的,C++玩是的深,Java玩的是廣,我建議兩者選一個。我個人的學習經歷是:
深究C++(我深究C/C++了十來年了)
學習Java的各種設計模式。
2、加強系統了解
重要閱讀下面的幾本書:
《Unix編程藝術》了解Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗。你一定會有一種醍醐灌頂的感覺。
《Unix網絡編程卷1,套接字》這是一本看完你就明白網絡編程的書。重要注意TCP、UDP,以及多路復用的系統調用select/poll/epoll的差別。
《TCP/IP詳解 卷1:協議》- 這是一本看完后你就可以當網絡黑客的書。了解以太網的的運作原理,了解TCP/IP的協議,運作原理以及如何TCP的調優。
實踐任務:
理解什么是阻塞(同步IO),非阻塞(異步IO),多路復用(select, poll, epoll)的IO技術。
寫一個網絡聊天程序,有聊天服務器和多個聊天客戶端(服務端用UDP對部分或所有的的聊天客戶端進Multicast或Broadcast)。
寫一個簡易的HTTP服務器。
《Unix網絡編程卷2,進程間通信》信號量,管道,共享內存,消息等各種IPC…… 這些技術好像有點老掉牙了,不過還是值得了解。
實踐任務:
主要實踐各種IPC進程序通信的方法。
嘗試寫一個管道程序,父子進程通過管道交換數據。
嘗試寫一個共享內存的程序,兩個進程通過共享內存交換一個C的結構體數組。
學習《Windows核心編程》一書。把CreateProcess,Windows線程、線程調度、線程同步(Event, 信號量,互斥量)、異步I/O,內存管理,DLL,這幾大塊搞精通。
實踐任務:使用CreateProcess啟動一個記事本或IE,并監控該程序的運行。把前面寫過的那個簡易的HTTP服務用線程池實現一下。寫一個DLL的鉤子程序監控指定窗口的關閉事件,或是記錄某個窗口的按鍵。
有了多線程、多進程通信,TCP/IP,套接字,C++和設計模式的基本,你可以研究一下ACE了。使用ACE重寫上述的聊天程序和HTTP服務器(帶線程池)
實踐任務:通過以上的所有知識,嘗試
寫一個服務端給客戶端傳大文件,要求把100M的帶寬用到80%以上。(注意,磁盤I/O和網絡I/O可能會很有問題,想一想怎么解決,另外,請注意網絡傳輸最大單元MTU)
3、系統架構
負載均衡。HASH式的,純動態式的。(可以到Google學術里搜一些關于負載均衡的文章讀讀)
多層分布式系統 - 客戶端服務結點層、計算結點層、數據cache層,數據層。J2EE是經典的多層結構。
CDN系統 - 就近訪問,內容邊緣化。
P2P式系統,研究一下BT和電驢的算法。比如:DHT算法。
服務器備份,雙機備份系統(Live-Standby和Live-Live系統),兩臺機器如何通過心跳監測對方?集群主結點備份。
虛擬化技術,使用這個技術,可以把操作系統當應用程序一下切換或重新配置和部署。
學習Thrift,二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。
學習Hadoop。Hadoop框架中最核心的設計就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋MapReduce就是“任務的分解與結果的匯總”。HDFS是Hadoop分布式文件系統(Hadoop Distributed File System)的縮寫,為分布式計算存儲提供了底層支持。
了解NoSQL數據庫(有人說可能是一個過渡炒作的技術),不過因為超大規模以及高并發的純動態型網站日漸成為主流,而SNS類網站在數據存取過程中有著實時性等剛性需求,這使得目前NoSQL數據庫慢慢成了人們所關注的焦點,并大有成為取代關系型數據庫而成為未來主流數據存儲模式的趨勢。當前NoSQL數據庫很多,大部分都是開源的,其中比較知名的有:MemcacheDB、Redis、Tokyo Cabinet(升級版為Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。
寫了那么多,回顧一下,覺得自己相當的有成就感。希望大家不要嚇著,我自己這十來年也在不斷地學習,今天我也在學習中,人生本來就是一個不斷學習和練級的過程。不過,一定有漏的,也有不對的,還希望大家補充和更正。(我會根據大家的反饋隨時更新此文)
原文轉自:http://blogread.cn/it/article/4015?f=sa