程序員面試寶典及攻略

時(shí)間:2022-06-24 06:57:11 面試 我要投稿
  • 相關(guān)推薦

程序員面試寶典及攻略

猛批爛書(shū) 程序員面試寶典 上

程序員面試寶典及攻略

最近看到一本爛書(shū),本來(lái)忽略過(guò)去就是了,可惜這本爛書(shū)還挺流行,為了阻止它繼續誤人子弟,我不得不花點(diǎn)時(shí)間出來(lái),猛批此書(shū),請大家不要上當,買(mǎi)了此書(shū)的趕快銷(xiāo)毀不要扔掉,以免別人撿去上當,打算買(mǎi)的先來(lái)看看我的意見(jiàn)再做決定,把此書(shū)借給別人的趕快要回來(lái)銷(xiāo)毀,從別人那里借了此書(shū)的趕快還回并且告訴人家我的意見(jiàn)。

我自己在面試和被面試上都有一些經(jīng)驗,在本文最后,我會(huì )給出自己在這方面的建議,希望能對大家有所幫助,尤其是那些因為我的文章而放棄了這本爛書(shū)的同學(xué),我希望我的建議能填補你這方面的需要。

爛書(shū)的書(shū)名

中文名:程序員面試寶典

英文名:BEST PRACTICE FOR PROGRAMMER INTERVIEW

(小沈陽(yáng):我的中文名字是 小沈陽(yáng),英文名字是 Xiao Shen Yang)

爛的原因

這本書(shū)的目的是賺錢(qián),完全不是為了提高大家的面試筆試水平,所以出現下面的情況,也是理所當然的了:首先,這本書(shū)名字起的好,營(yíng)銷(xiāo)也做的好,否則不會(huì )這么流行;可惜內容不好,屬于有能力沒(méi)道德類(lèi)型的壞人,能力越大,破壞越大。其次,這本書(shū)基本上是以一種應對考試的方式來(lái)應對找工作的筆試和面試,剛剛從學(xué)校出來(lái)的同學(xué)們正是考試的好手,如果還以這種心態(tài)來(lái)應對筆試面試后果是很不妙的。最后,這本書(shū)當中講解的東西大部分基礎簡(jiǎn)單的內容都是對的,比較高級的內容偏偏是錯的,屬于隱蔽的很深的壞人,倒霉了還不知道是誰(shuí)干的,最壞。

這本書(shū)我隨便翻了翻,幾乎氣死,哪里有這樣介紹東西的?自己都是一知半解,就來(lái)編制寶典,真個(gè)是以己之昏昏明人之昭昭啊。還忽悠那么多剛剛或者即將步出校門(mén)的同學(xué)從微薄的生活費里擠出三十九塊錢(qián)買(mǎi)來(lái)上當。編書(shū)的賺到錢(qián)了,同學(xué)們找不到工作他們可不管本來(lái)我也不用管,可是我的女朋友也在找工作,也買(mǎi)了這本爛書(shū)(可以吃多少個(gè)排骨啊!),我就不能不管了!

下面,我會(huì )把這本書(shū)當中的錯誤、混亂、語(yǔ)無(wú)倫次、蒙混過(guò)關(guān)之處,只選擇我隨便翻翻出來(lái)的一小部分羅列出來(lái),讓大家看看這本書(shū)的真面目是如何的爛。這并不是說(shuō)這本書(shū)就只有我列出來(lái)的這些問(wèn)題,還有更多我看到了沒(méi)有寫(xiě)(沒(méi)功夫,也不想把他們教聰明了),更多更多的是我沒(méi)發(fā)現的。另外,我個(gè)人只對C/C++/STL有深入的認識,所以,我也只對這方面揭批一下,請對其他方面精通的好同志在其他地方揭批其他方面,也請精通C/C++/STL的好同志對我的錯誤不吝賜教。

爛的方面

對第六章到第九章,我隨手翻了翻,第十章我看的比較仔細,因為我對C++面向對象很感興趣。后面的,由于第十章里面錯誤太多,我沒(méi)有看以免氣到自己(很多地方寫(xiě)的,態(tài)度非常成問(wèn)題!完全是在敷衍,我真懷疑他們寫(xiě)這么一厚本書(shū)花的心思,有沒(méi)有我寫(xiě)這篇短文的心思多?)

6.4 內聯(lián)函數和宏定義,在這一個(gè)小節當中的問(wèn)題如下:

首先,這個(gè)小節的寫(xiě)作態(tài)度不認真水平很馬虎:這個(gè)小節大概是在網(wǎng)上搜了搜關(guān)于inline和宏就寫(xiě)完了,所以只是語(yǔ)無(wú)倫次的介紹了基本概念,但是沒(méi)有涉及任何高級特性他們絕對不是為了避免讀者無(wú)法理解而不涉及高級特性的,而是他們自己不懂,否則的話(huà),我不相信這幫人會(huì )不抓緊賣(mài)弄一下自己的“學(xué)識”。如果你想知道這個(gè)小節有多垃圾,就去看看msdn上關(guān)于inline的介紹,或者TPCL當中對inline的介紹就可以了。

其次,羅嗦得語(yǔ)無(wú)倫次且不著(zhù)重點(diǎn):內聯(lián)函數和宏定義的區別,大概只要幾句話(huà)就可以說(shuō)清楚,這本書(shū)用了幾段話(huà)反而說(shuō)糊涂了,而且最重要的一句話(huà),沒(méi)說(shuō)(參見(jiàn)第五)。

第三,把清楚的解釋糊涂了:原文當中有這樣一句“對于短小的代碼來(lái)說(shuō),inline可以帶來(lái)一定的效率提升,而且和C時(shí)代的宏函數相比,inline更安全可靠?墒沁@個(gè)是以增加空間消耗為代價(jià)的!卑凑者@兩句話(huà)的意思,inline增加空間消耗換來(lái)的是比宏更加安全?知道的自然明白是書(shū)上漏了一句話(huà),不知道這不就被蒙了?讀爛書(shū)還是馬虎點(diǎn)好,不是被蒙就是被氣。實(shí)際情況是,inline增加空間消耗換來(lái)的是效率提高,這方面和宏是一模一樣的,但是inline在和宏相比沒(méi)有付出任何額外代價(jià)的情況下更安全。

第四、例子像漿糊一樣,注釋像例子一樣:唯一的一個(gè)例子,我不厭其煩的抄錄如下、

inline fac(float i) {return i * i};//沒(méi)有寫(xiě)返回值

printf("bb = %d", fact(8));//調用時(shí)就是執行printf("bb = %d", 8 * 8);

這個(gè)例子和其中的注釋?zhuān)胝f(shuō)明什么問(wèn)題?能說(shuō)明什么問(wèn)題?

我估計,想說(shuō)明的問(wèn)題是inline和宏一樣可以展開(kāi),但是那個(gè)自作聰明的注釋?zhuān)瑢?shí)在費解,干嘛不寫(xiě)返回值?在華為這樣寫(xiě)函數連看門(mén)的大爺都會(huì )上來(lái)鄙視一下,這本書(shū)里還當例子拿出來(lái)。我估計寫(xiě)這個(gè)例子的作者,根本不知道如果一個(gè)函數不寫(xiě)返回值的話(huà)編譯器是如何處理的(本科二年級C語(yǔ)言80分以上的都應該知道),他的意圖是向讀者展示inline函數確實(shí)僅僅是擴展開(kāi),即使沒(méi)有返回值也沒(méi)有關(guān)系,因為inline函數僅僅擴展開(kāi)就可以了,不需要返回值他的意圖完全錯誤。而且,調用時(shí)候執行的根本不可能是注釋當中寫(xiě)的那樣,也根本不是例子里面展示的那樣會(huì )展開(kāi),具體如何,請看第五條罪狀。

第五、inlinle函數最重要的一個(gè)特性沒(méi)有說(shuō)到:這個(gè)特性是什么?請你自己先寫(xiě)一個(gè)程序(或者復制我的):

#include

inline int fact(int i) { return i * i;}

int main()

{

printf("%d", fact(8));

}

把這個(gè)程序在VS2003當中編譯一下,然后分別在Debug和Release模式下進(jìn)行調試,斷點(diǎn)放在printf那一行,程序暫停以后點(diǎn)擊右鍵,選擇“Go to disassemlby”,進(jìn)入到匯編碼,在Debug模式下,你會(huì )看到這樣的情況:、

printf("%d", fac(8));

00411D3E push 8

00411D40 call fact (41168Bh)

00411D45 add esp,4

00411D48 push eax

00411D49 push offset string "%d" (42B01Ch)

00411D4E call @ILT+1500(_printf) (4115E1h)

00411D53 add esp,8

在release下你會(huì )看到這樣的情況:

printf("%d", fac(8));

00401000 push 40h

00401002 push offset string "%d" (4060FCh)

00401007 call printf (401012h)

0040100C add esp,8

如果你還沒(méi)有體會(huì )出來(lái),提示一下,在debug模式下有一個(gè)call fact,fact?怎么那個(gè)inline函數被調用了?不是說(shuō)展開(kāi)么?但是在release模式下,你看到8 * 8了沒(méi)?只有一個(gè)40h,把這個(gè)十六進(jìn)制的數字換算成十進(jìn)制同樣,為什么也沒(méi)有展開(kāi)呢?總之,是沒(méi)有按照那本書(shū)例子當中注釋說(shuō)的執行,為什么呢?

原因在msdn里說(shuō)的很清楚:The ion (called inline expansion or inlining) occurs only if the compiler's cost/benefit analysis show it to be profitable. 編譯器只在計算之后認為值得的時(shí)候才會(huì )擴展inline函數。

這么小一個(gè)知識點(diǎn)就能犯這么多錯誤,也只有這本爛書(shū)能做到了。

7.1節 面試例題3

這只是一道例題,但是非常典型的展示了這本書(shū)是如何的避重就輕的解釋問(wèn)題和作者自己的C++真實(shí)水平。題目如下:

Which of the following is NOT true about the "this" pointer of class X?

A. It lets each object of class X to access its address. (讓X類(lèi)的每一個(gè)對象指向它的地址)

B. It will be implicitly passed as argument of every non-static member function of class X. (可以隱性傳遞this指針)

C. It can not be used explicitly in memeber function of class X. (不能在類(lèi)的成員函數里明確的聲明)

D. Its type is const X* in const member function of class X. (它是常量函數中的一個(gè)常量指針)

答案是C,原書(shū)的解釋我就不抄了,僅僅解釋了this的用法,還給出了一段完全不著(zhù)調的例程,對于問(wèn)題當中考察的四個(gè)要點(diǎn),都沒(méi)有介紹原因,僅僅解釋了一下this的用法,就算解析完成了?這和告訴讀者,this指針的拼寫(xiě)是t-h-i-s有什么區別?這還不是最大的問(wèn)題。

最大的問(wèn)題在于添加的那些翻譯,這些翻譯是書(shū)的作者添加的,不是我加的。如果對著(zhù)那些翻譯,你能選出C來(lái)嗎?ACD都可以選,B之所以不選是因為不知所云。我來(lái)給個(gè)翻譯:

A. this指針讓X類(lèi)的對象能夠訪(fǎng)問(wèn)自己的地址(關(guān)鍵點(diǎn):every和each的區別,access的詞義)

B. this指針會(huì )被隱性的當作一個(gè)參數傳遞給X類(lèi)的每一個(gè)非靜態(tài)函數(關(guān)鍵點(diǎn):翻譯以前要看懂原文)

C. this指針不能在X類(lèi)的成員函數里顯式聲明(關(guān)鍵點(diǎn):恰當使用專(zhuān)業(yè)術(shù)語(yǔ),漢語(yǔ)可以沒(méi)有賓語(yǔ)但是不能沒(méi)有主語(yǔ))

D. 在X類(lèi)的經(jīng)過(guò)const修飾的成員函數里,this指針的類(lèi)型是const X*(關(guān)鍵點(diǎn):翻譯以前不可以誤解原文)

想到6.4節里那個(gè)莫名其妙的注釋?zhuān)@里出現歪曲原意的翻譯也是很自然的了,這幫人莫非是用金山快譯翻譯的?還是盜版的?

8.1節 面試例題1

這個(gè)題目給出了一個(gè)計算階乘的例子程序,是錯的,首先編譯無(wú)法通過(guò),有語(yǔ)法錯誤;其次邏輯有錯誤,沒(méi)人能預料到它的輸出是什么;最后編碼風(fēng)格很爛,這樣寫(xiě)代碼的人,只能去此書(shū)編輯部上班,其他公司都不會(huì )要的總之錯的我很無(wú)語(yǔ),這還是示例,我看這是典型錯誤示例還差不多!寫(xiě)出這樣程序的人,需要回爐重造,從if-else開(kāi)始重學(xué)四年編程再說(shuō);而把這樣程序當例子做示范的人么,只能去編書(shū),對,就是編一本英文名字是“BEST PRACTICE FOR PROGRAMMER INTERVIEW”的書(shū)。

來(lái)吧,買(mǎi)書(shū)了的請把書(shū)翻到83頁(yè),看“答案”兩個(gè)字下面的東西;沒(méi)書(shū)的看這里,我抄上來(lái)了:

int n,t;

int find(int n);

{

if (n=1) t=1;

else

{

return find (n-1) * n;

}

}

main()

{

cin >> n;

find(n);

printf('N!=', t:1:0)

【程序員面試寶典及攻略】相關(guān)文章:

程序員面試寶典07-09

程序員筆試面試寶典07-13

面試寶典07-13

unity 面試寶典07-11

高效面試技巧寶典06-23

面試攻略之面試心理攻略07-11

職場(chǎng)女性英語(yǔ)面試寶典06-29

英語(yǔ)面試寶典在校表現06-29

英語(yǔ)面試寶典求職理由06-29

職場(chǎng)攻略寶典:工作中如何調整心態(tài)07-12

99久久精品免费看国产一区二区三区|baoyu135国产精品t|40分钟97精品国产最大网站|久久综合丝袜日本网|欧美videosdesexo肥婆