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