無(wú)法無(wú)天!2022 年秋招 Java 崗竟然爆了!
大家好,我是二哥呀!
據(jù)說(shuō),2022 年算法崗遇冷,BAT 暑期實(shí)習(xí)甚至收不到簡(jiǎn)歷,Java 反而爆炸。

簡(jiǎn)直無(wú)法無(wú)天!
難道,Java 的春天(映射 Spring)要來(lái)了?作為 Java 領(lǐng)域的優(yōu)質(zhì)創(chuàng)作者(見(jiàn)下圖),二哥是不是可以橫著走了?

那二哥是如何看待 2022 年秋招 Java 后端開(kāi)發(fā)崗一片紅海的呢?這不僅讓我想起脈脈上的一段話(huà)——來(lái)自某文豪。

劃重點(diǎn):
有后選后,無(wú)后選前
無(wú)后無(wú)前,算法也甜
條件允許,無(wú)腦后端
前途無(wú)量,預(yù)定高管
作為一名略微有點(diǎn)名氣的文字創(chuàng)作者,二哥對(duì)這段行文真的是佩服得五體投地——高手在脈脈啊!
這里的“后”,如果 Java 后端敢稱(chēng)第二,那沒(méi)有其他編程語(yǔ)言敢稱(chēng)第一了!
為什么我敢這么肯定,從 4 個(gè)方面來(lái)說(shuō)吧(對(duì)不起,我要開(kāi)吹了,拿小板凳坐好了)。
第一,就業(yè)崗位多,薪資水平夠給力,Java 后端開(kāi)發(fā)的需求量每年都很大。
前幾天和字節(jié)的一個(gè)朋友聊天,問(wèn)起薪資,他給我分享了一張圖,給大家看下。

我看到字節(jié)的另外一個(gè)朋友阿秀在知乎上也用了這張圖,那就可以確定——真實(shí)有效了。
也就是說(shuō),大廠的起薪都在 30 萬(wàn)以上,稍微努力點(diǎn),50 萬(wàn)到手,再使勁卷一卷,100 萬(wàn)到手。
退一萬(wàn)步說(shuō),不是所有人都能去一線(xiàn)互聯(lián)網(wǎng)大廠,畢竟是少數(shù)。那去一些創(chuàng)業(yè)團(tuán)隊(duì)或者中小廠應(yīng)該也能拿到不錯(cuò)的薪資。
就拿培訓(xùn)機(jī)構(gòu)動(dòng)力節(jié)點(diǎn)(打錢(qián))在知乎上曬出來(lái)的薪資數(shù)據(jù)來(lái)看吧。

雖然不是很清晰,但放大后能看得出來(lái),Java 學(xué)員的月薪也在 15k 左右。
把真假拋開(kāi)。畢竟拿 5k 月薪的學(xué)員也有,找不到工作的也有,但肯定沒(méi)法貼出來(lái),但既然動(dòng)力節(jié)點(diǎn)敢貼出來(lái),至少能作為參照。
對(duì)于培訓(xùn)機(jī)構(gòu),也不能一桿子打死,對(duì)吧?培訓(xùn)出來(lái)的學(xué)員,也有學(xué)得好的呀,在一線(xiàn)城市拿到 15k 左右的薪水肯定是有的。
我認(rèn)識(shí)一個(gè)朋友,他在西安的一家培訓(xùn)中心做講師,他就給我講,他們收的學(xué)員本身在學(xué)校的成績(jī)就不錯(cuò),只是缺乏系統(tǒng)的知識(shí)體系,到他們這培訓(xùn)后很多都能去大廠,就業(yè)率達(dá)到了 95% 以上。
昨天在 Guide 哥公號(hào)文章下面就有讀者留言說(shuō),看尚硅谷宋紅康老師的視頻入的門(mén),現(xiàn)在在阿里工作了。
第二,Java 的生態(tài)雖然說(shuō)不上盡善盡美,但畢竟已經(jīng)發(fā)展了 20 多年了,有大量成熟的框架可以用,穩(wěn)定、可靠、易上手。
打開(kāi) GitHub,看一下 Java 的 Topic,可以看到大量耳熟能詳?shù)能?chē)輪子。

都是一些能極大提高生產(chǎn)力的好家伙。
第三,Java 本身也在與時(shí)俱進(jìn),雖然 Java 7 差一點(diǎn)難產(chǎn),但自從被 Oracle 這個(gè)眼里只有錢(qián)的巨頭收購(gòu)后,版本一直有條不紊的在更新。
Java 8 引入了重量級(jí)的 Lambda 表達(dá)式、函數(shù)式編程、Stream 流等等。馬上下一個(gè)長(zhǎng)期支持的版本 Java 17 在 9 月份就要推出了。雖然大多數(shù)線(xiàn)上的項(xiàng)目都還停留在 Java 8 這個(gè)成熟穩(wěn)定的版本,但對(duì)于新版本,我個(gè)人還是非常期待的,有新版本的推出,就意味著 Java 的生命力很旺盛。
如果一門(mén)編程語(yǔ)言一直停留在某一個(gè)版本,不積極地更新和維護(hù),那么很快就會(huì)消失在人們的視野中。
第四,Java 的學(xué)習(xí)資料豐富,只有你想不到,沒(méi)有你找不到的。
無(wú)論是開(kāi)源項(xiàng)目,還是在線(xiàn)教程,以及經(jīng)典的書(shū)籍和視頻,Java 在這方面一直都是佼佼者。

------學(xué)習(xí) Java 的建議-------
認(rèn)真看哦,記得點(diǎn)贊收藏,最后能置頂,對(duì)你構(gòu)建整個(gè) Java 知識(shí)體系會(huì)很有幫助。
建議大家看看我這幅思維導(dǎo)圖,幫學(xué)弟拿到過(guò)攜程的實(shí)習(xí) Offer:

為了給大家一個(gè)更實(shí)質(zhì)性的參考,我把重點(diǎn)學(xué)習(xí)的內(nèi)容列舉了一下。

重申一下我學(xué)習(xí)計(jì)算機(jī)的觀點(diǎn),我想這會(huì)對(duì)大家快速建立起自己的知識(shí)體系很有幫助!
如果你要學(xué)習(xí)物理,我推薦你順著物理的發(fā)展史學(xué)習(xí),先學(xué)習(xí)牛頓的經(jīng)典物理,再學(xué)習(xí)熱力學(xué)、電磁學(xué),然后學(xué)習(xí)相對(duì)論、量子力學(xué)這些徹底推翻經(jīng)典物理的,最后學(xué)習(xí)電動(dòng)力學(xué)這種硬核的。
整個(gè)學(xué)習(xí)過(guò)程,是自底向上的。但是學(xué)計(jì)算機(jī),這樣行不通。
先學(xué)習(xí)電路,然后學(xué)習(xí)馮諾依曼結(jié)構(gòu),造一臺(tái)計(jì)算機(jī)?接著再學(xué)習(xí)如何用匯編寫(xiě)個(gè) mini os?接著學(xué)習(xí)如何寫(xiě)一個(gè)簡(jiǎn)易版的編譯器?最后再學(xué)習(xí)高級(jí)編程語(yǔ)言,比如說(shuō) Java、Python?
顯然這樣是行不通的!計(jì)算機(jī)的學(xué)習(xí)最好是自頂向下。
什么是頂?我想一門(mén)高級(jí)的編程語(yǔ)言就是,比如說(shuō) Java!
當(dāng)你學(xué)習(xí)到 Java 并發(fā)編程中的“原子性”、“同步”、“異步”、“進(jìn)程”、“內(nèi)存分配”這些概念的時(shí)候,你自然而然會(huì)產(chǎn)生很多疑問(wèn),然后就會(huì)去學(xué)習(xí)計(jì)算機(jī)組成原理、操作系統(tǒng),然后你的一系列問(wèn)題就會(huì)逐漸被解決。
當(dāng)你發(fā)現(xiàn),用 Java 實(shí)現(xiàn)某個(gè)業(yè)務(wù)需求時(shí),人家的算法實(shí)現(xiàn)比你快得多,你自然會(huì)好奇,為什么會(huì)這樣?然后你發(fā)現(xiàn)人家用的數(shù)據(jù)結(jié)構(gòu)和你的不同,然后你就會(huì)去學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),接著了解一些高效的算法,比如動(dòng)態(tài)規(guī)劃等。
一、Java 語(yǔ)言基礎(chǔ)
初學(xué)者可以看看二哥的《教妹學(xué)Java專(zhuān)欄》,目前已經(jīng)更新到 45 講,在線(xiàn)閱讀地址也同步更新了。

地址:https://itwanger.gitee.io/tech-sister-learn-java/#/
有一些基礎(chǔ)的的可以看看這份 Java 教程。

出自 CS-Notes 的 Java 部分。
CS-Notes:GitHub 上星標(biāo) 135k,涵蓋了技術(shù)面試必備基礎(chǔ)知識(shí)、Leetcode、計(jì)算機(jī)操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、系統(tǒng)設(shè)計(jì),以及 Java 編程語(yǔ)言。

地址:https://github.com/CyC2018/CS-Notes
如果是初學(xué)者,接下來(lái)可以去看看尚硅谷、動(dòng)力節(jié)點(diǎn)或者其他培訓(xùn)機(jī)構(gòu)在 B 站上開(kāi)源的教學(xué)視頻,去搜 Java 就對(duì)了。

(咦,看到了翁愷教授和 Schelley 小姐姐,好評(píng)必須給啊)
有一說(shuō)一,Java 的學(xué)習(xí)資源真的多,我再順帶給大家推薦一個(gè)。
JavaGuide:GitHub 上星標(biāo) 108k,一份涵蓋大部分 Java 程序員所需要掌握的核心知識(shí)。
地址:https://github.com/Snailclimb/JavaGuide
關(guān)于 Java 語(yǔ)言的基礎(chǔ)部分,Java 并發(fā)編程和 Java 虛擬機(jī)是面試中的核心,我把一些題目列出來(lái),大家可以拿來(lái)自測(cè)。

二、開(kāi)發(fā)框架
可能很多大佬對(duì)開(kāi)發(fā)框架嗤之以鼻,感覺(jué)學(xué)這個(gè)沒(méi)多大用處,提升不了你的技術(shù)功底。但是呢,如果你想做練手項(xiàng)目,沒(méi)有開(kāi)發(fā)框架的幫助,很難。
Java 之所以流行,很重要的一部分原因就是擁有 Spring 系列框架這個(gè)大殺器,包括 SSM(Spring+SpringMVC+MyBatis)、Spring Boot、Spring Cloud。
我們只是不應(yīng)該停留在只會(huì)用的層面上,要懂背后的原理。說(shuō)一千道一萬(wàn),Spring 的核心就兩個(gè)概念:AOP、IoC。
AOP(Aspect-Oriented Programming),也就是面向切面編程,能夠?qū)⒛切┡c業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任(例如事務(wù)處理、日志管理、權(quán)限控制等)封裝起來(lái),便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來(lái)的可拓展性和可維護(hù)性。
IoC(Inverse of Control),也就是控制反轉(zhuǎn),是一種設(shè)計(jì)思想,就是將原本在程序中手動(dòng)創(chuàng)建對(duì)象的控制權(quán),交由 Spring 框架來(lái)管理。
Spring 怎么學(xué)?可以到 B 站上看一下江南一點(diǎn)雨的視頻教程。

先學(xué)習(xí) SSM,再學(xué)習(xí) Spring Boot。Spring Boot 的出現(xiàn),并不意味著 Spring 和 SpringMVC 已經(jīng)過(guò)時(shí)了,從設(shè)計(jì)目的上來(lái)說(shuō),Spring Boot 只是實(shí)現(xiàn)了 Spring 的自動(dòng)裝配,降低了項(xiàng)目搭建的難度。
從技術(shù)角度來(lái)說(shuō),Spring Boot 的底層依然是 Spring 的核心機(jī)制,也就是 AOP 和 IoC,Spring Boot 只是一個(gè)承載者。在我看來(lái),學(xué)習(xí) Spring 的正確路徑應(yīng)該是 Spring -> Servlet -> Spring MVC -> Spring Boot。
順帶給大家推薦一個(gè)練手項(xiàng)目吧。
mall:GitHub 上星標(biāo) 51k,一套成熟的電商系統(tǒng),非常適合拿來(lái)作為練手項(xiàng)目。
地址:https://github.com/macrozheng/mall
三、數(shù)據(jù)庫(kù)
增刪改查,增刪改查,要想做一名只會(huì) CRUD 的程序員,數(shù)據(jù)庫(kù)這塊是逃不掉的。不過(guò),這篇就不重點(diǎn)說(shuō)了,推薦一些資源給大家。
小破站上的三個(gè)視頻。
SQL:https://www.bilibili.com/video/BV1UE41147KC
MySQL:https://www.bilibili.com/video/BV12b411K7Zu
Redis:https://www.bilibili.com/video/BV1S54y1R7SB
四本書(shū)。
《SQL 必知必會(huì)》 《高性能 MySQL》 《MySQL 技術(shù)內(nèi)幕-InnoDB 存儲(chǔ)引擎》 《Redis 深入歷險(xiǎn)核心原理與應(yīng)用實(shí)戰(zhàn)》
四、計(jì)算機(jī)組成原理
開(kāi)局一張圖。

計(jì)算機(jī)組成原理也是我最近一直在補(bǔ)的一門(mén)課,發(fā)現(xiàn)還是挺有意思的。
大家都知道,計(jì)算機(jī)是由 CPU、內(nèi)存、輸入輸出(IO)設(shè)備,這些硬件組成的,但我們程序員,往往從事的是軟件開(kāi)發(fā)的工作, 怎么才能讓軟件最大限度的壓榨硬件呢?
學(xué)了計(jì)算機(jī)組成原理,就會(huì)學(xué)到編譯原理了、操作系統(tǒng)了,這些硬核的計(jì)算機(jī)基礎(chǔ)知識(shí),然后對(duì)學(xué)習(xí) Java 的并發(fā)編程和 Java 虛擬機(jī)也會(huì)有很大的幫助。
我最近刷了一遍北京大學(xué)的《計(jì)算機(jī)組成》公開(kāi)課,講師為陸俊林博士,在線(xiàn)地址:
https://www.coursera.org/learn/jisuanji-zucheng
還有兩本書(shū),《計(jì)算機(jī)是怎樣跑起來(lái)的》和《程序是怎樣跑起來(lái)的》。
北京大學(xué)的這門(mén)公開(kāi)課一共也就 10 多個(gè)小時(shí),所以不用花太多時(shí)間就能搞明白。
兩本書(shū)都不厚,屬于濃縮精簡(jiǎn)版的,配有大量的圖文。相比較來(lái)說(shuō),我覺(jué)得《程序是怎樣跑起來(lái)的》比《計(jì)算機(jī)是怎樣跑起來(lái)的》讀起來(lái)更容易上手一些。
就說(shuō)一點(diǎn)吧。涉及到金融計(jì)算時(shí),為什么不能直接使用浮點(diǎn)數(shù)?
這背后的原因就是,計(jì)算機(jī)存儲(chǔ)的是二進(jìn)制,而二進(jìn)制是無(wú)法精確地表示浮點(diǎn)數(shù)的。但二進(jìn)制可以精確地表示整數(shù)。
所以實(shí)際的工作當(dāng)中,一般會(huì)用整數(shù)來(lái)表示金額,比如說(shuō) 1.11 元,會(huì)乘以 100,用 111 來(lái)表示,返回給用戶(hù)的時(shí)候再除以 100,免得在計(jì)算的過(guò)程中丟失精度。
我之前對(duì)接微信支付的時(shí)候,發(fā)現(xiàn)接口里面就用的整數(shù),一開(kāi)始當(dāng)然是只管用不管為什么的,后來(lái)看了《程序是怎樣跑起來(lái)的》這本書(shū)的第二章和第三章,哦,原來(lái)如此呀!
五、操作系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò)
操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中負(fù)責(zé)管理各種軟硬件資源的核心系統(tǒng)軟件,為應(yīng)用軟件運(yùn)行提供良好的環(huán)境。
計(jì)算機(jī)網(wǎng)絡(luò),幾乎是很多大廠面試必問(wèn)的內(nèi)容,什么 TCP/IP 三次握手,四次揮手,TCP 和 UDP 區(qū)別,HTTP 協(xié)議了等等。
輸入 URL 后,將發(fā)生什么?這個(gè)問(wèn)題會(huì)涉及到很多計(jì)算機(jī)網(wǎng)絡(luò)的基礎(chǔ)知識(shí)。
關(guān)于這兩門(mén)課,先給大家推薦兩個(gè)視頻教程。
清華大學(xué)的操作系統(tǒng)課,在享學(xué)課堂上可以看。

地址:https://www.xuetangx.com/course/THU08091000267/5883104?channel=learn_title
湖科大教書(shū)匠在 B 站上公開(kāi)的《計(jì)算機(jī)網(wǎng)絡(luò)微課堂》評(píng)價(jià)很高。

地址:https://www.bilibili.com/video/BV1c4411d7jb
六、設(shè)計(jì)模式
簡(jiǎn)單來(lái)分析一下代碼寫(xiě)得爛的原因哈。
其一,可能是剛?cè)腴T(mén),代碼寫(xiě)得少,如果滿(mǎn)打滿(mǎn)算只寫(xiě)過(guò)一兩千行代碼,是不可能寫(xiě)出多優(yōu)雅的代碼的。
其二,可能不懂設(shè)計(jì)模式,設(shè)計(jì)模式是軟件設(shè)計(jì)中常見(jiàn)問(wèn)題的典型解決方案,它們就像能根據(jù)需求進(jìn)行調(diào)整的預(yù)制藍(lán)圖, 可用于解決代碼中反復(fù)出現(xiàn)的設(shè)計(jì)問(wèn)題,如果不懂設(shè)計(jì)模式的話(huà),遇到這些問(wèn)題就只能抓瞎了。
這么說(shuō)吧,設(shè)計(jì)模式玩得爐火純青,寫(xiě)出的代碼就更優(yōu)雅,閱讀起來(lái)也會(huì)更加舒服,可維護(hù)性、可擴(kuò)展性就更強(qiáng)。
設(shè)計(jì)模式的學(xué)習(xí),推薦一本書(shū)——小傅哥的《重學(xué) Java 設(shè)計(jì)模式》。
一個(gè)網(wǎng)站,地址:https://refactoring.guru
七、數(shù)據(jù)結(jié)構(gòu)與算法
我有好幾個(gè)號(hào)主朋友,都是搞算法的。講真,算法崗的薪資是真的香,但崗位也是真的卷。
Java 卷吧,崗位相對(duì)較多,算法卷吧,崗位又沒(méi)有 Java 這么多,要求反而會(huì)更高。應(yīng)聘難度差不多已經(jīng)從諸神黃昏到人間地獄模式了。
我這么說(shuō),可不是勸退算法崗哈,只是說(shuō)如果你要競(jìng)聘算法崗的話(huà),就需要付出更多的努力,當(dāng)然回報(bào)也是相當(dāng)給力的。
隨著互聯(lián)網(wǎng)的發(fā)展,涌入計(jì)算機(jī)專(zhuān)業(yè)的人越來(lái)越多,卷是很自然的一件事情,所以完全沒(méi)有必要抗拒。
以前,你去投小廠的 Java 崗,可能會(huì)用 Spring 框架就可以了;現(xiàn)在呢,要求肯定提高了,考你一兩道算法題,你會(huì)不會(huì)?
在我看來(lái),卷不一定是什么壞事,多學(xué)一學(xué),對(duì)自身的成長(zhǎng)也是有好處的。
計(jì)算機(jī)科學(xué)所賦予人們的最大能量在于對(duì)常見(jiàn)算法和數(shù)據(jù)結(jié)構(gòu)的熟悉。此外,這也可以訓(xùn)練一個(gè)人對(duì)于各種問(wèn)題的解決能力,有助于其他領(lǐng)域的學(xué)習(xí)。
書(shū)籍的話(huà),推薦《算法 4》。

至于練習(xí),推薦到 LeetCode 或者牛客網(wǎng)上刷題吧,上面的問(wèn)題往往有趣且?guī)в辛己玫慕夥ê陀懻摗4送猓诟?jìng)爭(zhēng)日益激烈的軟件行業(yè),這些問(wèn)題可以幫助你評(píng)估自己應(yīng)對(duì)技術(shù)面試中常見(jiàn)問(wèn)題的能力。
我的心得就是簡(jiǎn)單粗暴:從易到難,一遍一遍地刷,盡量使用自己熟悉的編程語(yǔ)言,比如說(shuō) Java 程序員盡量用 Java 來(lái)解題,這樣刷題的幸福感也會(huì)提升很大一截。
如果不是天賦異稟,不要怕,一開(kāi)始就是抄題,先把別人的解題思路照著敲出來(lái)。刷的題多了,盡量控制一下刷題的時(shí)間,掐個(gè)點(diǎn),不能讓自己一直想、一直寫(xiě)下去,如果半個(gè)小時(shí)沒(méi)有解出來(lái),就果斷放棄,去背別人的答案,不要覺(jué)得不好意思,等到真的熟了,再去想自己的解題思路。
-----人工分割線(xiàn)-----
這個(gè)世界上只有兩種語(yǔ)言,一種是經(jīng)常被罵的,一種是從來(lái)沒(méi)有人用的——來(lái)自 C++ 之父。

Java,顯然是經(jīng)常被罵的那一種。這里的罵顯然不是一個(gè)貶義詞,而是一個(gè)褒義詞。
有一個(gè)很有意思的數(shù)據(jù),Reddit(相當(dāng)于國(guó)外版貼吧)上討論最多的主題是:現(xiàn)在學(xué)習(xí) Java 語(yǔ)言是一個(gè)好的選擇嗎?(Is Java a good language to learn today?)

這意味著什么?
意味著 Java YYDS!學(xué) Java 永遠(yuǎn)都不晚,要么你已經(jīng)開(kāi)始了,要么現(xiàn)在開(kāi)始。
用一張圖了概括下 Java 吧。

當(dāng)然了,Java 后端開(kāi)發(fā)崗這條道路并不好走,不僅要學(xué)習(xí)很多新技術(shù)、新框架,還要及時(shí)補(bǔ)充必要的計(jì)算機(jī)基礎(chǔ)知識(shí),底子硬的同時(shí)還要學(xué)會(huì)擁抱變化。
但不夸張的說(shuō),學(xué) Java,總能找到合適的工作崗位!
學(xué)習(xí)的過(guò)程,就好像登山一樣,大概有 80% 的人在這個(gè)過(guò)程中會(huì)掉隊(duì)。那么請(qǐng)相信我,只要目標(biāo)明確,努力加上堅(jiān)持,再加上一點(diǎn)點(diǎn)好運(yùn)氣,你就能登頂!
衷心的希望,大家能在學(xué)習(xí) Java 的這條路上快樂(lè)一些,純粹一些,少聽(tīng)少看一些那些焦慮文,什么 35 歲,什么學(xué)歷歧視,沉下心來(lái),多學(xué)習(xí)一點(diǎn)知識(shí),讓自己變強(qiáng)一點(diǎn),比什么都好!
一家之言,必然有不盡善盡美的地方,但只要能對(duì)大家的學(xué)習(xí)有些許幫助,我也就很滿(mǎn)足了!
我是二哥呀!我們下期見(jiàn)~
