5.inline函式怎麼理解 為什麼可以加快執行 知識點:inline函式
答:在c/c++中,為了解決一些頻繁呼叫的小函式大量消耗棧空間(棧記憶體)的問題,特別的引入了inline修飾符,表示為內聯函式。
棧空間就是指放置程式的區域性資料(也就是函式內資料)的記憶體空間。
只有當函式非常短小的時候它才能得到我們想要的效果
以下情況不宜使用內聯:
(1)如果函式體內的**比較長,使用內聯將導致記憶體消耗代價較高。
(2)如果函式體內出現迴圈,那麼執行函式體內**的時間要比函式呼叫的開銷大。類的建構函式和析構函式容易讓人誤解成使用內聯更有效。要當心建構函式和析構函式可能會隱藏一些行為,如「偷偷地」執行了基類或成員物件的建構函式和析構函式。所以不要隨便地將建構函式和析構函式的定義體放在類宣告中。乙個好的編譯器將會根據函式的定義體,自動地取消不值得的內聯(這進一步說明了 inline 不應該出現在函式的宣告中)。
6.shared_ptr、unique_ptr是執行緒安全的嗎,底層實現 知識點:智慧型指標
答:在msdn的描述為:multiple threads can simultaneously read and write different shared_ptr objects, even when the objects are copies that share ownership.
也就是說多個執行緒同時讀寫乙個std::shared_ptr<>變數不安全。但多執行緒可以同時讀寫不同的std::shared_ptr<>變數,即使這些變數指向同乙個物件。
所以如果希望在多個執行緒使用同乙個物件的智慧型指標,可以讓每個執行緒使用這個指標的不同副本或者使用鎖保護這個指標。
6.1 是引用計數不安全還是物件修改不安全
答:不清楚
7.vector怎麼增長、map的底層資料結構
答:vector為動態分配記憶體,如果容量滿了,就分配現容量的兩倍。
map與multimap是stl中的關聯容器、提供一對一key-value的資料處理能力; map與multimap的區別在於,multimap允許關鍵字重複,而map不允許重複。 這兩個關聯容器的底層資料結構均為紅黑樹
而unordered_map與unordered_multimap中key為無序排列,其底層實現為hash table,因此其查詢時間複雜度理論上達到了o(n)
8.map怎麼迴圈刪除滿足特定條件的元素答:
迭代器迴圈,如果滿足條件則earse(it++),否則it++,因為刪除之後,現迭代器會失效,一定要再earse引數中++;
9.c++的多型
答:
c++多型方式:
(1)靜態多型(過載,模板)
是在編譯的時候,就確定呼叫函式的型別。
(2)動態多型(覆蓋,虛函式實現)
在執行的時候,才確定呼叫的是哪個函式,動態繫結。執行基類指標指向派生類的物件,並呼叫派生類的函式。
虛函式實現原理:虛函式表和虛函式指標。
純虛函式: virtual int fun() = 0;
10.乙個空類是多大?加上乙個成員函式?加上乙個靜態成員函式?加上乙個靜態成員?加上乙個虛函式?
答: 講的很清楚了
*非靜態成員變數總合。
*加上編譯器為了cpu計算,作出的資料對齊處理。
*加上為了支援虛函式,產生的額外負擔。
與與類中的建構函式、析構函式、拷貝建構函式、賦值運算子過載、取位址運算、const取位址運算無關。
C 各種面試問題彙總
害,還沒找到工作,太難了,只能繼續努力了,加油衝!1.c 拷貝建構函式為什麼只能引用傳遞,不能按值傳遞 因為按值傳遞的話,得先用拷貝建構函式給形參賦值,又按值傳遞,又呼叫拷貝建構函式,一直這樣無限遞迴,所以不能按值傳遞。2.x x 1 x 1 x 哪個效率最高 x x 1首先取右邊x的位址取值,加1...
面試日記Day 2
這次面試的是一家上市公司,主要是做支付 交易這塊的。筆試 最後兩道解答題 1.寫個方法 翻轉字串 2.寫個單例模式 一面 大致內容是 答 jdk的excutors提供了一些預設執行緒池,但這些執行緒池的等待佇列是無界的,阿里的程式設計手冊上也不建議使用,一般使用threadpool類手動建立。答 主...
C 常見面試問題彙總2 STL
vector 底層資料結構為陣列,支援快速隨機訪問。list 底層資料結構為雙向鍊錶,支援快速增刪。deque 底層資料結構為乙個 控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾 中間不能 快速增刪,也支援隨機訪問。stack 底層一般用23實現,封閉頭部即可,不用vector的原因應...