Java應屆生找工作,不能單靠背面試題,更不能在簡歷中堆砌和找工作關係不大的校園實踐經歷,而是更要在面試中能證明自己的java相關商業專案經驗。其實不少應屆生Java求職者不是說沒真實Java專案經驗,而是不知道怎麼挖掘,總之當下,應屆生求職java,沒真實專案,難度會增大。
先說下不少應屆生在找Java工作時的一些認知誤區以及實際情況。
1 不是誰技術好,誰實習經驗長,誰背的面試題多,誰就能找到好工作。事實上,Java應屆生應當在簡歷上寫清楚儘量多的java商業專案經驗,這樣的簡歷才會得到更多的面試機會。在這個基礎上,還要在面試中證明自己足量的商業專案經驗以及掌握必要的技術,這樣就能更好地找到工作。
2 雖然說,校招java程式設計師時,未必要求應屆生有java真實的專案經驗,事實上大多數的應屆生在投簡歷和麵試階段,都只能證明自己的學習專案經驗,但如果應屆生求職者能證明自己的商業專案經驗,一定能產生代差優勢。
3 這點其實說得有些悲觀,java應屆生,如果學歷是本科,學校是一本,剛畢業就進大廠的機會就能多些。如果學校是二本,那麼進大廠不是說沒可能,但可能性會大大降低。至於大專應屆生,找工作的目標一般是僅限於小公司。
4 不少應屆生朋友會在簡歷上,通過學校的課程,學習成績,畢業設計專案或自學階段的專案來證明自己的實力,但是面試官,尤其是好公司的面試官,在挑簡歷時首先看學校是不是一本或名校,然後再看商業專案經驗。
所以可以這樣說,如果學校一般,甚至學歷是大專,如果只簡歷上寫熟悉的技術,以及學過的課程,不展現商業專案的實習能力,簡歷過篩選這得靠運氣,過面試也得靠海投。而不少211,985院校的java應屆生,可能單靠學校和學歷,就能超越不少一般學校的求職者。
在下文裡,本人不想羅列一些Java面試八股文,因為這些哪怕背熟了意義也不大,就會從簡歷和麵試這兩個方面,講講java應屆生的求職技巧。甚至,如果臨近畢業,自己java技能感覺不熟,本人還給出了在短時間內彌補技能和麵試說辭的技巧。
先說下,Java應屆生找工作的兩個要點是,第一能證明自己有半年(甚至更長)的實習經驗,第二能證明自己至少能用spring boot開發專案。
如果當下感覺自己spring boot技術不熟,千萬別直接背八股文,也別輕易去github上去下載一個java專案來跑,更也別貿然去報個班,而是可以直接通過自學,先學會spring boot+資料庫做增刪改查業務的技能。這塊要達到什麼樣的效果呢?
1 能建立一個spring boot專案,資料庫可以用mysql,但其中建一個表就行。在spring boot專案裡,需要寫控制器層,service層和repo層程式碼,實現用spring boot框架實現增刪改查的操作,當然在其中包含的必要的技術,比如註解或java語法,這些得掌握。
2 java核心語法層面,別系統學,就針對spring boot做增刪改查業務的點,用到什麼學什麼。比如用到了集合,例外處理或類,基本上就遇到什麼學什麼。這好比是通過看英文文章來熟悉常用單詞,這比單純系統背單詞,效果要好太多。
3 別全面去學分散式元件或spring cloud微服務技術,當然這塊如果掌握最好,如果當下不掌握,在校階段去學這些比較值錢的技術,未必能學好,而且在面試中也未必能證明自己在專案裡用過。
其實上文給出的學習要求是比較低的,可能會有不少應屆生朋友質疑,學太簡單了未必能找到工會作。但本人更想說的是,第一,在專案裡會用技術和在面試中證明自己會用技術,這是兩回事,後者的難度是遠小於前者的。第二,應屆生在學習階段,由於沒有接觸到真實專案,所以真會做太多的無用功。同時,結合下文的描述,大家能看到,其實學到上述這個程度,真能去找工作。
下面再說下應屆生該如何寫簡歷,其中的要點剛已經說了,儘量寫上足夠多的商業專案經驗。這裡需要額外說下,如果在簡歷中寫課程成績之類的,這其實很虛,如果寫學習專案或畢業設計專案,這塊意義也不大,但如果有程式設計方面的獲獎經驗或其它加分項,這倒可以寫上。
商業專案是指,真正在實習公司裡做過的專案,或者是用於掙錢的專案。其中包含的關鍵要素是公司或掙錢。商業專案該怎麼寫?
1 寫上時間範圍,這個專案所在的公司,以及專案名稱,如果不是在公司裡做的,寫上能證明是商業專案的文字。同時寫一些你做過的業務模組。
比如是,2022年2月到2022年10月,在上海xx公司實習,做了報銷管理系統。本人做的是業務報銷和資訊錄入模組。
再如,2022年2月到2022年10月,本人是幫教研室老師做了一個政府資訊管理系統,這個專案是來自xx渠道,這個專案是掙錢的,本人拿到了xx收益。本人做的是資訊錄入和關鍵字查詢等模組。
2 寫用到的技術,技術不求多,因為不是靠技術來證明專案是商業專案。
比如是,用到了spring boot,jpa,mysql,logback,redis等。
3 這點很關鍵,要寫些商業專案區別於學習專案的點,這些點最好還是你參與過或你知道。
比如是,這個專案裡,本人是用junit做測試,用logback寫紀錄檔,用jenkins部署,參與過部署到linux上的工作,同時本人還看過線上紀錄檔,排查過業務問題。
如果這個專案是能看得到摸得著的專案,比如是web專案或app專案,直接寫到簡歷上,如果不是,那麼可以寫,這是個公司內部專案,對方客戶已經上線。注意,商業專案會上線,學習專案一般沒這個過程。
4 如果有分散式微服務方面的亮點可以加上,但應屆生如果寫明瞭商業專案,哪怕只用到spring boot增刪改查技術,這比學習專案要強太多。
比如可以寫,這個專案裡,本人用到了redis做快取,用kafka做訊息中介軟體,解決過JVM問題。
從上文的描述裡大家能看到,在簡歷中是通過多個方面來證明這是商業專案,但是別擴充套件寫功能,別把簡歷這部分的專案描述寫成是專案使用說明書,因為面試官不關心這個。
有些話本人不想說得太直接,不過,在面試中通過真實專案說出來的spring boot增刪改查技術,其實效果和上文提到的,spring boot+單表的增刪改查技術,其實兩者是差不多的。求職者一方面需要說明其中包含的spring boot的處理流程,無非是從控制器到service到repo再到資料表,另一方面求職需要說明其中包含的註解。
至於前端技術,比如vue.js或android框架,當然熟悉最好,不熟悉的話,應屆生面試時就一句話,「本人在這個專案裡只做後端」,這就可以了,因為能有商業後端專案經驗的應屆生真不多。
簡歷上如果包含半年等的商業專案經驗,其實真能爭取到不少面試機會了,下面再說說應屆生朋友該如何準備Java面試。
應屆生朋友應該是通過介紹專案,來證明商業專案的真實性。由於商業專案是用於掙錢的,而且商業專案正是因為要從客戶那邊收錢,所以其在確定需求,開發,測試,部署和問題排查等方面,和學習專案存在很大的差異。Java應屆生朋友,不僅應該從技術層面,更應該從專案開發的諸多細節,來證明自己做過商業專案。
先可以說下真實專案的敏捷開發流程和常用的專案管理工具。
學習專案一般是從零跑通一個專案,只要能從前端發請求看到預期的效果,這個專案就算成了,但真實的專案一般會採用敏捷開發模式,哪怕是有些公司的田園敏捷開發模式,一般也是採用「迭代」開發的流程。
比如一個專案從開始做,到真實完成,假設需要半年,包含大概50個功能點,那麼就會把這些功能點,均攤到6個開發週期,每個週期大概是一個月,這樣每個月釋出一次,把本月需要完成的功能點和本月修改掉的bug一起釋出上線。
具體的,比如一個月有4周,會在第一週的前半周,和產品方或客戶方談好需求,一般這是專案經理主導做的,談好以後分配任務給諸多程式設計師,分配任務時一般用jira來記錄,當然如果發現bug了,也會用jira來記錄bug。
開發前,一般會基於git的主分支(master或dev或current)上建立一個新分支,比如202210dev分支,諸多程式設計師在這個分支上開發,然後約定個開發結束時間,這樣到了這個月的第三週結束後,這個開發分支上就包含了本次釋出所需要的的程式碼,然後這個釋出版本就會凍結住,凍結的意思是,釋出的版本需要穩定,不能隨便再向裡面提交併合併程式碼,在此基礎上測試人員就開始測試。
一旦測試人員測出問題,專案經理會做個評估,如果不影響本次釋出,就會在下個週期裡修改掉,如果影響很大,那麼需要走「解封」流程,解開本次已經凍結住的git分支,修改後再凍結住。
這樣到了本次迭代週期的釋出日,一般是業務量比較少的時間點,比如週末凌晨,運維人員會把從git上拉下待發布的分支,用maven或各種工具打成jar包,然後通過jenkins工具,或乾脆手動複製貼上,放到linux環境上,再用java -jar命令啟動,啟動後開發和測試人員發現沒問題後,本次釋出就算成功,然後再開始下個為期一個月的開發週期,這樣一直到本專案全部完成。
所以求職者如果要證明自己的專案是真實專案,可以從如下若干個角度來準備說辭。
1 我們專案是用敏捷開發模式,然後大致敘述下開發週期,同時加一句,我們專案組,會每天開會討論進度,如果有阻塞性的問題,或者技術問題,得趕緊提出來。
2 我們專案組用到了git和maven來管理程式碼和依賴包,同時看些git拉分支,合併程式碼和處理衝突的細節,也可以看下用maven打包以及建立公司私有倉庫的做法。
3 我們專案是用jira來管理任務和bug,真實專案一般都用jira,所以哪怕是零基礎的,jira未必要搭建,未必要實踐,但需要了解下通過jira建立任務和建立bug的細節。
4 我接到開發任務後,一定會在開發分支,比如202210dev分支,在此基礎上再建立一個我自己用的任務分支,比如202210dev001,其中001是任務號,在此分支上開發功能點。開發好以後,我會用junit寫單元測試案例,也會用postman發請求,這個屬於程式設計師自己要做的測試,當測試通過後,再提交到202210dev001分支上。
5 這裡請注意,得說下程式碼review。我在202210dev001分支上的程式碼,得合併到202210dev這個釋出分支,合併前,專案經理會指定其它開發者review我的程式碼,如果有功能或程式碼規範的問題,我會修改掉。測試人員如果發現我做的模組有功能問題後,會給我開個bug,一般也是用jira開,我會修,當然我把修改掉bug後的程式碼合併到釋出分支前,依然需要經過code review這個過程。
6 我自己做好我的業務模組後,會用junit寫測試案例,如果junit不熟悉可以不說,但一定要說用postman發請求測試。在版本釋出的時候,我會留守在公司,遇到問題我會排查和解決。
應注意,上述提到的技術要點,哪怕對於零基礎的應屆生朋友,絕不是高不可攀,而是能通過一些簡單的專案實踐能掌握。
在商業專案裡,開發者未必是全棧都做,而是隻做後端開發,而且後端開發一定要加入很多細節。
在不少應屆生朋友做的學習專案裡,開發者其實是全包的,從前端到後端spring boot,再到建資料表,這些工作都要做。但在真實專案中,如果你的職責是後端程式碼,那麼其實是無需關注前端的。
而且在專案組裡,你其實真未必是從零開始做。比如你入職被分配到一個財務系統裡,這個系統一定是開發到一定程度了, 所以你其實是無需參與表設計的工作,也無需參與搭建前端後端框架的事。你的事情其實就是用spring boot開發業務,在上文的基礎上,你還可以用如下的說辭證明你做的是商業專案,而不是學習專案。
1 我只負責用後端開發,即用spring boot開發控制器,service和repo層,我這個介面是用@requestmapping來匹配前端請求,前端是html頁面+vue。
2 我開發的api需要用swagger來展示介面,swagger其實不難,大家可以看下。在我開發的api裡,要用logback寫紀錄檔,以便排查線上問題。對應的,我每開發好一個介面後,要用junit來寫單元測試案例,這裡強烈建議大家學下junit,這不難,而且瞭解一下其中mock資料的動作。
3 我們的環境分測試環境和生產環境,其中生產環境就是對外提供服務的,但我們的程式碼開發好以後,會部署到測試環境,測試環境也是linux。一般學習專案甚至只在windows上開發,但真實專案一般分測試和生產兩個環境。
4 我開發的時候,如果需要其它組提供介面,比如支付系統裡要呼叫對賬模組的api,那麼我會和其它組的人溝通,對應地,對方組開發好以後,會用swagger來展示介面。這裡你可以展示在專案開發中必不可少的溝通技能,相比之下在學習專案,一定沒這個流程。
上述說辭對應屆生朋友來說絕非難點,但是很多應屆生是忽視的,所以如果應屆生朋友用些時間學習並練習一下說辭,絕對能很好地證明自己做過商業專案。
在真實專案裡,一定會遇到線上問題,你可以說下排查分析線上問題的細節。
這塊大家可以說,收到告警資訊後,可以通過vi命令,去觀察linux上的系統紀錄檔,或者甚至可以直接從linux上把程式碼拉到windows,再用記事本來開啟。或者是用postman發請求遇到問題,也直接去看紀錄檔。應屆生朋友一般不會處理太難的問題,所以可以說解決過因引數不對導致的問題。
比如是業務問題,是引數不對,那麼能根據紀錄檔上的告警資訊,定位到具體的類和程式碼行,然後解決。再如,在紀錄檔裡看到是空指標,然後也是定位到具體的類和具體的行,然後解決。
如果應屆生能通過準備紀錄檔方面的說辭,證明自己排查過線上問題,那麼也能很好地證明自己的商業專案經驗。
在準備好上述商業專案的說辭後,應屆生朋友背些java八股文倒也不是不可以,不過一方面,java八股文資料太多,另一方面,如果在說好專案和相關的技術後,有些面試官問的八股文就會簡單很多。所以這塊八股文方面,本人不做展開。
但是與其被動背題等面試官來問,更可以準備說辭然後面試時主動說。這塊怎麼做呢?可以先通過如下兩篇文章掌握基本的java核心或資料庫方面的亮點,這塊應屆生應該也能掌握。
https://zhuanlan.zhihu.com/p/617063567
https://zhuanlan.zhihu.com/p/617816413
隨後在你介紹好真實專案以後,校招面試官大概率會問比較基礎的問題,比如集合,例外處理或資料庫索引等。被問及時,你要主動多說,比如問及finally和final的差別時,你說好以後,再說一句,我們專案做例外處理時就用finally,而且我們專案處理異常有一定的規範,規範點上文已經提到。
或者被問及,你們專案用什麼資料庫,怎麼連資料庫,你可以說,用mybatis連資料庫,同時再說,我還知道索引和事務,然後展開說。
這樣的話,你在展示商業經驗後,外帶通過這些準備好的說辭,一定是有算對無算,哪怕你真實沒做過專案,哪怕你其實除了準備過的點以外對java很不熟,那麼你過面試也不是不可能。
所以應屆生朋友在找工作時,絕對應該是優先展示商業專案經驗,外帶通過積累亮點素材和主動引導。事實上,本人最近一直在幫一些應屆生朋友做入職輔導,用的就是上述的一些經驗。
這裡容本人自誇一下,很多找本人的應屆生之前是海投簡歷但很難收到面試機會,更別論去面試了,但經過本人輔導後至少能拿到面試機會,而且基本上能找到工作,後來他們甚至得考慮,自己能力一般,入職後如何過試用期。
其實應該這樣說,應屆生朋友如果能找到java工作,那麼就能拿到當地比較普遍的薪資,這看似是正確的廢話,但更可以這樣理解。
1 比如在上海,23年對java應屆生的行情是8k到12k左右,所以本科應屆生不論Java技術掌握怎麼樣,只要能過Java面試,就能拿到這個薪資。
2 但如果應屆生Java能力一般,無法過面試,那麼哪怕是降價要5k薪資,對方公司也不會錄用。
3 還是這句話,java應屆生能拿多少薪資,和本身所掌握的java技術關係不大,是由學校,學歷,能證明出的java真實專案的時長以及面試時能展示的java技能決定的,說穿了一方面看學校,另一方面看面試。所以不少應屆生朋友希望通過多學技術從而拿到高薪,這不大現實,畢竟學技術是一方面,展示真實專案經驗是另一方面,而面試的表現則再是一個方面。
4 應屆生朋友如果只背八股文,只去看技術,不去準備面試技巧,哪怕找到工作,薪資估計也會被低估,甚至還很難找到工作。