2016 年廣州騰訊 C++ 後台一面 70 分鐘實錄,涵蓋手寫代碼、C/C++ 語言特性、系統編程、網絡模型、架構設計等多維度考察。
面試熱身題,考察邊界處理與循環不變量。關鍵:low <= high、mid = low + (high-low)/2 防溢出。
錯誤方向:堆排序 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;
}
class/typename,不可用 struct虛函數表(vtable)+ 虛指針(vptr)。構造時設置 vptr 指向類的 vtable,虛函數調用通過 vptr→vtable→函數地址間接跳轉。
| 關鍵字 | 作用 |
|---|---|
| static | 修飾變量:靜態存儲區、生命周期全程、文件級可見;修飾函數:內部鏈接 |
| extern | 聲明外部定義,提示編譯器去其他文件尋找 |
| extern "C" | 指定 C 鏈接規約,禁用名字修飾,實現 C/C++ 混合編程 |
低地址→高地址:代碼區、全局/靜態區、堆(向上增長)、共享庫、棧(向下增長)、內核區。
wait/waitpid 回收SIG_IGN 忽略讓內核回收、雙重 fork 讓 init 接管孫進程#define ARRAY_LEN(arr) (sizeof(arr) / sizeof((arr)[0]))
sort -u file # 最簡單
sort file | uniq # 經典管道
sort file | awk '{if($0!=last) print; last=$0}'
sort file | sed '$!N; /^\(.*\)\n\1$/!P; D'
FD_SETSIZE (1024),epoll 無理論上限epoll_create(size) size 告知內核監聽規模,返回 fd 需 close()SELECT TOP 3 Age, cnt FROM (
SELECT Age, COUNT(*) AS cnt FROM table1 GROUP BY Age
) t ORDER BY cnt DESC;
應用層 → 運輸層 → 網絡層 → 數據鏈路層 → 物理層