linux學習(一)——學習之路
阿新 • • 發佈:2017-09-11
tcp/ip 阻塞 結合 調度 了解 選擇 博客園 要去 事情 首先,要學Linux編程,你得會用Linux,也就是得在命令行環境下生存下來。什麽叫生存下來呢?就是我現在給你一臺主機,鍵盤,顯示器啥的,然後給你一個服務器版的Linux系統的光盤或者其他什麽安裝盤,你去把這臺主機用起來。什麽叫用起來呢?你平常用Windows電腦幹啥,你現在還用這臺電腦幹啥。新建文件啊,查看文件,編輯文件,保存文件,復制,移動,刪除,打包,解壓,聯網,下載個什麽東西啊等等基本操作你得會。還有軟件怎麽安裝,不僅要熟悉apt-get和yum,還有給你源碼的軟件怎麽安裝你得會,另外要熟悉Linux下的文件系統,每個目錄是幹啥的,目錄下的文件是幹嘛的,插入一個U盤,如何掛載這個U盤,操作U盤下的文件你得會啊。這個看一本書就行了,《鳥哥的Linux私房菜-基礎篇》,記得是基礎篇,記得安裝Linux系統自己操作一遍,還有一本是服務器篇,你既然是要學Linux編程開發,那就不用看服務器架設篇了。做完這一步,你可以開發了。
Linux下開發,兩種基本語言,C和C++咯,至於其他人要說Python,Java,Ruby啥的不討論,因為就討論Linux下的開發,什麽是Linux開發呢?就是利用Linux的API進行開發咯,首先你得會C語言或者C++語言啊,這個去看丹尼斯的《C程序設計語言》,註意是丹尼斯的,C++的就去看《Essential C++》或者《C++ Primer》,然後在Linux下的程序開發,Linux的API是遵循POSIX標準的,自行谷歌什麽叫POSIX。Linux下程序開發幾大塊,文件操作,這個很重要,你要知道Linux下的一個思想叫一切皆文件,可見文件讀寫多重要了。I/O模型,五大I/O模型,阻塞,非阻塞,復用,信號驅動和異步I/O,環環相扣絲絲相連,概念和操作都要仔細琢磨,最重要的當屬復用,就是select,poll和epoll,面試筆試就問這個東西,要知道他們的適用範圍和優缺點。進程和線程,包括進程和線程的概念和區別,進程和線程的建立,同步,通信,互斥等等。網絡編程,就是socket編程,Linux編程,這個學不好等於啥都沒學,這個估計還得了解一下TCP/IP協議,編程方面主要是那幾步,申請socket,bind,listen,accept幾步,要熟悉種常見的服務器模型,進程池線程池方式的,多進程方式的,復用方式的,最重要的是復用方式的,這部分可以先只寫服務器,測試直接用Telnet就好了,加快速度麽。其余的就是數據庫,這個東西不屬於Linux,但是還得會,要不然啥都做不了,看那本《MySQL必知必會》,當然深入的話還得找本專業的書細細看。這個時候就可以真刀真槍的去幹點有意思的事了,比如寫個終端下的類似於QQ的軟件啊,包括服務器和客戶端啊,慢慢的增加並發數,比如可以同時支持五千人在線啊,文件傳輸啊等等。然後學學Qt,熟悉一下圖形界面,可以把你的終端下的QQ完全改成圖形界面下的。估計到這個時候,你差不多在Linux下進行像樣的開發了吧。在這個過程的學習中,相信你已經學會Makefile的編寫啊,編譯啊,鏈接啊等等一些細枝末節的東西了,還得反思一下把零散的東西串一串,要系統化。
接下來就是繼續深入了,Linux為什麽這麽多人用,好處在哪裏,你得去稍微的看看內核源碼啊,內核的進線程調度啊,我告訴你,Linux內核的一個鏈表都夠你研究好幾節課的。哦,這個時候,數據結構啥的又得翻出來加強一下了不是,計算機網絡啥的也得看看,操作系統原理啥的也得看看呢不是,把這些東西放在這裏是合適的,前面讓你知其然,知道怎麽編程怎麽做,現在要知其所以然了不是。
在學習的過程中,要不斷積累和了解最新的東西,最起碼要知道個概念,比如分布式,大數據,雲計算,機器學習,計算機視覺,JIT等等,形成知識鏈,這樣不會導致你最後不知道學啥。有個建議,一定要學一下Python,一定要學一下Python,一定要學一下Python,重要的事情說三遍。它能極大的提高你的工作效率,也能和C/C++結合在一起用,很nice的語言。
最後推薦幾本書(前面的包含在內):
《鳥哥的Linux私房菜 基礎篇》
《C程序設計語言》 丹尼斯寫的
《Linux C編程一站式學習》 宋勁杉寫的
《Eensstial C++》
《C++ Primer》
《Effective C++》
《Linux網絡編程》 宋勁彬寫的
《Unix環境高級編程》
《Unix網絡編程》 兩部
《Linux高級程序設計》 華清遠見的
《MySQL必知必會》
《數據庫系統概念》
《大話數據結構》
《算法導論》
《Linux內核情景分析》
《深入理解Linux內核》
《深入理解計算機系統》
《現代操作系統》
《深入理解計算機網絡》
《TCP/IP》的三卷經典書
廖雪峰的Python學習網站
另外各大論壇,stackoverflow, 博客園,CSDN等等,多逛逛,當然還有知乎也要多逛逛。差不多就這麽多了吧,前文列舉的東西,只要完成一半,估計就不用我教你學了,你自己應該知道自己該學啥了……有時間在更,估計是沒時間了……
1月20日更:
之前有一點忘記寫了,一定要學習一款版本管理工具,首先要了解一下什麽是版本管理。然後選擇一款版本管理工具,這個很重要。目前常用的是git和svn,就用git就好了,當然你要去用svn那也行。還是建議用git,看廖雪峰的git教程就好。
Linux下開發,兩種基本語言,C和C++咯,至於其他人要說Python,Java,Ruby啥的不討論,因為就討論Linux下的開發,什麽是Linux開發呢?就是利用Linux的API進行開發咯,首先你得會C語言或者C++語言啊,這個去看丹尼斯的《C程序設計語言》,註意是丹尼斯的,C++的就去看《Essential C++》或者《C++ Primer》,然後在Linux下的程序開發,Linux的API是遵循POSIX標準的,自行谷歌什麽叫POSIX。Linux下程序開發幾大塊,文件操作,這個很重要,你要知道Linux下的一個思想叫一切皆文件,可見文件讀寫多重要了。I/O模型,五大I/O模型,阻塞,非阻塞,復用,信號驅動和異步I/O,環環相扣絲絲相連,概念和操作都要仔細琢磨,最重要的當屬復用,就是select,poll和epoll,面試筆試就問這個東西,要知道他們的適用範圍和優缺點。進程和線程,包括進程和線程的概念和區別,進程和線程的建立,同步,通信,互斥等等。網絡編程,就是socket編程,Linux編程,這個學不好等於啥都沒學,這個估計還得了解一下TCP/IP協議,編程方面主要是那幾步,申請socket,bind,listen,accept幾步,要熟悉種常見的服務器模型,進程池線程池方式的,多進程方式的,復用方式的,最重要的是復用方式的,這部分可以先只寫服務器,測試直接用Telnet就好了,加快速度麽。其余的就是數據庫,這個東西不屬於Linux,但是還得會,要不然啥都做不了,看那本《MySQL必知必會》,當然深入的話還得找本專業的書細細看。這個時候就可以真刀真槍的去幹點有意思的事了,比如寫個終端下的類似於QQ的軟件啊,包括服務器和客戶端啊,慢慢的增加並發數,比如可以同時支持五千人在線啊,文件傳輸啊等等。然後學學Qt,熟悉一下圖形界面,可以把你的終端下的QQ完全改成圖形界面下的。估計到這個時候,你差不多在Linux下進行像樣的開發了吧。在這個過程的學習中,相信你已經學會Makefile的編寫啊,編譯啊,鏈接啊等等一些細枝末節的東西了,還得反思一下把零散的東西串一串,要系統化。
接下來就是繼續深入了,Linux為什麽這麽多人用,好處在哪裏,你得去稍微的看看內核源碼啊,內核的進線程調度啊,我告訴你,Linux內核的一個鏈表都夠你研究好幾節課的。哦,這個時候,數據結構啥的又得翻出來加強一下了不是,計算機網絡啥的也得看看,操作系統原理啥的也得看看呢不是,把這些東西放在這裏是合適的,前面讓你知其然,知道怎麽編程怎麽做,現在要知其所以然了不是。
在學習的過程中,要不斷積累和了解最新的東西,最起碼要知道個概念,比如分布式,大數據,雲計算,機器學習,計算機視覺,JIT等等,形成知識鏈,這樣不會導致你最後不知道學啥。有個建議,一定要學一下Python,一定要學一下Python,一定要學一下Python,重要的事情說三遍。它能極大的提高你的工作效率,也能和C/C++結合在一起用,很nice的語言。
最後推薦幾本書(前面的包含在內):
《鳥哥的Linux私房菜 基礎篇》
《C程序設計語言》 丹尼斯寫的
《Linux C編程一站式學習》 宋勁杉寫的
《Eensstial C++》
《C++ Primer》
《Effective C++》
《Linux網絡編程》 宋勁彬寫的
《Unix環境高級編程》
《Unix網絡編程》 兩部
《Linux高級程序設計》 華清遠見的
《MySQL必知必會》
《數據庫系統概念》
《大話數據結構》
《算法導論》
《Linux內核情景分析》
《深入理解Linux內核》
《深入理解計算機系統》
《現代操作系統》
《深入理解計算機網絡》
《TCP/IP》的三卷經典書
廖雪峰的Python學習網站
另外各大論壇,stackoverflow, 博客園,CSDN等等,多逛逛,當然還有知乎也要多逛逛。差不多就這麽多了吧,前文列舉的東西,只要完成一半,估計就不用我教你學了,你自己應該知道自己該學啥了……有時間在更,估計是沒時間了……
1月20日更:
之前有一點忘記寫了,一定要學習一款版本管理工具,首先要了解一下什麽是版本管理。然後選擇一款版本管理工具,這個很重要。目前常用的是git和svn,就用git就好了,當然你要去用svn那也行。還是建議用git,看廖雪峰的git教程就好。
linux學習(一)——學習之路