在大概5,6天前經歷的一次面試,當時把問題記下來了,後來這幾天有騰訊的一個競賽,就一直沒有整理,結果這競賽把我虐的一愣一愣的,腦細胞都死完了,晚上仍是整理一下面試題,恢復一下腦細胞。。此次面試讓我知道了我這條魚究竟是有多鹹,也知道了C++究竟是有多麼的博大精深。。html
問題一:c++
.C++爲何要定義虛析構函數,多態性是如何實現的?(這個問題其實挺基礎的,c++面試必問的)面試
答:c++多態分編譯時多態和運行時多態,編譯時多態指函數重載和泛型編程,運行時多態指的是虛函數。算法
主要講一下虛函數,在函數前面加上virtual就是虛函數。在基類的函數前加上virtual關鍵字,在派生類中重寫該函數,運行時將會根據對象的實際類型來調用相應的函數。若是對象類型是派生類,就調用派生類的函數;若是對象類型是基類,就調用基類的函數。(有一句話說的很好,忘了在哪看得了)沒有加virtual的話,對象按聲明的類型調用函數,加virtual的話對象按實際類型調用函數。編程
(C++虛函數底層實現推薦看C++反彙編揭祕這本書)當類中定義有虛函數時,編譯器會將該類中全部虛函數地址保存在一張表中,這張表被稱爲虛函數地址表(虛表)。同時,編譯器還會在類中添加一個隱藏的數據成員,成爲虛表指針。該指針保存着虛表的首地址,用來記錄和查找虛函數。只要類中有虛函數,就必定有虛表存在,而且若是有子類繼承,就算子類中沒有虛函數,子類也會有虛表。若是子類繼承多個父類,而且多個父類都有本身的虛函數,那麼子類中會有一個虛表指針數組,包含每一個父類的虛表指針。windows
問題二:數組
舉一個本身遇到的處理c++內存(泄露)方面的經歷數據結構
答:沒有。。。。(很尷尬,由於不知道到底要問什麼,而且確實沒有相關經驗。。)函數
不事後來上網搜了搜,發現了一個帖子很詳細很完整(惋惜如今才發現)https://www.cnblogs.com/findumars/p/5929831.html?utm_source=itdadao&utm_medium=referralspa
看了發現其實就是指針的一些問題嘛。。。
問題三:
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....這個我就很懵逼了,字符何其多。。。而後在有效的時間內也沒有給出答案。這個問題如今也沒想出來,有大佬會的指點一下小弟,我若是找到答案的話,在評論裏面發。