首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

騰訊 C++ 後台面試題彙總:從二分查找到架構設計的全景複盤

     編輯:Java 綜合教學

騰訊 C++ 後台面試題彙總:從二分查找到架構設計的全景複盤

2016 年廣州騰訊 C++ 後台一面 70 分鐘實錄,涵蓋手寫代碼、C/C++ 語言特性、系統編程、網絡模型、架構設計等多維度考察。

核心考點與參考答案

1. 手寫非遞歸二分查找

面試熱身題,考察邊界處理與循環不變量。關鍵:low <= high、mid = low + (high-low)/2 防溢出。

2. 數組中找第二大數:O(n) 單遍歷解法

錯誤方向:堆排序 O(n log n)、冒泡/選擇 O(2n)。
正解:維護 max、secondMax 兩個變量,單次遍歷更新:

int getSecondMax(int[] arr) {
    if (arr.length < 2) return -1;
    int max = Math.max(arr[0], arr[1]);
    int second = Math.min(arr[0], arr[1]);
    for (int i = 2; i < arr.length; i++) {
        if (arr[i] > max) { second = max; max = arr[i]; }
        else if (arr[i] > second) { second = arr[i]; }
    }
    return second;
}

3. struct vs class 差異

  • 默認訪問/繼承權限:struct public,class private
  • 大括號初始化:struct 支援(兼容 C),class 有構造函數則不支援
  • 模板參數:可用 class/typename,不可用 struct

4. C++ 多態實現機制

虛函數表(vtable)+ 虛指針(vptr)。構造時設置 vptr 指向類的 vtable,虛函數調用通過 vptr→vtable→函數地址間接跳轉。

5. static / extern / extern "C" 作用

關鍵字作用
static修飾變量:靜態存儲區、生命周期全程、文件級可見;修飾函數:內部鏈接
extern聲明外部定義,提示編譯器去其他文件尋找
extern "C"指定 C 鏈接規約,禁用名字修飾,實現 C/C++ 混合編程

6. C/C++ 內存佈局

低地址→高地址:代碼區、全局/靜態區、堆(向上增長)、共享庫、棧(向下增長)、內核區。

7. 僵屍進程產生與避免

  • 產生:子進程退出,父進程未 wait/waitpid 回收
  • 避免四法:父進程阻塞 wait、SIGCHLD 信號處理器回收、SIG_IGN 忽略讓內核回收、雙重 fork 讓 init 接管孫進程

8. 宏實現數組長度計算

#define ARRAY_LEN(arr) (sizeof(arr) / sizeof((arr)[0]))

9. Shell 去重:sort + uniq/awk/sed 多種方案

sort -u file                    # 最簡單
sort file | uniq                # 經典管道
sort file | awk '{if($0!=last) print; last=$0}'
sort file | sed '$!N; /^\(.*\)\n\1$/!P; D'

10. epoll vs select

  • epoll 支援水平觸發 (LT) 與邊緣觸發 (ET)
  • select 受限 FD_SETSIZE (1024),epoll 無理論上限
  • epoll O(1) 事件就緒檢查,select O(n) 輪詢
  • epoll 使用 mmap 共享內核/用戶空間內存,減少拷貝
  • epoll_create(size) size 告知內核監聽規模,返回 fd 需 close()

11. SQL:查詢出現次數 Top 3 年齡

SELECT TOP 3 Age, cnt FROM (
    SELECT Age, COUNT(*) AS cnt FROM table1 GROUP BY Age
) t ORDER BY cnt DESC;

12. 網絡五層模型

應用層 → 運輸層 → 網絡層 → 數據鏈路層 → 物理層

13. QQ 並發登錄架構設計

  • 協議選擇:長連接 + 自定義二進制協議 / Protobuf
  • 負載均衡:DNS 輪詢 + 四層/七層代理(LVS/Nginx)
  • 連接層:Reactor 模式、epoll ET、連接遷移
  • 狀態層:分布式 Session、一致性哈希路由
  • 存儲層:分庫分表、讀寫分離、緩存穿透/雪崩防護

面試復盤建議

  1. 基礎題必須手寫無誤:二分、快排、鏈表反轉、atoi
  2. SQL/Shell 平時少寫,需專項補強
  3. 架構題展開思路:分層、分治、權衡、演進
  4. 不會時主動溝通思考過程,面試官看重解題思路
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved