2007年9月18日 星期二

[轉貼]Autodesk的C++筆試題,看你能答出多少

[轉貼]Autodesk的C++筆試題,看你能答出多少
 
太多了,詳細請參考www.findgs.com
一、技術題
 
1. 在類的普通成員函數中調用虛函數,情況是怎麼樣的?(對像、引用、指針)
 
2. 關於成員變量初始化順序,幾個有依賴關係的成員變量要初始化,讓寫出構造函數。
 
3. 寫一個雙鏈表。
 
4. 寫個is-a和has-a。
 
5. struct vs. class.
 
6. 稱8個小球的問題
 
7. stl 裡面vector的實現(內部空間的申請與分配)
 
8. struct /class的區別
 
9. 為什麼要用struct //成員的默認屬性不同,用struct的話,主要是作為數據的集合。
 
10. 怎樣使一個class不能被實例化 //1,構造函數私有化,2,抽像類
 
11. 私有繼承和public繼承的區別。 //is-a has-a
 
12. void *p的問題 //不能++
 
13. 引用和指針的區別與聯繫。引用是否可以更改
 
14. windows編程基礎,線程與進程的區別
 
15. com+是否熟悉
 
16. 簡述一下hash算法
 
17. 一個32位的數據,怎樣找到最左邊的一個1?// n位的2進制數據怎樣找罪左邊的1,如果是在最左位,這個數是負數,否則的話,左移一位,看是否變成負數,這是O(n)的算法,O(n/2)的算法:二分方式查找
 
18. 一個4*4的格子,填入1~15 然後給個目標狀態,怎樣去搜索。
 
19. 給你100萬個數據,數據的值在0~65535之間 用最快的速度排序
 
20. 如果我們的一個軟件產品,用戶回復說:運行速度很慢,你怎麼處理?
 
21. 八皇后問題,詳述解法
 
22. kmp快速匹配算法 ---不算輕鬆的搞定
 
23. 無向圖中兩點間最短路問題 ---偉大的迪傑克斯拉算法
 
24. 空間中任意給兩個向量,求角平分線
 
25. 什麼是平衡樹
26. 哈夫曼編碼問題
 
27. 有向圖求環
 
28. .給n個點,求凸包問題
 
29. 四則運算(給一個前綴表達式,然後求解;給一個中綴表達式)
 
30. STL中container有哪些?
 
31. map中的數據存儲方式是什麼?
 
32. map和hashmap有什麼區別?
 
33. hashmap是標準庫中的嗎?
 
34. vector中的erase方法跟algorithm的remove有什麼區別?
 
35. object是什麼?
 
36. C++中如何阻止一個類被實例化?
 
37. 一般在什麼時候構造函數被聲明成private呢?//比如要阻止編譯器生成默認的copy constructor
 
38. 什麼時候編譯器會生成默認的copy constructor呢?
 
39. 如果你已經寫了一個構造函數,編譯器還會生成copy constructor嗎?
 
40. 為什麼說如果一個類作為基類,則它的析構函數要聲明成virtual的?
 
41. inline的函數和#define有什麼區別?什麼時候會真的被inline,什麼時候不會呢?
 
42. 如果把一個類的成員函數寫在類的聲明中是什麼意思?
 
43. public繼承和private繼承有什麼架構上的區別?//public是is-a的關係,private是has-a的關係
 
44. 在多繼承的時候,如果一個類繼承同時繼承自class A和class B,而class A和B中都有一個函數叫foo(),如何明確的在子類中指出override哪個父類的foo()?
 
45. 虛擬繼承的語法是什麼?
 
46. 部分模版特例化和全部模版特例化有什麼區別?
 
47. 編一個函數,使一個單項鏈表轉置。
 
48. 拆解一個整數,比如4,可以拆解成4=3+1;4=2+2;4=2+1+1;4=1+1+1+1
 
49. 不用庫函數,實現strcpy或者memcpy等函數
 
50. 內聯函數的作用和缺點
 
51. 指針和引用的區別
 
52. 友元的意義
 
53. 虛函數的意義
 
54. Overload, Overwrite, Override 各自的特點和意義
 
55. 頭文件中的ifndef/define/endif 幹什麼用?//防止該頭文件被重複引用。
 
56. 2#i nclude <filename.h> 和#i nclude 「filename.h」 有什麼區別?
 
57. 在C++ 程序中調用被C 編譯器編譯後的函數,為什麼要加extern 「C」?//C++語言支持函數重載,C 語言不支持函數重載。函數被C++編譯後在庫中的名字與C 語言的不同。C++提供了C 連接交換指定符號extern「C」來解決名字匹配問題
58. 一個類有基類、內部有一個其他類的成員對象,構造函數的執行順序是怎樣的?//先執行基類的(如果基類當中有虛基類,要先執行虛基類的,其他基類則按照聲明派生類時的順序依次執行),再執行成員對象的,最後執行自己的。
 
59. 請描述一個你熟悉的設計模式
 
60. 在UML 中,聚合(aggregation)和組合(composition)有什麼區別?
 
61. C#和C++除了語法上的差別以外,有什麼不同的地方?
 
(1) c#有垃圾自動回收機制,程序員不用擔心對象的回收。(2)c#嚴禁使用指針,只能處理對象。如果希望使用指針,則僅可在unsafe 程序塊中能使用指針。(3)c#只能單繼承。(4)必須通過類名訪問靜態成員。不能像C++中那樣,通過對像訪問靜態成員。(5)在子類中覆蓋父類的虛函數時必須用關鍵字override,覆蓋父類的方法要用關鍵字new
 
62. New delete與malloc free 的區別
 
63. #define DOUBLE(x) x+x,i = 5*DOUBLE(10);i是多少?正確的聲明是什麼?
 
64. 有哪幾種情況只能用intialization list 而不能用assignment?
 
當類中含有const、reference 成員變量;基類的構造函數都需要參數;類中含有其他類的成員對象,而該類的構造函數都需要參數。
 
65. C++是不是類型安全的?//不是。兩個不同類型的指針之間可以強制轉換。C#是類型安全的。
 
66. main 函數執行以前,還會執行什麼代碼?//全局對象的構造函數會在main 函數之前執行。
 
67. 描述內存分配方式以及它們的區別。//(1)從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變量,static 變量。(2) 在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集。(3) 從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc 或new 申請任意多少的內存,程序員自己負責在何時用free 或delete 釋放內存。動態內存的生存期由我們決定,使用非常靈活,但問題也最多。
 
68. 比較一下C++中static_cast 和 dynamic_cast 的區別。
 
69. 當一個類A 中沒有生命任何成員變量與成員函數,這時sizeof(A)的值是多少,如果不是零,請解釋一下編譯器為什麼沒有讓它為零。
 
70. 已知兩個鏈表head1 和head2各自有序,請把它們合併成一個鏈表依然有序,要求用遞歸方法進行。
 
太多了,詳細請參考www.findgs.com

沒有留言: