一、編譯與工具鏈
GCC 編譯流程
- 四階段:預處理(
-E
,處理頭文件 / 宏)→ 編譯(-S
,生成匯編)→ 匯編(-c
,生成目標文件)→ 鏈接(生成可執行程序),順序必須嚴格。 - 常用選項:
-Wall
(開啟大部分警告)、-Werror
(警告視為錯誤),-w
?是關閉警告(少用)。
交叉編譯
- 必需組件:
gcc
(編譯器)、glibc
(標準庫)、binutils
(匯編 / 鏈接工具),tmake
?不是必需(是 Qt 構建工具)。
二、進程與線程
進程基礎
- 核心概念:進程是程序的動態執行實例(不是靜態的),是資源管理最小單位,包含 PCB(進程控制塊,動態維護進程狀態)。
- 標識:PID 唯一標識進程,PPID 是父進程 ID(可為 0,如?
init
?進程)。 - 狀態:基本狀態是運行、就緒、阻塞,僵死態是特殊狀態(非基本)。
- 創建與控制:
fork
:調用一次返回兩次(父進程返回子進程 PID,子進程返回 0),用于創建子進程。wait/waitpid
:父進程阻塞等待子進程結束,waitpid
?更靈活(可指定子進程、支持選項)。
線程(pthread 庫)
- 關鍵函數:
pthread_create
:創建線程,arg
?傳參給線程函數。pthread_join
:等待線程結束,獲取返回值。pthread_exit
:主動退出當前線程。pthread_cancel
:向目標線程發取消請求(不是退出當前線程)。
- 同步:條件變量必須配合互斥鎖使用,解決線程競爭。
三、內存管理
堆棧核心區別
特性 | 棧(Stack) | 堆(Heap) |
---|---|---|
分配方式 | 系統自動分配 / 釋放(函數調用驅動) | 用戶手動?malloc/free ?管理 |
內存連續性 | 連續 | 不連續(動態分配,易產生碎片) |
存儲內容 | 局部變量、返回地址、函數參數 | 動態分配的大數據、復雜結構 |
增長方向 | 向低地址增長 | 向高地址擴展 |
大小限制 | 固定(默認 8MB 左右,可調整) | 動態擴展(受物理內存 / 交換空間限制) |
易錯點
- 棧參數入棧順序:從右往左(如?
func(a,b,c)
,c
?先入棧)。 - 靜態變量:存儲在全局 / 靜態區,不入棧。
- 堆分配:找 “足夠大” 的空閑塊(非嚴格匹配申請大小),頭部用多字節(如 4/8 字節)存元數據。
四、文件與權限
文件權限(10 位格式)
- 結構:
[文件類型][所有者權限][組權限][其他用戶權限]
,例:-rwxr-xr--
。 - 第三段(5-7 位):文件所有者所在組的權限。
文件操作
open
?標志:O_RDWR
(讀寫)、O_RDONLY
(只讀)、O_WRONLY
(只寫),操作完需?close
?釋放描述符。
五、系統服務與運行級別
服務管理
- 啟動腳本:傳統存?
/etc/rc.d/init.d/
,運行級別腳本存?/etc/rc.d/rcN.d
(N
?是級別)。 - 腳本前綴:
S
(啟動)、K
(停止),無?C
?開頭。 - 命令:
service 服務名 操作
(如?service sshd restart
)。
六、網絡與通信
協議核心區別(TCP/UDP)
特性 | TCP(傳輸控制協議) | UDP(用戶數據報協議) |
---|---|---|
連接性 | 面向連接(三次握手建連) | 無連接 |
可靠性 | 可靠(確認、重傳、排序) | 不可靠(無確認,丟包不重傳) |
適用場景 | 文件傳輸、網頁訪問(需可靠) | 視頻通話、廣播(追求效率) |
端口復用 | 單連接(需 TIME_WAIT 釋放端口) | 支持多應用同時用(如 DNS 服務) |
Socket 關鍵
- 類型:
SOCK_STREAM
(TCP)、SOCK_DGRAM
(UDP)、SOCK_RAW
(原始套接字),無?SOCK DTRAN
。 - 函數原型:
socket(int family, int type, int protocol)
(創建套接字)。
七、其他高頻考點
設備文件
- 串口設備:Linux 下是?
ttyS0
(Windows 是?COM1
)。
進程通信(IPC)
- 常用方式:管道、消息隊列、共享內存(填這三個必對)。
中斷服務程序
- 設計原則:短小、避免復雜操作,不能返回計算結果給主程序。
一句話總結:記住編譯流程、進程線程核心函數、堆棧區別、權限結構、TCP/UDP 差異,這些是 Linux 筆試 / 面試高頻考點!
?