作者:故事的小黃瓜
鏈接:https://www.nowcoder.com/discuss/436386
來源:牛客網
1. 線程池如何開啓一個新線程?
2. 線程池初始化的步驟?
3. 線程池中線程狀態?
4. Connect 函數與非阻塞?
5. Accept函數與三次握手關係?
6. 主線程與IO線程之間描述符傳遞?
7. TIME_WAIT時長?爲什麼?如何取消?
8. 報文的最大生存期與那些因素有關?
9 SO_REUSEPORT和SO_REUSEADDR的區別?
10. 如何實現日誌系統?
11. 日誌數據生成過快怎麼解決?
12. 定時器實現?
13. 進程調度的方式有哪些?Linux中進程調度的方式?
14. 單進程與IO複用?
15. map的實現?與哈希表區別?
16. vector實現?
Include頭文件的順序:對於include的頭文件來說,如果在文件a.h中聲明一個在文件b.h中定義的變量,而不引用b.h。那麼要在a.c文件中引用b.h文件,並且要先引用b.h,後引用a.h,否則彙報變量類型未聲明錯誤。 雙引號和尖括號的區別:編譯器預處理階段查找頭文件的路徑不一樣。 對於使用雙引號包含的頭文件,查找頭文件路徑的順序爲: 1) 當前頭文件目錄 2) 編譯器設置的頭文件路徑(編譯器可使用-I顯式指定搜索路徑) 3) 系統變量CPLUS_INCLUDE_PATH/C_INCLUDE_PATH指定的頭文件路徑 對於使用尖括號包含的頭文件,查找頭文件的路徑順序爲: 1) 編譯器設置的頭文件路徑(編譯器可使用-I顯式指定搜索路徑) 2) 系統變量CPLUS_INCLUDE_PATH/C_INCLUDE_PATH指定的頭文件路徑
爲了解決循環引用導致的內存泄漏,引入了weak_ptr弱指針,weak_ptr的構造函數不會修改引用計數的值,從而不會對對象的內存進行管理,其類似一個普通指針,但不指向引用計數的共享內存,但是其可以檢測到所管理的對象是否已經被釋放,從而避免非法訪問。
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
一行代碼 return 1<<--number;
請你講講Redis的定時機制怎麼實現的
參考回答:
Redis服務器是一個事件驅動程序,服務器需要處理以下兩類事件:文件事件(服務器對套接字操作的抽象)和時間事件(服務器對定時操作的抽象)。Redis的定時機制就是藉助時間事件實現的。
一個時間事件主要由以下三個屬性組成:id:時間事件標識號;when:記錄時間事件的到達時間;timeProc:時間事件處理器,當時間事件到達時,服務器就會調用相應的處理器來處理時間。一個時間事件根據時間事件處理器的返回值來判斷是定時事件還是週期性事件
一個時間事件主要由以下三個屬性組成:id:時間事件標識號;when:記錄時間事件的到達時間;timeProc:時間事件處理器,當時間事件到達時,服務器就會調用相應的處理器來處理時間。一個時間事件根據時間事件處理器的返回值來判斷是定時事件還是週期性事件。