面試常考知識點總結——面試必看

1.計算機網絡:ISO標準的7層模型都是哪些?爲什麼要分層?

答:
7層:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層
4層:應用層、傳輸層、網絡層、鏈路層
爲什麼分層:
①多層之間相互獨立,靈活性好
②結構上可分割開來,易於實現和維護
③促進標準化工作

2.STL庫的容器都有哪些?vector是如何動態開闢內存?如何申請兩個空間的容器?

答:
(1)
vector:數組
list:雙向鏈表
deque:一箇中央控制器和多個緩衝隊列,就是多個堆,每個堆存儲一些元素,各個堆之間又用指針相連。
stack:底層用list或deque實現–不用vector的原因是vector有容量限制,擴容耗時。
queue:底層實現也是list或deque。
priority_queue:底層有vector實現,堆heap爲規則來管理底層容器的實現。
set、munltiset、map、multimap;底層爲紅黑樹。
(2)vector定義時不分配空間,第一次插入元素分配一個空間,之後空間不夠則進行擴容,擴容的倍數由編譯器決定。
(3)resize()可以自定義空間大小。

list的find()函數的時間複雜度是多少?

答:list底層實現是雙向鏈表,查找時間複雜度爲O(N)。

hashmap的底層是用什麼實現的?哈希表是如何映射的?怎麼解決哈希衝突?哈希表查詢時的時間複雜度爲多少?

答:數組+鏈表,主幹爲數組,當某個節點出現多次時,則用鏈表組織這些相等的節點。
首先可以在O(1)時間複雜度下在數組中找指定元素,找到之後還需要判斷是否有重複元素,如果有,則需要繼續遍歷鏈表。
解決哈希衝突的方法:1.再定址法2.再哈希法3.鏈地址法
時間複雜度:普通O(1)最差O(N)

Mysql事務的四個特點

答:原子性、穩定性、隔離性、可靠性

虛函數?C++中的多態?組合和繼承的區別?

答:虛函數是指經過virtual關鍵字修飾的函數,其實現依賴於虛函數表,虛函數表中存有函數的入口地址。
多態是基於虛函數的一種功能,可以做到動態的調用基類或者派生類的函數。
繼承強調的是is-a關係,是指子類繼承父類的特徵和行爲。
組合強調的是has-a關係,是通過對現有對象進行拼裝形成更復雜的功能。

三次握手的過程?每一次都攜帶什麼數據?爲什麼要給確認報文中的ack值加1,爲什麼不是2,3,4?

答(1)①客戶端請求建立連接,發送序列號②服務端確認連接,發送確認報文,併發送自己的序列號③客戶端發送確認報文
(2)如果在建立連接的過程中,那麼這僅僅是一個規定,三次握手的協議也就是如此說明的。在數據收發的過程中,確認號也表示了在次字節之前的數據已經收到的確認,可以放心發送後邊的數據,加1可以確認下一次發送應該起始的位置。

四次揮手最後主動斷開方爲什麼要等待2MSL?TIME_WAIT狀態是什麼?

答:(1)保證安全的斷開連接,假設被動斷開方第一次發送的斷開請求報文在網絡滯留了,收不到確認又重新發了一次,第二次收到了確認則連接斷開,如果此時滯留的報文又到達了,此時主動斷開方有可能已經重新建立TCP連接,就會收到一個錯誤的報文
(2)保證遲到的報文被丟棄。

如何判斷一個滿二叉樹?

答:(1)計算深度
(2)計算葉子節點數
(3)判斷深度和葉子節點數滿足滿二叉樹的關係

進程間通信方式有哪些?使用同一塊共享內存的進程使用的虛擬地址相同嗎?爲什麼?

答:(1)信號、信號量、共享內存、消息隊列、管道、套接字
(2)有可能相同有可能不同,共享內存實際上已相當於文件,對於共享內存的文件映射到內存,如果兩個進程完全相同的話,虛擬地址就是相同的,比如fork出來的進程和父進程訪問同一共享內存虛擬地址就可能相同。而進程如果有一點細微的不同,那麼虛擬地址就會有差異。

socketpair和管道的區別有哪些?

答:管道是半雙工、socket是全雙工

虛擬地址空間如何映射到物理地址空間?

答:虛擬地址空間通過頁表映射到物理內存,以32位操作系統爲例,首先通過前10位確定其在哪一個頁表,中間10位確定再也表中的哪一頁,最後12位給定該地址在這一頁的偏移量即可定位物理內存。

32位的尋址範圍?內存?

答:尋址範圍是0~4G
內存爲4G

TCP和UDP的區別?如何處理TCP粘包問題?

答:TCP是面向連接的可靠的流式服務
UDP是無連接的不可靠的數據包服務
粘包問題的解決方法:
①暴力解決,每次需要發數據時再建立TCP連接,發送結束就斷開連接。
②定長數據結構,如果規定每次發送的數據報長度是一定的,那麼接收方每次讀取固定長度的報文即可。
③不定長數據結構:多數情況下使用不定長數據結構,第一種方法可以規定一個特殊的符號作爲結束符,每當遇到這個結束符才認爲該報文接收結束,但是該方法只適用於字符數據,因爲對其他二進制數據無法確定是結束符還是要發送的數據;第二種方法是,在固定的偏移位置寫入報文長度,接收方每次讀取先獲取到報文的長度,再接收該長度大小的報文即可。

HTTP協議的報頭是什麼?請求方法?

答:HTTP協議的報頭是用來區分報文的類型,比如客戶端發送一個請求報文,那麼該報文是請求報文就要在報頭中說明,是響應報文也要在報頭中說明。
GET/POST

static有什麼用途?

  • 函數體static變量的作用範圍爲該函數體,不同於auto變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值
  • 在模板內的static全局變量可以被函數內所有函數訪問,但不能模板外其他函數訪問
  • 在模板內的static函數只可被這一模塊內的其他函數調用,這個函數的適用範圍被限制在聲明他的模板內
  • 在類中static成員變量屬於整個類所擁有,對象的所有對象只有一份複製
  • 在類中static成員函數屬於整個類所擁有,這個函數不接收this指針,因而只能訪問類的static成員變量

引用和指針有什麼區別?

引用時別名;指針是地址

  • 程序爲指針變量分配內存區域,而不爲引用分配內存區域。
  • 指針使用時要在前加 * ,引用可以直接使用。
  • 引用在定義時就被初始化,之後無法改變;指針可以發生改變。 即引用的對象不能改變,指針的對象可以改變。
  • 沒有空引用,但有空指針。這使得使用引用的代碼效率比使用指針的更高。因爲在使用引用之前不需要測試它的合法性。相反,指針則應該總是被測試,防止其爲空。
  • 對引用使用“sizeof”得到的是變量的大小,對指針使用“sizeof”得到的是變量的地址的大小。
  • 理論上指針的級數沒有限制,但引用只有一級。即不存在引用的引用,但可以有指針的指針。
int **p //合法
int &&p //非法
  • ++引用與++指針的效果不一樣。
    例如就++操作而言,對引用的操作直接反應到所指向的對象,而不是改變指向;而對指針的操作,會使指針指向下一個對象,而不是改變所指對象的內容。

描述實時系統的基本特性

  • 實時操作系統是保證在一定時間限制內完成特定功能的操作系統。

基本特性:實時性、有線程優先級、多種中斷級別

全局變量和局部變量在內存中是否有區別?如果有,是什麼區別?

有區別。

  • 全局變量保存在內存的全局存儲區,佔用靜態的存儲單元;
  • 局部變量保存在棧中,只有在所在函數被調用時才動態地爲變量分配存儲單元。

什麼是平衡二叉樹?

平衡樹(BT) 指的是,任意節點的子樹的高度差都小於等於1。

堆棧溢出一般是什麼原因導致的?

  1. 函數調用層次太深。函數遞歸調用時,系統要在棧中不斷保存函數調用時的現場和產生的變量,如果遞歸調用太深,就會造成棧溢出,這時遞歸無法返回。再有,當函數調用層次過深時也可能導致棧無法容納這些調用的返回地址而造成棧溢出。
  2. 動態申請空間使用之後沒有釋放。由於C語言中沒有垃圾資源自動回收機制,因此,需要程序主動釋放已經不再使用的動態地址空間。申請的動態空間使用的是堆空間,動態空間使用不會造成堆溢出。
  3. 數組訪問越界。C語言沒有提供數組下標越界檢查,如果在程序中出現數組下標訪問超出數組範圍,在運行過程中可能會內存訪問錯誤。
  4. 指針非法訪問。指針保存了一個非法的地址,通過這樣的指針訪問所指向的地址時會產生內存訪問錯誤。

什麼函數不能聲明爲虛函數?

(1)不能被繼承的函數。
(2)不能被重寫的函數。

  1. 普通函數:普通函數不屬於成員函數,是不能被繼承的。普通函數只能被重載,不能被重寫,因此聲明爲虛函數沒有意義。
  2. 友元函數:友元函數不屬於類的成員函數,不能被繼承。對於沒有繼承特性的函數沒有虛函數的說法。
  3. 構造函數:多態是通過基類指針指向子類對象來實現多態的,在對象構造之前並沒有對象產生,因此無法使用多態特性,這是矛盾的。因此構造函數不允許繼承。
  4. 內聯成員函數:內聯函數是在編譯時展開的,而虛函數是爲了實現多態,是在運行時綁定的。因此內聯函數和多態的特性相違背。
  5. 靜態成員函數:首先靜態成員函數理論是可繼承的。但是靜態成員函數是編譯時確定的,無法動態綁定,不支持多態,因此不能被重寫,也就不能被聲明爲虛函數。

Internet採用哪種網絡協議?該協議的主要層次結構?

TCP/IP協議,叫做傳輸控制/網際協議,又叫網絡通訊協議,這個協議是Internet國際互聯網絡的基礎。
在這裏插入圖片描述

IP地址的編碼分別爲哪兩部分?

網絡ID+主機ID。

  • 網絡ID就是網絡地址,它是供路由器在路由表中尋址使用的。
  • 主機ID就是在局域版網中的主機號;

不能做switch參數的類型有哪些?

  • 支持baibyte,char,short,int,long,bool,整數類型和du枚舉類型。
  • 不支持zhifloat,double,string
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章