技術實力詳解

技術實力詳解mysql

理解評估技術實力的基本原則後,咱們知道了須要解決的問題複雜度越高,技術實力就越高。在這個基礎上,我把技術實力分爲兩大類 6 分類:面試

  • 硬實力: 真正解決問題的能力,別人能夠看出來的能力,技術實力按照「點、線、面、體」的 4 個分類逐層上升;
  • 軟實力: 比硬實力更厲害但也更虛的能力,簡單來講,要想解決問題首先得發現問題,但不少時候問題並非一目瞭然的,須要有必定的技術洞察力。軟實力主要包括 2 個核心能力:發現問題、技術創新。

硬實力sql

我把技術硬實力分爲四個等級:點、線、面、體,技術等級依次提高,解決的問題複雜度也愈來愈高,下面詳細解釋一下。數據庫

技術點緩存

「點」就是某個具體的技術,用來解決某個具體的問題,例如使用 JDBC 從數據庫讀取數據,目的是解決數據掉電丟失的問題;使用 Java 多線程,目的是爲了解決大量用戶併發訪問的吞吐量和時延問題。掌握了技術點,就能夠開始基本的業務功能開發了。安全

技術線服務器

「線」就是一系列相關的技術點組成,每一個技術點都是爲了解決某個問題。例如:網絡

  • 爲了完成一個用戶請求,開發框架首先要有路由 router 功能,路由到具體 Controller 後,Controller 進行業務邏輯處理,處理過程當中可能會使用 JDBC 來讀取數據,訪問 Redis 讀取緩存等,這一連串的技術每一個都解決了一個問題點,串起來就完成了一個業務功能的處理過程。
  • 爲了定位一個線上 Java 服務器響應慢的問題,須要用到 tcpdump 抓包,使用 Java 工具查看 jvm 的狀態,使用 mysql 命令行或者工具查看數據庫狀態,使用 explain 分析可疑 SQL 語句。

掌握了技術線,就能夠完成某個業務功能的全流程設計和開發了。多線程

技術面架構

「面」就是某一類相關技術線的綜合。例如:

  • Java 開發是一個技術面,包括多線程、JDBC、文件讀寫、JVM 調優、JVM 工具等多個技術線;
  • 高性能開發是一個技術面,包括:數據庫分庫分表、緩存、多線程、HTTP 優化等;
  • 數據庫維護是一個技術面,包括:數據庫調優、數據庫問題定位、高性能數據庫表設計等;

掌握技術面,已是某個領域的專家了,簡單來講就是這個領域的問題找你均可以搞定。

技術體

「體」就是多個技術面的綜合。

最多見的「體」就是架構設計,對於一個大型業務或者系統的架構師來講,須要掌握多個技術面,而後進行設計和取捨。例如,一個後臺架構師須要掌握 Java 的技術面、數據庫的技術面、網絡的技術面等,以及業務領域知識。

架構設計是橫向技術面的綜合,我稱之爲廣度技術體;還有一種縱向技術面的綜合,我稱之爲深度技術體。例如 Java 的開發工程師,當達到技術面的水平時掌握了「多線程、JDBC、文件讀寫、JVM 調優、JVM 工具等」,若是須要進一步在 Java 這個領域提高技術,就須要向下瞭解操做系統、硬件(CPU、內存、磁盤等),從而更好的解決某些複雜的問題,例如 Disruptor 高性能併發框架的設計。掌握了技術體,就能夠進行架構設計,或者成爲某個領域的資深專家了,解決領域級的複雜問題。

軟實力

發現問題

有的問題很明顯,例如線上出故障,系統性能不達標,系統性能須要達到 5W QPS;但有的問題並不那麼明顯,並不能一眼看出是問題在哪裏,是技術問題仍是管理問題。

例如咱們曾遇到團隊間協做開發效率很低,每次開發一個業務功能,都須要幾個系統的研發人員來討論接口協議、接口數據格式、接口安全加密、業務邏輯等,你們都不厭其煩,但好像又都必不可少,團隊間爲了提升效率,項目經理制定了規範、流程、模板等,但做用最終都不大。那後來是怎麼解決的呢?經過引入服務中心來完成系統間同步接口調用,經過引入消息隊列來完成系統間異步消息通知,系統間協做效率大大提升,之前要開會討論幾個小時的事情,如今只要明確接口傳輸的數據內容便可,甚至都不用開會,兩個研發一討論就差很少了。

除此之外,問題的根源每每掩蓋在不少問題表象之下,若是不解決根源問題,解決一個表象問題,得到一時安寧,一段時間後又發生另外的問題,久而久之反反覆覆。

例如咱們曾有個系統,今天交換機故障致使業務問題,明天系統 bug 致使業務問題,後天機櫃斷電致使業務問題,還被黑客攻擊過,這些問題看起來都很獨立,問題的發生也感受都是偶然的,按照出一個問題解決一個問題的方式也沒什麼問題,但整年來看,業務就是出了不少問題,怎麼解決?咱們通過分析,發現根本緣由是業務須要異地多活,而架構是雙機房單中心的,咱們須要作到的不是避免每一個問題的發生(事實上也不可能避免),而是應該作到問題發生後可以快速處理,因而經過將架構重構爲異地多活,重構完成後仍是有各類偶發問題發生,但對業務的影響就很小了。

發現問題的能力主要來源於經驗,包括成功的經驗、踩坑的經驗、參考別人的經驗,所以若是要培養本身這方面的能力,多思考、多總結、多學習、多參加行業交流。

技術創新

達到這個級別基本都是業界大神通常的級別,說實話我也沒什麼經驗,只能仰慕這些大神。

例如:

  • 當年貝索斯要求亞馬遜公司內的系統都服務化,後來是哪位大神想到能夠把這個能力開放出來轉換爲「雲計算」?
  • 阿里雲王堅博士當年在衆人都不看好的狀況下爲什麼堅持雲計算是將來?
  • Google 在解決大數據問題時,如何可以提煉出三篇論文,開啓了一個大數據時代?

技術實力案例點評

一個面試者面試 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開始學架構

相關文章
相關標籤/搜索