金九银十北漂记第2篇:《Java程序员面试宝典》读书笔记
盡信書,則不如無書。—–孟子
談一談這本書
?《Java程序員面試寶典》是我接觸的第一本講解面試相關的書籍在看到這本書之前我就經常逛csdn的bbs,已經接觸面試之類的知識。不過這本書還是帶給我好運,在去年的校招中學會一些技巧,乃至獲得幾家offer的機會。
?老早就聽別人說這本書有很多詬病,比如:錯漏百出,概念不清,代碼混亂,排版錯誤,不遵循Java編碼風格等 ,還有,作為一本《Java面試書籍》,里面有很多c/c++方面的東西,這可能與作者寫《程序員面試寶典》有關,因為這本書是另一本的姊妹篇。去年的這個時候我在學校圖書館借閱到了這本書,感覺真的是一本寶典。當時在網上的大神它的批評,我內心覺得太過苛刻,是無法接受大神對這本書批判的。今年的這個時間點又到我求職面試的季節,聽說這本書出到了第4版本了,想必應該修改了不少地方了,將書中不足之處做了修改。于是在京東買了最新一版的第4版回來,心里滿滿的期待感。看到前言提到“更新了部分程序面試題目,內容主要取材于2013年至2015年多家大公司的面試題”,心想肯定是撿到了干貨。
?下面是我的讀書筆記,不是一味的批判本書,而是在我現有的技術基礎上讀到的感悟,取其精華,去其糟粕。
第5章 JAVA程序設計基本概念
?前四章的主要內容是交代求職過程,比如如何寫簡歷,如何參加校招等,遵循它的原則,我寫了自認為比較滿意的簡歷。我覺得如果作者加上社招的經驗就更好了,如今互聯網這么火,加上Java是互聯網的第1開發語言,作者應該談一談社招與互聯網的關系。談一談智聯,51job,拉鉤,內推等網站,哪些適合什么人投簡歷等等。正如像博主這種只有半年的工作經驗,參加過校招,但是沒有社招經驗的人,很是需要這方面的指導。當然了,不能一味的書上寫有的才去做,不寫就不知道怎么做,這不變成一書呆子了么?
1.i++問題:
下面程序輸出結果是多少?
這里需要注意的是第3行的int x = 5;因為它是局部變量,x=5不影響后面的值。
下列程序的輸出結果是:
public class Test1 {public static void main(String[] args) {int j = 0;for(int i = 0; i < 100; i++) {j = j++;}System.out.println(j);} } 答案:0因為Java用了中間緩存變量的機制,所以,循環體里面的j=j++可換成如下寫法:
temp = j; j = j + 1; j = temp;2.類型轉換
下列的語法正確的是?
參考答案是:D.
?但是一切都是編譯器說了算了。編譯器告訴我:B才是正確答案。A和D這種后綴幾乎不存在,1.0默認是double類型,如果非要說1.0是float型的話,一般都是這樣寫的:1.0f。還有length()和length的區別是:length用于數組的長度,length()用于字符串長度。
?作者在講解自動了類型轉換的時候,舉例子有范了錯誤。原文:
低級變量可以直接轉換為高級變量,這叫做自動類型轉換。例如,下面的語句可以在Java中直接通過:
?作者的講解時沒有錯的,錯就錯在這個例子上面,這里的變量b未初始化就直接使用了,在Java會報錯:The local variable b may not have been initialized.所以說上面的語句在Java中直接通不過。
包裝類過度類型轉換
?原文說:Java的包裝類就是可以直接將簡單類型的變量表示為一個類。Java共有六個包裝類,分別是Boolean、Character、Integer、Long、Float和Double.
Java的數據類型不是有8中么?還是byte和short呢?他們對應的包裝類是Byte,Short。
作者的例1:
當希望吧float轉換為double型時:
?代碼第二行的Float應該大寫,這可能是印刷有問題,不過這還真的應正了其他網友的那句話:排版不嚴謹。還有變量的命名也不嚴謹吧,變量名都是小寫字母開頭,這都是一種習慣而已。
3.main方法的寫法問題:
下面那個main函數的聲明是不合法的?
?參考答案:D。但是,A也是不合法的,對于每一個java Coder來說,hello world應該都是第一個Java程序,開始寫了這么久的程序,可能沒有關注過main函數到底是怎么寫的,更不關注這個返回值的意義,是不是像c/c++那樣返回給系統的。我的理解main方法的寫法有點類似于方法的重載,返回值和參數個數類型必須一致。
?原書講解錯誤之處:
A,B選項是合法的。C選項拋出一個文件異常,但也是合法的,并可以通過,至于選項D,因為main方法必須是public,默認的代表是protect,所以是不合法的。
?這個解釋導致讀者會誤認為:一個方法默認的屬性是protect范圍的,然而Java有四個屬性范圍,他們分別如圖:
?這張圖一目了然,如果你在方法或者變量前面沒有加屬性的范圍,那么默認是default級別的,不是protected。作者以為不寫就是protected,而default的范圍和protected范圍是不一樣的。還有,作者把protected寫成:protect,我相信這可能是粗心大意造成的,不過書中有太多類似的地方。如果說作者的對Java的屬性范圍不清楚是功夫不到家,那么把關鍵詞寫錯,那就是在忽悠讀者了。
4.運算符
以下代碼輸出結果是:
?答案:120 x。很怪異的結果,編譯器確實結果也是這樣的,反正解析還是不能讓我信服。
5.&運算符
?&運算符以前我只知道是按位與,后來才知道,這哥們除了能夠按位與之外,還有邏輯與的功能,不過這哥們與&&的區別是,&&是短路與,如果前面的條件為假,后面不再執行。而&不是短路與,無論前面的條件是真是假,照樣執行后面的語句。如以下代碼:
int m = 5; int n = 5; if( (m != 5) && ( (n++ == 5) ) {Sysout.out.println("進來過"); } Sysout.out.println(n);(m != 5)是false,后面的那個n++不再執行,因此輸出的n是5。
int m = 5; int n = 5; if( (m != 5) && ( (n++ == 6) ) {Sysout.out.println("進來過"); } Sysout.out.println(n);比較一下有什么區別吧。
5.final,finally,finalize的區別。
?這道題貌似去年做準備的看過,不過去年的面試中,從來沒有遇見過有面試官問到這道題。
總結
?不要迷信書,盡信書不如無書。眼看千遍不如手過一遍,編譯器是最終的解釋權。但是目前我的技術水平,還是需要靜下心讀書。那么問題又來了,到底要不要看書,答案是肯定的。那就要多看書,看好書。
總結
以上是生活随笔為你收集整理的金九银十北漂记第2篇:《Java程序员面试宝典》读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于freeradius的无线认证
- 下一篇: 思想者:漫谈大学生的四个LEARN