【面試】騰訊 C++方向面經

第一篇
一面 2019/10/21 來自於比特論壇
1、講解項目
2、內存申請除了 brk 還有什麼
3、堆和棧的區別
4、多進程的地址空間是獨立的,在操作系統裏是怎麼實現的
5、兩個進程去訪問同一個線性地址,可以嗎
6、段錯誤,是怎麼導致的
7、操作系統怎麼進行進程的切換
8、Linux 下相關命令
9、信號機制是幹什麼的?信號是怎麼處理的?信號處理是同步還是異步?kill 命令什麼時
候返回?
10、tcp 和 udp 的區別?tcp 怎麼做到有序?
11、瞭解 shell 和 Python 嗎?
二面 2019/10/25 來自於比特論壇
1、自我介紹
2、strlen 的遞歸實現
3、int rand()1-6 等概率,用這個函數實現 int rand()1-10 等概率
4、101 個硬幣,有一個是假的,有一個天平,稱兩次判斷出這個假硬幣輕還是重
5、程序運行中一直進入 if 語句,怎麼讓它進入 else 語句
6、兩個單鏈表相交了,遍歷一次找到相交結點
7、阻塞和非阻塞
8、socket 編程的相關接口
第二篇
一面 2019/10/9 來自於比特論壇
1、虛擬地址空間和物理內存
2、哈希衝突的解決方案
3、編譯過程
二面 2019/10/9 來自於比特論壇

1、主要問項目,他選了我第一個項目,HTTP 文件共享服務器
2、輸入域名後發生了什麼? 3、多線程安全問題,線程池,鎖
4、斷點續傳
5、這個項目在一臺主機上跑是沒有問題的,那如果是多臺主機,就會有問題,怎麼解決
6、然後簡單講了下用 epoll 提高效率,並沒有深入了問
7、HTTP 協議
三面 2019/10/11 來自於比特論壇
1、主要是鎖的問題
2、線程安全的問題
3、項目
4、100G 文件,多 ip 進行排序
5、問了能不能實習,學校的課程
6、HTTPS 的實現
第三篇
一面 2019/10/14 來自於比特論壇
1、自我介紹
2、你對虛函數是怎麼理解的?
3、詳細講 static 關鍵字吧
4、引用和指針有什麼區別?
5、new 和 malloc 有什麼區別?
6、知道哪些 C++11 的新特性?講一下,說一說右值引用的應用場景?
7、C++是怎麼做動態內存管理的?
8、說一下 map 和 hashmap 的區別吧
9、講一下堆和棧的區別吧
10、講一下 time_wait 是發生在那一端?
11、如果很多連接都是處於 time_wait 狀態,該怎麼處理?
12、講一下 select 和 epoll 的區別?
13、講一下 LT 和 ET 有什麼區別?
14、講一下 get 和 post 的區別?
15、http2 和 http1 的區別?
16、http 和 https 的區別?https 的優缺點?
17、什麼時候要使用多線程編程?
18、多線程編程裏面,你怎麼理解互斥鎖和自旋鎖? 19、用 mysql 嗎?
20、你認爲在搭建一個 web 服務的過程中,有哪些情況會影響到 web 服務的性能? 21、怎麼提升服務器的併發性能? 22、剛提到線程池,被問線程池內部的線程一般是多少個? 23、倘若你用了線程池,但是高峯時期流量就是太高了,服務器承受不住,你該怎麼辦? 24、倘若就算這樣還是不行,怎麼辦? 25、倘若你就只有一臺服務器,沒有更多的硬件資源了,怎麼辦? 26、倘若你的操作無法用原子性,一個線程不斷的生產任務,放到隊列中,另一個從隊列
中拿取請求,如何做到無鎖編程? 27、你平常有什麼興趣愛好嗎? 28、最近有看什麼技術書籍嗎? 29,你寫的兩個項目,搜索引擎和在線畫圖板,是你的課程設計嗎?
30、你的 httpserver 是怎麼搭建的? 31、我這邊基本問的差不多了,你有什麼要問的嗎?
二面 2019/10/14 來自於比特論壇
1、自我介紹
2、C 與 C++的區別
3、平常有 C 和 C++混合編程嗎,如果在 C++當中要調用 C 的函數,要怎麼做? 4、講講 extern 關鍵字,爲什麼要用?講重載的原理和使用? 5、知道覆蓋吧,講講實現和使用? 6、講講你知道的 C++11 新特性
7、我看你對 C++動態內存管理有一定了解,你來談一下 C++的內存佈局吧
8、一個未初始化的全局變量存在那個區?臨時變量存在那個區? 9、new 出來的空間在哪個區、爲什麼已經有了 malloc 和 free,爲什麼還要用
new/delete?
10、談一談數據結構,挑一種你擅長的說一下
11、你這兩個項目什麼時候寫的?你這個 http 服務器的功能是什麼?socket 這部分 api
你是怎麼用的?
12、有沒有看過其他常用的 http 服務器?
13、有對你這個服務器進行測試過嗎?怎麼測試量級的
14、你說熟悉多路複用模型,有沒有在項目中用到?
15、數據庫會嗎?
16、講講搜索引擎項目中的索引是怎麼構建的?
17、那你按照這樣來構建索引,我搜的關鍵字中倘若有很多無意義詞(比如 is,a 等),怎
麼設計能保證我們搜的結果能符合預期?
18、搜索引擎是否有測試過?
19、我看搜索引擎中大量使用了 vector,談一下 vector 的好處?
20、怎麼 vector 規避頻繁擴容?
21、sort 的排序是什麼排序?
22、講一下 https 和 http 的區別
23、講一下 http2、0 的改進點
24、搜索引擎如果要搞一個聯想功能,你覺得該怎麼實現?
25、問問題吧
第四篇
一面 2019/10/22 來自於比特論壇
1、自我介紹
2、談談我對服務器的理解
3、對 reactor 與 proactor 理解
4、講講項目中服務器構架
5、對同步異步的理解
6、對 stl 的理解,stl 內存分配的理解,爲什麼要有空間配置器?
7、stl 與面向對象有什麼聯繫?
8、面向對象有什麼優點?爲什麼要有面向對象?
9、進程地址空間分佈?爲什麼要有?如何管理?系統調用?
10、數據庫索引結構?爲什麼要用 B+樹?
11、你有什麼問題問我?
12、談談對數據安全的理解?加密?MD5?
二面 2019/10/22 來自於比特論壇
1、堆和棧空間
2、netstat 和 ps 兩個命令
3、進程和線程
4、父進程創建了兩個進程,其中一個子進程除 0 錯誤,另外兩個進程的情況? 5、上題進程換成線程

6、線程棧空間給了一個超過棧內存的變量,會發生什麼? 7、進程間通信
8、進程和線程的優劣,進程和線程一般開闢幾個? 9、http 協議,報頭,狀態
10、服務端客戶端模型和瀏覽器服務端模型做對比,分析其優劣,安全性
11、tcp 和 udp 的對比
12、發送報文的具體函數調用?
13、主要就這些方面,考察底層原理,有的題需要說出自己的看法
第五篇
一面 2019/10/16 來自於比特論壇
1、什麼是三次揮手?爲什麼要三次揮手?爲什麼不是兩次和四次?
2、什麼是四次握手?爲什麼要四次握手?有沒有抓包抓過四次握手?講了一下什麼情況
有三次握手?
3、雙方發送 SYN,爲什麼要發送 SYN? 4、四次揮手裏 FIN_WAIT2 狀態一直持續怎麼辦?
5、問了項目
6、從項目扯到了 epoll,講了一下 epoll 和 select 的區別,講了一下水平觸發和邊緣觸發
7、然後講了一下 strcpy 怎麼實現的,然後 strcpy 內部有沒有動態內存管理
8、知不知道雙向鏈表,快速闡述一下雙向鏈表怎麼實現的
9、再講一下項目,問到那個線程創建進程,對 fork 的優化,有沒有優化
10、都接觸過哪些開源庫
11、平時碰到問題是怎麼解決的?
二面 2019/10/16 來自於比特論壇
1、講項目,懟着項目一直問。你爲什麼知道你的服務器性能瓶頸在哪裏? 2、cpu 給進程分配哪些資源? 3、桶查找
4、怎麼確定你的哈希表大小? 5、字符串哈希算法
6、文件寫到磁盤的流程
7、內存頁大小?磁盤塊大小? 8、職業規劃
9、創建一個線程佔用的內存是多少?
10、一個系統中能創建多少進程?
11、一個進程可以創建多少個線程?
第六篇
一面 2019/10/14 來自於比特論壇
1、自我介紹
2、看你簡歷上有寫智能指針,你能給我簡單描述一下嗎?
3、C 文件的編譯過程?
4、鏈接有哪些鏈接方式?
5、指針數組、數組指針的 sizeof 求值分別是什麼?
6、你對模板有了解嗎? 7、你瞭解運行時多態的實現過程嗎?
8、你瞭解 STL 嗎?map 的底層實現?map 中查找一個元素的時間複雜度?hash 衝突的
解決方法?
9、排序算法
10、core 文件的調試方式?gdb 的使用方法你瞭解過哪些?要是你的代碼 core 掉,你一
般會怎樣調試?
11、多進程間通信的方式?你認爲哪一種的效率最高?
12、那多線程間通信有哪些方法?線程安全問題如何解決?如果想讓數據屬於線程私有應
該怎樣實現?有了解過 tls 的底層實現嗎?
13、TCP/UDP 可以進行廣播嗎?UDP 可靠嗎?MTU/MSS 的大小?
14、unique_lock 和 lock_groud 的區別?我看到你的項目中有個 bug?我看到你的項目
中用的 send 和 recv,怎樣設置爲非阻塞?非阻塞如果沒有數據可讀返回值是什麼?
15、三次握手和四次揮手?
16、有沒有了解過 malloc 的底層?
17、查看服務器連接的工具?你有抓過數據包嗎?
18、你有了解過開源的東西嗎?你有了解過協程嗎?分佈式?阿帕奇?
19、算法題:K 行,每一行有無窮多的數,每一行都是由大到小排列,從這 K 行中找前 N
個最大的數
20、你要問的問題
二面 2019/9/2 來自於比特論壇
1、自我介紹
2、主要聊項目
3、算法題:在無數個無序數中找到中位數
4、你問的問題
三面 2019/9/5 來自於比特論壇
1、問了學校相關專業課
2、算法題:一個文件中有 100 億個 int 數據,用最短時間找到最大的 1000 個 3、進程和線程的區別
4、線程池的實現方法?有什麼好處?
5、vector 和 list 的區別,push_back 如何實現?vector 的擴容方式?爲什麼擴容有這樣
差異?
6、vector、list、map、set 有什麼區別?分別的使用場景?
7、Linux 下進程間通信方式?管道、共享內存什麼場景下會用?兩個進程不在同一個機器
如何通信?
8、有用過 socket 嗎?UDP 不可靠爲啥還要存在?
9、微信聊天用的是 UDP 還是 TCP?
10、Linux 下查看網絡端口?
11、Linux 下查看負載情況?
12、臨時變量 int arr[]可以達到的最大大小
13、一個進程最大能佔用多大的內存空間?
14、你考慮讀研究生嗎?你家是哪裏的?
第七篇
一面 2019/9/12 來自於比特論壇
1、虛擬地址空間和物理內存
2、哈希衝突的解決方案(開散列,閉散列,多階哈希),一致性哈希
3、編譯過程
二面 2019/9/17 來自於比特論壇
1、主要問項目,他選了我第一個項目,HTTP 文件共享服務器
2、輸入域名後發生了什麼?
3、多線程安全問題,線程池,鎖
4、斷點續傳
5、這個項目在一臺主機上跑是沒有問題的,那如果是多臺主機,就會有問題,怎麼解決
6、然後簡單講了下用 epoll 提高效率
7、HTTP 協議
第八篇
一面 2019/9/17 來自於比特論壇
1、說一下 HTTP 服務器
2、你寫的是什麼樣的服務器呢,是單進程多線程還是多進程還是線程池,講解一下
3、線程池如何實現的?
4、那所有線程之間有什麼是共享的嗎?
5、線程之間同步和互斥問題
6、你在寫這個服務器的時候遇到過什麼問題嗎?怎樣處理的?
7、高併發的情況怎樣處理呢?
8、select 和 eopll? 9、說一下搜索引擎項目
10、你的索引如何構建的
11、你的正排索引和倒排索引都是在堆上建立的,進程退出就沒有了,那有什麼辦法保存
下來嗎?
12、說一下共享內存
13、搜索引擎項目用到的服務器是自己寫的還是其他的什麼
14、看過什麼書?給你推薦一本書《Unix 環境高級編程》
15、玩過什麼遊戲,喜歡玩遊戲嗎?
二面 2019/9/24 來自於比特論壇
1、我們是做遊戲開發的,之前有做過關於遊戲這方面的項目嗎?
2、那你說一下你的服務器
3、你這個是用了 cgi,那你是怎麼實現的?
4、如果我不用 fork 加 exec 那怎樣去實現
5、你玩過王者榮耀吧,我在手機上按下一個技能會怎麼樣?
6、既然你說到了 udp,那你說,服務器是會把你按下的這個技能,所返回的 udp 這樣的
數據怎樣處理,在客戶端上
7、技能釋放之後,會在你的客戶端上顯示出來,也會在其他玩家那裏顯示,我服務器要
怎樣緩存?
8、你說的是有局部緩存還有一些全局的緩存,那麼它們分別都是怎樣處理的呢?
9、你玩過 mmo 的遊戲嗎?
10、那你知道,假如說我現在有很多個人大約是幾千人幾萬人在一起玩,我的服務器會怎
樣處理?
11、你說的這種,並不是我的意思,假如說,現在有一張地圖,我有幾萬人同時連接進
來,那你說我的服務器或者客戶端怎樣處理?
12、那我再問你,假如我現在所有的人都聚集到了一起,在一個主城裏,那此時我又改怎
樣處理?
13、那我再問你一些編程中的知識吧
14、析構函數什麼時候要用 virtual
15、Dynamic_cast 用過嗎
16、那我問你一個很深入的問題,怎樣實現一個 dynamic_cast,你就只說是指針的情況
吧,答不出來也沒關係
17、我看你學過很多數據結構,那你知道 map 和 unordered_map 嗎?
18、紅黑樹和哈希說一下
19、紅黑樹和哈希他們增刪查改的時間複雜度
20、假如說,我現在有很多數據,是隻讀的,我要把他們存起來,那你有沒有什麼辦法可
以改進一下這個 map 和 unordered_map,效率更高一點
21、Perfect hashing
22、那再比如說,我現在有很多隻讀的字符串,再讓你改進一下你有辦法嗎
23、你聽說過 tire 嗎
第九篇
一面 2019/10/8 來自於比特論壇
1、純虛函數是什麼
2、多態是什麼
3、new 和 malloc 區別
4、static 的理解
5、指針和引用的區別
6、左值引用和右值引用
7、hashmap 和 map 的區別
8、list 和 vector 的區別
9、三次握手和爲什麼是三次
10、HTTP2 和 1 的區別
11、服務端和客戶端的 socket 流程
12、TCP 滑動窗口
13、自旋鎖和互斥鎖,分別應用於什麼場景
14、線程數量有什麼講究
二面 2019/10/15 來自於比特論壇
1、HTTPS 和 HTTP 的區別
2、設計一個帶論文查重的方式
3、設計一個類似 QQ 同步助手的雲同步通訊錄
4、設計一個數據庫存儲視頻
5、設計 QQ 後面通訊的邏輯
6、設計一個 vector
第十篇
一面 2019/6/5 來自於比特論壇
1、什麼是三次揮手?爲什麼要三次揮手?爲什麼不是兩次和四次?
2、什麼是四次握手?爲什麼要四次握手?有沒有抓包抓過四次握手?講了一下什麼情況
有三次握手?
3、雙方發送 SYN,爲什麼要發送 SYN? 4、四次揮手裏 FIN_WAIT2 狀態一直持續怎麼辦?
5、問了項目
6、從項目扯到了 epoll,講了一下 epoll 和 select 的區別,講了一下水平觸發和邊緣觸發
7、然後講了一下 strcpy 怎麼實現的,然後 strcpy 內部有沒有動態內存管理
8、知不知道雙向鏈表,快速闡述一下雙向鏈表怎麼實現的
9、再講一下項目,問到那個線程創建進程,對 fork 的優化,有沒有優化
10、都接觸過哪些開源庫
11、平時碰到問題是怎麼解決的?
二面 2019/6/11 來自於比特論壇
1、講項目,懟着項目一直問。你爲什麼知道你的服務器性能瓶頸在哪裏? 2、cpu 給進程分配哪些資源? 3、桶查找
4、怎麼確定你的哈希表大小? 5、字符串哈希算法
6、文件寫到磁盤的流程
7、內存頁大小?磁盤塊大小? 8、職業規劃
9、創建一個線程佔用的內存是多少?
10、一個系統中能創建多少進程?
11、一個進程可以創建多少個線程?

求職必備刷題官網:https://github.com/bennyrhys/interview
【更多互聯網公司筆試面試真題請關注“讓我遇見相似的靈魂”公衆號】

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