應屆生朋友或Java程式設計師在找Java方面的工作時,一定會需要準備Java專案經驗,但事實上不少求職者,是沒有專案經驗,或者只具有開源社群等的學習專案經驗,這樣的話,就很有可能在面試時無法有效地證明自己在Java方面的能力。
其實對一些有真實java開發經驗的程式設計師也存在類似問題,比如他們在日常工作中只是做增刪改查的活,而所應聘崗位需要具備分散式元件等高階技能,那麼怎麼通過專案來證明相關技能的實踐技能呢?本文就將圍繞Java面試,講述準備專案經驗的問題。
第一,混淆商業專案和學習專案。
面試官關心的,只是商業專案經驗。有些公司在招聘時,還有java方面要3年經驗等條件,此時如果無法證明足量的商業專案經驗,不過面試的可能性很大。
商業專案是指用來掙錢的專案,比如在軟體公司裡做的,或者跟朋友一起創業做的專案,或者是自己兼職幫人做的專案。與之對應的是學習專案,比如課程設計畢業設計專案,或者自己從github上拿下來跑通一個專案,當然培訓班給的專案也只能算學習專案。
有些應屆生朋友,或者工作幾年想轉行的朋友,在簡歷上寫了多個學習專案,這樣的簡歷甚至沒面試機會。
第二,需要通過商業專案展示技術和亮點,而不是業務。
很多求職者在面試中,會大談特談專案的業務邏輯,比如會詳細介紹流程,這些面試官不關心,因為沒指望求職者入職後做同樣的專案。
面試股而是希望通過專案,確認求職者是怎麼用spring boot和分散式等技術,以及其他資深技術。
第三,認為一定要執行通一個專案,才能當成是自己的專案。
這種說法存在兩個問題,第一,執行通的專案只能算學習專案,面試時不能算,應當儘量把這種專案挖掘成商業專案。第二面試時一定不會要求當場演示專案,求職者只需通過專案場景證明自己熟練使用相關技術即可。
第四,除了本專案用到的技術外,面試時還能把值錢技術嫁接到當前專案。
比如某人雖然有3年java開發經驗,由於在小公司,所以只用到了spring boot技術,而下份工作想應聘java高階開發,面試時需要準備分散式元件等技術。
此時大多數求職者的做法是,結合專案說spring boot,外帶通過背八股文來證明分散式元件的能力。但這樣做就割裂了理論和應用,從而無法證明相關元件的專案實踐經驗,這樣的話,面試時分散式元件這塊是無法達標的。
正確的做法是,專案需求不變,比如原來做的是倉庫管理系統不變,同時去學redis,dubbo等技術,然後找個專案需求來證明自己用相關技術,甚至還可以以此來證明自己解決過實際問題。
這種準備專案經驗的做法跨級提升時,比如初級升高階,高階升架構時,尤為重要,很多人其實就因為這點沒做好而無法升級。
也就是說,在面試時向面試官有效展示專案經驗,這和真實的專案開發是兩個方向,如果混為一談,那麼只能以當前技能去參加面試,但面試時更可以通過如下的準備要點,展示出高於當前專案開發能力的水平。
下面就講一下,如何在面試中充分利用專案,全面展示自己的能力。
要點1 儘量挖掘商業專案經驗。
比如應屆生可以通過挖掘真實專案經驗,在簡歷上把專案寫成是實習專案,或者是幫老師乾的真實專案。
如果是轉行,之前沒有在軟體公司裡幹過,那麼如果之前有和朋友一起創業做過java專案,或者自己幹過兼職,做過類似外包的java專案,那麼需要直接在簡歷裡體現出這點,從而讓面試官確認你這是商業專案。
具體好辦,就在簡歷上額外說明下,這個專案是幫哪家公司做的,做了多久,同時別寫電商這種看上去就是學習的專案。專案名可以寫小些,比如是在小公司裡做的維護專案,比如超市管理系統,總之體現出這個專案能掙錢即可。
要點2 優先準備能證明是商業專案的說辭。
我在面試時發現,不少求職者大談特談nacos,redis等元件在專案裡的用法,但專案一問,專案是從github上找的,或者是培訓班裡做的,那麼這個專案就會被認為是學習專案,皮之不存毛將焉附,學習專案上附帶的技術,也不能被當成真正在專案裡用到的技術。
更何況,比如某個職位需要2年java開發經驗,到後來你的專案被當成學習專案,那麼可能「專案開發年限」這個硬指標都達不到,後面就無需再面試了。這塊要準備?
專案是在什麼公司裡做的,因為公司裡做的一定的商業專案。
專案組有多少人,幾個開發幾個測試?你做個哪些模組?資料表用到哪些?這些是做了商業專案才能知道的細節。
專案用到敏捷管理模式,用到git和maven等管理工具,這些工具學習專案未必會用。
專案如何打包部署到linux上?除了開發以外,測試是怎麼做的?而測試和部署等要素學習專案是不具備了。
當然,同時要準備專案裡用到的技術,比如redis,mysql,spring boot等。
這裡切記,尤其是應屆生和中途轉行的求職者,一定要優先準備上述說辭,先在面試中把專案證明成商業專案,後面再講技術講亮點,而不能靠說專案業務來證明這是商業專案,再說一遍,面試官對之前專案的業務不關心,一定是得通過上文提到的各種細節來證明是商業專案。
要點3 再結合專案說技術,優先準備基本面技術。
其實要證明是商業專案這不難,準備好以後,這些話可能1,2分鐘就能說好,在此基礎上再展示自己在專案裡用到的技術,原因很簡單,只有在專案裡用到的技術才能算有實踐經驗。
這裡準備技術時,優先要準備基本面,即用spring boot做增刪改查的技能,再具體點講,可以通過專案裡的一個業務,比如商品查詢,說下spring boot+jpa的一個流程。
這裡說得極端一點,如果某應屆生事實上沒有任何商業專案經驗,但跑通一個spring boot的流程,同時包裝出一個商業專案。此時只要商業專案的細節能說清楚,也能結合一個流程講清楚spring boot開發,甚至都不要跑通某個spring boot專案,這照樣能證明自己的商業專案開發經驗。
當然這種做法不提倡,但反過來講,某人雖然跑通某個github上找到的spring boot專案,也理解了其中相關技術,但忽視學習專案和商業專案的差別,那麼留個面試官的印象只能是做過學習專案,沒商業專案的經驗,這樣過面試的難度甚至會高於前者包裝簡歷的求職者。
要點4 為每個值錢技術,找個專案業務的落腳點。
在準備好商業方面的相關說辭後,需要用其中的需求點和業務點來說明技術的使用情況,這裡的值錢技術包括用索引或快取進行資料庫調優,JVM方面的OOM問題排查,用dubbo,kafka等元件解決高並行問題,或者是限流熔斷等高並行措施。
這方面怎麼準備呢?以redis快取為例,哪怕你專案裡沒用過Redis,也可以為redis找個業務落腳點,比如查詢庫存資訊太頻繁影響效能,所以用redis快取。然後第一層說業務,即用redis裡的list等資料結構快取庫存資訊,第二層說用法,你專案裡怎麼配redis,用到哪些api,第三層說解決過的問題,即解決過redis快取穿透等問題,如果可以,再準備些redis叢集和底層資料結構等說辭。
類似的,面試前可以準備的java方面的亮點太多,分散式元件,微服務,雲開發等都可以準備。甚至你都可以找個人家分析排查解決的問題,比如是OOM問題的經歷,然後掛靠在你的業務專案上,把人家的業務遷移到你專案中,這樣也能展示你的能力。
當然這裡要注意,當你說好相關技術,比如redis後,面試官一定會問Redis本身的問題,比如底層資料結構等,這方面你就可以通過背redis等方面的八股文來準備這方面的細節問題。
要點5 如果可以,準備些專案部署或運維方面的說辭。
這塊包括,如何用maven打spring boot包,然後部署到linux再啟動的流程,也包括如何在linux上搭建mysql和redis叢集,以及搭建nginx ,redis或dubbo等分散式元件或叢集的經驗。
這塊是加分項,但這部分的部署和運維方面的技能,甚至去面試架構師都能用到,更何況僅僅去面試java高階開發或初級開發。
而且,應屆生或轉行做java的程式設計師,就用「用Maven打包spring boot專案」和「到linux上部署執行spring boot專案」的說辭,能很好地證明自己的專案是商業專案,因為學習專案不會做這些。
上述準備java專案的動作難嗎?不難。
1 沒有要求執行通java專案,僅僅要求掌握spring boot開發流程,或相關技術的使用技巧。
2 準備商業專案的細節,這方面想周全就行,未必要費很多時間,可能頂多用2,3天參詳就行了。
3 歸納總結值錢技術,併為相關值錢技術準備個業務落腳點,這塊可能就是針對的點多些,但每個技術或解決過的問題準備起來,可以參考現有資料或人家的解決方法。
4 準備好了,頂多再通過若干場面試檢驗說辭即可,當然儘量去參加小公司的面試去檢驗說辭。
如果按本文說給出的方法準備,能得到哪些收益呢?
1 能證明是商業專案,從而至少能得到面試機會,相反如果簡歷上只列出學習專案或乾脆不列專案,估計連面試的機會都沒。
2 其實面試中大多數求職者只是結合專案說技術,但你不僅能結合專案說技術,而且還能全面展示亮點和解決過的問題,雖然你真正的專案開發經驗可能未必比人家強,但你在面試中的表現一定優於人家。
3 能結合專案證明分散式元件或微服務元件等值錢技術的專案開發經驗,從而能有效地實現職級跨越,比如能高效從初級開發升級到高階開發,高效從高階開發升級到架構。
但說到底,上述準備要點由於是直接面向面試,所以拋棄了很多無效動作,比如去調通專案,去準備專案業務方面的說辭,所以操作起來反而比較高效,可能整個準備流程頂多需要2個月,甚至更短,也就是說,本文多少能幫助到各位想找工作的Java程式設計師朋友。
最後祝廣大程式設計師朋友都能找到心儀的工作,同時在技能和薪資方面實現雙豐收,也請大家多多點讚我的文章。