整理自某大廠航旅業務群高級工程師面試大綱,覆蓋 JVM 調優、JS 跨域、Hibernate 緩存與鎖、數據庫索引與分庫分表、設計模式手寫、Linux 運維排查六大模塊,適合中高級 Java 開發面試複盤。
jstat -gcutil、jvisualvm、arthas dashboard、GC 日誌 -Xlog:gc* 分析。-Xms -Xmx -Xmn、元空間 -XX:MetaspaceSize、GC 選擇 -XX:+UseG1GC、OOM 存活 -XX:+HeapDumpOnOutOfMemoryError。async-profiler、插桿式 JProfiler/YourKit、生產環境 arthas trace/watch。iostat -x 定位進程 → lsof -p 看打開文件 → jstack 關聯線程 → 檢查是否開啟大量 FileOutputStream、日志級別過低、堆外內存洩漏、GC 頻繁導致 Swap。Access-Control-Allow-Origin)、Nginx 反向代理、JSONP(僅 GET)、WebSocket、postMessage、document.domain(同主域)。prototype,實例 __proto__ 指向構造函數 prototype,查找屬性沿鏈向上。設計初衷:共享方法節省內存、實現繼承。應用:Array.prototype.myMap = ... 擴展數組方法。lazy=true 代理/字節碼增強)、急切加載(fetch=join)、批量加載(@BatchSize)。@OneToOne、@OneToMany/@ManyToOne、@ManyToMany、mappedBy 維護端、@JoinTable 中間表。@Version 字段 + CAS 更新失敗重試;悲觀 SELECT ... FOR UPDATE 數據庫行鎖,高併發下性能差。hibernate.cache.use_second_level_cache + 緩存提供商 Ehcache/Redis)。list() 直接發 SQL、不走二級緩存;iterate() 先查 ID 再走緩存載入對象,適合二級緩存命中率高場景。INDEX(a,b,c) 支持 a、a,b、a,b,c,不支持 b、c、b,c。public enum Singleton { INSTANCE; } // 枚舉單例:天然線程安全、防序列化重建、防反射攻擊| 場景 | 命令組合 | 解析 |
|---|---|---|
| 統計代碼行數/文件數 | find . -name "*.java" | wc -l | find 遞歸查找,wc 統計行數 |
| 搜索包含關鍵字的文件 | find . -name "*.java" | xargs grep "LogFactory.getLog" | grep -v static | xargs 轉換標準輸入為參數,grep -v 反向過濾 |
| 端口佔用進程定位 | netstat -anp | grep 9100 → ps -ef | grep PID | netstat 顯示連接/監聽,-p 顯示 PID |
| 查看本機/出口 IP | ifconfig / curl ip.sb | ifconfig 网卡信息,curl 獲取公網出口 IP |
| 跨機器文件傳輸 | scp local.txt user@host:/remote/path | 基於 SSH 加密傳輸 |
| 日誌分析:Top 10 URL | awk '{print $8}' access.log | awk -F'?' '{print $1}' | sort | uniq -c | sort -nr | head -10 | awk 切分列,uniq -c 計數,sort -nr 倒序 |
| 平均響應時間 | grep 'api' access.log | awk '{sum+=$12} END {print sum/NR}' | NR 當前行號,END 結塊計算平均值 |
| 抓包分析 | tcpdump -i eth0 -A -s0 'port 9200' -w dump.pcap | -A 顯示 ASCII,-s0 抓全包,-w 寫文件供 Wireshark 分析 |
| JVM 監控工具 | jps -l、jstat -gcutil PID 1000、jmap -histo:live PID、arthas | 阿里開源 Arthas 為生產首選 |
| XML 格式化輸出 | xmllint --format test.xml | libxml2 工具,閱讀大 XML 必備 |
| 正式環境拉取日誌 | ./cmd/gm.sh 'cat logs/app.log' > app.log | gm.sh 並行執行多機命令 |
| 多行異常合併 | sed '/Exception/{N;s/\n/,/}' error.log > merged.log | N 讀下一行,s 替換換行符 |
| 異常碼統計 | grep 'ERR_CODE' merged.log | awk -F'=' '{print $2}' | uniq -c | awk 切分字段,uniq -c 去重計數 |