典型三級結構:Cache(高速緩存)→ 主存(內存)→ 輔存(磁盤/SSD)。
層次間特性遞進:容量↑、速度↓、價格/位↓。
核心原理——局部性原理:
效果:CPU 主要訪問高速 Cache,僅缺頁時訪問主存/輔存。綜合實現「速度接近 Cache、容量接近輔存、價格接近輔存」的最佳平衡。
產生:子進程 `exit` 後,內核保留其 `task_struct`(含退出碼、資源統計等)等待父進程 `wait`/`waitpid` 回收。若父進程未安裝 `SIGCHLD` 處理器、未調用 `wait`、未忽略信號,子進程長期滯留 → 僵屍。
危害:佔用有限的 PID 號碼,導致無法創建新進程;`ps` 顯示 `
預防方案:
// TCP 服務端
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
bind(sockfd, (sockaddr*)&serv_addr, sizeof(serv_addr));
listen(sockfd, BACKLOG);
while (1) {
int connfd = accept(sockfd, (sockaddr*)&cli_addr, &len);
// 可 fork/thread/epoll 處理並發
read(connfd, buf, sizeof(buf));
write(connfd, resp, strlen(resp));
close(connfd);
}
close(sockfd);
關鍵 API:`socket`→`bind`→`listen`→`accept`→`read`/`write`/`send`/`recv`→`close`。
客戶端:`socket`→`connect`→`read`/`write`→`close`。
要求:不使用庫函數,時間複雜度最低。
解法:雙指針頭尾交換,O(n) 時間、O(1) 空間,單次遍歷完成。
char* reverse_str(char* str) {
if (!str) return nullptr;
char *l = str, *r = str + strlen(str) - 1;
while (l < r) swap(*l++, *r--);
return str;
}
輸入:`(1,(2,3),(4,(5,6),7))` → 輸出:`(1,2,3,4,5,6,7)`。錯誤格式報錯。
解法:棧 + 隊列/字符串構建器。掃描字符:
時間 O(n),空間 O(深度)。
本文整理自 “驿落黃昏” 博客,原文鏈接:https://yiluohuanghun.blog.51cto.com/3407300/1299814