性能調優的時候,建議你避開這幾個坑!
- 2019 年 12 月 31 日
- 筆記
來源:Tuling https://url.cn/5Kf3815
一、前言
很多工作兩三年的同行都跟我說,認為性能調優沒什麼用。剛工作的時候我也這樣以為,但後來我才知道我當時想法多麼的天真。
二、大牛同事的神操作
曾經,我的前前東家系統研發部門來了一位大神,為什麼叫他大神?因為在他來公司的一年時間裡只做了一件事,就是把伺服器的數量縮減了一半,系統的性能指標,反而還提升了。
好的系統性能調優不僅可以提高系統的性能,還能為公司節省資源。這也是我們做性能調優的最直接的目的。
我有一個在小廠的朋友,有一次跟我說,他們公司的系統從來沒有經過性能調優,功能測試完成後就上線了,線上也沒有出現過什麼性能問題,為什麼還要去做性能調優呢?
當時我就回答了他一句,如果你們公司做的是 12306 網站,不做系統性能優化就上線,試試看會是什麼情況。
一款線上產品如果沒有經過性能測試,那它就好比是一顆定時炸彈,你不知道它什麼時候會出現問題,你也不清楚它能承受的極限在哪兒。
現在假設你的系統要做一次活動,產品經理告訴你預計有幾十萬的用戶訪問量,詢問系統能否承受得住。如果你不清楚自己系統的性能情況,也只能戰戰兢兢地回答老闆,應該沒問題吧。
所有的系統在開發完之後,多多少少都會有性能問題,我們要做的就是想辦法把問題暴露出來,例如進行壓力測試、模擬可能的操作場景等等,再通過性能調優去解決這些問題。
三、大廠面試體驗
我們再來看看2019百度、京東、騰訊、阿里巴巴等各大廠關於性能調優的面試題,看看他們對於性能調優看重的地方。
Java虛擬機底層原理與性能優化
1、Java虛擬機記憶體模型能說說嗎?
2、類載入器的雙親委派模型是什麼?
3、JVM垃圾收集演算法與收集器有哪些?
4、JVM診斷調優工具用過哪些?
5、每秒幾十萬並發的秒殺系統為什麼會頻繁發生GC?
6、日均百萬級交易系統如何優化JVM?
7、線上生產系統OOM如何監控及定位與解決?
8、高並發系統如何基於G1垃圾回收器優化性能?
Mysql索引數據結構與性能優化
1、索引數據結構紅黑樹,Hash,B+樹能說下嗎?
2、千萬級數據表如何用索引快速查找?
3、如何基於索引B+樹精準建立高性能索引?
4、聯合索引底層數據結構又是怎樣的?
5、覆蓋索引與聚集索引到底是什麼?
6、Mysql最左前綴優化原則是什麼?
7、為什麼推薦使用自增主鍵做索引?
8、說說Mysql索引優化規範?
BIO,NIO,AIO,Netty以及Redis執行緒模型
1、BIO,NIO,AIO的區別?
2、什麼是阻塞IO以及非阻塞IO?
3、什麼是同步IO以及非同步IO?
4、IO模型有幾種?分別是什麼?
5、Reactor和Proactor IO設計模式是什麼?
6、NIO底層select、poll和epoll實現的區別 ?
7、Java NIO的幾個核心組成部分是什麼?作用分別是什麼?
8、Redis、Netty、Tomcat的執行緒模型與NIO的聯繫是什麼?