記一次面試經歷


在大概5,6天前經歷的一次面試,當時把問題記下來了,后來這幾天有騰訊的一個競賽,就一直沒有整理,結果這競賽把我虐的一愣一愣的,腦細胞都死完了,晚上還是整理一下面試題,恢復一下腦細胞。。這次面試讓我知道了我這條魚到底是有多咸,也知道了C++到底是有多么的博大精深。。

問題一:

.C++為什么要定義虛析構函數,多態性是如何實現的?(這個問題其實挺基礎的,c++面試必問的)

答:c++多態分編譯時多態和運行時多態,編譯時多態指函數重載和泛型編程,運行時多態指的是虛函數。

主要講一下虛函數,在函數前面加上virtual就是虛函數。在基類的函數前加上virtual關鍵字,在派生類中重寫該函數,運行時將會根據對象的實際類型來調用相應的函數。如果對象類型是派生類,就調用派生類的函數;如果對象類型是基類,就調用基類的函數。(有一句話說的很好,忘了在哪看得了)沒有加virtual的話,對象按聲明的類型調用函數,加virtual的話對象按實際類型調用函數。

(C++虛函數底層實現推薦看C++反匯編揭秘這本書)當類中定義有虛函數時,編譯器會將該類中所有虛函數地址保存在一張表中,這張表被稱為虛函數地址表(虛表)。同時,編譯器還會在類中添加一個隱藏的數據成員,成為虛表指針。該指針保存着虛表的首地址,用來記錄和查找虛函數。只要類中有虛函數,就一定有虛表存在,並且如果有子類繼承,就算子類中沒有虛函數,子類也會有虛表。如果子類繼承多個父類,並且多個父類都有自己的虛函數,那么子類中會有一個虛表指針數組,包含每個父類的虛表指針。

 問題二:

 

舉一個自己遇到的處理c++內存(泄露)方面的經歷

答:沒有。。。。(很尷尬,因為不知道到底要問什么,並且確實沒有相關經驗。。)

不過后來上網搜了搜,發現了一個帖子很詳細很完整(可惜現在才發現)https://www.cnblogs.com/findumars/p/5929831.html?utm_source=itdadao&utm_medium=referral

看了發現其實就是指針的一些問題嘛。。。

 問題三:

C++智能指針的好處

答:(哇!!賊恐怖,這個東西我只知道泛型編程,其它完全不知道。。。當然還是上網搜了一波)

https://blog.csdn.net/xt_xiaotian/article/details/5714477   很詳細

https://blog.csdn.net/zy19940906/article/details/50470087 從底層分析

看了這個之后發現面試官套路我啊,問了第二個問題發現我不知道后,就問智能指針...就是要掛我.....

問題四:

講一下數據結構list

答:這個問題其實能講很長時間的,面試官也是給了機會,可惜我沒把握住。當時只跟面試官講了線性表,鏈表,雙向鏈表,循環鏈表,並且還是只講了一下概念,沒有深入去講。

線性表:內存連續,用數組存儲,優點便於查詢,缺點難於插入刪除。

鏈表:內存不連續,用節點去存儲信息,優點插入刪除簡單,但是查詢困難。可以有頭結點,有頭節點可以在頭結點中存儲鏈表長度,不用每次遍歷整個數組。

雙向鏈表:每個節點不僅有指向下一個節點的指針,也包含了指向上一個節點的指針。頭節點上一個節點是空,同樣尾節點下一個節點為空。對比於單向鏈表的優點在於可以在O(1)的情況下找到當前節點的上一個節點。

循環鏈表:在雙向鏈表的基礎上頭節點加了一個指向尾節點的指針,而尾節點也加了一個指向頭節點的指針,更加方便查詢鏈表中節點信息。

這個問題還可以擴展到STL list,通過STL list再講一下vector,再對兩者進行對比,綜上這個問題可以講個10來分鍾,可惜我就講了5,6分鍾就沒了。。。

問題五:

講一個時間復雜度在nlog(n)的排序算法

答:快速排序關鍵就是找一個基准,然后把小於這個基准的數排在基准前面,大於的排在后面。再對基准兩邊的數按同樣的方法進行排序,這個過程用遞歸進行。

快速排序法,這個問題對我來說算是最簡單的吧(當時還腦抽的說了個二分,二分是個查找不是排序。。)

問題六:

MFC消息映射的底層實現

答:不清楚MFC消息映射,但我知道Windows消息機制,然后我就對着面試官一通亂講,聽着面試官的反應,貌似講的還可以(畢竟我還轉載過一次windows消息機制)。然后面試官就這個問題又讓我講了一下注冊一個新窗口的過程,又是一通子亂講,最后問了一下lpfnWndProc這個參數的意義,然后我說是窗口處理消息函數。。。。

問題七:

算法題:給你一個很長的字符串(字符未知),如何找到里面出現的第一個不重復的字符(並輸出其位置)

答:第一想法就是寫一個數組,然后存儲所有大小寫字母,比如arr[3]就表示arr[x - 'a'],x就是遇到的字母,然后遇到一個字母就把相對應的數組元素加一。結果面試官說假如你不知道這個字符是啥,並且也不知道這段字符串有多長。emmmmmm....這個我就很懵逼了,字符何其多。。。然后在有效的時間內也沒有給出答案。這個問題現在也沒想出來,有大佬會的指點一下小弟,我如果找到答案的話,在評論里面發。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: