程序員面試寶典 勘誤_第1頁
程序員面試寶典 勘誤_第2頁
程序員面試寶典 勘誤_第3頁
程序員面試寶典 勘誤_第4頁
程序員面試寶典 勘誤_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、P38,5.5節 面試例題1       解析過程表達和邏輯錯誤,沒有說明結果是250的真正原因。“最后的結果應該是2,但在vs2008結果居然是250”說法牽強無邏輯,任何一個C+的程序的結果是理論上就確定的(包括未定義也是一種答案,由編譯器實現也是一種確切的回答。比如局部變量int i沒有初始化,那么它的值是未定義的,不會因為編譯器是什么就是什么;比如 sizeof(int)的大小是由編譯器和機器決定的,不能說因為編譯結果是4就是4),不會因為編譯器怎樣就是什么結果;如果語言沒定義就叫沒定義,如果由編譯器實現就是編譯器實

2、現而定,不會說因為編譯器的結果是怎樣的,就該是怎樣的。C/C+語言本身是自完備的、自兼容的、自表達的。       本題是這樣的,a操作時,會對a進行整型提升,a是無符號的,提升時左邊補0(一般機器32位,char是8位,左邊24個1;16位int則左邊補8個0),取反后左邊為1,右移就把左邊的1都移到右邊(注意是算術移位),再按照無符號讀取,才有250這個結果。P39,5.5節 面試例題3       “這個的結果是x和y相同位的一半”,結果是相同位,也

3、就是相同位的和的一半。P40,5.6節 面試例題1       方案一中,a-b可能溢出,這個應該需要提出,方案二同樣,如果考慮溢出該怎么做?可以做相關判斷,或者考慮位運算結合布爾邏輯數學公式、布電這類的方法。P41,5.7節 面試例題2       “頭文件ifndef/define/endif干什么用的”,準確的說,它是條件編譯的一種,除了頭文件被防止重復引用(整體),還可以防止重復定義(變量、宏或者結構)。P43,5.8節 面試例題 

4、60;     去掉C/C+里的注釋。1)單引號里有注釋的情況是不可能的,當然這個對結果沒影響。2)程序只考慮了引號前面是的情況,如果是兩個,即反斜杠轉義了就會出錯。3)沒有考慮到換行連接符的情況,如果有換行連接符也出錯。P45,6.1節 面試例題1       宏定義#define FIND(struc,e) (size_t)&(struc*)0)->e),后面跟了運算符就會出錯的,另外題目的代碼太糟糕了。P47,6.2節 面試例題1  &

5、#160;    C語言中,const修飾只讀變量,而不是常量,題目解析與C+混淆了。這是一個概念理解性的錯誤。只有enum和#define才定義常量的。P47,6.2節 面試例題2       C+不允許沒有類型的聲明。P47,6.2節 面試例題3       并不是在const成員函數中用mutable修飾符,是對成員變量用mutable,const成員函數才可以修改。P48,6.3節 面試例題1 &#

6、160;     解析混亂,表達晦澀,一大篇解析沒有抓住重點。如“a1、a2、a3是兩個字節,結構體對齊參數按默認的8字節對齊,則a1、a2、a3都取2字節對齊”。應該是VC中,結構體按照其中元素字節數最長的對齊,相鄰的元素可以連續放置(如果特殊優化可能調整順序)。通俗但不完整的說,讓每個元素可以一次讀取即可。但GCC編譯器默認都是4字節對齊,而且最大就是4字節的。P56,6.3節 面試例題7       1)sizeof(string)沒有規定大小的,解析中給出的4是一種實

7、現而已。2)size0f(*p)*2/sizeof(string),這種代碼簡單問題復雜化,*p是string類型的,已知了數組大小,而且硬編碼到這里了,所以再用數組大小除以單個string大小讓人費解。P59,6.4節 面試例題9       內聯函數由編譯器決定是否嵌入的,不是強制性的。主要優點是類型檢查和可讀性、可調試。重要的一點是只對參數做一次求值,而不像宏替換,這防止宏常出現的多次運算的錯誤。另外,注釋里的“沒有寫返回值的”思路混亂,雜糅,不是體現內聯與宏的區別。P61,7.1節 面試例題1  

8、     不是因為要變量不為空就要使用引用,沒有這種因果關系。只是因為引用可以不做檢查,更主要的是體現在指向的變量可變不可變和兩者含義、作用不同。P67,7.2節 面試例題3       char *c不是分配一個全局數組,后面的字符串常量編譯時已經分配,c是分配一個指針變量,它在棧上。P72,7.3節 面試例題1       Const指針和指向const的指針的區別。P70,7.2節 面試例題7

9、0;      1)“B類的_a把A類的_a覆蓋了”這種說法錯誤,注意基類與派生類的變量的作用域。這里可以說隱藏,但不是覆蓋。2)構造B類對象,先調用A的構造函數,所以A類的_a為1,B類的_a為2,沒有解析所說的因果關系。P83,8.2節 面試例題1       1)代碼太混亂,遞歸還用了2層循環。使用了差不多一頁2欄的代碼。2)解析與代碼無關,沒有構造多叉樹,只是循環比較而已。3)沒有用const,參數太多。可以參考我的例子。 cpp vie

10、w plaincopy1.   2. #include   3. #include   4. using namespace std;  5.   6. static vector<</span>int> pos_in_str;  7. void find_sub_link(const char* p1, const char* p2

11、, int i, int j)  8.   9.     if( !p1i | !p2j )  10.         return;  11.     if( p2j=p1i && !p2j+1 )  

12、 12.         for(vector<</span>int>:iterator it = pos_in_str.begin(); it != pos_in_str.end(); it+)   13.             cout <&l

13、t; *it << " "  14.           15.         cout << i+1 << endl;  16.       17.   

14、60; else if (p2j = p1i)   18.         pos_in_str.push_back(i + 1);  19.         find_sub_link(p1, p2, i + 1, j + 1); 

15、60;20.         pos_in_str.pop_back();  21.       22.     find_sub_link(p1, p2, i + 1, j);  23.   24. int main(int argc, char *argv)

16、0; 25.   26.     char str110 = "abdbcca"  27.     char str210 = "abc"  28.     find_sub_link(str1, str2, 0, 0);  29.   &

17、#160; return 0;  30.    P85,8.2節 面試例題3       題目太混亂了,就是計算這個程序供調用多少次x(int n),不是設計算法。解析中,“單計算x(x(9)當然是9”太敷衍。P87,8.3節 面試例題2       int *a=(int*)malloc(N* sizeof(int)混淆了int和int1,雖然結果可能是一樣的,但邏輯錯誤。sizeof

18、(int)與sizeof(int *)含義不一樣的。P88,8.3節 面試例題3擴展       所列的算法對結果幾乎無改進,僅僅改成了一半的比較而已。這題的確需要結合快速排序和二分查找的思路,但可以改變時間復雜度的(給出的算法并沒有改變)。P92,8.5節 面試例題1       代碼中RAND_MAX* RAND_MAX越界了,考慮這個溢出,代碼的結果應該是500左右。P94,9.1節 面試例題1    

19、0;  文不對題,距離實現vector,這只是使用vector而已。P96,9.1節 面試例題3       代碼弄了一堆迭代器沒有用到,很多例子這種情況,比網上拷貝粘貼的代碼的排版還亂。P98,9.2節 面試例題3       1)T* array需要const,漏掉了。2)T n,n不是T類型的,應為int。P105,10.2節 面試例題2“Test b()是不正確的,因為它不需要預先賦值“,什么地方賦值了,什么叫預先賦值,什么叫不

20、需要預先賦值。解析很讓人糾結。P108,10.3節 面試例題4A()const int size = 9;這個時候,size不是成員變量了,改變了題意。P115,10.5節 面試例題4“B選項在gcc測試可以算是一種多態“,這種表述很多,模棱兩可,說明理解不到位。由于返回類型協變,返回類指針可以不一樣的,所以這個就是多態,不叫”算是“,也不是”gcc下算作“。P120,10.7節 面試例題1       構造函數x(a,b)應為x(a),y(b)P125,11.2節 面試例題1    

21、   翻譯太差,解析了幾頁沒有說清楚。自己理解意思即可。D選項,不能被派生類的子類訪問。B選項,都可以繼承,只是不能訪問。P130,11.3節 面試例題1       自己說了不需要鏈表,還選擇B。而且,不是每個對象都有一個表,多重繼承可以多個,在VC里虛繼承也有多個。P131,11.3節 面試例題2(2)(3)的解析混亂且有錯誤,雖然答案是那樣的。首先,與編譯器有關。其次,解析中,(2)是多了數組和虛類指針,不是多了虛函數表指針。P135,11.4節 面試例題4  

22、0;    PB實際的地址是C父類B部分,不是子類。P144,11.7節 面試例題2       一大堆沒用的描述,沒有指出重點。這個題是轉換函數的問題。它是一種特殊的運算符重載,特殊的成員函數,無返回類型,無參數,一般最好用const修飾。P135,11.4節 面試例題4數據結構與算法部分,幾乎所有代碼都沒有認真編輯、校驗和核對。排版及其混亂,變量名、函數名很山寨,程序邏輯漏洞百出,沒用的代碼一大堆。這些低級的我就不一一列舉了。幾個主要的錯誤如下:P167,13.1節 面試例題1&#

23、160;      node *create()里malloc了head,沒有釋放。多余的操作很多,如while前面的if沒用。P167,13.1節 面試例題2       P1為NULL沒有判斷,鏈表頭與鏈表節點混淆使用。P167,13.1節 面試例題7       這部分代碼基本都是粗制濫造,大量無關代碼,NULL判斷不足,變量未使用,未釋放malloc的空間。P224,14.3節 面試例題3

24、       第257個char才是ch,解析錯誤。結果與256、257之類的沒關系。因為127+1為負數了小于255,所以一直循環。不是什么改變256個char的值。P225,14.4節 面試例題2       B顯然錯誤,C中即使加了const也不行,題目是要求C語言中。只有C+才可以。P226,14.5節 面試例題2       程序輸出的是所以重復出現的而不是長度最長的,這樣的錯

25、誤很多。P228,14.5節 面試例題5       代碼竟然寫了一頁半。可以參考一下我的代碼。當然也不一定非常好,歡迎指正(Kayven,hilyhoo) cpp view plaincopy1.   2. #include   3. unsigned long f(unsigned long n)  4.     unsigned long&#

26、160;fn = 0, ntemp = n;  5.     unsigned long step;  6.     for(step = 1; ntemp > 0; step *= 10, ntemp /= 10)  7.     

27、    fn += (ntemp -1 ) /10) + 1) * step;  8.         if( ntemp % 10 ) =1)  9.             f

28、n -= step - (n % step + 1);  10.           11.       12.     return fn;  13.   14. unsigned long get_max_fn_equal_n

29、(unsigned long upper_bound)  15.     unsigned long n = 1, fn = 0;  16.     unsigned long max = 1;  17.     while(n <= upper_bound

30、60;)   18.         fn = f(n);  19.         if(fn = n)  20.             max = n;  21.

31、            printf("lut" , n+);  22.           23.         else if( fn < n )  24.             n += (n-fn)/10 + 1;  25.  

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論