一則招聘技術專家崗位要求引發的深度思考

  • 一個優秀程序員的最大的美德是懶惰
  • 授你以魚不如授你以漁
  • 王炸不教你技術,只教你學技術

作者:王炸 |【堅持1000篇原創】

📱2019.12.11 第58篇原創📱

☝️先贊後看是技術人的傳統美德☝️


關於王炸

一個懂天文學的程序員

擁有8年一線大廠經驗,興趣廣泛,歡迎和我邊玩邊學,從今天起面朝大海。

我們的座右銘:“要好好學習,不然別人只會指着你的鼻子說“你看那個人,除了帥,一無是處。


言歸正傳

格局決定一切 思考決定成敗 | 爲什麼會寫此文?

北京時間22:00,我絲毫沒想下班的衝動,獻身程序員改變世界的偉大工程,身處望京一代最高檔的寫字樓內,窗外星光璀璨、五彩斑斕、華燈初上、光彩奪目、流光溢彩、燈火齊明、暮色瀰漫,我實在找不到一個準確的詞形容這座美麗的城市,只能感嘆:“雞你太美”

 

我在公司內部最高端的千人技術羣裏看到一則招聘信息,這則招聘信息引發了我的關注,於是有了《一則技術專家招聘要求引發的深度思考》一文。


招聘要求還原:

加入我們,您將參與:

  1. 建設大規模分佈式系統,打造新一代以雲原生和 Serverless 技術爲基礎的互聯網開發領域基礎設施平臺

  2. 打造一整套可支持各種複雜業務場景,具備高可用,高性能,高擴展性,從軟件設計到上線運維,貫穿整個開發生命週期的開發框架;

  3. 提供全方位立體監控、高可用容災、具備軟件開發最佳實踐的產品解決方案;

崗位要求:

  1. 熟悉 Java語言,有大型分佈式、高併發、高性能、高可用系統的設計開發經驗;

  2. 對Spring,Spring Boot等架構設計,核心功能熟悉,主要流程有代碼級的瞭解,具備修改該框架的能力;

  3. 熟悉 CNCF 生態技術,如 Service Mesh、Prometheus、Service Catalog、Knative等;

  4. 熟悉主流Web容器如Tomcat、Jetty,GlassFish等的架構設計及核心邏輯,對部分組件具備代碼級的瞭解及修改能力;

  5. 熟悉Jvm相關的基礎知識,如類加載,併發原理等;

  6. 精通設計模式,能寫出優雅的代碼,並能進行高效的重構;

  7. 注重代碼質量,有良好的 Test Driven 習慣;

  8. 具備複雜需求及技術的研究能力,善於進行需求分解、技術突破,擅長團隊的溝通協作,具備親和力。

思考決定成敗:

針對崗位要求的內容,我分享下我的想法,只拿最簡單的第1條第2條爲例。

第1條:熟悉Java語言,有大型分佈式系統開發經驗,這個不用說,就是要求基礎紮實,無話可說。致於分佈式系統開發經驗,5年前只會一門Java/SSH/M就能找到一份工作,如今已世殊時異,2020年如果還不瞭解分佈式恐怕要轉行送外賣了,兄弟,電瓶車轉賣嗎?

第2條:對Spring xxx 有代碼級的瞭解,爲什麼要閱讀Spring源碼呢,工作中真的需要讓你去修改spring源碼嗎?讀源碼有什麼收益。

從崗位級別區間分析(p2-2到p3-2),畢竟這個是一個年薪30w起的崗位,這點要求不過分,不能再低了,再低就發不了offer了。

我從Spring源碼裏學到了什麼,王炸授你以漁

1.從Spring中學習設計思想:

Spring使用了控制反轉的理念解決了編碼強依賴問題,不希望改一個類,依賴它的類也需要改,進而,我理解了微服務爲什麼會流行起來,答案是解耦,第一次領略到Spring可以這麼完美的解決解耦。

通過依賴注入和AOP,我學會了偷懶的思路,諸如日誌,鑑權,很多地方都需要用到代碼,在沒有了解spring的年代,我只能到處複製粘貼這些噁心的代碼,如今我再也不需要複製粘貼了,面向切面編程通通幫你搞定。

2.從Spring學習設計理念:

面試的使用面試官總喜歡問:你知道哪些設計模式呀?SOLID瞭解嗎?

SOLID分別是:單一職責原則、開放封閉原則、里氏替換原則、接口隔離原則和依賴倒置原則,這亂七八糟的都什麼呀,如果你理解了這些設計理念,你發現spring源碼裏隨處可見這些原則,讀Spring源碼,第一次真正瞭解SOLID。

比如控制反轉、依賴注入和AOP,分別對應了3個spring的jar包:spring-beans、spring-context、spring-aop。每個包獨立負責一個核心功能的實現,第一次領會單一職責原則。

3.從Spring學習設計模式:

Spring中的 BeanFactoryApplicationContext,用於創建 bean 對象,使用了工廠模式來管理程序中使用的對象Bean,第一次知道如何寫帶有Factory模式的代碼。

通過BeanFactory 源碼我get到了什麼是延遲注入,當程序使用到某個 bean 的時候纔會注入,相比於BeanFactory 來說會佔用更少的內存,程序啓動速度更快,想讓系統更快,原來還可以這樣設計。

通過註解:@Scope(value = "singleton")我get到了什麼叫做單例模式

面試車禍現場

我還記得前幾年我面試一家叫藝龍網的初面中,面試官問我的第一個問題就是手寫一個double-check的單例模式。

public class SingletonClass {
    private static SingletonClass INSTANCE = null;

    private SingletonClass() {}

    public static SingletonClass getInstance() {
        if (INSTANCE == null) {                        
            synchronized (SingletonClass.class) {      
                if (INSTANCE == null) {                 
                    INSTANCE = ;  
                }
            }
        }
        return INSTANCE;
    }
}

不到一分鐘寫給他,這是我從Spring源碼中學到的,還問了我爲什麼synchronized包住的是SingletonClass.class而不是方法,我給面試官解釋了什麼是原子操作,以及:new SingletonClass()在虛擬機中究竟做了什麼。

我還給面試官講了double-check單例模式在Spring中的應用,Srping 通過 ConcurrentHashMap 巧妙的實現單例註冊表。

講了這些,面試官服服帖帖不在問我任何關於Spring的題目了,話鋒一轉到了問JVM源碼,也就是上面崗位要求的第5條:熟悉Jvm相關的基礎知識,言多必失?我給自己挖了一個坑?

 

你以爲JVM源碼就能難住我了嗎?我的王炸牌還沒打出💥💥。

別跑題,接着說Spring源碼

通過AOP(Aspect-Oriented Programming:面向切面編程)我學到了代理模式

通過ApplicationListener我學到了觀察者模式

通過AdvisorAdapter我學到了適配器模式

還有Spring如何解決事務問題,Bean如何解決循環依賴問題。

還有很多很多.....

讀到我文章的各位俠客,您不點個贊轉發到朋友圈,我恐怕要寫不動了。

總結:

有態度,對代碼存敬畏之心。

下期預告

超過2000個閱讀我寫JVM源碼?你們說了算,上面那些崗位要求哪裏不懂你們提問,步步高打火機,哪裏不會點哪裏。

畢竟文章開頭是一個年薪30w起的崗位

大神還看了這這些文章

  1. 2020年沒被淘汰的IT精英都看這14個全球知名網站

  2. 王炸吐血整理60個Redis面試題,全網最全了

  3. 月薪三萬的碼農:工作擰螺絲有什麼不好?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章