国语精品91自产拍在线观看二区_色偷偷五月天_天天射夜夜爽_99久久免费国产特黄_1717国产精品久久

程序員面試寶典及攻略

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

程序員面試寶典及攻略

猛批爛書 程序員面試寶典 上

程序員面試寶典及攻略

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

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

爛書的書名

中文名:程序員面試寶典

英文名:BEST PRACTICE FOR PROGRAMMER INTERVIEW

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

爛的原因

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

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

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

爛的方面

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

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

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

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

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

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

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

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

這個例子和其中的注釋,想說明什么問題?能說明什么問題?

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

第五、inlinle函數(shù)最重要的一個特性沒有說到:這個特性是什么?請你自己先寫一個程序(或者復(fù)制我的):

#include

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

int main()

{

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

}

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

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下你會看到這樣的情況:

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

00401000 push 40h

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

00401007 call printf (401012h)

0040100C add esp,8

如果你還沒有體會出來,提示一下,在debug模式下有一個call fact,fact?怎么那個inline函數(shù)被調(diào)用了?不是說展開么?但是在release模式下,你看到8 * 8了沒?只有一個40h,把這個十六進制的數(shù)字換算成十進制同樣,為什么也沒有展開呢?總之,是沒有按照那本書例子當中注釋說的執(zhí)行,為什么呢?

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

這么小一個知識點就能犯這么多錯誤,也只有這本爛書能做到了。

7.1節(jié) 面試例題3

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

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類的每一個對象指向它的地址)

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. (不能在類的成員函數(shù)里明確的聲明)

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

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

最大的問題在于添加的那些翻譯,這些翻譯是書的作者添加的,不是我加的。如果對著那些翻譯,你能選出C來嗎?ACD都可以選,B之所以不選是因為不知所云。我來給個翻譯:

A. this指針讓X類的對象能夠訪問自己的地址(關(guān)鍵點:every和each的區(qū)別,access的詞義)

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

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

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

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

8.1節(jié) 面試例題1

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

來吧,買書了的請把書翻到83頁,看“答案”兩個字下面的東西;沒書的看這里,我抄上來了:

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

職場女性英語面試寶典06-29

英語面試寶典在校表現(xiàn)06-29

英語面試寶典求職理由06-29

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