嵌入式秋招面經(jīng)總結(jié)
CPU、寄存器、緩存、內(nèi)存概述
- CPU:中央處理器,執(zhí)行指令的核心組件。
- 寄存器:CPU內(nèi)部的臨時存儲空間,存放快速訪問的數(shù)據(jù)。
- 緩存(Cache):在寄存器和內(nèi)存之間的高速存儲,分為三級(L1、L2、L3),速度和價格依次降低。
- 內(nèi)存:主要存儲程序和數(shù)據(jù)的地方。
數(shù)據(jù)訪問流程
1. CPU首先在寄存器中查找數(shù)據(jù)。
2. 如果寄存器未命中,則檢查緩存。
3. 如果緩存未命中,則從內(nèi)存中獲取數(shù)據(jù)。
內(nèi)存區(qū)域
- 棧區(qū):
- 存放函數(shù)參數(shù)和局部變量。
- 由編譯器自動分配和釋放,效率高,但內(nèi)存量有限(如iOS中為2M)。
- 堆區(qū):
- 通過`new`、`malloc`等動態(tài)分配的內(nèi)存。
- 需要程序員手動釋放,可能導(dǎo)致內(nèi)存泄漏。
- 靜態(tài)區(qū):
- 存放全局變量和靜態(tài)變量。
- 程序結(jié)束時由系統(tǒng)釋放。
- 常量區(qū):
- 存放常量,不允許修改。
- 代碼區(qū):
- 存放函數(shù)體的二進(jìn)制代碼。
類型說明符
- 基本類型:`void`、`char`、`short`、`int`、`long`、`signed`、`unsigned`、`float`、`double`、`struct`、`enum`、`union`。
- 存儲類型:`extern`、`static`、`register`、`auto`、`typedef`。
- 類型限制符:`const`(只讀)、`volatile`。
變量理解
- extern:指示變量在其他文件中定義。
- static:
- 限制變量作用域。
- 局部變量存入靜態(tài)存儲區(qū),延長生存周期。
- register:將頻繁使用的變量放入寄存器以提高效率。
- auto:C語言默認(rèn)存儲類型。
- typedef:給類型或變量表達(dá)式起別名。
- const:只讀變量。
- volatile:
- 防止編譯器優(yōu)化。
- 適用于中斷和多線程環(huán)境。
C程序內(nèi)存分配
- 堆、棧、靜態(tài)存儲區(qū)、文件分配區(qū)(常量字符串)、程序分配區(qū)(二進(jìn)制代碼)。
sizeof與strlen
- sizeof:關(guān)鍵字,返回類型或數(shù)組的字節(jié)大小。
- strlen:計算字符串長度,直到遇到`\0`。
函數(shù)參數(shù)傳遞
- 值傳遞、引用傳遞、指針傳遞、數(shù)組地址傳遞。
Const、指針、基本類型組合的意義
- const int x:只讀變量。
- const char *x:指向常量的指針,指針內(nèi)容可變,指向內(nèi)容不可變。
- char *const x:常量指針,指針內(nèi)容不可變,指向內(nèi)容可變。
- const char *const x:指針和內(nèi)容均不可變。
數(shù)組與指針
- 物理地址:內(nèi)存單元的真實地址。
- 邏輯地址:CPU生成的地址。
Linux進(jìn)程間通信
- 管道(pipe)、信號量、消息隊列、信號、共享內(nèi)存、套接字。
strcpy與memcpy區(qū)別
- strcpy:復(fù)制字符串。
- memcpy:復(fù)制指定長度的內(nèi)存內(nèi)容。
內(nèi)存泄漏與內(nèi)存溢出
- 內(nèi)存泄漏:未釋放的內(nèi)存,導(dǎo)致可用內(nèi)存減少。
- 內(nèi)存溢出:程序請求的內(nèi)存大于可用內(nèi)存。
switch的變量類型限制
- 允許:整形、布爾、字符、枚舉。
- 不允許:字符串等非基本類型。
防止頭文件重復(fù)調(diào)用
- 使用#ifndef和#pragma once。
實時操作系統(tǒng)
- 示例:FreeRTOS、Ucos。
指針數(shù)組與數(shù)組指針
- 指針數(shù)組:數(shù)組元素為指針。
- 數(shù)組指針:指向數(shù)組的指針。
結(jié)構(gòu)體自增與雙重指針自增
- 自增從右向左進(jìn)行。
寄存器的使用
- 存儲頻繁調(diào)用的數(shù)據(jù),減少內(nèi)存訪問。
獲取全局變量與局部變量地址(gdb)
- 使用backtrace或bt命令。
進(jìn)程中的同步與異步
- 同步:通過鎖實現(xiàn)。
- 自旋鎖:忙等待,不阻塞線程。
- 互斥鎖:阻塞線程,等待資源釋放。
進(jìn)程與線程的關(guān)系與區(qū)別
- 進(jìn)程:資源分配的基本單位,包含一個或多個線程。
- 線程:進(jìn)程中的執(zhí)行單位,最小調(diào)度單位。
樹的遍歷(遞歸與非遞歸)
- 中序遍歷:左子樹 - 根節(jié)點 - 右子樹,利用堆棧進(jìn)行進(jìn)棧和出棧操作。
剩余的大佬面經(jīng)總結(jié)了 鏈接在下邊
http://fangfengwang8.cn/creation/manager/columnDetail/MJNwoM
- CPU:中央處理器,執(zhí)行指令的核心組件。
- 寄存器:CPU內(nèi)部的臨時存儲空間,存放快速訪問的數(shù)據(jù)。
- 緩存(Cache):在寄存器和內(nèi)存之間的高速存儲,分為三級(L1、L2、L3),速度和價格依次降低。
- 內(nèi)存:主要存儲程序和數(shù)據(jù)的地方。
數(shù)據(jù)訪問流程
1. CPU首先在寄存器中查找數(shù)據(jù)。
2. 如果寄存器未命中,則檢查緩存。
3. 如果緩存未命中,則從內(nèi)存中獲取數(shù)據(jù)。
內(nèi)存區(qū)域
- 棧區(qū):
- 存放函數(shù)參數(shù)和局部變量。
- 由編譯器自動分配和釋放,效率高,但內(nèi)存量有限(如iOS中為2M)。
- 堆區(qū):
- 通過`new`、`malloc`等動態(tài)分配的內(nèi)存。
- 需要程序員手動釋放,可能導(dǎo)致內(nèi)存泄漏。
- 靜態(tài)區(qū):
- 存放全局變量和靜態(tài)變量。
- 程序結(jié)束時由系統(tǒng)釋放。
- 常量區(qū):
- 存放常量,不允許修改。
- 代碼區(qū):
- 存放函數(shù)體的二進(jìn)制代碼。
類型說明符
- 基本類型:`void`、`char`、`short`、`int`、`long`、`signed`、`unsigned`、`float`、`double`、`struct`、`enum`、`union`。
- 存儲類型:`extern`、`static`、`register`、`auto`、`typedef`。
- 類型限制符:`const`(只讀)、`volatile`。
變量理解
- extern:指示變量在其他文件中定義。
- static:
- 限制變量作用域。
- 局部變量存入靜態(tài)存儲區(qū),延長生存周期。
- register:將頻繁使用的變量放入寄存器以提高效率。
- auto:C語言默認(rèn)存儲類型。
- typedef:給類型或變量表達(dá)式起別名。
- const:只讀變量。
- volatile:
- 防止編譯器優(yōu)化。
- 適用于中斷和多線程環(huán)境。
C程序內(nèi)存分配
- 堆、棧、靜態(tài)存儲區(qū)、文件分配區(qū)(常量字符串)、程序分配區(qū)(二進(jìn)制代碼)。
sizeof與strlen
- sizeof:關(guān)鍵字,返回類型或數(shù)組的字節(jié)大小。
- strlen:計算字符串長度,直到遇到`\0`。
函數(shù)參數(shù)傳遞
- 值傳遞、引用傳遞、指針傳遞、數(shù)組地址傳遞。
Const、指針、基本類型組合的意義
- const int x:只讀變量。
- const char *x:指向常量的指針,指針內(nèi)容可變,指向內(nèi)容不可變。
- char *const x:常量指針,指針內(nèi)容不可變,指向內(nèi)容可變。
- const char *const x:指針和內(nèi)容均不可變。
數(shù)組與指針
- 物理地址:內(nèi)存單元的真實地址。
- 邏輯地址:CPU生成的地址。
Linux進(jìn)程間通信
- 管道(pipe)、信號量、消息隊列、信號、共享內(nèi)存、套接字。
strcpy與memcpy區(qū)別
- strcpy:復(fù)制字符串。
- memcpy:復(fù)制指定長度的內(nèi)存內(nèi)容。
內(nèi)存泄漏與內(nèi)存溢出
- 內(nèi)存泄漏:未釋放的內(nèi)存,導(dǎo)致可用內(nèi)存減少。
- 內(nèi)存溢出:程序請求的內(nèi)存大于可用內(nèi)存。
switch的變量類型限制
- 允許:整形、布爾、字符、枚舉。
- 不允許:字符串等非基本類型。
防止頭文件重復(fù)調(diào)用
- 使用#ifndef和#pragma once。
實時操作系統(tǒng)
- 示例:FreeRTOS、Ucos。
指針數(shù)組與數(shù)組指針
- 指針數(shù)組:數(shù)組元素為指針。
- 數(shù)組指針:指向數(shù)組的指針。
結(jié)構(gòu)體自增與雙重指針自增
- 自增從右向左進(jìn)行。
寄存器的使用
- 存儲頻繁調(diào)用的數(shù)據(jù),減少內(nèi)存訪問。
獲取全局變量與局部變量地址(gdb)
- 使用backtrace或bt命令。
進(jìn)程中的同步與異步
- 同步:通過鎖實現(xiàn)。
- 自旋鎖:忙等待,不阻塞線程。
- 互斥鎖:阻塞線程,等待資源釋放。
進(jìn)程與線程的關(guān)系與區(qū)別
- 進(jìn)程:資源分配的基本單位,包含一個或多個線程。
- 線程:進(jìn)程中的執(zhí)行單位,最小調(diào)度單位。
樹的遍歷(遞歸與非遞歸)
- 中序遍歷:左子樹 - 根節(jié)點 - 右子樹,利用堆棧進(jìn)行進(jìn)棧和出棧操作。
剩余的大佬面經(jīng)總結(jié)了 鏈接在下邊
http://fangfengwang8.cn/creation/manager/columnDetail/MJNwoM
全部評論
,
相關(guān)推薦
點贊 評論 收藏
分享
點贊 評論 收藏
分享