c c 面試覆盤(1)

2021-09-29 09:37:22 字數 2501 閱讀 7880

前幾天參加了乙個c/c++的面試,對當時的一些問題做一些回顧:

1.c++中struct和class的區別

可以從兩方面回答:

a. 預設的繼承訪問許可權,struct是public的,class是private;

b. struct作為資料結構的實現體,struct的資料訪問控制許可權是public;而class作為物件的實現體,它的預設的成員變數訪問控制是private;

2.c++中vector和list的區別:

a. vector和陣列類似,擁有一段連續的記憶體空間,並且起始位址不變,因此能高效的進行隨機訪問,時間複雜度為o(1); 但因為記憶體空間是連續的,所以在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o(n);另外,當陣列中記憶體空間不夠時,會重新申請一塊記憶體空間並進行記憶體拷貝。

b. list是由雙向鍊錶實現的,因此記憶體空間是不連續的。

只能通過指標訪問資料,所以list的隨機訪問非常沒有效率,時間複雜度為o(n); 但由於鍊錶的特點,能高效地進行插入和刪除

c. vector擁有一段連續的記憶體空間,能很好的支援隨機訪問, 因此vector::iterator支援「+」,「+=」,「<」等操作符。

list的記憶體空間可以是不連續,它不支援隨機訪問, 因此list::iterator則不支援「+」、「+=」、「<」等

3.陣列與鍊錶的區別:

(1)儲存位置上:

陣列邏輯上相鄰的元素在物理儲存位置上也相鄰,而鍊錶不一定;

(2)儲存空間上:

鍊錶存放的記憶體空間可以是連續的,也可以是不連續的,陣列則是連續的一段記憶體空間。一般情況下存放相同多的資料陣列占用較小的記憶體,而鍊錶還需要存放其前驅和後繼的空間。

(3)長度的可變性:

鍊錶的長度是按實際需要可以伸縮的,而陣列的長度是在定義時要給定的,如果存放的資料個數超過了陣列的初始大小,則會出現溢位現象。

(4)按序號查詢時,陣列可以隨機訪問,時間複雜度為o(1),而鍊錶不支援隨機訪問,平均需要o(n);

(5)按值查詢時,若陣列無序,陣列和鍊錶時間複雜度均為o(1),但是當陣列有序時,可以採用折半查詢將時間複雜度降為o(logn); 

(6)插入和刪除時,陣列平均需要移動n/2個元素,而鍊錶只需修改指標即可; 

(7)空間分配方面:

陣列在靜態儲存分配情形下,儲存元素數量受限制,動態儲存分配情形下,雖然儲存空間可以擴充,但需要移動大量元素,導致操作效率降低,而且如果記憶體中沒有更大塊連續儲存空間將導致分配失敗; 即陣列從棧中分配空間,,對於程式設計師方便快速,但自由度小。鍊錶儲存的節點空間只在需要的時候申請分配,只要記憶體中有空間就可以分配,操作比較靈活高效;即鍊錶從堆中分配空間, 自由度大但申請管理比較麻煩。

4.資料庫的兩種引擎:

innodb引擎概述:

innodb引擎提供了對資料庫acid事務的支援,並且實現了sql標準的四種隔離級別。

該引擎還提供了行級鎖和外來鍵約束,它的設計目標是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整資料庫系統,mysql執行時innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是該引擎不支援fulltext型別的索引,而且它沒有儲存表的行數,當select count(*) from table時需要掃瞄全表。當需要使用資料庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高時,使用innodb引擎會提公升效率。但是使用行級鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表。

myisam引擎概述:

myisam是mysql預設的引擎,但是它沒有提供對資料庫事務的支援,也不支援行級鎖和外來鍵,

因此當insert(插入)或update(更新)資料時即寫操作需要鎖定整個表,效率便會低一些。不過和innodb不同,myisam中儲存了表的行數,於是select count(*) from table時只需要直接讀取已經儲存好的值而不需要進行全表掃瞄。如果表的讀操作遠遠多於寫操作且不需要資料庫事務的支援,那麼myisam也是很好的選擇。

簡單介紹區別:

1、myisam是非事務安全的,而innodb是事務安全的

2、myisam鎖的粒度是表級的,而innodb支援行級鎖

3、myisam支援全文型別索引,而innodb不支援全文索引

4、myisam相對簡單,效率上要優於innodb,小型應用可以考慮使用myisam

5、myisam表儲存成檔案形式,跨平台使用更加方便

應用場景:

1、myisam管理非事務表,提供高速儲存和檢索以及全文搜尋能力,如果再應用中執行大量select操作,應該選擇myisam

2、innodb用於事務處理,具有acid事務支援等特性,如果在應用中執行大量insert和update操作,應該選擇innodb

面試覆盤 2020 05 25

華東地區企事單位專場 製造業高質量發展 專區 企業 中國電子科技南湖研究院 崗位 新一代人工智慧方向科研人員 企業 中國兵器裝備集團上海電控研究所 崗位 計算機視覺演算法工程師 企業 浙江清華長三角研究院 崗位 智慧型裝備中心 演算法工程師 企業 中國電子科技集團公司第三十六研究所 崗位 研發類 硬...

面試覆盤 2020 05 30

1 專案開發過程中,遇到過什麼問題讓你感覺很沮喪 失敗的經歷,遇到的困難 細節和技巧 tip 一定要有,面試官在考驗能不能發現自身的問題,並從解決過程中了解你的能力,以及如何改進的 2 你的行業規劃是什麼?對於崗位的了解有多少?為什麼會對這個崗位感興趣?3 你對於這個崗位,有沒有一些能力提公升的計畫...

面試覆盤 2020 06 13

參考 1 仔細講一下你專案的意義,應用場景,具體過程?2 第乙個專案資料同步是怎麼實現?3 具體解釋一下第二個專案中元學習的概念和實現過程?1 gan的思想?損失函式?對抗px logd x pg log 1 d x 2 lstm三個門?對應的作用?公式?啟用函式?為什麼存在兩類啟用函式 tanh和...