A. X分之3.6等於3分之二節比例
排序演算法第一篇-排序演算法介紹
在面試中,現在無論大小公司都會有演算法的。其中排序演算法也是一種很常見的面試題。比如冒泡,快排等。這些,排序演算法自己看了一次又一次,可是過一段時間,又忘掉了。所以,這次就把演算法是怎麼推導出來的,詳細記錄下來。看看這次多久還會忘記。
本文主要介紹排序演算法的分類、時間復雜度、空間復雜。為了後面的學習做准備的。
通過本文學習,將收獲到:排序演算法分幾類?什麼是演算法的時間復雜度?是怎麼算出來的?什麼是演算法的空間復雜度?常見的時間復雜度比較。
如果這些您都已經知道了,可以不用耽誤時間看了。
約定:
文中的n2表示的是n的2次方(n²),n^2也是表示n的2次方;
n3表示的是n的3次方;
n^k表示的是n的k次方;
long2n表示的是以2為底的對數。
本文出自:凱哥java(微信:kaigejava)學習Java版數據結構與演算法筆記。
一:介紹
排序又稱排序演算法(Sort Algorithm),排序是將一組數據,依據指定的順序進行排序的過程。
二:分類
排序的分類分為兩大類
2.1:內部排序
內部排序是指將需要處理的所有數據一次性都載入到內存中進行排序的。
如:冒泡、快排等這些演算法都是內部排序的
2.2:外部排序
數據量過大,無法全部載入到內存中,需要藉助於外部存儲進行排序的。
如:資料庫中數據8個G,內存只有4個G的這種。
2.3:參加分類如下圖:
三:演算法的時間復雜度
3.1:分類
衡量一個程序(演算法)執行時間有兩種方法
3.1.1:事後統計的方法
所謂的事後統計方法,顧名思義,就是程序(演算法)已經寫完了,運行後得到的結果。
這種方法雖然是可行的,但是有兩個問題:
①:要想對設計的演算法運行的性能進行評估,需要實際運行該程序(浪費時間);
②:運行所得的時間統計嚴重依賴於機器的硬體、軟體等環境因為。
這種方法有個嚴苛的要求:要在同一台機器在相同狀態(軟硬體)下運行,才能比較哪個演算法更快。
3.1.2:事前估算的方法
通過分析某個演算法的時間復雜度來判斷哪個演算法更優。
3.2:時間頻度
概念:一個演算法花費的時間與演算法中語句執行的次數成正比。哪個演算法中語句執行次數多,那麼這個演算法所花費的時間就多(這不廢話嗎)。
一個演算法中語句執行次數稱為語句頻度或時間頻度。記為:T(n).
(復雜的概念是,時間頻度:一個演算法執行所消耗的時間,從理論上是 不能算出來的,想要具體數值,必須要將程序上機運行測試才能知道。但是我們不可能也沒必要對每個演算法都上機進行測試的,只需要知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句執行的次數成正比的,哪個演算法中語句執行次數多,那麼這個程序花費的時間就多。一個演算法中的語句執行次數稱為語句頻度或者時間頻度,即為:T(n))
例如:我們知道的技術從1到100所有數字的和。這個就有兩種演算法。分別如下:
①:使用for循環,從1到100循環出來,然後累加出來。代碼如下:
根據上面概念(注意對概念的理解,total和end這兩行相對於for循環來說,可以忽略。後面我們還會詳細講解還會忽略哪些),我們來看下這個演算法的時間頻度是多少呢?
在for循環中,實際需要執行101次(+1的原因是因為,在for循環的時候,需要做最後一次判斷,才能推出。因此n個數的計算一共是n+1次操作)。所以其時間頻度就是:T(n)=n+1;
我們再來看看第二種演算法:
是不是很簡單,只要一行代碼就執行完成了。所以第二種演算法的T(n)=1了。是不是很快呢?
時間頻度是不是一眼就看出來了?是不是不用在代碼運行下來比較運行時間了?
(ps:從上面簡單地從1到100求和演算法中,我們是不是感受到演算法的魅力了?感受到編程之美了?)
3.3:時間復雜度
在上面3.2中提到的時間頻度中,n稱為問題的規模,當n不斷變化的時候,時間頻度T(n)也會不斷變化。但是有時我們想知道它在變化的時候呈現什麼樣的規律呢?為此,我們引入了時間復雜度概念。
一般情況下,演算法中基本操作重復執行的次數是問題規模n的某個函數,用T(n)表示。若有某個輔助函數f(n),是的當n趨近於無窮大的時候,T(n)/f(n)的極限值為不等於零的參數,則稱為f(n)是T(n)的同數量級函數。記作T(n)=O(f(n)),稱O(f(n))為演算法的漸進的時間復雜度。簡稱時間復雜度。這就是大O法。
在計算時間復雜度的時候,我們會忽略以下幾個數據值
3.3.1:忽略常數項
比如上面,我們計算1到100的第一種演算法中,有兩行int total=0;和 int end = 100;這兩行代碼,這個數值是2,我們一般計算時間復雜度的時候,會忽略這個常數項的。為什麼呢?請看下面四個函數,隨著n的增大而增大運行時間。
T(n) = 2n+20
T(n) = 2*n
T(n)=3n+10
T(n)=3*n
請看下圖隨著n的增大所呈現的規律:
我們來看看,把這些數據使用折線圖展示:
圖例說明:上面兩個是3*n及3n+10的,下面兩個是2n及2n+10的
從上面兩個圖表中我們可以得到以下結論:
①:2n+20和2*n隨著n的增加,執行曲線無限接近(折線圖中下面兩個),常量值20可以忽略了
②:3n+10和3*n隨著n的增加,執行曲線無限接近(折線圖中上面兩個),常量值10可以忽略了
所以,綜上所述,在計算程序(演算法)時間復雜度的時候,常量值是可以忽略的
3.3.2:忽略低次項
請看下面四個函數,隨著n的增大又會呈現什麼規律嗎?
T(n)=2n^2+3n+10
T(n)=2n^2
T(n)=n^2+5n+20
T(n)=n^2
說明:n^2表示n的2次方
我們來看看隨著n的增加,運行所消耗的時間。如下圖:
把上面數據,用折線圖表示,如下圖:
圖例說明:上面兩個是2n^2及2n^2+3n+10,下面兩個是n^2及 n^2+5n+20
從上面兩個圖中我們可以得到如下結論:
①:2n^2+3n+10和2n^2隨著n的增大,執行曲線無限接近,可以忽略低次項及常量項:3n+10
②:n^2+5n+20和n^2隨著n的增大,執行曲線無限接近,可以忽略低次項及常量項:5n+20
綜上所述,我們可以得到結論:在計算程序(演算法)時間復雜度的時候,低次項(3n=3*n^1比n^2項數少)是可以忽略的
3.3.3:忽略系數
我們再來看看下面四個函數,看看它們隨著n的增大呈現出什麼樣的規律
T(n)=3n^2+2n
T(n)=5n^2+7n
T(n)=n^3+5n
T(n)=6n^3+4n
隨著n的增加,運行時間所消耗耗時如下圖:
折線圖如下:
從上圖可以得到如下:
①:隨著n值變大,5n^2+7n和3n^2+2n,執行曲線重合,說明這種情況下,系數5和3可以忽略;
②:n^3+5n和6n^3+4n,執行曲線分離,說明多少次方是關鍵
3.3.4:總結:
計算時間復雜度的時候忽略常數項、忽略低次項、忽略系數
T(n)不同,但時間復雜度可能相同。
如:T(n)=n2+7n+6與T(n)=3n^2+2n+2它們的T(n)不同,但時間復雜相同,都為O(n^2).
計算時間復雜度的方法用常數1代替運行時間中的所有加法常數T(n)=n^2+7n+6 =>T(n)=n^2+7n+1修改後的運行次數函數中,只保留最高階項T(n)=n^2+7n+1 => T(n)=n^2去除最高階項的系數T(n)=n^2 =>T(n)=n^2 => O(n^2)
3.4:常見的時間復雜度
常數階O(1)
對數階O(log2n)
線性階O(n)
線性對數階O(nlog2n)
平方階O(n^2)
立方階O(n^3)
K次方階(n^k)
指數階O(2^n)
各個時間復雜度復雜度折線圖如下圖:
總結:
常見演算法時間復雜度由小到大依次為:
O(1)
從上圖折線圖中,我們可以看出,程序(演算法)盡可能的避免使用指數階段的演算法。
3.5:常見演算法時間復雜度舉例
3.5.1:常數階O(1)
無論代碼執行多少行,只要是沒有循環等復雜結構,那這個代碼的時間復雜度就是O(1)
(計算時間復雜度的時候,忽略常數項)
代碼demo:
上述代碼在執行的時候,消耗的時間並不是隨著某個變數的增長而增長,那麼無論這類代碼有多長,即使有有幾萬幾十萬行,都是可以用O(1)來表示它的時間復雜度。
3.5.2:對數階O(log2n)
代碼敬上:
說明:
在while循環裡面,每次都是將i*2的。n的值是固定的,所以在i乘完之後,i距離n就越來越近了。假設循環x次之後,i就大於n了,此時這個循環就退出了。也就是說2的x次方等於n了。那麼x=log2n。也就是說當循環了log2n次以後,代碼就結束了。因此這個代碼的時間復雜度就是
O(log2n)。
O(log2n)的這個2時間上是隨著代碼變化的。如果i = i*3,那麼時間復雜度就是O(log3n)
回顧下log的理解(這是初中知識點):
如果a的x次方等於N(a>0,且a≠1),那麼熟x就叫做以a為底的對數(logarithm),記作x=logaN.
其中,a叫做對數的底數,N叫做真數,x叫做「以a為底N的對數」。
3.5.3:線性階O(n)
代碼如下:
說明:
這段代碼,for循環裡面的代碼會執行n次。因此它所消耗的時間隨著n的變化而變化的,因此這類代碼都是可以用O(n)來表示它的時間復雜度。
3.5.4:線性對數階O(nlogn)
代碼如下:
說明:
線性對數階O(nlogN)其實非常容易理解的。將時間復雜度為O(logn)的代碼循環了N次的話,那麼它的時間復雜度就是n*O(logn),也就是O(nlogN)
3.5.5:平方階O(n2)
代碼:
說明:
平方階O(n2)就容易理解了。如果把O(n)的代碼再嵌套循環一遍,它的時間復雜度就是O(n2),
上圖中的代碼起始就是嵌套了2層n循環,它的時間復雜度就是O(n*n),即時O(n2)。如果將其中一層循環的n修改成m,那麼它的時間復雜度就變成了O(m*n).
3.5.6:立方階O(n3)、K次方階O(n^k)
說明:參考上面的O(n2)去理解就好了。O(n3)起始就相當於是三層n循環了。其他的一次類推。
3.6:平均時間復雜度和最壞時間復雜度
平均時間復雜度:
是指所有可能的輸入實例均以概率出現的情況下,該演算法的運行時間
最壞時間復雜度:
是指在最壞情況下的時間復雜度稱為最壞時間復雜度。一般討論時間復雜度均是最壞情況下的時間復雜度。
這樣做的原因:最壞情況下的時間復雜度是演算法在任何輸入實例上運行時間的界限。這就保證了演算法的運行時間不會比最壞情況更長了。
平均時間復雜度和最壞時間復雜度是否一致,和演算法有關。具體如下圖:
四:演算法的空間復雜度
空間復雜度介紹
類似於時間復雜度的討論。一個演算法的空間復雜度(Space Complexity)定義為該演算法所消耗的存儲空間,它也是問題規模n的函數;
空間復雜度是對一個演算法在運行過程中臨時佔用存儲空間大小的量度。有的演算法需要佔用臨時工作單元數與解決問題的規模n有關。它們隨著n的增大而增大,當n較大的時候,將佔用較多的存儲單元(存儲空間)。例如:在快排(快速排序)和歸並排序演算法就屬於這種情況。
在做演算法分析的時候,主要討論的是時間的復雜度。因為從用戶的使用體驗上來看,更看重的是程序執行的速度的快慢。一般緩存產品(比如Redis)和技術排序演算法本質就是拿空間換時間的。
下節預告:
下節我們將講講冒泡排序和選擇排序。使用的是圖解+代碼一步一步推導出來演示的。歡迎大家一起學習
B. C和C++必須學數據結構嗎如果是的話 推薦本書
學計算機如果不學數據結構和演算法我覺得和沒學一樣,CSDN前幾天有一句話「程序中最沒用的就是代碼,真正代表其全部價值的就是數據結構和演算法」,必須學的!
推薦清華大學的嚴蔚敏編著的數據結構教材,C/C++/Java版本的都有,還有《編程之美》也值得一看,《演算法導論》也是必須的!
C. java面試需要看劍指offer 編程之美嗎
public static void main(final String[] args) {
String string = "We Are Happy";
System.out.println(replaceMethod(string));
}
public static String replaceMethod(final String inputString) {
return inputString.replace(" ", "%20");
}
D. 如果我想學習編程,我應先從何學起,請說明並為我推薦幾本入門書籍
推薦經典書籍(內容不全,慢慢補充)
①C語言:(讀完之後請混CSDN論壇進行鞏固)
《C語言程序設計》
作者:郭有強 編
出 版 社:清華大學出版社
評價:書很利索,該有的都有,如果你還沒有一本滿意的C語言課本,買它沒錯。(也可以閱讀外國的經典C語言書籍)
《C和指針》
POINTERS ON C Kenneth A.Reek、
徐波 人民郵電出版社
評價:不算厚的書,糾正對指針的錯誤理解,這是必讀經典,相信會帶給你很多思考。(單單一本還不夠,繼續往後看)
《C陷阱與缺陷》
Andrew Koenig、 高巍
人民郵電出版社
評價:172頁,應當1-2天看完,讀完豁然開朗,對C語言常見的陷阱進行剖析,必須經典。
《C專家編程》
Expert C Programming Deep C Secrets Peter Van
Der Linden 人民郵電出版社 (2008-02出版)
評價:200多頁,應當2天左右看完,本書讀起來很舒坦,不可多得的好書,帶你領略語法之外的奧秘,必讀經典。
②數據結構與演算法:
《清華大學計算機系列教材•數據結構(C語言版)(附光碟1張)》
吳偉民、 嚴蔚敏
清華大學出版社
評價:數據結構都是類C的偽代碼描述,初次接觸編程的同學可能理解不了,我也一樣。我是看嚴蔚敏視頻學會的數據結構,希望這個辦法對你們也同樣有效。
《計算機演算法設計與分析(第3版)》
王曉東
電子工業出版社
評價:這是我們的課本,不過的確是學習它才把數據結構和演算法入門了,為後面進階做了鋪墊。
《演算法藝術與信息學競賽•演算法競賽入門經典》
劉汝佳
清華大學出版社
評價:了解數據結構怎麼用,常用演算法與思想,書不厚,但很給力。初學可能有障礙,但這的確是入門經典書籍,請不要放棄。
《演算法導論(原書第2版)》
科曼(Cormen T.H.)、等、 潘金貴
機械工業出版社 (2006-09出版)
評價:經典中的經典,無需多說,不要問我看哪些內容,負責任的說:有能力就多看點,其實都能看懂,書中的內容與思想將會終身受用。
《編程之美:微軟技術面試心得 》
《編程之美》小組
電子工業出版社
評價:微軟出品,像是一本小故事集,將數學和編程之美展露無疑,學起來很輕松,反復回顧收獲頗豐。
《編程珠璣(第2版)》
Jon Bentley、黃倩、 錢麗艷
人民郵電出版社
評價:主要是數據結構和演算法,都是常用的內容,不過作者思維新奇,跟隨作者一起思考會碰撞出不少火花,評價非常高的一本書,本人沒有順序閱讀,感興趣的內容翻了翻。
《演算法藝術與信息學競賽 》
劉汝佳
清華大學出版社
評價:放在最後,因為此書的確很專業,我這點智商也駕馭不了,信息學競賽必備。
《程序員面試寶典(第3版)》
歐立奇、劉洋、 段韜
電子工業出版社
評價:這本書很神奇,大二下學期的時候我就買了並看完了,等到大三找工作的時候發現里邊的提到的陷阱題目還是有點意思的,C語言掌握的怎麼樣拿這本書驗一驗就知道了。
《數學之美》
(《浪潮之巔》作者吳軍最新力作,李開復作序推薦,Google黑板報百萬點擊)
評價:吳軍博士那是相當犀利,《浪潮之巔》足以讓人拜服了,此書一出無與爭鋒,放在數據結構與演算法這里比較合適
E. 找《編程之美》和《演算法導論》這兩本書。
您是大學,你是第一書籍官員的C + +編程的書,從裡面挑一個自己的一個學習學習C + +程序設計,重新學習視覺幾個C + +6.0編程戰斗,然後再進一步學習Java的過程比較長,要有耐心,如果它是一個自學難,我自學的Visual C + +6.0編程戰斗中遇到了很多的問題,我建議感謝所以輕松一點的分歧
F. 程序員面試寶典 劍指offer 編程之美 哪本書好
不管那版,都需要靠自己。我記得我當時看了下程序員面試寶典,其實這些對筆試題有點幫助,但是最後還是需要自己平時學習扎實才能很好的面對筆試題。對於面試的時候,面試官提的問題,其實也是平時學習的知識和技術,只要你回運用就好。我經歷的過的面試,還是主要靠自己,那些書本都是輔助的。
G. 關於java學習,有什麼書籍或者教程推薦不啦
你好,如果想學習java,推薦自學。如果覺得自己沒有自製力,可以去報個培育班,那裡有人教,會更好點。至於書的話,有很多的,比如說java編程思想等等,要結合自己的實際需要來選擇,然後就是努力了。祝你學有所成!
H. 用java做伺服器開發都要學些什麼啊請高手幫忙解惑 ps:本人不是學計算機專業的。
java 書籍選擇方向
一、入門
《Java 2從入門到精通》- 推薦
《Thinking in Java》- 強烈推薦*
O』reilly的Java編程基礎系列 - 參考*
二、進階
《Java Cook Book》- 非常推薦* (包含了Java編程的Tips,適合當做手冊來查閱)
《O』reilly-Java IO》- 推薦* (包含Java IO編程的各個方面)
《O』reilly-Database Programming with JDBC》- 推薦* (JDBC編程)
《O』reilly-Java Programming with Oracle JDBC》- 參考*
三、Java Web編程
《O』reilly-Java Server Pages》- 強烈推薦*
《O』reilly-Java Servlet Programming》- 非常推薦*
《O』reilly-Jakarta Struts》- 推薦* (Java Web編程的一個MVC實現框架Struts的書)
四、EJB編程
《J2EE應用與BEA Weblogic Server》- 強烈推薦
《Mastering EJB 2.0》- 非常推薦*
《Enterprise Java Bean》- 推薦*
五、Java XML編程
《O』reilly-Java and XML》- 推薦*
《O』reilly-Java and SOAP》- 參考* (Java的SOAP編程)
六、設計模式
《Core J2EE Patterns》- 強烈推薦* (J2EE設計模式,設計企業應用軟體必備參考書)
《EJB Design Patterns》- 推薦*
七、其它
《O』reilly Ant - The Definitive Guide》- 推薦* (Ant是一種功能非常強大的Java工具)
Note:
強烈推薦書籍:建議購買,重點學習
非常推薦書籍:建議花時間學習
推薦書籍:在學有餘力的情況下,建議學習
參考書籍:有興趣的情況下學習
Java, 那些美妙的書籍
文章分類:Java編程
整理一下最近看過或者比較有興趣的Java書籍,以供大家參考:
1,數據結構、演算法方面
《演算法導論》 適合有一定基礎而且可以平心靜氣慢慢推薦的人看,有一定難度。個人覺得這本書可以讓程序員的水平提升一個檔次。(附件有MIT的部分答案)
2,Java 基礎相關
《Java 編程思想》 不多說了,看過,沒看完,不過的確名不虛傳 (附件添加第三版的電子書,中文)
《輕松學用Java2》 個人的Java入門書籍,很適合Java初學者
《Effective Java》正在看,很不錯,建議e文不錯的直接看英文原版,雖然很多東西以前也會注意到,但是系統的過一遍還是有好處的。(英文版部分章節電子書見附件)
《深入JVM》適合想進一步了解Java以及JVM虛擬機實現的,寫的不錯。不過很難買得到書了,附件提供中文電子版的下載(掃描版,不是很清晰,還有 英文chm版)。
《Java解惑》 再加一本Java進階的書,這本書跟Effective Java類似,不過更直接,將各種可能出現的問題進行了歸納整理,目前手頭有中文版部分章節的電子書,看看先再決定是不是要買。
3,Eclipse plugin/RCP開發
《Eclipse 從入門到精通》,陳剛著,雖然看完了不一定精通,但是作為少有的幾本國內優秀的Eclipse教材,很不錯了。個人的RCP入門書籍。(部分章節電子書見 附件)
《Eclipse Rich Client Platform》,著名Addison Wesley Eclipse Rich Client Platform 的第二版,Eclipse官網推薦,hyperbola示例很有用。(電子書見附件)
《Contributing To Eclipse》,大師經典之作。遺憾的是現在各大書店都沒貨。(附件中有英文版chm格式電子書)
《Swt JFace in Action》個人覺得in action 系統的書都不錯,包括《Eclipse in action》《JUnit in action》等,本書對SWT/Jface 組件講得很詳細,也有很多示常式序。(電子書見附件)
《RCP 教程》個人整理的RCP教程,已經在CSDN上提供下載了。
4,GEF/EMF
《Eclipse Model Framework》,第二版出了,中文版也有了,這方面根本沒有多少可以選擇的餘地。GEF就完全沒有成形的書,EMF據我所知就這一本了。不便宜,看 過第一版的電子書,那時候覺得對應的版本太老了,看不下去。第二版有機會再試試。
GEF相信很多人是看八進制的博客,和Eclipseworld社區上的某位熱心的tx翻譯的一本日文教材入門的,至少我是,後來又收集了一些其他方面的 資料,不過還是太少。附件有IBM Developerworks上的GEF進階系列的文章的電子書版。
4, 結構、設計模式
《敏捷軟體開發——原則、模式和實踐》,Uncle Bob的大作,個人強烈推薦。裡面很詳細的講解了敏捷開發,以及很多實例。這本書花了很多章節講解常用設計模式,例子非常巧妙,部分由C++實現,也有 Java實現的。如果想了解敏捷開發、軟體類包設計、設計模式這方面的東西,這本書是不二選擇。
《設計模式》 GOF的23種設計模式。不多說了,有人說很難懂,有人說很經典。(已添加電子書,中英版本都有,pdf)
比較適合入門的還是《Head First 設計模式 》系列,至少語言更生動,一樣有人貶低有人熱捧,建議先看電子書再決定 是否買,有點小貴。
《Thinking in Patterns》,突然想起Eckel還有一本講設計模式的書,很早就聽說過了,這本書還沒看過,不過還是列出來吧。
5,JUnit
《JUnit in action》講解JUnit很不錯的一本書,某看了一部分,受益匪淺,使用JUnit測試就是從看這本書起的。
6, 編程技巧
《編程之美》,據說是微軟的面試題集合,不過有些題的確不太好搞。提供部分章節電子書下載,有興趣的可以看看。
先 寫這么多了,上面的書某90%都看過,如果有什麼與各位見解上的差距,還請諒解。
索性再加幾本電子書吧:
A,《代碼大全》也是久負盛名的書了,中文版 清晰版
學院派圖書
Java編程入門類
對於沒有Java編程經驗的程序員要入門,隨便讀什麼入門書籍都一樣,這個階段需要你快速的掌握Java基礎語法和基本用法,宗旨就是「囫圇吞棗不求甚 解」,先對Java熟悉起來再說。用很短的時間快速過一遍Java語法,連懵帶猜多寫寫代碼,要「知其然」。
1、《Java編程思想》
在有了一定的Java編程經驗之後,你需要「知其所以然」了。這個時候《Java編程思想》是一本讓你知其所以然的好書,它對於基本的面向對象知 識有比較清楚的交待,對Java基本語法,基本類庫有比較清楚的講解,可以幫你打一個良好的Java編程基礎。這本書的缺點是實在太厚,也比較羅嗦,不適 合現代人快節奏學習,因此看這本書要懂得取捨,不是每章每節都值得一看的,挑重點的深入看就可以了。
2、《Agile Java》中文版
這本書是出版社送給我的,我一拿到就束之高閣,放在書櫃一頁都沒有翻過,但是前兩天整理書櫃的時候,拿出來一翻,竟然發現這絕對是一本好書!這本 書一大特點是以單元測試和TDD來貫穿全書的,在教你Java各種重要的基礎知識的過程中,潛移默化的影響你的編程思維走向敏捷,走向TDD。另外這本書 成書很新,以JDK5.0的語法為基礎講解,要學習JDK5.0的新語法也不錯。還有這本書對於內容取捨也非常得當,Java語言畢竟類庫龐大,可以講的 內容太多,這本書選擇的內容以及內容的多寡都很得當,可以讓你以最少的時間掌握Java最重要的知識,順便培養出來優秀的編程思路,真是一本不可多得的好 書。
雖然作者自己把這本書定位在入門級別,但我不確定這本書用來入門是不是稍微深了點。
Java編程進階類
打下一個良好的Java基礎,還需要更多的實踐經驗積累,我想沒有什麼捷徑。有兩本書值得你在編程生涯的這個階段閱讀,培養良好的編程習慣,提高你的代碼質量。
1、《重構 改善既有代碼的設計》
這本書名氣很大,不用多介紹,可以在閑暇的時候多翻翻,多和自己的實踐相互印證。這本書對你產生影響是潛移默化的。
2、《測試驅動開發 by Example》
本書最大特點是很薄,看起來沒有什麼負擔。你可以找一個周末的下午,一邊看,一邊照做,一個下午就把書看完,這本書的所有例子跑完了。這本書的作用是通過實戰讓你培養TDD的思路。
Java架構師之路
到這個階段,你應該已經非常嫻熟的運用Java編程,而且有了一個良好的編程思路和習慣了,但是你可能還缺乏對應用軟體整體架構的把握,現在就是你邁向架構師的第一步。
1、《Expert One-on-One J2EE Design and Development》
這本書是Rod Johnson的成名著作,非常經典,從這本書中的代碼誕生了springframework。但是好像這本書沒有中譯本。
2、《Expert One-on-One J2EE Development without EJB》
這本書由gigix組織翻譯,多位業界專家參與,雖然署名譯者是JavaEye,其實JavaEye出力不多,實在是忝居譯者之名。
以上兩本書都是Rod Johnson的經典名著,Java架構師的必讀書籍。在我所推薦的這些書籍當中,是我看過的最仔細,最認真的書,我當時讀這本書幾乎是廢寢忘食的一氣讀 完的,有小時候挑燈夜讀金庸武俠小說的勁頭,書中所講內容和自己的經驗知識一一印證,又被無比精闢的總結出來,讀完這本書以後,我有種被打通經脈,功力爆 增的感覺。
但是後來我看過一些其他人的評價,似乎閱讀體驗並沒有我那麼high,也許是因為每個人的知識積累和經驗不同導致的。我那個時候剛好是經驗知識積累已經足夠豐富,但是還沒有系統的整理成型,讓這本書一梳理,立刻形成完整的知識體系了。
3、《企業應用架構模式》
Martin的又一本名著,但這本書我只是泛泛的看了一遍,並沒有仔細看。這本書似乎更適合做框架的人去看,例如如果你打算自己寫一個ORM的 話,這本書是一定要看的。但是做應用的人,不看貌似也無所謂,但是如果有空,我還是推薦認真看看,會讓你知道框架為什麼要這樣設計,這樣你的層次可以晉升 到框架設計者的角度去思考問題。Martin的書我向來都是推崇,但是從來都沒有像Rod Johnson的書那樣非常認真去看。
4、《敏捷軟體開發 原則、模式與實踐》
Uncle Bob的名著,敏捷的經典名著,這本書比較特別,與其說是講軟體開發過程的書,不如說講軟體架構的書,本書用了很大篇幅講各種面向對象軟體開發的各種模式,個人以為看了這本書,就不必看GoF的《設計模式》了。
軟體開發過程
了解軟體開發過程不單純是提高程序員個人的良好編程習慣,也是增強團隊協作的基礎。
1、《UML精粹》
UML其實和軟體開發過程沒有什麼必然聯系,卻是軟體團隊協作溝通,撰寫軟體文檔需要的工具。但是UML真正實用的圖不多,看看這本書已經足夠了,完全沒有必要去啃《UML用戶指南》之類的東西。要提醒大家的是,這本書的中譯本翻譯的非常之爛,建議有條件的看英文原版。
2、《解析極限編程 擁抱變化》XP
這是Kent Beck名著的第二版,中英文對照。沒什麼好說的,必讀書籍。
3、《統一軟體開發過程》UP
其實UP和敏捷並不一定沖突,UP也非常強調迭代,測試,但是UP強調的文檔和過程驅動卻是敏捷所不取的。不管怎麼說,UP值得你去讀,畢竟在中國真正接受敏捷的企業很少,你還是需要用UP來武裝一下自己的,哪怕是披著UP的XP。
4、《敏捷建模》AM
Scott Ambler的名著,這本書非常的progmatic,告訴你怎麼既敏捷又UP,把敏捷和UP統一起來了,又提出了很多progmatic的建議和做法。 你可以把《解析極限編程 擁抱變化》、《統一軟體開發過程》和《敏捷建模》這三本書放在一起讀,看XP和UP的不同點,再看AM是怎麼統一XP和UP的,把這三種理論融為一爐,形 成自己的理論體系,那麼你也可以去寫書了。
軟體項目管理
如果你突然被領導提拔為項目經理,而你完全沒有項目管理經驗,你肯定會心裡沒底;如果你覺得自己管理項目不善,很想改善你的項目管理能力,那麼去考PMP肯定是遠水不解近渴的。
1、《快速軟體開發》
這也是一本名著。可以這樣說,有本書在手,你就有了一個項目管理的高級參謀給你出謀劃策,再也不必擔心自己不能勝任的問題了。這本書不是講管理的 理論的,在實際的項目管理中,講這些理論是不解決問題的,這本書有點類似於「軟體項目點子大全」之類的東西,列舉了種種軟體項目當中面臨的各種問題,以及 應該如何解決問題的點子,你只需要稍加變通,找方抓葯就行了。
找個相關工作,踏踏實實干吧,戒浮躁~~~
I. 初學Web前端推薦什麼書籍學習
做前端開發9年,推薦你下看下面的6本書
超級前端暢銷書,作為前端程序員必讀兩遍以上的書籍,這本書籍特別適合初學前端的新人,前端的核心技術就是JavaScript,同時也是前端的難點。而這本書非常適合入門,通俗易懂,生動的案例可以讓初學者更好的進行理解。所提及的很多編程思想卻適合低中級層次的前端開發者學習。
如果不想買紙質版的書籍,到我的前端交流分享群進行下載PDF電子書。
常在這里回答問題,熱愛技術,喜歡幫別人解答行業技術問題和行業知識。
如果大家對於學習前端有任何不懂的可以隨時來問我,我給你提供一個非常不錯的前端交流學習qun:前面是二九六,中間是二一二,後面是五六二。有問題就在裡面問我,這樣你可以少走很多彎路,做起來有效率,記得多跟有經驗的人交流,別閉門造車。如果沒有比較好的教程,也可以管我要。
你對此有什麼見解,覺得小編推薦的這些前端書籍還靠譜嗎?
評論區說出你的想法!
J. 碩士畢業程序員找工作準備階段應該看些什麼書
技巧:
《程序員面試寶典》這本書有Java、C++等各種版本,主要介紹筆試面試常考的題,有些知識點真的很細,非常值得看。
數據結構和演算法:
《編程之美》裡面的編程題經常考到,有些可能比較難。
《劍指offer》這個是強烈推薦的,掌握解決問題的思路很重要。比如以空間換時間、動態規劃等。
《數據結構》這個不用多說,鏈表、樹、圖是經常考到的。
《演算法導論》有精力的話,可以選擇性的看一看。
《編程珠璣》
語言:
《深入淺出MFC》
《深度探索C++對象模型》介紹C++面向對象中的構造函數、虛函數等,看完之後能理解程序的運行結果了。
《C++ Primer》大量C++的基礎,不過基礎不太好的同學建議看譚浩強的《C++程序設計》。
《Effective C++》
《Java編程思想》
《大象Thinking in UML》
《JavaScript 權威指南》
《C++標准程序庫》
《STL源碼剖析》
設計模式:
《設計模式》
《HeadFirst設計模式》
腳本語言:
《Python學習手冊》
掌握一門腳本語言很必要,最好有工程實踐。
操作系統方面:
《linux程序設計-鳥哥的私房菜》。
《UNIX網路編程》
不但要會基本命令,最好能在linux環境下有編程經驗。
《深入理解計算機系統》個人覺得這本書並不好。
資料庫:
沒有發現更好的,要會基本的SQL命令。