Java程序員如何用2年時間獲得大廠3年實戰經驗?
時刻保持對新技術的敏感度,并定期更新自己的技能儲備,是每個技術人的日常必修課。
要做到這一點,最高效的辦法就是直接跟 BAT 等一線大廠取經。說白了,平臺足夠大,就會有更多資源和更廣闊的發展空間,在前沿技術領域的研究和投入也更大一些。
但話說回來,并非所有程序員都混跡北上廣。我們中的相當一部分人,平時很難有機會接觸國內外大廠的實戰經驗,對這些最佳實踐的認知,基本停留在技術公號那些內容換湯不換藥的干貨文上。
其實,有些文章光看標題就能猜出個大概,而在技術圈,變化才是永恒不變的主題。與其收藏那些“趨勢預測文”,不如聽當事人講講大廠到底是怎么做的。
3 年經驗的大廠程序員,是 HR 眼中的香餑餑,本應在招聘市場上受到追捧,然而,最近我發現一名履歷不錯的程序員,跳槽時未能通過技術面,此反常結果令我感到疑惑。
在與他交談后,我又與多名相似履歷的程序員進行溝通,發現不少 3 年工作經驗的大廠程序員,會因技術瓶頸陷入職業困境中。
觀察數名程序員所陳述的焦慮表現無非是:失去了主動學習的熱情,不再刻苦鉆研技術,長時間消息閉塞,對新技術、新領域不了解。
他們處在自信與焦慮的掙扎點,一方面對現有工作得心應手,另一方面又找不到技術和職場的突破口。當程序員們技術處在瓶頸期時,自然會恐慌:無論資本處在狂熱還是寒冬,無法成長的人,注定是競爭中的犧牲品。
我認為,他們患上了「大廠通病」。
大廠通病:3 年時遇見技術瓶頸
技術瓶頸的外在表現,往往源于內因。根據候選人們的表述,無法提升的內因如下:
1)成為熟練工種后,不再嘗試挑戰
2)大廠加班過多導致缺乏個人思考時間
3)精力過于分散,無法集中精力做編程
然而,細究所謂「大廠通病」,我們難以認同這些「內因」,它們更像是借口,也形成悖論:熟練工種會認為工作無壓力,真正覺得工作輕松的人,會常無效加班、精力易分散嗎?
讓我們分別分析「內因」背后的「借口」是什么。
借口一 : 成為熟練工種后,不再嘗試挑戰
很多出現技術瓶頸的大廠程序員表示:他們技術提升最快速都在工作第一年,會花費大量時間鉆研與學習。理由無非有二:1. 剛畢業具有沖勁和好奇心 2. 工作對于新人難度大,會在磨練中成長。
當技能逐漸熟練,解決工作內容顯得得心應手時,他們會失去好奇心,失去壓迫感,從而滿足現狀:放低自身要求,認為編程技術在滿足開發軟件需求情況下,編出來就行,如果要達到更苛刻標準,純看上司要求,或自身興趣,無奈他們已然沒了興趣。
拆穿借口:熟練是偽裝外皮,無危機感、無上升意識是本質。他們最大問題在于:技術仍停留在一兩年前,沒有所謂 3 年工作經驗,錯將重復性操作當作技能經驗。
借口二 :大廠加班過多導致缺乏個人思考時間
一名 4 年工作經驗的 Java 候選人,正在 100offer 看機會,如今有份 A 廠的 offer 擺在他面前,leader 雖認可他的技術基礎能力和業務理解能力,但仍在觀望中,offer 還未給到我們的候選人,深究原因,令人深思——
A 廠目前在布局大數據,需要大量人才,在缺少 Scala 工程師的前提下,A 廠會需要 Java 工程師來做大數據工作。該候選人表示:首先,這與他現在做的 SDN 開發有太大出入,其次,他雖然有 4 年 Java 經驗,但大廠通常愛加班,導致他幾乎沒有個人時間,從而漸漸失去了解新領域、新技術的精力和興趣,對于大數據崛起也只是略有耳聞。
認為加班使得個人成長停滯不前的人不止他一個人,駭人聽聞的996、周末輪班工作等制度,會讓他們精力過多被消耗,對待工作稍顯應付,回到家中也無暇思考。
拆穿借口:不關注外界信息和加班多無必然聯系,并且,問題在于,他們自身成長速度完全取決于其工作內容的強度和難度,當工齡久了,工作只有加班強度,沒有技術難度,成長便會停滯。
借口三 :精力過于分散,無法集中精力做編程
某 F 輪后 O2O 大廠的 Java 候選人,正在準備尋求新機會,問他為何選擇離開前景大好的公司時,他和我們描述了兩個原因。
第一,該公司盈利重點處在轉型期,餐飲、金融、物流都打算發力,戰略轉型使得各部門資源都不足,打法顯得混亂,甚至有爭奪資源產生內耗的現象。身為基層技術 leader 的他,漸漸感覺精力過于消耗。
第二,新任領導的管理風格更讓他不滿,作為中間層的技術管理,大部分時間和精力都浪費在了上下級的溝通中,至于技術,很早以前就處于停滯不前的狀態了。
不止他一人有以上煩惱,3 年工作經驗的程序員,不會再只做編程,還會參與到軟件設計、項目管理、與用戶或領導溝通中,精力難以集中。如果遇上公司轉型期或動蕩期,更會分身乏力,導致無論是主動學習還是鉆研技術上,都失去熱情。
拆穿借口:不需要溝通的技術人員根本不存在,合理利用精力用于溝通,是用技術解決問題的快捷方式之一。
我并不是否認以上三點「大廠通病」不存在,的確是多數3年工作經驗大廠程序員的共有困惑,但是,撕下借口的偽裝,從逼迫自己改變開始,才是正解。
如何解決「大廠通病」所帶來的技術瓶頸?
扔掉借口從改變環境做起,跳槽 or 轉崗?無論怎么選,都是逼迫自己改變的開始,陷在悖論中倒不如去打破僵局,打破的方法是什么呢?
學習了解目前互聯網最新最流行的技術
首先是大廠面試高頻考點:分布式技術
到底什么是分布式經驗,想要回答好面試官的問題,需要會哪些和分布式有關的知識呢,大概可以總結如下:
分布式服務框架。如Dubbo、SpringCloud
分布式事務。2PC、3PC、TCC
分布式鎖。Redis實現、zk實現
消息中間件。Kafka、RabbitMQ、RocketMQ
分布式緩存。Redis、Memcached
分布式搜索系統。Elasticsearch
分布式理論。CAP、BASE
高性能、高可用、高并發。分庫分表、讀寫分離、緩存、限流、降級、異步消息
如果沒有實操經驗,那就充實自己的理論知識,爭取早日進入大廠,把理論付諸于實踐。
閱讀源碼
大部分Java開發者去大廠面試前,都會把一些基礎的源碼慢慢都啃了一遍。
最基本的HashMap 和 ConcurrentHashMap線程池的源碼實現阻塞隊列BlockingQueue相關實現ReentrantLock 實現,以及其內部同步器Sync的實現原理Future的實現原理AtomicXXX是如何運轉的JDK源碼不過,說到源碼,有些朋友似乎比較反感,總覺得會寫代碼就成,為什么一定要去了解源碼是怎么實現?
看源碼的幾個好處:
從源碼中學習如何性能優化、設計模式等深入源碼,才能了解真相了解源碼,才能更好的解決問題你懂源碼,面試官更懂你源碼怎么讀,才比較有效率?
從問題出發,帶著問題看源碼面向debug學源碼寫寫寫,做筆記好了,希望大家都養成讀源碼的好習慣,輕松搞定面試官刨根問題的面試方式。