時間:7.19
方式:電話一面
部門:百度智能雲
崗位:后端研發
時長:1小時左右
先問基礎(25分鍾左右)
1. 二叉樹有哪幾種形式?
答:
二叉查找樹、平衡二叉樹、紅黑樹、B+樹、B-樹、字典樹、后綴樹、廣義后綴樹。
2. 二叉樹有哪幾種遍歷方式?
答:
前序遍歷、中序遍歷、后序遍歷、層次遍歷。
3. 有一個雙向鏈表,在a后插入一個節點,描述下插入過程?
答:
在結點a后插入結點s
在結點b前插入結點s
4. 進程和線程的區別?
答:
1) 一個程序至少有一個進程,一個進程至少有一個線程。
2) 線程的划分尺度小於進程,使得多線程程序的並發性高。
3) 進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
4)從執行過程來看,每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
5) 從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
5. 進程間通信方式?
答:
管道、信號、消息隊列、共享內存、信號量、套接字。
6. 進程死掉后,內存是否會被釋放?
答:
我理解的是:進程退出(終止)后,操作系統會自動回收內存。如果異議,歡迎討論。
7. 講一下僵屍進程?
答:
一個進程使用fork創建子進程,如果子進程退出,而父進程沒有調用wait或waitpid獲取子進程的狀態信息,那么子進程的進程描述符仍然保存在系統中,這種進程稱為僵屍進程。
當父進程退出后,這個僵屍進程成為了孤兒進程,過繼給了init進程,而init進程會周期性的調用wait系統調用來清除各個僵屍進程的子進程。
8. 講下TIME_WAIT?
答:
1. A不能保證最后的ACK能達到B,如果最后的ACK丟失, 那么B顯然收不到, B於是發起了重傳FIN的操作, 此時如果A處於CLOSED的狀態, 就沒辦法給對端發ACK了,所以A應該等一段時間,這段時間就是所謂的TIME_WAIT。
2. 保證新舊四元組互不干擾,假設tcp連接是: A(1.2.3.4:8888)------B(6.7.8.9:9999), 這就是一個tcp四元組。 當tcp連接關閉后, 四元組釋放。 后面的新連接可能會重用到這個四元組(有這個可能性), 那么問題就來了: 新四元組和舊四元組完全一致, 他們的網絡包會混亂嗎?所以,可以考慮這樣一個機制:讓舊四元組對應的所有網絡包都消失后(等一段時間),才允許新四元組建立,頗有點鎖的味道。這個等一段時間就是2MSL。
9. 如果一個TCP連接處於TIME_WAIT狀態,現在想立刻重用舊連接的端口,socket中應該加哪個選項參數?
答:
SO_REUSEADDR。一般來說,一個端口釋放后會等待兩分鍾左右才能再被使用,而使用SO_REUSEADDR則可以讓端口釋放后立即被再次使用。
10. 講下TCP/UDP的應用場景?
答:
TCP適合對效率要求相對低,但對准確性要求相對高或者是有連接的場景,TCP一般用於文件傳輸(HTTP,HTTPS,FTP等協議),郵件(POP,SMTP等協議),遠程登錄等場景;UDP更適合對效率要求相對高,對准確性要求相對低的場景,UDP一般用於即時通信(QQ聊天),在線視頻(rtsp流速度一定要快,偶爾丟包沒關系),網絡語音電話等場景;
11. 了解HTTP協議嗎?
答:
HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML文件,圖片文件,查詢結果等)。HTTP的特點是:簡單快速,靈活,無連接,無狀態,支持B/S及C/S模式。
推薦:https://www.cnblogs.com/ranyonsue/p/5984001.html
12. 了解Shell腳本嗎?
答:
Shell 是一個應用程序,它連接了用戶和 Linux 內核,讓用戶能夠更加高效、安全、低成本地使用 Linux 內核,這就是 Shell 的本質。
推薦:https://www.runoob.com/linux/linux-shell.html
13. 了解01背包嗎?
答:
推薦:https://zhuanlan.zhihu.com/p/68351189
再問項目(25分鍾左右)
1. 接入中間件,如何實現的?
2. 指令下發模塊,為什么采用UDP-Socket進行通信?
3. 多屏流媒體播放器,視頻延遲及穩定性怎么解決的?
4. 視頻分析服務器,人臉庫是調用的哪里的?檢測效率和穩定性如何解決?
你還要什么要問我的?(10分鍾左右)
1. 請問你們部門后端使用的主流語言是什么?
面試官答:主要用Python和Go語言,當然也有部分工作需要C++和Java語言進行開發。
2. 請問你們部門使用了哪些主流開源框架?
面試官答:我們使用的開源框架也有很多,主要選用有社區維護,開源時間比較長,穩定性比較好的一些開源框架,對於一些比較新的框架我們較少采用。
3. 請問你們部門怎么看待開源項目呢?
面試官答:面向商業的產品是不能開源的,如果是自己寫的一個組件或者插件,希望更多人使用,是可以開源的。
覺得和面試官聊的挺開心,不管有沒有過,收獲還是蠻多的!