如何準(zhǔn)備大廠面試?如何變的更強(qiáng)?我咨詢了身邊的技術(shù)專家之后終于得到答案!
咳咳咳!我也當(dāng)了一回標(biāo)題黨,畢竟為了寫好這篇文章內(nèi)容,我自己前前后后花了一周的時(shí)間來總結(jié)完善,當(dāng)然希望被更多人看到。
文章內(nèi)容適用于每一個學(xué)習(xí) Java 的朋友!我覺得這篇文章的很多東西也是我自己寫給自己看的,比如從大廠招聘要求中我們能看到哪些重要的能力,我們該朝什么方向努力?
共勉!
下面的文章的部分內(nèi)容在我早期文章中出現(xiàn)過,老讀者應(yīng)該一眼就可以看出來了。廢話不多說,開始正文!
我覺得每一個技術(shù)人的夢想大概就是能夠找一份大廠的 offer,我覺得這很正常,這并不是我們的飯后談資而是每個技術(shù)人的追求。像阿里、騰訊、美團(tuán)、字節(jié)跳動、京東等等大廠的技術(shù)氛圍還是要明顯優(yōu)于一些創(chuàng)業(yè)型公司 / 小公司,如果說能夠在這樣的公司鍛煉幾年,相信對自己能力的提升還是非常大的。
當(dāng)然,很多創(chuàng)業(yè)公司的鍛煉也很大,不過大部分都是 CRUD 的工作,你甚至還要同時(shí)去寫前端。剛畢業(yè)的時(shí)候做 CRUD 的工作沒什么,如果一直這樣做下去就有問題了。
不論是筆試還是面試都是有章可循的,但是,一定要不要想著如何去應(yīng)付面試,糊弄面試官,這樣做終究是欺騙自己。這篇文章的目的也主要想讓大家知道自己應(yīng)該從哪些方向去準(zhǔn)備面試,有哪些方向可以提高自己的能力。
網(wǎng)上已經(jīng)有很多面經(jīng)了,但是我認(rèn)為網(wǎng)上的各種面經(jīng)僅僅只能作為參考,你的實(shí)際面試與之還是有一些區(qū)別的。另外如果要在網(wǎng)上看別人的面經(jīng)的話,建議即要看別人成功的案例也要適當(dāng)看看別人失敗的案例??疵娼?jīng)沒問題,不論是你要找工作還是平時(shí)學(xué)習(xí),這都是一種比較好地檢驗(yàn)自己水平的一種方式。但是,一定不要過分寄希望于各種面經(jīng),試著去提高自己的綜合能力。
“ 80% 的 offer 掌握在 20% 的人手 ” 中這句話也不是不無道理的。決定你面試能否成功的因素中實(shí)力固然占有很大一部分比例,但是如果你的心態(tài)或者說運(yùn)氣不好的話,依然無法拿到滿意的 offer。
運(yùn)氣暫且不談,就拿心態(tài)來說,千萬不要因?yàn)槊嬖囀《鴼怵H或者說懷疑自己的能力,面試失敗之后多總結(jié)一下失敗的原因,后面你就會發(fā)現(xiàn)自己會越來越強(qiáng)大。
另外,我只是在這里分享一下自己對于 “ 如何備戰(zhàn)大廠面試/如何提高自己能力 ” 的一個看法,以下大部分理論/言辭都經(jīng)過過反復(fù)推敲驗(yàn)證,如果有不對的地方或者和你想法不同的地方,請您敬請雅正、不舍賜教。
從招聘要求看大廠青睞什么樣的人?
先從已經(jīng)有兩年左右開發(fā)經(jīng)驗(yàn)的工程師角度來看: 我們來看一下阿里官網(wǎng)支付寶Java高級開發(fā)工程師的招聘要求,從下面的招聘信息可以看出,除去Java基礎(chǔ)/集合/多線程這些,這些能力格外重要:
- 底層知識比如jvm :不只是懂理論更會實(shí)操;
- 面向?qū)ο缶幊棠芰? :我理解這個不僅包括“面向?qū)ο缶幊?rdquo;,還有SOLID軟件設(shè)計(jì)原則,相關(guān)閱讀:《寫了這么多年代碼,你真的了解SOLID嗎?》(我司大佬的一篇文章)
- 框架能力 :不只是使用那么簡單,更要搞懂原理和機(jī)制!搞懂原理和機(jī)制的基礎(chǔ)是要學(xué)會看源碼。
- 分布式系統(tǒng)開發(fā)能力 :緩存、消息隊(duì)列等等都要掌握,關(guān)鍵是還要能使用這些技術(shù)解決實(shí)際問題而不是紙上談兵。
- 不錯的sense :喜歡和嘗試新技術(shù)、追求編寫優(yōu)雅的代碼等等。
再從應(yīng)屆生的角度來看: 我們還是看阿里巴巴的官網(wǎng)相關(guān)應(yīng)屆生 Java 工程師招聘崗位的相關(guān)要求。
結(jié)合阿里、騰訊等大廠招聘官網(wǎng)對于 Java 后端方向/后端方向的應(yīng)屆實(shí)習(xí)生的要求下面幾點(diǎn)也提升你的個人競爭力:
- 參加過競賽( 含金量超高的是 ACM );
- 對數(shù)據(jù)結(jié)構(gòu)與算法非常熟練;
- 參與過實(shí)際項(xiàng)目(比如學(xué)校網(wǎng)站)
- 熟悉 Python、Shell、Perl 其中一門腳本語言;
- 熟悉如何優(yōu)化 Java 代碼、有寫出質(zhì)量更高的代碼的意識;
- 熟悉 SOA 分布式相關(guān)的知識尤其是理論知識;
- 熟悉自己所用框架的底層知識比如 Spring;
- 有高并發(fā)開發(fā)經(jīng)驗(yàn);
- 有大數(shù)據(jù)開發(fā)經(jīng)驗(yàn)等等。
從來到大學(xué)之后,我的好多閱歷非常深的老師經(jīng)常就會告誡我們:“ 一定要有一門自己的特長,不管是技術(shù)還好還是其他能力 ” 。我覺得這句話真的非常有道理!
剛剛也提到了要有一門特長,所以在這里再強(qiáng)調(diào)一點(diǎn):公司不需要你什么都會,但是在某一方面你一定要有過于常人的優(yōu)點(diǎn)。換言之就是我們不需要去掌握每一門技術(shù)(你也沒精力去掌握這么多技術(shù)),而是需要去深入研究某一門技術(shù),對于其他技術(shù)我們可以簡單了解一下。
技術(shù)面可能會問哪些方向的問題?
你準(zhǔn)備面試的話首先要搞清技術(shù)面可能會被問哪些方向的問題吧!
我直接用思維導(dǎo)圖的形式展示出來吧!這樣更加直觀形象一點(diǎn),細(xì)化到某個知識點(diǎn)的話這張圖沒有介紹到,留個懸念,下篇文章會詳細(xì)介紹。
上面思維導(dǎo)圖大概涵蓋了技術(shù)面試可能會設(shè)計(jì)的技術(shù),但是你不需要把上面的每一個知識點(diǎn)都搞得很熟悉,要分清主次,對于自己不熟悉的技術(shù)不要寫在簡歷上,對于自己簡單了解的技術(shù)不要說自己熟練掌握!
如何獲取大廠面試機(jī)會?
不論是對于社招還是校招,我們都有下面幾種方式來獲得面試機(jī)會:
- 各種招聘網(wǎng)站上投遞簡歷或者關(guān)注大廠官網(wǎng),隨時(shí)投遞簡歷(走流程的網(wǎng)申)
- 找到師兄師姐/認(rèn)識的人,幫忙內(nèi)推(能夠讓你避開網(wǎng)申簡歷篩選,還是挺不錯的,不過也還是需要你的簡歷夠棒);
- 博客發(fā)文被看中 /Github優(yōu)秀開源項(xiàng)目作者,大廠內(nèi)部人員邀請你面試;
如何做自我介紹?
自我介紹一般是你和面試官的第一次面對面正式交流,換位思考一下,假如你是面試官的話,你想聽到被你面試的人如何介紹自己呢?一定不是客套地說說自己喜歡編程、平時(shí)花了很多時(shí)間來學(xué)習(xí)、自己的興趣愛好是打球吧?
我覺得一個好的自我介紹應(yīng)該包含這幾點(diǎn)要素:
- 用簡單的話說清楚自己主要的技術(shù)棧于擅長的領(lǐng)域;
- 把重點(diǎn)放在自己在行的地方以及自己的優(yōu)勢之處;
- 重點(diǎn)突出自己的能力比如自己的定位的bug的能力特別厲害;
從社招和校招兩個角度來舉例子吧!我下面的兩個例子僅供參考,自我介紹并不需要死記硬背,記住要說的要點(diǎn),面試的時(shí)候根據(jù)公司的情況臨場發(fā)揮也是沒問題的。另外,網(wǎng)上一般建議的是準(zhǔn)備好兩份自我介紹:一份對hr說的,主要講能突出自己的經(jīng)歷,會的編程技術(shù)一語帶過;另一份對技術(shù)面試官說的,主要講自己會的技術(shù)細(xì)節(jié)和項(xiàng)目經(jīng)驗(yàn)。
社招:
面試官,您好!我叫獨(dú)秀兒。我目前有1年半的工作經(jīng)驗(yàn),熟練使用Spring、MyBatis等框架、了解 Java 底層原理比如JVM調(diào)優(yōu)并且有著豐富的分布式開發(fā)經(jīng)驗(yàn)。離開上一家公司是因?yàn)槲蚁朐诩夹g(shù)上得到更多的鍛煉。在上一個公司我參與了一個分布式電子交易系統(tǒng)的開發(fā),負(fù)責(zé)搭建了整個項(xiàng)目的基礎(chǔ)架構(gòu)并且通過分庫分表解決了原始數(shù)據(jù)庫以及一些相關(guān)表過于龐大的問題,目前這個網(wǎng)站最高支持 10 萬人同時(shí)訪問。工作之余,我利用自己的業(yè)余時(shí)間寫了一個簡單的 RPC 框架,這個框架用到了Netty進(jìn)行網(wǎng)絡(luò)通信, 目前我已經(jīng)將這個項(xiàng)目開源,在 Github 上收獲了 2k的 Star! 說到業(yè)余愛好的話,我比較喜歡通過博客整理分享自己所學(xué)知識,現(xiàn)在已經(jīng)是多個博客平臺的認(rèn)證作者。生活中我是一個比較積極樂觀的人,一般會通過運(yùn)動打球的方式來放松。我一直都非常想加入貴公司,我覺得貴公司的文化和技術(shù)氛圍我都非常喜歡,期待能與你共事!
校招:
面試官,您好!我叫秀兒。大學(xué)時(shí)間我主要利用課外時(shí)間學(xué)習(xí)了 Java 以及 Spring、MyBatis等框架 。在校期間參與過一個考試系統(tǒng)的開發(fā),這個系統(tǒng)的主要用了 Spring、MyBatis 和 shiro 這三種框架。我在其中主要擔(dān)任后端開發(fā),主要負(fù)責(zé)了權(quán)限管理功能模塊的搭建。另外,我在大學(xué)的時(shí)候參加過一次軟件編程大賽,我和我的團(tuán)隊(duì)做的在線訂餐系統(tǒng)成功獲得了第二名的成績。我還利用自己的業(yè)余時(shí)間寫了一個簡單的 RPC 框架,這個框架用到了Netty進(jìn)行網(wǎng)絡(luò)通信, 目前我已經(jīng)將這個項(xiàng)目開源,在 Github 上收獲了 2k的 Star! 說到業(yè)余愛好的話,我比較喜歡通過博客整理分享自己所學(xué)知識,現(xiàn)在已經(jīng)是多個博客平臺的認(rèn)證作者。生活中我是一個比較積極樂觀的人,一般會通過運(yùn)動打球的方式來放松。我一直都非常想加入貴公司,我覺得貴公司的文化和技術(shù)氛圍我都非常喜歡,期待能與你共事!
如何介紹自己的項(xiàng)目經(jīng)歷?
如果有項(xiàng)目的話,技術(shù)面試第一步,面試官一般都是讓你自己介紹一下你的項(xiàng)目。你可以從下面幾個方向來考慮:
- 對項(xiàng)目整體設(shè)計(jì)的一個感受(面試官可能會讓你畫系統(tǒng)的架構(gòu)圖)
- 在這個項(xiàng)目中你負(fù)責(zé)了什么、做了什么、擔(dān)任了什么角色
- 從這個項(xiàng)目中你學(xué)會了那些東西,使用到了那些技術(shù),學(xué)會了那些新技術(shù)的使用
- 另外項(xiàng)目描述中,最好可以體現(xiàn)自己的綜合素質(zhì),比如你是如何協(xié)調(diào)項(xiàng)目組成員協(xié)同開發(fā)的或者在遇到某一個棘手的問題的時(shí)候你是如何解決的又或者說你在這個項(xiàng)目用了什么技術(shù)實(shí)現(xiàn)了什么功能比如:用redis做緩存提高訪問速度和并發(fā)量、使用消息隊(duì)列削峰和降流等等。
我該如何學(xué)習(xí)?
如何學(xué)習(xí)?
最最最關(guān)鍵也是對自己最最最重要的就是學(xué)習(xí)!看看別人分享的面經(jīng),看看我寫的這篇文章估計(jì)你只需要10分鐘不到。但這些東西終究是空洞的理論,最主要的還是自己平時(shí)的學(xué)習(xí)!
如何去學(xué)呢?我覺得學(xué)習(xí)每個知識點(diǎn)可以考慮這樣去入手:
- 官網(wǎng)(大概率是英文,不推薦初學(xué)者看)。
- 書籍(知識更加系統(tǒng)完全,推薦)。
- 視頻(比較容易理解,推薦,特別是初學(xué)的時(shí)候。慕課網(wǎng)和嗶哩嗶哩上面有挺多學(xué)習(xí)視頻可以看,只直接在上面搜索關(guān)鍵詞就可以了)。
- 網(wǎng)上博客(解決某一知識點(diǎn)的問題的時(shí)候可以看看)。
這里給各位一個建議,看視頻的過程中最好跟著一起練,要做筆記!!!
最好可以邊看視頻邊找一本書籍看,看視頻沒弄懂的知識點(diǎn)一定要盡快解決,如何解決?
首先百度/Google,通過搜索引擎解決不了的話就找身邊的朋友或者認(rèn)識的一些人。
學(xué)會各種框架有必要嗎?
一定要學(xué)會分配自己時(shí)間,要學(xué)的東西很多,真的很多,搞清楚哪些東西是重點(diǎn),哪些東西僅僅了解就夠了。一定不要把精力都花在了學(xué)各種框架上,算法、數(shù)據(jù)結(jié)構(gòu)還有計(jì)算機(jī)網(wǎng)絡(luò)真的很重要!
另外,學(xué)習(xí)的過程中有一個可以參考的文檔很重要,非常有助于自己的學(xué)習(xí)。我當(dāng)初弄 JavaGuide:https://github.com/Snailclimb/JavaGuide 的很大一部分目的就是因?yàn)檫@個??陀^來說,相比于博客,JavaGuide 里面的內(nèi)容因?yàn)楦嗳说膮⑴c變得更加準(zhǔn)確和完善。