字節跳動2020春招C++特效引擎開發崗 面經涼

準備的問題一個沒有問,懵逼

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(重載):

重寫是對基類虛函數的實現或重寫,返回值、函數名、參數列表數量和類型都是一樣的,只是函數體被子類實現了

重載是參數列表數量和類型不同但是方法名和返回值都是一樣的

 

虛函數和非虛函數調用的問題

子指針指向父類

父指針指向子類

隱式轉換指針

最長字串問題

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章