嵌入式-C++面經1
一、問題總覽
1.1 HR面
1.自我介紹
2.有什么興趣愛好?
3.平時如何提高代碼能力?
4.你說會刷題,平時用什么軟件刷題?
5.期望薪資
6.未來有什么規劃。
1.2 專業一面
1.詳細講講 reactor模式的概念。
2.熟悉哪些設計模式?
3.遞歸是什么,遞歸是怎么實現的
4.繼承,多態的作用。
5.虛函數。
6.了解內存分區嗎,詳細講一下
7.static關鍵字
8.vector、list、deque 對比,什么時候使用?
9.講講智能指針
10.哪些手段可以避免死鎖?
11.進程間通信有哪些方式
1.3 專業二面
1.虛函數,虛函數表
2.智能指針
3.C++STL
4.了解linux嗎
5.數據庫相關的知識
6.TCP
7.設計模式
二、HR面
3.平時如何提高代碼能力?
答:
1.吃透核心概念、掌握數據結構與算法
2.讀優質源碼,模仿經典實現
3.多場景編碼,適應不同需求
4.重視代碼規范
5.學會調試與排錯:掌握調試工具(GDB、VS Code Debugger),設置斷點、查看調用棧、監控變量變化
6.參與真實項目,主動優化舊代碼
7.輸出倒逼輸入:寫技術博客、做分享、教別人編程,能幫你梳理知識漏洞
三、專業一面
1.詳細講講 reactor模式的概念。
答:
- 定義:
Reactor 模式(反應堆模式)是一種事件驅動(Event-Driven)的并發編程模式,其核心思想是通過一個事件循環(Event Loop) 監聽并分發事件,將 I/O 操作與業務邏輯解耦,從而提高系統的響應速度和資源利用率。- 核心概念與組件:
1.事件源(Event Source)
2.事件多路分發器(Event Multiplexer)
3.事件處理器(Event Handler)
4.反應器(Reactor)- 工作流程:
Reactor 模式的典型執行流程如下:
初始化:Reactor 注冊事件源(如 Socket)和對應的事件處理器(如 “接收連接”“讀取數據”)。
事件循環:Reactor 啟動事件多路分發器,阻塞等待事件源就緒(如客戶端連接請求、數據到達)。
事件觸發:當某個事件源就緒(如 Socket 可讀),事件多路分發器將其標記為就緒狀態。
事件分發:Reactor 根據就緒事件,找到對應的事件處理器,調用其處理方法(如handleRead())。
業務處理:事件處理器執行具體業務邏輯(如解析數據、處理請求),期間可能觸發新的事件(如 “寫響應”),并再次注冊到 Reactor 中。
2.熟悉哪些設計模式?
答:
設計模式的分類(經典 23 種)
1.單例模式(Singleton):保證一個類僅有一個實例,并提供全局訪問點(如日志工具、配置管理器)。
2.工廠模式(Factory):通過工廠類統一創建對象,避免直接使用new,降低耦合(如不同數據庫的連接工廠)。
3.遞歸是什么,遞歸是怎么實現的
答:
遞歸指函數直接或間接調用自身來解決問題的方式實現原理:
遞歸的底層依賴函數調用棧實現,每次遞歸調用都會觸發以下步驟:
- 1.壓棧(Push):
當函數調用自身時,系統會在棧中為新的函數調用創建一個棧幀(Stack Frame),存儲當前函數的參數、局部變量和返回地址(即調用結束后回到哪里繼續執行)。- 2.遞歸執行:
新的函數調用開始執行,若未達到基線條件,會繼續壓棧并調用自身,直到某個調用觸發基線條件。- 3.出棧(Pop):
當函數達到基線條件并返回結果時,對應的棧幀會被彈出,結果傳遞給上一層調用,依次向上直到最外層函數返回最終結果。優點:代碼簡潔直觀
缺點:
棧溢出風險:遞歸深度過大會導致棧幀過多,超出棧的最大容量
效率問題:頻繁的棧操作和重復計算(如未優化的斐波那契遞歸)會導致性能損耗。
4.繼承,多態的作用。
答:
繼承和多態是面向對象編程(OOP)的兩大核心特性,它們共同作用于代碼的復用性、擴展性和靈活性
繼承的作用
繼承是指一個類(子類)可以繼承另一個類(父類)的屬性和方法,并可以在此基礎上添加新的屬性或重寫父類方法。其核心價值在于代碼復用和建立類之間的層次關系。
- 代碼復用,減少重復
- 為多態奠定基礎
多態的作用
多態是指同一操作作用于不同對象時,產生不同的執行結果。其核心是 “接口復用”,通過統一的接口實現不同的具體邏輯,降低代碼耦合度。
- 統一接口,簡化調用
- 提高代碼擴展性
繼承與多態的協同作用
繼承讓子類共享基礎邏輯,避免重復勞動;
多態讓父類接口可以適配各種子類實現,使系統易于擴展和維護。繼承:核心是 “復用”,通過層級關系讓子類共享父類功能,減少重復代碼。
多態:核心是 “擴展”,通過統一接口適配不同實現,使代碼更靈活、易擴展。
5.虛函數。
答:
虛函數是 C++ 中實現多態的核心機制,它允許子類重寫父類的方法,使得通過父類指針或引用調用方法時,能自動執行子類的具體實現。
6.了解內存分區嗎,詳細講一下
答
在程序運行時,操作系統會將內存劃分為不同區域(分區),每個區域有特定的用途、生命周期和訪問規則。
- 從低地址到高地址,內存通常分為以下幾個區域:
代碼區 → 常量區 → 全局/靜態存儲區 → 堆區 → 棧區 → 內核區
(不同系統的地址分布可能略有差異,但邏輯分區一致)
7.static關鍵字
答:
static 是 C/C++ 中一個多功能的關鍵字,可用于修飾變量、函數和類成員,其核心作用是控制作用域、生命周期或鏈接屬性。
- 在函數內部用 static 修飾的變量,稱為局部靜態變量。
- 在函數外部用 static 修飾的變量,稱為全局靜態變量。
- 用 static 修飾的函數,稱為靜態函數。
8.vector、list、deque 對比,什么時候使用?

9.講講智能指針
答:
- 智能指針是 C++ 中用于自動管理動態內存的類模板,其核心作用是避免手動調用delete釋放內存時可能出現的內存泄漏、double free(重復釋放)等問題。
- 智能指針通過RAII(資源獲取即初始化) 機制,在對象生命周期結束時(如離開作用域)自動釋放所指向的內存。
10.哪些手段可以避免死鎖?
答:
- 死鎖是多線程 / 多進程并發編程中,多個線程因互相等待對方持有的資源而永久阻塞的問題。
- 避免死鎖的核心是破壞死鎖產生的四個必要條件(互斥、持有并等待、不可剝奪、循環等待)
11.進程間通信有哪些方式
答:
- 匿名管道
- 命名管道
- 共享內存
- 消息隊列
- 信號
- 信號量
- 套接字

浙公網安備 33010602011771號