一、筆試
1.多型類中的虛函式表是
compile-time
,還是run-time
時建立的
?
.而物件的隱藏成員
--虛函式表指標是在執行期
--也就是建構函式被呼叫時進行初始化的
,這是實現多型的關鍵
.2.乙個父類寫了乙個
virtual
函式,如果子類覆蓋它的函式不加
virtual ,
也能實現多型
? 在子類的空間裡,有沒有父類的這個函式,或者父類的私有變數?
答案:只要基類在定義成員函式時已經宣告了virtual
關鍵字,在派生類實現的時候覆蓋該函式時,
virtual
關鍵字可加可不加,不影響多型的實現。子類的空間裡有父類的所有變數(static除外)。
3.建構函式可以為虛函式嗎?
不能,建構函式是在物件完全構造之前執行的,在建構函式執行的時候,物件的動態型別還不完整。
4.常成員函式和非常成員函式可以共存嗎?
可以,常量物件呼叫常成員函式
5.對於下列的程式片段,哪些表示式的結果為6?bc
int arr[3][3]=,,};int i=1,j=2;
a.**(arr+3*i+j) b.*(*(arr+i)+j) c.*(arr[i]+j) d.*(arr+3*i+j)
6.string str=;
cout<*sizeof 不是函式,也不是一元運算子,他是個類似巨集定義的特殊關鍵字;sizeof()括號內在編譯過程中是不被編譯的,而是被替代型別,如
int a=8
;sizeof(a
);在編譯過程中,它不管
a的值是什麼,只是被替換成型別
sizeof
(int
);結果為
4.如果
sizeof
(a=6
);呢,
也是一樣的轉換成
a的型別,但是要注意
因為a=6
是不被編譯的,所以執行完
sizeof
(a=6);a
的值還是
6,是不變的
.二、面試
面試真真是想吐槽一下,也不知道是趨勢最近不缺人還是咋的,也有可能我第乙個還沒安排好流程,我報的是開發,一上來就安排了乙個搞測試的,然後聊到一半正到重點被打斷,接著換了乙個據說來自最有錢的部門的技術經理,然後又重新開始,c++基礎、繼承、多型、記憶體分配機制,實現快速插入查詢用什麼資料結構最好,問得都挺簡單的,讓寫了乙個字串替換的小程式(輸入乙個帶有'\r\n'的字串,將其中的'\r\n'全部替換為'\r',當時只傻傻的用兩層迴圈實現);
回來後研究了下,可以轉string實現:
1//用string的replace()或erase()和insert()
2const
char* replace1(char *input)
11char *end=new
char[strlen(input)+1
];12
strcpy(end,s.c_str());
13return
end;
14//
return s.c_str();
//error: s物件被釋放
15 }
稍微難一點關於stl裡面map底層是通過什麼資料結構實現的?
tcp是阻塞機制的嗎?
c++stl底層資料結構實現
(重要,待研究)
:1.vector 底層資料結構為陣列 ,支援快速隨機訪問
2.list 底層資料結構為雙向鍊錶,支援快速增刪
3.deque 底層資料結構為乙個**控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾(中間不能)快速增刪,也支援隨機訪問。
deque是乙個雙端佇列(double-ended queue),也是在堆中儲存內容的.它的儲存形式如下:
[堆1] --> [堆2] -->[堆3] --> ...每個堆儲存好幾個元素,然後堆和堆之間有指標指向,看起來像是list和vector的結合品.
4.stack 底層一般用list或deque實現,封閉頭部即可,不用vector的原因應該是容量大小有限制,擴容耗時
5.queue 底層一般用list或deque實現,封閉頭部即可,不用vector的原因應該是容量大小有限制,擴容耗時
(stack和queue其實是介面卡,而不叫容器,因為是對容器的再封裝)
6.priority_queue 的底層資料結構一般為vector為底層容器,堆heap為處理規則來管理底層容器實現
7.set 底層資料結構為紅黑樹,有序,不重複
8.multiset 底層資料結構為紅黑樹,有序,可重複
9.map 底層資料結構為紅黑樹,有序,不重複
10.multimap 底層資料結構為紅黑樹,有序,可重複
11.hash_set 底層資料結構為hash表,無序,不重複
12.hash_multiset 底層資料結構為hash表,無序,可重複
13.hash_map 底層資料結構為hash表,無序,不重複
14.hash_multimap 底層資料結構為hash表,無序,可重複
1.vector 底層資料結構為陣列 ,支援快速隨機訪問
2.list 底層資料結構為雙向鍊錶,支援快速增刪
3.deque 底層資料結構為乙個**控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾(中間不能)快速增刪,也支援隨機訪問。
deque是乙個雙端佇列(double-ended queue),也是在堆中儲存內容的.它的儲存形式如下:
[堆1] --> [堆2] -->[堆3] --> ...每個堆儲存好幾個元素,然後堆和堆之間有指標指向,看起來像是list和vector的結合品.
4.stack 底層一般用list或deque實現,封閉頭部即可,不用vector的原因應該是容量大小有限制,擴容耗時
5.queue 底層一般用list或deque實現,封閉頭部即可,不用vector的原因應該是容量大小有限制,擴容耗時
(stack和queue其實是介面卡,而不叫容器,因為是對容器的再封裝)
6.priority_queue 的底層資料結構一般為vector為底層容器,堆heap為處理規則來管理底層容器實現
7.set 底層資料結構為紅黑樹,有序,不重複
8.multiset 底層資料結構為紅黑樹,有序,可重複
9.map 底層資料結構為紅黑樹,有序,不重複
10.multimap 底層資料結構為紅黑樹,有序,可重複
11.hash_set 底層資料結構為hash表,無序,不重複
12.hash_multiset 底層資料結構為hash表,無序,可重複
13.hash_map 底層資料結構為hash表,無序,不重複
14.hash_multimap 底層資料結構為hash表,無序,可重複
2017趨勢科技校園招聘演算法題
題目 現有給定公升序排列的整形陣列a n 和整數s,需要在整型陣列中找到任意個小標,使得各小標對應數字之和為s,輸出所有可能的下標組合。例如 陣列 1,4,8,10,12,15,22,25,31,x 30 可得 下標 2,6 a 2 a 6 30 下標 0,1,3,5 a 0 a 1 a 3 a 5...
趨勢科技筆試題
1 下面程式的輸出是多少?cpp view plain copy print?voidgetmemory char p intmain void void getmemory char p int main void a hello b hello world c hello world run t...
趨勢科技筆試題
3 以下的 可放在vc 6.0裡面執行。題目是要求輸出 trendmicrosoftuscn 然後要求修改程式,使程式能輸出以上結果 如下 include include using namespace std int main int argc,char argv string p new str...