嵌入式面經(jīng)20家+++,速查騰訊、百度、華為、博世、理想、蔚來(lái)、影石、科大訊飛、韶音、陽(yáng)光電源等!
想進(jìn)大廠做嵌入式?想一次性拿下華為、博世、理想、韶音等20+公司的面試?這份超全嵌入式面經(jīng)就是你的制勝法寶!
提前刷透這些問(wèn)題,模擬實(shí)戰(zhàn),面試不再慌!
剩下內(nèi)容都在????????????????????????????????????????????????????
嵌入式面經(jīng)20家+完整版如下:第11章 20+公司面經(jīng)雜談(一):華為、博世、理想、韶音
立即點(diǎn)擊上方查看完整面經(jīng),讓你的嵌入式面試穩(wěn)操勝券!下方僅為部分內(nèi)容,想看最全的內(nèi)容請(qǐng)點(diǎn)擊上方鏈接!
本篇涉及的所有問(wèn)題概要:大家可以試試在看參考答案前,提前嘗試解答,以便明確自身知識(shí)點(diǎn)的不足部分!
1. TCP & UDP了解嗎,簡(jiǎn)單說(shuō)一下,有什么區(qū)別?
2. 好的,那你了解粘包跟拆包嗎,這兩個(gè)協(xié)議會(huì)出現(xiàn)這個(gè)情況嗎,為什么呢?
3. 了解編譯器優(yōu)化嗎?
4. 剛才你有說(shuō)到內(nèi)聯(lián)函數(shù),你來(lái)講講它的作用,以及與普通函數(shù)的區(qū)別,有不建議使用的時(shí)候嗎?
5. 那么有沒(méi)有碰到過(guò)禁止編譯器優(yōu)化的場(chǎng)景,能舉例嗎?
6. 看門狗了解嗎,說(shuō)一說(shuō)獨(dú)立看門狗與窗口看門狗?
7. 說(shuō)一說(shuō)堆(Heap)和棧(Stack)的區(qū)別,以及是否自動(dòng)分配?
8. 重入函數(shù)、函數(shù)重寫、函數(shù)重載你了解嗎,說(shuō)一說(shuō)?
9. 嵌入式開(kāi)發(fā)中,你一般debug會(huì)看什么信息?
10. 專欄訂閱獎(jiǎng)勵(lì)(支持模仿)——個(gè)人創(chuàng)新點(diǎn)問(wèn)答:我看你在自己設(shè)計(jì)的FreeRTOS PLUS(我自己取的RTOS名字)內(nèi)存管理中采用了內(nèi)存推遲合并策略,這是什么?如何實(shí)現(xiàn)的?
---------------------------------------------------------------------------------------------------
1. TCP & UDP了解嗎,簡(jiǎn)單說(shuō)一下,有什么區(qū)別?
TCP(傳輸控制協(xié)議):
- 面向連接:通信前需要建立連接(三次握手),通信結(jié)束時(shí)關(guān)閉連接(四次揮手)。
- 可靠傳輸:數(shù)據(jù)傳輸有確認(rèn)機(jī)制、超時(shí)重傳機(jī)制,確保數(shù)據(jù)可靠性。
- 有序傳輸:數(shù)據(jù)包按發(fā)送順序到達(dá),不亂序。
- 流量控制與擁塞控制:能動(dòng)態(tài)調(diào)整發(fā)送速率,避免網(wǎng)絡(luò)擁堵。
- 適用場(chǎng)景:網(wǎng)頁(yè)瀏覽(HTTP/HTTPS)、文件傳輸(FTP)、郵件傳輸(SMTP)等。
UDP(用戶數(shù)據(jù)報(bào)協(xié)議):
- 無(wú)連接:不需要建立連接,可以直接發(fā)送數(shù)據(jù)包。
- 不可靠傳輸:不保證數(shù)據(jù)包一定送達(dá),不提供確認(rèn)機(jī)制,不進(jìn)行重傳。
- 無(wú)序傳輸:數(shù)據(jù)包可能亂序到達(dá)。
- 輕量高效:協(xié)議簡(jiǎn)單,效率高,延遲低。
- 適用場(chǎng)景:實(shí)時(shí)通信(視頻會(huì)議、直播)、網(wǎng)絡(luò)游戲、DNS查詢等對(duì)速度敏感但能容忍部分?jǐn)?shù)據(jù)丟失的場(chǎng)景。
簡(jiǎn)單來(lái)說(shuō):
- TCP強(qiáng)調(diào)可靠性,UDP強(qiáng)調(diào)速度和效率。
2. 好的,那你了解粘包跟拆包嗎,這兩個(gè)協(xié)議會(huì)出現(xiàn)這個(gè)情況嗎,為什么呢?
粘包與拆包的定義:
粘包:
定義:
- 多個(gè)數(shù)據(jù)包被合并成一個(gè)包,接收方無(wú)法分辨消息邊界。
可能的接收情況:
發(fā)生原因:
- TCP 發(fā)送緩沖區(qū)優(yōu)化:為了減少小數(shù)據(jù)包的開(kāi)銷,Nagle 算法 可能會(huì)將小包合并。
- TCP 以流方式傳輸,沒(méi)有消息邊界。
- 發(fā)送方發(fā)送的數(shù)據(jù) < 接收方 TCP 緩沖區(qū),系統(tǒng)等待數(shù)據(jù)填滿緩沖區(qū)后一次性發(fā)送。
拆包:
定義:
- 一個(gè)數(shù)據(jù)包被拆成多個(gè)小包 進(jìn)行傳輸,接收方一次
recv()
可能收到不完整的數(shù)據(jù)。
可能的接收情況:
發(fā)生原因:
- 發(fā)送方發(fā)送的數(shù)據(jù) > TCP 緩沖區(qū)大小,需要 分片發(fā)送。
- 網(wǎng)絡(luò)傳輸中的 MTU(最大傳輸單元)限制,超過(guò) MTU 需要拆分。
TCP與UDP出現(xiàn)的情況:
如何解決TCP粘包、拆包可能帶來(lái)的問(wèn)題:
(1)固定長(zhǎng)度協(xié)議
- 方法:規(guī)定 每個(gè)數(shù)據(jù)包固定大小,接收方按固定字節(jié)讀取。
- 適用場(chǎng)景:定長(zhǎng)結(jié)構(gòu)數(shù)據(jù)(如傳感器數(shù)據(jù))。
優(yōu)點(diǎn):
缺點(diǎn):
1024
字節(jié),仍然要填充。(2)分隔符協(xié)議
\n
, \0
, |
),接收方按分隔符拆分?jǐn)?shù)據(jù)。- 接收方
優(yōu)點(diǎn):
缺點(diǎn):
- 數(shù)據(jù)中包含分隔符時(shí)可能誤判,需要 轉(zhuǎn)義或編碼。
(3)消息頭協(xié)議
- 接收方
優(yōu)點(diǎn):
缺點(diǎn):
- 需要額外存儲(chǔ)消息頭,協(xié)議較復(fù)雜。
3. 了解編譯器優(yōu)化嗎?
1. 編譯器優(yōu)化的目的
編譯器優(yōu)化的主要目標(biāo)是 提高程序執(zhí)行效率、減少代碼大小,并降低運(yùn)行時(shí)資源消耗,同時(shí) 保證代碼邏輯正確性。
優(yōu)化可分為:
- 代碼級(jí)優(yōu)化:調(diào)整代碼結(jié)構(gòu),提高執(zhí)行速度。
- 指令級(jí)優(yōu)化:調(diào)整匯編代碼順序,提高 CPU 指令流水線利用率。
- 存儲(chǔ)優(yōu)化:減少內(nèi)存訪問(wèn),提高緩存命中率。
2. 編譯器優(yōu)化的主要策略
編譯器在 編譯時(shí)(compile-time) 和 運(yùn)行時(shí)(runtime) 進(jìn)行優(yōu)化,主要包括:
(1)代碼優(yōu)化
? 常量傳播(Constant Propagation)
- 如果變量的值是編譯期已知的常量,則用該常量替換變量,減少計(jì)算次數(shù)。
優(yōu)化前
優(yōu)化后
? 常量折疊(Constant Folding)
- 編譯器提前計(jì)算常量表達(dá)式,減少運(yùn)行時(shí)計(jì)算。
優(yōu)化前
優(yōu)化后
? 死代碼消除(Dead Code Elimination)
- 刪除不會(huì)被執(zhí)行的代碼,減少程序大小。
? 內(nèi)聯(lián)展開(kāi)(Function Inlining)
- 小函數(shù)可以直接展開(kāi),避免函數(shù)調(diào)用的開(kāi)銷。
優(yōu)化前
優(yōu)化后
(2)指令優(yōu)化
? 指令重排序(Instruction Reordering)
- 調(diào)整指令執(zhí)行順序,提高 CPU 指令流水線利用率。
優(yōu)化前
優(yōu)化后(可能)
? 寄存器分配(Register Allocation)
- 盡量使用寄存器存儲(chǔ)變量,減少內(nèi)存訪問(wèn),提高速度。
優(yōu)化前
優(yōu)化后
? 循環(huán)展開(kāi)(Loop Unrolling)
- 減少循環(huán)控制開(kāi)銷,提高 CPU 指令執(zhí)行效率。
優(yōu)化前
優(yōu)化后
- 這樣可以減少
for
循環(huán)的控制開(kāi)銷,提高速度。
(3)存儲(chǔ)優(yōu)化
? 內(nèi)存對(duì)齊(Memory Alignment)
- 優(yōu)化數(shù)據(jù)結(jié)構(gòu)布局,減少 CPU 訪問(wèn)內(nèi)存的時(shí)間。
優(yōu)化前
優(yōu)化后
這樣能 提高 CPU 讀取效率,減少緩存行沖突(Cache Miss)。
? 緩存優(yōu)化(Cache Optimization)
- 提高數(shù)據(jù)局部性,減少 CPU 訪問(wèn)內(nèi)存的延遲。
優(yōu)化前
優(yōu)化后(列訪問(wèn))
- 減少緩存不命中(Cache Miss),提高 CPU 讀取速度。
3. 現(xiàn)代編譯器優(yōu)化工具
(1)編譯器優(yōu)化級(jí)別
(2)GCC/Clang 編譯器優(yōu)化選項(xiàng)
-O2
:?jiǎn)⒂脙?yōu)化-march=native
:針對(duì)本地 CPU 優(yōu)化-flto
:?jiǎn)⒂?鏈接時(shí)優(yōu)化(Link-Time Optimization)4. 優(yōu)化方法總結(jié)
結(jié)論
? 編譯器優(yōu)化能顯著提高程序性能,但可能會(huì)引入 并發(fā)問(wèn)題。
? 指令重排序、寄存器緩存、循環(huán)優(yōu)化 是編譯器優(yōu)化的核心策略。
? 使用 -O2
、-O3
可以讓 GCC 進(jìn)行更高級(jí)別優(yōu)化,提高執(zhí)行效率。