和2017年的稅后收入相比,19年的稅后收入預計能翻番,當然基數絕非是5萬10萬,畢竟17年的時候我已經達到了Java高級開發的職級。而且在這基礎上,尚能做到生活工作平衡。
回想起來,作對了不少事,也走了不少彎路,所以打算用若干篇系列文記錄這一過程,一方面也算個總結,另一方面也把走過的彎路寫出來,希望各位朋友看了有所收獲。
1 在外企舒適區,工資性價比高,但個人所掌握的技術太沒競爭力
在2017年初的時候,我在外企也享受了一段比較舒適的時光,到什么程度呢?
1 早上應該是9點上班,但9點半辦公室里會有一半的人,從9點45開始,一些老油子(也包括我),會陸續到達,一些混吃等死的人(不是我),會10點或者更晚后到。有些人可能會想,這不算什么,人家互聯網公司有比這個時間更晚的,但外企前天的下班時間一般不會超過7點。
2 到了以后,先看下美國的郵件,如果沒大事(一般不會有),早上慢慢回下郵件,到11點半吃飯,外面逛一圈,周五能逛兩圈,1點15開始干活寫代碼。
3 下午,如果遇到可能會擔責任的事,就拉上人開個會,大家定個方案,然后慢慢做,做到5點半,坐等下班,如果很忙,不會超過7點。
4 晚上和老外開電話會議,一般一周1次,晚上9點到10點。國內老板管人事,業務向美國方匯報,國外用的技術絕對沒國內先進,所以大家懂的。
5 一年過兩份假期,中國的之外,美國假期當天沒郵件過來,所以次日一般也沒事。比如7月4日是獨立日假期,美國不上班,所以我們7月5號一般沒郵件,也相當於沒事。
說到這里,可能大家非常羡慕,其實天下沒免費的午餐,我這樣的工作經歷過以后,技術落后到什么程度?
1 平時工作,java只需要JDBC,Spring都用不到,ORM就用類似hibernate的框架,由於沒業務需求,組里還專門成立spring cloud學習小組,就學些基本的demo案例。
2 SQL就一般的增刪改查,也就是個MySQL主從讀寫,沒有LVS。
3 部署用Jenkins + Git + Sonar,這塊勉強沒落后,這是我難得的能帶到新公司的技術。
4 Redis用單機版的,Nginx + lua,也就是個調研項目,Netty或kafa或Mycat等組件,沒聽說過,甚至dubbo都沒機會用。
所以當時,只要是組內跳槽出去的,過三個月后技術就能超過我們。這還不算,最糟糕的是,當時我更不知道BAT等互聯網公司究竟用什么技術,也就是說,我當時開始准備面試時,連該准備什么都不知道。
2 剛開始面試,撐不過半小時,只能硬着頭皮不斷學
我是什么時候打算要換工作的?看網上,一些工作年限遠小於我的人,在互聯網公司里工資比我高,而且獎金至少是4個月的,再結合自己成天技術沒進步,就着急了。
剛開始的時候,由於不知道要學什么,只能一方面先看,另一方面先找些小公司去面試。回想起我當前面試的窘況程度,簡直不堪回首。
1 面試官問,你分布式框架用過哪些?應該是Redis之類的,但我直接說,用過Spring MVC框架。
2 面試官問,你用過哪些緩存?我說,我用過HashMap里放內容,作為緩存。再深入就不知道了。
3 面試官問,你們數據庫層面怎么做優化?我只能說到通過執行計划優化。分庫分表,我都沒聽說過。
后來好些了,也看了諸如Netty和Redis之類的框架,也能撐過些基本問題,比如Redis有哪些數據結構,Netty如何設置編碼器和解碼器。但一些底層問題一問就倒。比如Redis如何搭建集群,Netty里讀寫索引的工作原理。
諸如此類,雖然一次次面試失敗沒回音的滋味不好受,但總算知道了前進的方向,一方面,趕緊根據面試問題,把相關知識點看熟悉,另一方面,會看面試被問到的底層代碼。
到后來,我也看了不少文章,這段時間我遇到的問題是,其實到后來,一些組件我都掌握了,而且也看了一些架構方面的書,但一方面沒實踐經驗,面試過程中沒法說上細節,另一方面,缺乏架構技術和業務的整合,所以面試時,只要是個資深面試官,就能看出我的技術是看來的,而不是實踐得到的。所以一些小的互聯網公司我都進不去,更何況是BAT。
3 中間出了一本書,也在不斷講課,從中不斷感受到自己和平均水平的差距
這段時間里,用屢敗屢戰來形容我也不為過,為了提升能力,我也開始在博客園寫文章。為了提升自己的技能,我還到一家培訓學校去講課。對,是講課掙錢,而不是去出錢聽培訓。當然,那時我Java基本功還是很扎實的,也寫了Java Web輕量級開發面試教程和Java核心技術及面試指南這兩本書。
通過講課,我一方面沒誤人子弟,另一方面在備課的時候,還加深了對Java核心和Web的理解。更重要的是,我結實了不少資深老師,在學生中,也不乏牛人,我也算臉皮比較厚,尚能虛心向人請教,所以那個時候,好歹也搞清楚了該看哪些方面的內容以及需要達到的程度。
之前我是通過面試和看文檔,了解外面普遍用到的技術,講課后,隨着接觸到更多的牛人,我能清晰地看到自己和平均水平的差距,甚至一度產生了繼續在舒適區混的想法。不過幸好,后來面試成功了兩家公司,也算增加了我一些自信心,而且我也算危機感比較強,於是終於也堅持下來了。
4 面成了一家互聯網金融公司,但沒敢去
面成的第一家公司是以外派的身份去一家比較大的互聯網,錢不少,但想想是外派,當時我的外企名稱畢竟也能唬人,而且好歹還是正式員工,還算穩定,所以就沒去。
另外一家是P2P金融公司,也應聘成了架構師,記得當時面試分4塊。
第一是Java核心和Web的基本功,比如集合多線程Spring MVC,我這個秒過。
第二是數據庫,我好歹看了一些關於執行計划的調優,也了解了一些MySQL的集群,也過了。
第三是大數據,是Hadoop,我一些理論過了,也能證明自己在項目里用過,但被面試官看出,只用過基本的技能,一些集群和高級知識點沒用過。
第四塊是我最擔心的分布式集群,不過當時就問了Dubbo和Zookeeper整合,以及Redis集群的基本問題,沒怎么細問,結論也是用過,但沒深入了解過。
結果我就通過了面試,但看下來這是家P2P金融公司,風險太大,就沒去。后來果然,18年6月份,這家公司倒了。再回想一下,可能當時能力比較強的人已經不怎么願意去這家P2P公司了,所以招聘要求有所降低。
總之我也是幸運,否則17年年中進去,18年年中公司倒閉我出來,再怎么解釋總會有污點,后來再要進好公司就難了。
后來當我進了一家互聯網公司后,就見到不少3年左右經驗的程序員進入一些P2P金融公司,然后公司踩雷倒了,隨后他們就在一些小公司之間輾轉,每家公司也干不長,這類人很可惜,其中不乏能力強的,但因為每家公司干不長(雖然不是個人原因),但再要進好公司,可能就得先在一家公司干個至少3年證明自己穩定性不差后再做打算了。
5 終於面成了一家規模比較大的互聯網公司,換公司前非常忐忑
如果干一類事情的成功率只有10%,那么干多少次,至少成功一次的概率能達60%?
干一次失敗的概率是90%,連續8次都失敗的概率是43%,也就是至少成功一次的概率已經接近60%。而且那個時間點,至少面試了10家,按這個算下來,成功一次的概率到66%了,更何況每次面試結束后,我會不斷總結提升,所以終於在17年的年底,我面成了一家互聯網公司,雖然不是BAT,但規模不小,國內也非常知名。
由於我那個時候已經成為面霸了,面試時表現也算不錯(不過進去以后領導估計就后悔了)。
1 第一輪技術面試是我將要進組的組員,介紹項目經驗時,我直接拋出線程池內存模型,再通過volatile和final講述了ConcurrentHashMap內部細節,面試官沒細問就讓過了。
2 第二輪技術是組長,我介紹了一通JVM虛擬機優化和SQL優化,也讓過了。說實在話,前兩輪技術面試都是以我為主,面試官沒怎么問。
3 第三輪技術面試是部門經理,本來,我還想挑戰一下架構師的工資水平,但部門經理火眼金睛,雖然我竭力說了一通,結論還是:我基本功還行,架構方面也有實踐經驗(真實情況是我的經驗都是看資料得來的),但架構方面沒達到架構師的水平。於是和我明說,我可以干架構師的活,但工資只能給到高級開發的水平,如果願意就繼續。
我在面試之前,已經知道這家公司加班不算少,所以在內心也定了一個公司標准,說實在的,當時在工資方面其實沒達到我的預期,但一方面我也面了那么多了,也知道自己的真實水平,更知道要找家能提供架構師方面實踐經驗的公司很難。相反,如果繼續在外企呆着,時間不等人,估計再這樣下去我的技術就更加落后於平均水平了,所以我就咬咬牙進去了。
6 后文預告
在原來外企辦離職的時候,不少人理解我,但也有人說我從外企到互聯網公司會很苦,其實我已經做好了准備。
技術上,我就繼續看相關資料,態度上,當時我還在外企,就不再繼續松松垮垮,比如上班不再看手機,多看技術資料,也盡量在下班后再多干點活,以適應加班的節奏(事實上在外企我根本想象不到互聯網公司的加班)。
不過心態上我還算放松,畢竟自己基本功不錯,而且人也算上進,肯多問,而且我也做好了進互聯網公司被別人鄙視的准備。辦好外企的離職手續后,我就與18年的年初去后面要詳細介紹的互聯網公司。
在下文里我將詳細介紹:
1 外企的技術與互聯網技術的差距以及我是怎么適應過來的。
2 外企有工作節奏比較慢,所以人際關系不復雜,而互聯網公司推崇狼性文化,我是怎么一點點通過加班和改變工作模式等的方式適應過來的。
3 尤其地,我是通過做項目和多問人,熟悉了不少分布式組件技術,從而在升級到架構師的路上不斷進步。