技術實力詳解mysql
理解評估技術實力的基本原則後,咱們知道了須要解決的問題複雜度越高,技術實力就越高。在這個基礎上,我把技術實力分爲兩大類 6 分類:面試
硬實力sql
我把技術硬實力分爲四個等級:點、線、面、體,技術等級依次提高,解決的問題複雜度也愈來愈高,下面詳細解釋一下。數據庫
技術點緩存
「點」就是某個具體的技術,用來解決某個具體的問題,例如使用 JDBC 從數據庫讀取數據,目的是解決數據掉電丟失的問題;使用 Java 多線程,目的是爲了解決大量用戶併發訪問的吞吐量和時延問題。掌握了技術點,就能夠開始基本的業務功能開發了。安全
技術線服務器
「線」就是一系列相關的技術點組成,每一個技術點都是爲了解決某個問題。例如:網絡
掌握了技術線,就能夠完成某個業務功能的全流程設計和開發了。多線程
技術面架構
「面」就是某一類相關技術線的綜合。例如:
掌握技術面,已是某個領域的專家了,簡單來講就是這個領域的問題找你均可以搞定。
技術體
「體」就是多個技術面的綜合。
最多見的「體」就是架構設計,對於一個大型業務或者系統的架構師來講,須要掌握多個技術面,而後進行設計和取捨。例如,一個後臺架構師須要掌握 Java 的技術面、數據庫的技術面、網絡的技術面等,以及業務領域知識。
架構設計是橫向技術面的綜合,我稱之爲廣度技術體;還有一種縱向技術面的綜合,我稱之爲深度技術體。例如 Java 的開發工程師,當達到技術面的水平時掌握了「多線程、JDBC、文件讀寫、JVM 調優、JVM 工具等」,若是須要進一步在 Java 這個領域提高技術,就須要向下瞭解操做系統、硬件(CPU、內存、磁盤等),從而更好的解決某些複雜的問題,例如 Disruptor 高性能併發框架的設計。掌握了技術體,就能夠進行架構設計,或者成爲某個領域的資深專家了,解決領域級的複雜問題。
軟實力
發現問題
有的問題很明顯,例如線上出故障,系統性能不達標,系統性能須要達到 5W QPS;但有的問題並不那麼明顯,並不能一眼看出是問題在哪裏,是技術問題仍是管理問題。
例如咱們曾遇到團隊間協做開發效率很低,每次開發一個業務功能,都須要幾個系統的研發人員來討論接口協議、接口數據格式、接口安全加密、業務邏輯等,你們都不厭其煩,但好像又都必不可少,團隊間爲了提升效率,項目經理制定了規範、流程、模板等,但做用最終都不大。那後來是怎麼解決的呢?經過引入服務中心來完成系統間同步接口調用,經過引入消息隊列來完成系統間異步消息通知,系統間協做效率大大提升,之前要開會討論幾個小時的事情,如今只要明確接口傳輸的數據內容便可,甚至都不用開會,兩個研發一討論就差很少了。
除此之外,問題的根源每每掩蓋在不少問題表象之下,若是不解決根源問題,解決一個表象問題,得到一時安寧,一段時間後又發生另外的問題,久而久之反反覆覆。
例如咱們曾有個系統,今天交換機故障致使業務問題,明天系統 bug 致使業務問題,後天機櫃斷電致使業務問題,還被黑客攻擊過,這些問題看起來都很獨立,問題的發生也感受都是偶然的,按照出一個問題解決一個問題的方式也沒什麼問題,但整年來看,業務就是出了不少問題,怎麼解決?咱們通過分析,發現根本緣由是業務須要異地多活,而架構是雙機房單中心的,咱們須要作到的不是避免每一個問題的發生(事實上也不可能避免),而是應該作到問題發生後可以快速處理,因而經過將架構重構爲異地多活,重構完成後仍是有各類偶發問題發生,但對業務的影響就很小了。
發現問題的能力主要來源於經驗,包括成功的經驗、踩坑的經驗、參考別人的經驗,所以若是要培養本身這方面的能力,多思考、多總結、多學習、多參加行業交流。
技術創新
達到這個級別基本都是業界大神通常的級別,說實話我也沒什麼經驗,只能仰慕這些大神。
例如:
技術實力案例點評
一個面試者面試 Java P7,其中有一項項目經驗很牛逼:XX 架構重構,性能提高 10 倍。因而,我針對這個項目經驗進行了深刻的考察,結果……
下面是咱們大概的對話過程:
我:請簡單介紹一下這個項目重構。
面:咱們某個業務和運動會有關,每次關鍵比賽前業務訪問量是平時的 10 倍以上,原來的系統量一大就卡死了,用戶體驗很很差,須要重構。
我:具體怎麼作的呢?
面:我經過引入 mc 緩存,將原來直接訪問數據庫的操做改成先訪問緩存,性能比原來提高了 10 倍。
我:爲什麼你想到了引入 mc?
面:(卡了一下,有點驚訝個人問題)……我上網查了一下資料,不少都說 mc 可以大幅提高性能,而且使用後確實效果很好。
[點評 1] 這是典型的「代碼靠抄,方案靠搜,效果靠試」,面試者看到了一個問題,但沒有分析和思考,而後上網搜方案,看到了好像不少人都說引入 mc 都能解決問題,關鍵是最終確實好像解決了,這讓面試者自我感受良好。
我:mc 能大幅提高性能的原理是什麼?
面:緩存訪問快,數據庫訪問慢。
我:那 mc 性能多高,數據庫性能多高?
面:……(想了 10 秒)抱歉,沒有研究過。
[點評 2] 這是典型的知其然不知其因此然,開源方案拿來就用,基本的測試和原理研究都沒作過。
我:不要緊,那咱們換個問題,重構後大家的系統用到的機器數量是多少?相比重構前減小了多少?
面:機器數量是 100 臺,相比重構前沒有減小。
我:哦,100 臺機器,QPS 每臺才 300 多,我看大家的業務也不是很複雜,爲什麼這麼低?
面:……(卡住 10 秒)這……300 多 QPS 好像也不低吧?
我:那你有沒有分析過每次請求全流程每一個階段的性能耗時?瓶頸在哪裏?
面:(卡住 5 秒)沒有分析過呢?
我:那爲什麼就認定引入 mc 就有效果?
面:……(卡住 10 秒)我看你們都說引入緩存能大幅提高性能,並且最終效果確實很好。
[點評] 這就是知道技術點,不知道技術線和技術面,按道理對於系統性能問題的分析,至少是技術線級別的,須要分析每一個請求每一個階段的耗時和緣由;也能夠是技術面級別的,例如分析數據庫的設計、服務器的負載均衡等,還能夠是技術體級別的,例如架構是否合理,是否能夠將某個子系統拆分,引入消息隊列等。
我:好吧,換個問題,若是讓你再一次優化系統,你以爲能夠怎麼作?
面:……(思考 20 秒)我以爲目前的系統性能已經足夠,應該不須要優化了。
[點評] 考察的是發現問題的能力,但他發現不了問題,其實前面已經都提到了,100 臺機器就是問題,QPS 太低也是問題,但因爲他沒有經驗,是看不出這些問題的。
很遺憾,最終這個面試者沒有經過面試。
知識來源:從0開始學架構