準備的問題一個沒有問,懵逼
C++編譯過程:
1.預處理:將#define #include 內聯函數 ifdef ifndef等等關鍵字替換
2.編譯:將代碼編譯成彙編語言
3.彙編:彙編轉爲二進制文件
4.連接:將各個二級制文件連接城可執行文件
進程和線程的區別:
進程是系統分配資源的基本單位,是內存中獨立的內存區間,進程之間相對對立。一個進程有多個線程,線程是進程的 一個任務,線程是CPU調度的最小單位,線程之間資源共享,進程切換開銷大,線程切換開銷小。
二叉平衡樹:
對於二叉平衡搜索樹的最多節點數和最少節點數
最多:完全二叉樹-->2^n-1
最少:用dp的方法解決 h(1)=1,h(2)=2,h(3)=h(1)+h(2)+1,h(n)=h(n-1)+h(n-2)+1
數據庫保護四種:
安全性控制,完整性控制,併發性控制,數據恢復
解決死鎖的方法:
1.搶奪資源
2.按順序執行進程
3.超時釋放資源
const成員函數想修改成員變量怎麼辦:
將成員變量用mutable修飾即可改變
虛函數表是一組虛函數指針的集合。
TCP&UDP區別:
TCP是傳輸控制協議
UDP是用戶數據報
TCP是基於連接的可靠傳輸,因爲要三/四次握手,開銷大。UDP是基於數據報的,不需要連接,開銷小。TCP基於數據流發送無數據結構的二進制串,UDP基於數據報,一次只發送一個報文。TCP是一對一連接傳輸,UDP可以多對多傳輸。
http是超文本傳輸協議,是明文傳輸。https是ssl加密的超文本傳輸協議,需要CA申請書。http用80端口,https用443端口。http是無狀態的意味着,http不會記錄當前的任何信息,之後需要http狀態就得重傳來確定。https是有狀態的可以執行加密傳輸。
二叉樹的三種非遞歸遍歷(前中還可以,後續還沒看)
用泳池法進行等概率隨機取數(值得一寫)
二分查找某個數,執行次數就是log2n 向上取整
進程和線程在資源分配方面的區別???
new malloc delete free區別:
malloc和free是庫函數,new和delete是關鍵字new和delete會調用類的構造函數和析構函數,但是庫函數只是申請空間和釋放空間並不調用函數,導致內存泄漏。
vector和list
vector是單向數組,連續的內存空間,起始地址不變。插入刪除會導致內存塊的改變,所以修改vector的效率低下。內存不夠大的時候,會申請一塊足夠大的內存,拷貝內存過去
list是雙向鏈表,內存分散。插入刪除很好,但是讀取效率低下
補充:deque,雙向鏈表,訪問效率和vector差不多,刪除效率和list差不多,不過他支持雙向插入。
重載和重寫的區別:
override(重寫)&overload(重載):
重寫是對基類虛函數的實現或重寫,返回值、函數名、參數列表數量和類型都是一樣的,只是函數體被子類實現了
重載是參數列表數量和類型不同但是方法名和返回值都是一樣的
虛函數和非虛函數調用的問題
子指針指向父類
父指針指向子類
隱式轉換指針
最長字串問題
。
。
。