首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

騰訊 C++ 後台面試題匯總:算法、C++特性、系統程式、網路、架構實戰

     編輯:PHP 相關知識

騰訊 C++ 後台面試題匯總與解析

2016 年騰訊廣州 C++ 後台技術一面實錄,涵蓋手寫代碼、C++ 語言細節、作業系統原理、網路協議、高併發架構設計等核心考點,附標準答案與解析。

題目清單與解析

1. 非遞歸二分查找 (手寫代碼)

int binarySearch(int* arr, int len, int val) {
    int low=0, high=len-1, mid;
    while (low <= high) {
        mid = (low+high)/2;
        if (arr[mid]==val) return mid;
        if (val > arr[mid]) low = mid+1;
        else high = mid-1;
    }
    return -1;
}

2. 找出陣列中第二大的數 (O(n) 最優解)

錯誤方向:堆排序 O(n log n)、冒泡兩輪 O(2n)。
正確 O(n) 單掃描:

int getSecondMax(int* arr, int len) {
    if (len <= 1) return -1;
    int max = arr[0] > arr[1] ? arr[0] : arr[1];
    int second = arr[0] > arr[1] ? arr[1] : arr[0];
    for (int i=2; i<len; i++) {
        if (arr[i] <= second) continue;
        if (arr[i] < max) second = arr[i];
        else { second = max; max = arr[i]; }
    }
    return second;
}

3. struct vs class 差異

  • 繼承/成員預設存取:struct 默認 public,class 默認 private。
  • 大括號初始化:struct 保留 C 相容性,無建構子時可 {} 初始化;class 有建構子則不可。
  • 模板參數:template <class T> 或 typename T,不可用 struct。

4. C++ 多態實現機制

虛函數表 (vtable) + 虛函數指標 (vptr)。編譯期為每個含虛函數的類別建構 vtable,物件實例化時置入 vptr 指向 vtable。呼叫虛函數時透過 vptr 索引 vtable 定位函數地址實現動態綁定。

5. static 關鍵字作用 (C/C++)

  • 區域變數:靜態儲存區、生命週期全程、作用域局部。
  • 全域變數/函數:內部連結,僅本編譯單元可見。
  • 類別靜態成員:屬於類別而非物件,共享單一拷貝。

6. extern "C" 作用

指示 C++ 編譯器對該函數採用 C 語言連結規範 (不修飾名稱),使 C++ 可呼叫 C 函式庫,或 C 可呼叫 C++ 函數。解決 C++ 名稱修飾 (Name Mangling) 導致連結失敗。

7. C/C++ 程式記憶體佈局

低址 → 高址:代碼區 → 全域/靜態區 → 堆區 (向上增長) → ... → 棧區 (向下增長) → 保留區。堆棧相向增長,中間為自由區。

8. 殭屍進程產生與預防

  • 產生:子進程結束,父進程未 wait/waitpid 回收,殘留進程表項目。
  • 預防:(1) 父進程 wait/waitpid;(2) 捕獲 SIGCHLD 信號處理;(3) signal(SIGCHLD, SIG_IGN) 忽略,交由 init 回收;(4) 雙重 fork,孫進程由 init 收養。

9. 宏:求陣列長度 (類型未知)

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

10. Shell:刪除文本重複行

sort -u file                    # 方法一
sort file | uniq                # 方法二
sort file | awk '{if($0!=line)print; line=$0}' # 方法三
sort file | sed '$!N; /^\(.*\)\n\1$/!P; D'     # 方法四

11. epoll vs select

特性selectepoll
觸發模式水平觸發 (LT)LT + 邊緣觸發 (ET)
最大監聽 fd1024 (FD_SETSIZE)無上限 (受限於記憶體/ulimit)
效能隨 fd 增長線性下降 (輪詢)O(1) 就緒隊列
核心/用戶空間拷貝每次拷貝mmap 共享記憶體

12. SQL:查詢出現次數前三的年齡

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

13. 網路五層模型

應用層 → 傳輸層 → 網路層 → 資料鏈路層 → 物理層。

14. 架構題:QQ 百萬級併發登入設計要點

  • 協定選擇:長連接 (TCP/WebSocket) + 自定義二進制協定/Protobuf。
  • 負載均衡:DNS 輪詢 + LVS/HAProxy + 一致性哈希分發。
  • 狀態管理:無狀態接入層 + Redis 集群存 Session/在線狀態。
  • 訊息推送:閘道服務 + 消息隊列 (Kafka/RocketMQ) 異步投遞。
  • 容災:多機房部署、熔斷降級、平滑擴縮容。

15. 數據挖掘興趣度

表達學習意願,結合業務場景 (用戶畫像、推薦、異常檢測) 談理解。

面試心得

  • 基礎要扎實:手寫演算法、語言細節、OS/網路原理是硬門檻。
  • 架構題無標準答案,重邏輯清晰、有取捨、能落地細節。
  • 不會時主動思考、溝通,展現解決問題過程比背答案更重要。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved