(經驗分享)從大學到大廠技術專家,這一路磕磕絆絆,我是怎麼走過來的

點贊再看,養成習慣,微信搜索【三太子敖丙】我所有文章都在這裏,本文 GitHub https://github.com/JavaFamily 已收錄,有一線大廠面試完整考點,文末有福利

青銅-萬惡之源

《計算機基礎》,這是所有讀者大學最開始都會上的課吧,我問了羣裏的仔,他們都說是的,我想大家也是。

在計算機基礎中我們會學到計算機的歷史、計算機的特點、進制轉換、內存管理、線性數據結構、網絡請求協議等等。

計算機基礎真心很重要,無比重要,究極重要,爲啥我這麼說呢,裏面涉及的計算機知識還有很多網絡協議的知識,大家以後一定會用到,我可以負責的告訴你,面試也一定會問,什麼Http、Https、Tcp/Ip、三次握手、四次揮手面試不要太常問。

Tip:這裏有個小插曲就是我身邊那個架構師團隊Leader這周面試阿里p8崗位的時候,我以爲問的都是什麼源碼,中間件的究極操作,我想大家跟我想的一樣,但是大家錯了,反而問的很多計算機的基礎知識。

​ 我聊天大概問了一下面試內容,有什麼求二叉樹的鏡像,內核態和用戶態的理解,計算機的緩存頁等。

​ 大家是不是驚了,這他*不是我校招的題目麼?怎麼P8級別的大佬還問這個?其實很好理解,大家想一下到了一定的工作年限技術的廣度深度都有一定的造詣了,你寫代碼就這樣了沒辦法優化了,機器配置也是最好的了,那還能優化啥?

底層,我們都知道所有語言到最後要運行都是變成機器語言的,最後歸根究底都是要去跟機器交互的,那計算機的底層是不是最後還是要關注的東西了?

福利:他這週會來我們公司面試,屆時我會詳細問一下具體的面試內容,如果大家想看我可以到時候整理一下寫出來,看看那種級別的強者的世界到底是怎麼樣的。

學完計算機基礎你基本上對計算機的整個知識體系都一知半解了,對於編程或許還是很懵懂,但是你現在已經要踏入編程的門了。

白銀-編程第一課

計算機基礎學了,後面就要編程的入門課程了。

想必看我這篇文章有99%的小夥伴都是以下面這段代碼開始的自己的程序人生的吧:

我還記得帥丙我就是大一開始學習的C語言,《C語言程序設計》譚浩強老師的課本,在第27頁就是第一章,HelloWord,現在回憶起來還歷歷在目,老師在黑板上寫下這兩個莊嚴的單詞,同桌的她和我露出無限的求知慾……

我想所有的語言都是語法基礎開始的,而且編程語言的基礎語法也都是大同小異的。

If、For、While等關鍵字,List、Set、Map等集合,Int、float、Double等基礎類型,大家第一次學的時候我想也不會知道,這些關鍵字將會陪伴我們走完各自的程序生涯吧?

接下去就難一點比如JDBC、IO、文件流啊什麼的,帥丙依稀的記得當時還是代碼裏面寫SQL然後查詢,也不知道記錯沒有。

學到這裏,你可能覺得你JavaSE無敵,出去可以找工作了,反正當時的帥丙,覺得自己可以闖出一片天了,不知天高地厚,四處炫技。

但是幼稚的我根本不知道,未知的前方還有什麼等着我,我也不知道自己其實才剛入門,但是如果要往WEB方向發展,這些倒是基本足夠了。

但是你到現在爲止學的東西都是服務端的東西呀,怎麼讓你的服務端東西展示給別人看呢?

這個時候我們就應該去做個醜不拉幾的頁面,進行簡單的交互了,你這個時候要學HTMLServletMySQLJavaScriptTomcatCSS等。

目標呢就是寫出第一個動態網站,也許只是個登陸功能,只能展示下個人資料,但這是很重要的一步,你要弄清楚的是,一個用戶的點擊產生的請求,是從哪裏發起,哪裏接收,哪裏處理,哪裏返回,你得理解瀏覽器和服務器的關係和分工,CookieSessionRequestResponse

Tip:我記得我剛出來面試就有面試題是這樣的,一個Http請求從網頁發起到服務端產生數據返回中間經歷了些什麼,或者Spring做了什麼?大家可以思考一下

​ 還有有一個自己的項目真心很重要,敖丙我就是在大學期間做了項目,至今在校園內網上穩定運行着,出來實習面試的時候基本上也是一路披荊斬棘,吊打了同行面試的仔,反正大學有個項目賊加分,是讀者的大學生記住了麼?

黃金-初出茅廬

上面的只是WEB開發的學習初級階段,這都是些JAVA誕生以來最原始的最官方的WEB開發技術,當然現在真正的項目很少直接採用這些技術了,現在都是前後端分離了,Vue、Node.js、React等前端的語言更新迭代速度非常快,帥丙我學了一點剛用舒服,前端的朋友告訴我又迭代了……我他*不學了!

爲了不斷提高技術的易用性、開發效率和可維護性、可擴展性,無數開源項目都是在這些原始技術的基礎上封裝、改進。

所以這個階段不要盲目樂觀地跑去找工作或者對實習挑三揀四,你會被打擊到的,又或者找個小公司渾渾噩噩幾年過去感覺跟新的技術棧脫節。

有人跟你說小公司學的東西多,他害你的,剛開始能去多大的去多大的,越大越好,你想你去了大的你想去小的分分鐘的事情,但是你小的要去大的就相對難了。

好,初始階段完成,開始進入WEB開發的正題,首先是傳說中的框架,SSM(Spring SpringMVC Mybatis)成爲熟練的增刪改查程序員是必須的,在這個階段你還要理解爲什麼要用這仨而不是那些Jsp、Servlet、Jdbc,你要體會到寫MVC、三層架構的好處。

這個階段不要輕易質疑框架的價值,也許剛開始你會覺得麻煩,覺得他們有時候是多此一舉,我最開始這麼寫的時候發現,真的噁心,什麼dao,service,Controller等等,分這麼多幹嘛。

等過一兩年後回過頭來你會覺得少了這些框架你已經很難幹活了,沒有分層清晰的系統,你反而開口大罵項目的架構師的。

*

不過要提醒大家的是,這個階段還要避免的心態是,能熟練地增刪改查了,就自認爲寫程序不過如此,然後往簡歷上填個精通,這也是新手面試被批得體無完膚的原因之一。

淺嘗即止,是新手的大忌,爲啥這麼寫,這麼寫有啥好處,有啥壞處,多問幾個爲什麼,你多年後會感謝敖丙的。

如果你學得好,這會應該能熟練地寫個博客啊,小論壇啊之類的WEB項目了,也就是達到了就業的基本要求。

Tip:而且說一下作爲一個應屆生,你除了基礎知識,如果你有自己的技術博客,還有像樣的項目能展示給面試官看,是真的很加分,搭建個簡單的項目,項目流程你也知道了,技術棧也熟悉了,還可以手機訪問網頁給面試官現場演示,很加分的。

像我身邊的朋友Java3yJavaGuide我沒有三顆心臟等,就是在這個階段就已經開始寫了自己的博客,並且各自都做出了成績,這些以後都是你面試的議價能力的一部分,也是你的加分項,和你自身的財富。

我問了一下他們,都是靠博客就已經得到不少大公司的面試邀約了,反正有項目,有不錯的履歷,有不錯的博客,都會給你加分,如果你什麼都沒有,現在動手去多學點,少打兩局LOL等你到我這個年紀就會發現,索然無味

鉑金-遵義會議

這會是程序員生涯的一個轉折點,把握好了人生起飛,把握不好全盤皆輸,所以我用在我老家遵義舉辦的遵義會議,作爲這階段的標題,我覺得,妙啊

慢慢的你會發現數據庫性能實在不行,出於不甘現狀,或者趕時髦,你該去了解NoSQL了,MemcachedRedisMongodb等非關係型數據庫眼花繚亂,沒關係,試着用用,能很好地緩解MySQLOracle之類關係數據庫的壓力。

出於公司某些業務需要,你可能會鑽研一個特定技術領域,比如全文搜索技術ElasticSearch(以下簡稱Es),那你瞭解了Es,你又要想到數據庫的數據怎麼同步進Es呢?

你可能會接觸到LogstashCanal等中間件,然後發現可視化也是個問題,那Kibana就應運而生,用的時候發現歐洲人的分詞習慣跟我們不一樣,那Ik中文分詞器又得了解啦。

使用之後你還會發現他底層的Lucene有很多坑要怎避免,時間多你還可以瞭解Solr等等。

總之知識就是一個體系,我經常跟羣裏的仔說,形成知識體系,你面試說了Es那相關的技術棧你一樣要了解的,我題目取了叫《吊打面試官》就是噱頭,你去面試如果面試官技術深度真的很深,我想被吊打的100%是你。

你甚至會開始對系統中一些比較特殊的存在感興趣,比如權限系統單點登陸之類的,又或者某些特定業務領域的算法研究,這些是你的加分項。

你還發現服務拆分後Http通信有諸多弊端,就開始接觸優秀的Rpc框架還有消息隊列中間件了,如DubboRocketMQ等。

再再後來你發現呀,數據量大得一批,表頂不住了,幾億數據查出來要好幾秒,那分庫分表就出來,什麼水平拆分垂直拆分,還學習了TDDLSharding-JDBCDRDS等這樣的分庫分表中間件。

但是你用了發現全局的唯一id生成又是一個問題,或許中間件有自帶的,但是你還是要了解原理,什麼雪花算法uuid等等也得學。

再再再後來呀,你發現分庫分表也頂不住了,業務體量爆炸式增長了,你可能就需要了解動態分庫分表的解決思路和解決方案了,特別是FaceBook開源的一些方案。

再再再再後來呀,你發現動態分庫分表也不行啊,很多離線的數據也很多啊,每天幾個T,公司都要被敗光了,那你就要了解大數據場景的離線分析啊,數據緩存啊,數據清洗,數據可視化等等啊什麼的。

那就需要學什麼ODPS啊,HadoopHiveHbase等等中間件或者工具了。

再再再再再後來你開始發現你的代碼很亂,久了以後自己都看不懂,重複的,難以重用的代碼堆積如山,不想維護,BUG百出。

於是你要開始重視設計模式,合理地改造下自己的代碼習慣,不再被僵化的SSH、MVC三層架構束縛住。

再再再再再再…..(敖丙你是不是沒玩了?哈哈其實還真有我就不列舉了)

到這裏不知道你有沒有體會到我每篇文章開頭那句話的意思?敖丙就是工作之後發現自己越來越無知了,你再品一下下面這句話。

你知道的越多,你不知道的越多

Google和各種資料是你進步的動力,極少再遇到必須請教別人才能解決的問題,如果你這個階段還老是問別人,你的技術生涯也就快到頭了。

這個階段,如果你技術卓越跟敖丙一樣能吹,你的收入將是白領水平,至少接近了,或者大幅領先同齡人了。

我覺得多數程序員在工作多年之後都能達到這個水平,有的人只需要一兩年,有的人卻要用上五六年,在這個階段落伍的人,有的是出於天賦和思維所限,有的是出於對技術缺乏熱情,有的是出於工作內容的制約。

等到年近中年,再也拼不過年輕人,被淘汰出局,只能在自嘲爲屌絲和碼農的無奈中黯然轉行。

這是個很重要的分水齡,你能不能繼續進步,能不能在30歲以後繼續從事技術工作,能不能在公司裏獨當一面,我覺得就看你能不能超越這個階段了。

很多爛公司裏工作數年的項目經理,連這個層次都還沒達到…

爲了30歲的自己聽到裁員完全不虛,爲了家裏的老母親不再爲了省電費不捨得開燈,爲了讓自己……

我想這個階段你應該要做好準備,這也是我大篇幅介紹這個階段的原因。

磚石-揚帆遠航

你要讀讀優秀開源項目的源碼,你要搞懂一些當年不懂的基礎知識,你開始理解《thinking in java》的精髓,你能寫一些底層的代碼,有時還會覺得自己封裝的比某些開源工具更好用更簡單。

當年看不懂的《深入分析JVM虛擬機》現在你已經可以對裏面的知識點如數家珍張口就來,並且能夠將大量知識點帶入到項目中優化,並且能夠看到實質性的變化(暗示KPI)。

WEB的難點和重點永遠都在於性能、負載能力上,而現在網絡的發達造成了數據量和操作密度的大大上升,硬件卻沒有相應的進步。

你得試着更好地運用更多的服務器來協同工作,從WEB端到服務端到數據庫,全都需要集羣,需要分佈式,需要合理的控制數據的流向,掌握好網站上下,一大堆機器的平衡,找出性能的瓶頸,找出穩定性和安全性的瓶頸,硬件出現故障,第三方技術出現錯誤,將被當成家常便飯融入到你的系統和代碼裏仔細考慮。

你會開始覺得方案無比地重要,一將無能累死千軍將不斷應驗,一個不好的設計,一個不好的方案,會讓一羣優秀的程序員工作成果大打折扣。

你要關注架構知識,不能再滿足於SSH三層架構到底。

領域驅動設計,面向事件開發,敏捷開發等等一系列的思想在關鍵時刻能決定你項目的生死,這個階段不再有標準範例讓你照抄,你只知道思想和原理,實踐卻需要自己不斷嘗試和改進。

多關注各種雜七雜八的開源技術,有些你可能前面已經接觸過了,和通信有關的,和集成開發環境有關的,和架構有關的,各個領域你都應該能信口說上幾個主流技術,雖然你可能只是聽說過,瞭解。

但關鍵時刻你得知道如何去選擇技術,並快速掌握它。

你還會去考慮嘗試下別的語言,這裏不是說轉向什麼C++ C#之類的,那和JAVA程序員不相干,我說的是一些運行於JVM之上的語言,比如scala和groovy,初識他們時你會覺得Java真的老了。

但當你回到一個綜合性的大型項目中,又會覺得Java積累下來的整個體系技術是如此完善,就像一個工業化標準一樣,你可能發現光是Spring家族的東西你都受用終身,無法完全通讀。

你能把這個階段實踐好,勝任項目經理,乃至中小公司的技術總監,大廠的小團隊Leader都是可以的。

大師-登峯造極

其實寫到上面這個階段的時候我覺得,這是很多人滿足的地方了,都是小公司技術總監了,那我圖啥?

但是未知的人生還在那等着你呢,我問了身邊頂級的大神,爲啥要走出舒適區?去像字節、阿里等這些壓力大很多的地方呢?

他們給的回答都不太一樣,但是一樣的就是挑戰自我吧,誰也不知道哪裏是自己的終點,那爲啥不多做點嘗試,新的環境,新的技術棧,新業務場景挑戰新的自我。

這個階段你的一舉一動可能都關係一個項目的生死存亡,一個錯誤或者正確的決策就可能改變整個項目的命運,水能載舟亦能覆舟,我想用在這裏也恰到好處。

我身邊這樣級別的大佬鳳毛麟角,但不是沒有,他們在公司都是核心人物,大型項目或者項目緊要關頭都是他們帶領團隊沖沖衝,除了問題也是能最快給出解決思路和方案的。

Tip:我現在的老大就是這樣的人,雙十一大家還手忙腳亂去追數據的時候,他上來一套操作,寫了幾個腳本就搞定了,臥*我們當時周圍一羣人,從頭到尾的知識盲區,結束了還沒反應過來,只能拍手叫666。

這就是強者的世界,我所向往的世界,當然我知道這樣的世界,只有一步一個腳印才能涉足。

王者-泰山之巔

最後王者其實我不會寫任何內容,能到這個領域的人本身就是屈指可數了,敖丙身邊有,但是我覺得大家自己體會吧,一般就是人脈,交際,能力都到了一定的高度了,這個階段的事情我也體會不到。

能想到的就只有先祖的詩句:指點江山,揮斥方遒。

算是給大家留下無限遐想的空間吧,未來或許你就是你所在領域的王者也說不定的呢對吧。

總結

不知不覺寫了這麼多了,以上是我個人眼裏的一般向JAVA 程序員的發展線路,限於篇輻也不全面,實際個人成長路線可能因爲工作內容的不同差異會很大,有的人偏向了底層研究,有的人偏向了業務需求設計,有的帶有濃重的行業色彩,而且技術之外,還有很多知識也很重要,做JAVA沒有輕鬆的方向,但一個對技術抱有興趣的人,走到這一步時,仍然會對開發抱有熱情,想要寫出好的項目。

純爲了生計而工作的程序猿是走不到這一步的,這一行來都來了,大家一天都是24小時,爲啥有差距,我想你我都明白的,知道爲啥那就幹出點名堂吧。

白嫖不好,創作不易,各位的點贊就是丙丙創作的最大動力,我們下篇文章見!

持續更新,未完待續……


文章每週持續更新,可以微信搜索「 三太子敖丙 」第一時間閱讀,回覆【資料】【面試】【簡歷】有我準備的一線大廠面試資料和文章,本文 GitHub https://github.com/JavaFamily 已經收錄,有大廠面試完整考點,歡迎Star。

你知道的越多,你不知道的越多

發佈了46 篇原創文章 · 獲贊 7784 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章