程序員雜記:實用技術筆記匯總
收錄 C/C++ 編譯鏈接模型、Linux 防火牆操作、常見網絡協議、IP 地址分類、GDB 調試技巧、Apache/Tomcat 區別、指釖強轉、文件編碼檢測、中文處理等實用知識點。
1. C/C++ 編譯單元與符號可見性
- 編譯單元:經預處理(展開 `#include`)後的 `.cpp` 文件。
- 同一編譯單元內重名符號編譯期報錯;不同編譯單元重名符號鏈接期報錯。
- 頭文件用條件編譯(`#ifndef/#define/#endif`)防止重複包含。
- 頭文件宜放:類定義、`extern` 變量聲明、函數聲明。
2. C++ 命名空間
- 可多次聲明/定義同名命名空間,編譯器自動合併成員。
3. Linux 防火牆 (iptables) 操作
# 重啟生效
chkconfig iptables on # 開啟
chkconfig iptables off # 關閉
# 即時生效
service iptables start # 開啟
service iptables stop # 關閉
4. 常見網絡協議端口
| 協議 | 全稱 | 默認端口 |
| Telnet | 遠程登錄 | 23 |
| FTP | 文件傳輸協議 | 21/20 |
| SMTP | 簡單郵件傳送協議 | 25 |
| SNMP | 簡單網絡管理協議 | 161/162 |
| ARP | 地址解析協議 | — |
| RARP | 逆地址解析協議 | — |
5. IP 地址分類
| 類別 | 起始地址 | 用途 |
| A | 0.0.0.0 | 大型網絡 |
| B | 128.0.0.0 | 中型網絡 |
| C | 192.0.0.0 | 小型網絡 |
| D | 224.0.0.0 | 組播 |
| E | 240.0.0.0 | 保留/實驗 |
6. GDB 數組打印控制
set print repeats N # 設置連續相同元素打印上限,超過顯示
show print repeats # 查看當前上限
7. Apache vs Tomcat
- Apache:HTTP Server,擅長靜態內容。
- Tomcat:Servlet/JSP 容器(Java 應用服務器),可獨立運行(Standalone 模式)處理 HTTP,但靜態性能不如 Apache。
- 常見架構:Apache (前端靜態/反向代理) + Tomcat (後端動態)。
8. 指針強制類型轉換本質
僅改變內存位元的解讀方式,不改變內存內容。
int temp = 55; // 0x00000037
char *p = (char*)&temp; // 取低位字節 0x37 = 55 ('7')
printf("%c", *p); // 輸出 '7'
9. 文件編碼與 BOM 處理
- Windows 保存的 UTF-8 可能帶 BOM (`EF BB BF`),導致解析錯誤。
- 檢測命令:`grep -I -r -l $'\xEF\xBB\xBF' /path`
- 轉為無 BOM UTF-8 格式。
10. 中文編碼核心概念
- 源文件編碼決定字符串字面量的編碼(GBK/UTF-8 等)。
- `file` 命令判為 ISO-8859 通常意味著實際是 GBK(因 ISO-8859 不支持中文)。
- Unicode 是字符集,UTF-8/UTF-16/GBK 是編碼方式。
- UTF-8 適合英文多、中文少的代碼文件(節省空間)。
- GBK 兼容 GB2312,含繁簡體;GB2312 僅簡體。
11. CAS (Compare-And-Swap)
原子操作:比較內存值與期望值,相等則替換為新值。無鎖編程基石。
總結
這些零散知識點覆蓋了底層編譯鏈接、系統運維、網絡基礎、調試技巧、編碼處理等日常開發高頻場景,建議收藏備查。