追一科技面經:nginx
時間:7.25晚上19:30面試
方式:電話一面安全
崗位:C++/GO後臺開發工程師(20秋招提早批)服務器
時長:30分鐘左右函數
1. 自我介紹spa
2. 介紹下單例模式線程
答:局部靜態變量實現單例模式,在C++11中靜態局部變量是線程安全的。(面試官但願能答出:這裏爲何採用靜態局部變量,怎麼保證線程安全的)指針
3. 不一樣進程訪問靜態變量是不是同一個實例?code
答:全局變量無論是否是靜態的,在多進程模型下都是每一個子進程一份,互不影響,也就是說若是一個進程修改了這個變量的值,那隻對該進程有效,其餘子進程看不到修改後的值。(考察:進程的地址空間)
對象
4. 基類中new一個子類,講下構造函數和析構函數的順序?
答:先調用基類的構造函數,再調用子類的構造函數,析構函數調用順序相反。(考察的是C++基礎)
5. 講下內存泄漏
答:new和delete成對使用,malloc和free成對使用;(考察的是C++基礎)
6. 講下野指針
答:野指針指向一個已刪除的對象或 申請訪問受限內存區域 的指針。好比delete後沒有置空,free後沒有置空,此時指針指向的就是垃圾內存,該指針就是野指針。(考察的是C++基礎)
7. 介紹下TCP快重傳
答:發送方只要一連收到三個重複確認就應當當即重傳對方還沒有收到的報文段,而沒必要繼續等待設置的重傳計時器時間到期。(考察的是C++基礎)
8. 講下鏈表翻轉
答:從原鏈表的頭部一個一個取節點插入新鏈表的頭部;
ListNode* ReverseList(ListNode*pHead){ ListNode* prev=NULL; while(pHead) { ListNode* next=p->next; p->next= prev; prev =p; p= next; } return newh; }
9. 講下紅黑樹
答:R-B Tree,全稱是Red-Black Tree,又稱爲「紅黑樹」,它一種特殊的二叉查找樹。紅黑樹的每一個節點上都有存儲位表示節點的顏色,能夠是紅(Red)或黑(Black)。
紅黑樹的特性:
(1)每一個節點或者是黑色,或者是紅色。
(2)根節點是黑色。
(3)每一個葉子節點(NIL)是黑色。 [注意:這裏葉子節點,是指爲空(NIL或NULL)的葉子節點
(4)若是一個節點是紅色的,則它的子節點必須是黑色的。
(5)從一個節點到該節點的子孫節點的全部路徑上包含相同數目的黑節點。
10. 紅黑樹左旋
答:紅黑樹的左旋操做
假設待左旋的結構中,P爲父節點,S爲孩子節點。左旋操做後,S節點代替P節點的位置,P節點成爲S節點的左孩子,S節點的左孩子成爲P節點的右孩子。
紅黑樹的右旋操做。
假設待右旋的結構中,P爲父節點,S爲孩子節點。右旋操做後,S節點代替P節點的位置,P節點成爲S節點的右孩子,S節點的右孩子成爲P節點的左孩子。
11. 講下不一樣進程怎麼訪問共享內存的?
答:一個進程建立共享內存區域,而後把共享區域的地址連接到本進程的地址空間;其餘進程若訪問該共享內存,只需把共享內存區域的地址連接到進程的地址空間便可。
12. 假如進程A和進程B訪問共享內存(包括信號量),若是進程A和進程B異常退出,信號量是否還在?
答:我理解的是還在,只要代碼裏沒有調用信號量的銷燬函數,那信號量就一直在。
13. 不一樣進程是否能夠監聽同一個端口?怎麼作到多個進程監聽同一個端口的?
答:能夠,好比nginx服務器中的多個worker進程監聽同一個端口,
14. 當有個請求到達,多個進程之間怎麼處理這個請求?
答:好比在nginx服務器中,當有請求到達時,多個worker進程先去競爭互斥鎖,誰拿到互斥鎖誰來處理這個請求。