面经分享:历时半个月,终于拿到了蚂蚁金服的offer!
?
在今天,我收到了螞蟻金服A級(jí)的實(shí)習(xí)錄用offer。
從開始面試到拿到口頭offer(四面技術(shù)+一面HR)戰(zhàn)線大約拉了半個(gè)月,
從拿到口頭offer到收到正式錄用郵件大概又是半個(gè)月。
思前想后,決定還是做一個(gè)整理與總結(jié)。
一方面是回顧并記錄自己的努力過程,
一方面也是希望對(duì)后來者起到一些幫助。
前方高能預(yù)警,本篇文章萬字有余,通讀可能要很久。
以下內(nèi)容普適于技術(shù)崗,非技術(shù)崗請(qǐng)部分參考。
?
目錄
如何進(jìn)行知識(shí)積累
如何把握實(shí)踐與理論的天平
我應(yīng)該如何整理筆記
怎么復(fù)習(xí)才不會(huì)忘
面試前
怎么寫出讓人眼前一亮的簡(jiǎn)歷
如何突擊面試
面試前焦慮該怎么辦
面試開始
自我介紹到底要怎么說
面試中
技術(shù)面試的時(shí)候應(yīng)該注意些什么
面試尬場(chǎng)怎么辦
如何學(xué)會(huì)埋坑
面試結(jié)束
面試官:“你有什么想問我的嗎”,該說什么?
我怎樣才能知道我是否通過了
我兩年半的技術(shù)人生
?
?
如何進(jìn)行知識(shí)積累
????在講面試技巧之前,顯然知識(shí)積累是不可或缺的。不然即使面試僥幸通過,在之后的工作中也會(huì)體驗(yàn)極差。
1
如何把握實(shí)踐與理論的天平
實(shí)踐是什么?
比如你new Object()初始化了一個(gè)對(duì)象來使用;
比如你用HashMap結(jié)構(gòu)作為容器存儲(chǔ)了一些數(shù)據(jù);
比如你拿SpringBoot搭建了一個(gè)web網(wǎng)站后臺(tái);
比如……
理論是什么?
初始化對(duì)象有什么代價(jià)?背后的底層實(shí)現(xiàn)邏輯是怎么樣的?初始化太多對(duì)象可能導(dǎo)致什么問題?為什么我經(jīng)常初始化對(duì)象,明明是空間消耗大,反而導(dǎo)致程序在運(yùn)行時(shí)間上變得緩慢?
HashMap適合什么場(chǎng)景?我現(xiàn)在這個(gè)場(chǎng)景真的是用HashMap最合適嗎?運(yùn)用的時(shí)候有沒有什么需要注意的?有時(shí)候遇到一些特殊需求,在HashMap基礎(chǔ)上可以再優(yōu)化性能嗎?
天天用SpringBoot,IOC、AOP到底是什么概念,背后怎么實(shí)現(xiàn)的?它們適用場(chǎng)景如何,我的用法是最佳實(shí)踐嗎?會(huì)不會(huì)有什么弊端,導(dǎo)致在生產(chǎn)環(huán)境出現(xiàn)問題?
……
實(shí)踐與理論的學(xué)習(xí),到底應(yīng)該側(cè)重實(shí)踐一些呢,還是側(cè)重理論一些呢?
都說實(shí)踐與理論要兩相結(jié)合,缺一不可,在我看來這是一句廢話。重點(diǎn)是如何權(quán)衡兩者,并且在不同的發(fā)展階段,兩者的側(cè)重比例是否又要發(fā)生變化呢?
在我看來,實(shí)踐決定方向,理論填補(bǔ)細(xì)節(jié)。
?
(1)首先要實(shí)踐,然后填補(bǔ)理論
程序員首先要實(shí)踐,才能夠收獲基本的技術(shù)視野和處理問題的能力,這兩者都是不可或缺的。
有了基本的視野之后,就可以根據(jù)自己學(xué)習(xí)的方向,去填補(bǔ)你的細(xì)節(jié),例如:
我學(xué)習(xí)了Java,會(huì)寫一些應(yīng)用程序了,也知道如何利用應(yīng)用服務(wù)層的Java來對(duì)數(shù)據(jù)庫層的數(shù)據(jù)做一些處理,那么接下來: 1. 對(duì)數(shù)據(jù)怎么處理會(huì)更快(這里可能就會(huì)引出多線程,然后就可能引出線程池,又引出JDK提供的線程池有什么并發(fā)問題,怎么解決,然后可能又引入并發(fā)包,一下子串出好多) 2. 各種優(yōu)化(比如初始化太多對(duì)象導(dǎo)致頻繁GC,全局變量太多導(dǎo)致占存一直很高blabla)
我學(xué)習(xí)了MySQL,會(huì)用SQL語句操作數(shù)據(jù)了,知道建索引可以加快訪問速度了,那么接下來: 1. 在SQL語句上是不是也可以做一些優(yōu)化來提升性能(比如很有名的延遲關(guān)聯(lián)) 2. 索引到底應(yīng)該怎么建才好(這就涉及到索引的很多知識(shí),比如B+樹,比如一些匹配原則例如最左適配原則等等)
這種細(xì)節(jié)的填補(bǔ)是有邏輯性的,從我上面舉的兩個(gè)例子就可以看得出來。這種邏輯性的存在會(huì)使你在學(xué)習(xí)的過程中不會(huì)感到虛浮,會(huì)發(fā)現(xiàn)這些理論都是切實(shí)有用且有價(jià)值的。
但這樣的理論學(xué)習(xí)還不夠,因?yàn)樗?strong>不系統(tǒng)。充分的發(fā)散思維使你能夠在實(shí)踐之外追求到很多理論知識(shí),但那些你發(fā)散不到的部分就接觸不到了。這個(gè)時(shí)候你就需要系統(tǒng)性的學(xué)習(xí),例如讀書。
當(dāng)你第一次學(xué)會(huì)實(shí)踐,就好像在自己的腦海中制作了一個(gè)知識(shí)星球。它里面幾乎是空白的,但是球體本身存在,幫助你去界定、區(qū)分知識(shí)——借助這個(gè)球體的框架,當(dāng)你在遇到一個(gè)新知識(shí)的時(shí)候,你會(huì)它有一個(gè)模糊的概念:這個(gè)知識(shí)到底是有用知識(shí)還是無用知識(shí),它又在哪個(gè)范疇或?qū)用胬?#xff1f;
所以借助了一開始的實(shí)踐,然后你再去邏輯地發(fā)散、或者系統(tǒng)地讀書的時(shí)候, 就不會(huì)讓新知識(shí)成為無根之萍,而是切實(shí)地進(jìn)入你的知識(shí)星球中,成為你知識(shí)架構(gòu)的一部分。
(2)理論再返回到實(shí)踐中
知識(shí)架構(gòu)建立起來了,但它沒有經(jīng)歷實(shí)踐的檢驗(yàn),就依然是不可用的。
一方面在于我們學(xué)習(xí)的理論知識(shí)可能是過時(shí)的,甚至是謬誤的;另一方面我們可能以為自己懂了但其實(shí)沒懂,這一點(diǎn)相信大家都能理解。
那么如何實(shí)踐呢?有些理論可能是很難實(shí)踐出來的,但是至少我們要對(duì)能實(shí)踐的一部分去做一下嘗試。就比如簡(jiǎn)單的JVM排查和調(diào)優(yōu),通過MySQL EXPLAIN去檢查執(zhí)行計(jì)劃并實(shí)踐優(yōu)化等等。
2
我應(yīng)該如何整理筆記
????首先要強(qiáng)調(diào)筆記是很重要的。至少我認(rèn)識(shí)的那些能夠面試進(jìn)大廠的同學(xué),每個(gè)人都會(huì)為自己做筆記。
????而至于到底應(yīng)該如何整理筆記,我認(rèn)為最重要的有兩點(diǎn):一是分門別類,二是控制粒度。
?
(1)分門別類
我們一定要能夠清晰地把我們要整理的知識(shí)模塊化,比如說JVM基礎(chǔ),我們可以這樣分模塊:
運(yùn)行時(shí)數(shù)據(jù)區(qū)
垃圾回收
類加載
JMM
JVM調(diào)優(yōu)
然后分別根據(jù)每一個(gè)小模塊,單獨(dú)整理一篇筆記。
并且在篇末,或者另開一篇筆記,專門記錄針對(duì)這個(gè)模塊的比較大而廣的問題。
例如運(yùn)行時(shí)數(shù)據(jù)區(qū),我們就可以記錄這樣一些問題:
講講JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的各個(gè)組成,是什么,有什么用
講講對(duì)象。它是如何創(chuàng)建的,里面包含一些什么信息,如何定位到對(duì)象
記錄這種大的問題,有助于我們進(jìn)行自測(cè)。不要問自己太多細(xì)小的問題,除非你切實(shí)覺得它很重要。
什么叫細(xì)小的問題呢?比如:類里靜態(tài)的基本數(shù)據(jù)類型存在方法區(qū)還是堆里?
這種問題枚舉你是枚舉不完的,它其實(shí)已經(jīng)包含在了”講講JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的各個(gè)組成,是什么,有什么用“這個(gè)問題里。
(2)控制粒度
????什么叫控制粒度?其實(shí)就是控制你筆記記錄的詳細(xì)程度。
????如果你筆記中對(duì)于知識(shí)點(diǎn)的描述非常簡(jiǎn)潔,帶來的好處是閱讀起來就會(huì)很快,壞處是可能在閱讀時(shí)導(dǎo)致你忽略掉一些本不該忽略的細(xì)節(jié),或者甚至是:”咦,我這記的是啥,我怎么看不懂了。“
????那如果記得太詳細(xì)呢?很顯然,就會(huì)導(dǎo)致閱讀起來非常繁瑣,可能達(dá)不到一個(gè)理想的迅速復(fù)習(xí)的效果。
????那到底應(yīng)該控制在一個(gè)什么程度上呢?
????我認(rèn)為一篇良好的筆記應(yīng)該滿足以下兩個(gè)條件:
這段筆記切實(shí)提到了所有應(yīng)該提到的知識(shí)點(diǎn),不需要我去聯(lián)想;
這段筆記對(duì)于這些知識(shí)點(diǎn)都有簡(jiǎn)單的描述性文字,并且能夠言簡(jiǎn)意賅,盡可能以列表列舉的形式,不要有敘述性的內(nèi)容。
tips:什么叫敘述性內(nèi)容?
舉個(gè)例子,比如下面這是一段對(duì)于垃圾回收算法里的標(biāo)記-清除算法的筆記:
標(biāo)記-清除算法:
? ?標(biāo)記出所有需要回收的對(duì)象,根據(jù)標(biāo)記統(tǒng)一回收。
? ?問題:1. 低效率
? ? ? ? 2. 產(chǎn)生大量不連續(xù)內(nèi)存碎片
帶有敘述性內(nèi)容的寫法是怎么樣的呢:
標(biāo)記-清除算法:
? ?它的基本原理是,標(biāo)記出所有需要回收的對(duì)象,然后根據(jù)標(biāo)記統(tǒng)一回收。
? ?它有兩個(gè)問題,一是在于效率比較低,二是在于可能產(chǎn)生大量不連續(xù)的內(nèi)存碎片。
非常顯然,閱讀前者的效率遠(yuǎn)高于后者。
整理筆記時(shí),我們盡可能省去不必要的鋪墊,例如”它的基本原理是“這句話就是完全不必要的。
我們也可以盡可能省去一些聯(lián)結(jié)詞,例如”首先“、”然后“、”最后“這種。以及對(duì)于一些枚舉性內(nèi)容,我們盡可能采取列表而非文字形式表達(dá),會(huì)更加直觀易懂易記。
3
怎么復(fù)習(xí)才不會(huì)忘
每天都反復(fù)復(fù)習(xí)當(dāng)然可以保證你不會(huì)忘,但會(huì)非常疲憊而且費(fèi)時(shí)。
嚴(yán)格遵守網(wǎng)上的某些號(hào)稱貼合人類記憶曲線的復(fù)習(xí)方式,堅(jiān)持起來壓力很大,最終往往也很難達(dá)到自己理想的效果。
實(shí)際上這種所謂”曲線“是有一定道理的,但是也要結(jié)合我們每個(gè)人自身的特殊情況,去找到最適合自己的一種記憶方式。
我認(rèn)為這樣一種記憶法是比較有效的:
從第一次復(fù)習(xí)并記憶的時(shí)候開始算,隔比較短的一段時(shí)間再復(fù)習(xí)并記憶一次,隔不太短的一段時(shí)間再復(fù)習(xí)一次,然后堅(jiān)持每隔較長的一段時(shí)間就復(fù)習(xí)一次。
那么這個(gè)”比較短的一段時(shí)間“、”不太短的一段時(shí)間“、“較長的一段時(shí)間”又分別是多久呢?我們可以自己來決定。但需要知道的是,我們的復(fù)習(xí)間隔時(shí)間應(yīng)該是不斷變長的,直到一個(gè)比較穩(wěn)定的值。
比如我個(gè)人的話,就喜歡第一次記憶完后,兩小時(shí)再復(fù)習(xí)一次,隔一天再復(fù)習(xí)一次,然后隔四五天復(fù)習(xí)一次,之后可能就一直是7-10天會(huì)復(fù)習(xí)一次。
無需刻意,比如我本來打算三天后復(fù)習(xí)一次,但是三天后突然有什么事耽擱了。所以我提前到前一天,或者滯后到后一天,又能怎么樣呢?記憶是量變的過程,一天兩天的偏移根本不會(huì)有什么質(zhì)變可言。
但讓記憶周期大抵符合一個(gè)慢慢變長的規(guī)律,我想是有必要的。而如果你覺得最后每隔7-10天復(fù)習(xí)一次都會(huì)壓力很大,那你也可以半個(gè)月甚至二十天才看一次。不過這樣的話,等面試要來臨的時(shí)候,你可能就難免需要簡(jiǎn)單突擊一下了。
面試前
1
怎么寫出讓人眼前一亮的簡(jiǎn)歷
????按照一般流程來說,你的簡(jiǎn)歷會(huì)先給懂一點(diǎn)技術(shù)/不懂技術(shù)的HR初審,然后再交給研發(fā)的同事過審,經(jīng)過這兩層都o(jì)k了,才會(huì)給你進(jìn)面試的流程。
????也就是說,你的簡(jiǎn)歷不僅要讓專業(yè)人士看著厲害,還要讓非專業(yè)人士看著也厲害。
????那么作為技術(shù)人員,簡(jiǎn)歷到底應(yīng)該怎么寫呢?
?
?
(1)綜述
我們不妨先概括后具體,先總體看一下簡(jiǎn)歷應(yīng)該寫一些什么東西,寫多長篇幅,排版成什么樣子,然后再分析每個(gè)模塊應(yīng)該如何去寫。
寫什么東西
一個(gè)正常的簡(jiǎn)歷應(yīng)該有如下內(nèi)容:
基本信息及聯(lián)系方式
學(xué)習(xí)經(jīng)歷
工作經(jīng)歷(或?qū)嵙?xí)經(jīng)歷)
項(xiàng)目經(jīng)歷
專業(yè)技能
自我評(píng)價(jià)(這個(gè)不一定要有,看前面篇幅)
寫多長篇幅
作為技術(shù)人員,我覺得簡(jiǎn)歷1-2頁就好,3頁未免太過冗長。
排版成什么樣子
首先格式上來說,現(xiàn)在一般都是網(wǎng)申,也就是提交電子材料,所以HTML或者PDF格式為佳。
具體排版的話,盡可能簡(jiǎn)潔明了,不要花里胡哨。技術(shù)人,又不是去做UI設(shè)計(jì),搞那么好看,人家也不會(huì)欣賞,反而覺得你不務(wù)正業(yè)。
我個(gè)人建議簡(jiǎn)歷的好看程度,達(dá)到markdown能支持的極限就可以了,不要超過markdown的能力。
(2)基本信息及聯(lián)系方式
可能會(huì)包括以下一些信息:
姓名,電話,郵箱:這幾個(gè)是必須的,不多說了。
求職意向:單獨(dú)列這條出來,我建議要寫。不然你本來做后端的,人家給你安排到測(cè)試開發(fā),你哭都來不及。
個(gè)人網(wǎng)站/博客/GitHub:如果有厲害的一定要記得寫,如果很水的話建議別寫了。
(3)學(xué)習(xí)經(jīng)歷
?
可能會(huì)包括以下一些信息:
學(xué)歷(或者畢業(yè)年份)
績點(diǎn):如果不好看,請(qǐng)不要寫,不要寫,不要寫
專業(yè):如果不是計(jì)算機(jī)相關(guān)專業(yè),請(qǐng)不要寫,不要寫,不要寫
獎(jiǎng)項(xiàng):盡可能多寫,從高到低排。先寫厲害的,最后寫不厲害的。如果沒什么拿的出手的獎(jiǎng)項(xiàng),建議干脆什么也不要寫。不要孤零零寫個(gè)什么XX大學(xué)優(yōu)秀團(tuán)員上去,還不如不寫。
(4)工作經(jīng)歷(或?qū)嵙?xí)經(jīng)歷)
這里就如實(shí)說就好,切記一定要準(zhǔn)確,包括在職時(shí)間也寫明白,一兩個(gè)月的偏差也是在給自己埋炸彈。
應(yīng)該包括以下信息:
在職時(shí)間:例如2018.2~2019.3
工作單位:如果不是大家熟知的大廠,最好附上行業(yè)
部門:這個(gè)是可選項(xiàng),不一定要寫。
如果是厲害的部門請(qǐng)記得寫,比如騰訊微信
崗位:建議具體。如果公司里崗位就叫“研發(fā)工程師”,
你可以寫成“JAVA研發(fā)工程師”或者“GO研發(fā)工程師”之類的。
(5)項(xiàng)目經(jīng)歷
這是第二重要的部分!!第一重要的部分是下面的專業(yè)能力。但這也是決定你是否能簡(jiǎn)歷過審的很重要的一部分,并且是可能導(dǎo)致面試官瘋狂追問你的來源。
一般寫2-3個(gè)項(xiàng)目經(jīng)歷比較好,相對(duì)來說,要挑最厲害的、最對(duì)口的、最近的。
那么每個(gè)項(xiàng)目經(jīng)歷中,應(yīng)該寫一些什么呢?
項(xiàng)目名稱
項(xiàng)目簡(jiǎn)介:1-2句話就好,讓別人知道你這是個(gè)什么項(xiàng)目。
比如是個(gè)后臺(tái)管理系統(tǒng)?比如是個(gè)電商平臺(tái)?之類的
個(gè)人技術(shù)工作:請(qǐng)以列表形式列舉自己的核心工作,
不要大段敘述性文字!!
?
后面是一些可選項(xiàng),不一定要寫:
技術(shù)關(guān)鍵詞:項(xiàng)目中涉及到的技術(shù)關(guān)鍵詞
項(xiàng)目中的收獲
項(xiàng)目成果:項(xiàng)目上線后有什么成果。
比如抗住了多大的QPS,比如做到了多大的規(guī)模等等。
請(qǐng)注意這兩者是有區(qū)別的,前者可能更強(qiáng)調(diào)峰值,后者是長期的穩(wěn)定性。
當(dāng)然還可以有其他的,但最好要有技術(shù)視角。
?
給一個(gè)優(yōu)秀的范例(來自敖丙大大):
?
如果覺得這個(gè)有點(diǎn)太高大上了,再看一個(gè)普通一點(diǎn)的:
(6)專業(yè)技能
專業(yè)技能方面應(yīng)該盡可能講得全面,把自己確定會(huì)的一個(gè)都不要漏掉。
但是一定要和崗位對(duì)口。比如你投個(gè)Java后臺(tái),你非得寫個(gè)攝影技能上去,反正我個(gè)人感覺不是很好。
如果你不知道怎么寫,可以看一下崗位描述。一般投遞簡(jiǎn)歷前你看到的崗位描述上都會(huì)有對(duì)于技術(shù)要求的說明,比如:
=======我們的要求=======
全日制211本科以上學(xué)歷,計(jì)算機(jī)相關(guān)專業(yè),畢業(yè)時(shí)間2020.11-2021.10
JAVA基礎(chǔ)扎實(shí),理解io、多線程、集合等基礎(chǔ)框架,對(duì)JVM原理有一定的理解
熟悉分布式、緩存、消息、搜索、推薦等技術(shù),并能合理應(yīng)用,解決實(shí)際問題
學(xué)習(xí)能力強(qiáng),對(duì)代碼質(zhì)量及系統(tǒng)性能具備精益求精的精神
良好的團(tuán)隊(duì)溝通協(xié)同能力,抗壓能力,勇于接受挑戰(zhàn)
有作品或者實(shí)習(xí)經(jīng)驗(yàn)優(yōu)先
我們可以根據(jù)崗位的要求,結(jié)合我們自身的優(yōu)勢(shì),來寫我們的專業(yè)技能。像這樣:
2
如何突擊面試
我個(gè)人覺得,突擊面試是在面試前1-10天的這個(gè)階段。
(1)筆試突擊復(fù)習(xí)
?
這個(gè)是毋庸置疑的。之前在怎么復(fù)習(xí)才不會(huì)忘里說,最后堅(jiān)持每7-10天復(fù)習(xí)一次。如果你堅(jiān)持了這種頻率,我覺得筆記突擊復(fù)習(xí)對(duì)你來說幾乎是不需要的。不過如果你覺得心有不安,可以在突擊階段每天復(fù)習(xí)一次。
切記一點(diǎn),筆記突擊復(fù)習(xí)時(shí),請(qǐng)記得自己?jiǎn)栕约簡(jiǎn)栴},然后模擬一下在面試官面前你會(huì)怎么回答。別只是記憶,你還要學(xué)會(huì)如何表達(dá)。
?
(2)針對(duì)性復(fù)習(xí)
?
針對(duì)性復(fù)習(xí)包含兩方面:把握公司面試特點(diǎn)+刷特定面經(jīng)。
首先是把握公司特點(diǎn)。打個(gè)比方,如果你去面試字節(jié)跳動(dòng),可能就需要多準(zhǔn)備一點(diǎn)算法、網(wǎng)絡(luò),他們很喜歡問這些。如果你去面試美團(tuán),你可能就更需要準(zhǔn)備一些JUC并發(fā)包、框架。
把握公司特點(diǎn)很重要,你會(huì)發(fā)現(xiàn)即使同樣是面試JAVA崗位,不同公司的面試內(nèi)容差別也會(huì)很大。
甚至不只是公司。到部門層面,差別也會(huì)很大。某公司A部門的JAVA崗,和該公司B部門的JAVA崗,就是要求不一樣的。也許一個(gè)更注重并發(fā)能力,一個(gè)更注重排查調(diào)優(yōu)能力等等。這一點(diǎn)你可以從崗位要求里去了解,或者問部門里相關(guān)的人員。
?
其次是刷特定的面經(jīng)。現(xiàn)在網(wǎng)上有很多人分享面經(jīng)。可能不一定能直接找到你現(xiàn)在面試的部門的面經(jīng),但你至少可以找到同一家公司下、業(yè)務(wù)類型相近的面經(jīng)。把他們題目拿過來,給自己模擬面試一遍。和前面說筆記突擊復(fù)習(xí)一樣,模擬你的表達(dá),別只是心里想一想答案就過去了。
?
(3)每日一道算法
?
如果你面試中可能會(huì)出現(xiàn)算法題,建議你在突擊階段每天一道LeetCode以保持手感。不過這因人而異,有些人即使很久不做算法,臨陣磨槍也不虛。
?
3
面試前焦慮該怎么辦
什么深吸一口氣?站在陽臺(tái)看看窗外?我覺得效果不是很大。
深呼吸在面試前半小時(shí)是有效的,它可以緩解你面試前過分緊張的情緒。但它是緩解緊張的,無法緩解焦慮。
焦慮的源頭在于:害怕意外的發(fā)生。我覺得緩解焦慮最有效的方式就是,為自己規(guī)劃好一切。
在突擊面試之前,時(shí)間尚早,相信你也不會(huì)有太多焦慮。當(dāng)突擊面試階段開始,你就要開始學(xué)會(huì)為自己規(guī)劃。讓一切有條不紊地進(jìn)行,你會(huì)發(fā)現(xiàn)你不再會(huì)為面試和其結(jié)果感到焦慮,因?yàn)槟阒滥阕约鹤龅搅俗詈谩?/p>
那如何規(guī)劃呢?
不妨給個(gè)例子:
比如我在下周六(2020-04/18)是阿里的一面。而今天是周日(2020-04-12),接下來我怎么安排呢?
2020-04-12 周日
復(fù)習(xí)單線程容器、JUC包,整理出相關(guān)的大而廣的面試問題,進(jìn)行自測(cè)。
2020-04-13 周一
復(fù)習(xí)網(wǎng)絡(luò)、操作系統(tǒng)
2020-04-14 周二
復(fù)習(xí)JAVA常見面試題、JVM
2020-04-15 周三
復(fù)習(xí)MySQL和Redis
2020-04-16 周四
復(fù)習(xí)Spring、IO、設(shè)計(jì)模式
2020-04-17 周五
網(wǎng)上查閱面經(jīng)自測(cè),做兩道算法恢復(fù)一下手感
2020-04-18 周六
盯著自己準(zhǔn)備好的各種大而廣的問題反復(fù)車輪式復(fù)習(xí),直到面試前半小時(shí)。
半小時(shí)里再背一遍自我介紹,復(fù)習(xí)一下簡(jiǎn)歷里的項(xiàng)目。
迎接面試。
如果這樣規(guī)劃以后,依然讓你感到十分焦慮,很簡(jiǎn)單:把規(guī)劃再細(xì)化。
你會(huì)發(fā)現(xiàn),當(dāng)規(guī)劃的細(xì)致程度達(dá)到某種階段以后,你的焦慮會(huì)轉(zhuǎn)化成壓力和動(dòng)力,不會(huì)再讓你手足無措。
?
最后說一個(gè)小tip。其實(shí)讓你面試前不焦慮還有一個(gè)非常簡(jiǎn)單的辦法,就是多投遞簡(jiǎn)歷,多面試,面多了你就會(huì)感到麻木,不會(huì)焦慮了。
面試開始
1
自我介紹到底要怎么說
?如果是一面/二面,一般是純技術(shù)面,這個(gè)時(shí)候我建議可以遵照這樣一種自我介紹模板:
自報(bào)家門
介紹自己的技術(shù)方向和技術(shù)能力
我主攻的方向是XX,從技術(shù)上來說,我對(duì)于XX、XX(枚舉一些技術(shù)點(diǎn))比較熟悉(以引導(dǎo)面試官問你熟悉的內(nèi)容)
介紹項(xiàng)目經(jīng)歷(什么項(xiàng)目,在里面做什么事情,有什么難點(diǎn),怎么克服的,有什么收獲)
我在之前XX(讀大學(xué)?在XX工作?之類的)的時(shí)候,很喜歡并善于研究 / 做過一些有價(jià)值的項(xiàng)目,比如blabla。期間遇到過一個(gè)問題至今印象深刻,blabla。經(jīng)過這個(gè)項(xiàng)目,我吸收了一些blabla的知識(shí)。
tips:在介紹項(xiàng)目經(jīng)歷的階段中,“在里面做什么事情”是最重要的模塊,一定要講清楚,做什么事情決定你在面試官第一印象中的高度。而“有什么難點(diǎn),怎么克服的”是給你一個(gè)埋坑的機(jī)會(huì),讓面試官更有可能在這個(gè)點(diǎn)上去追問你。
收尾
希望在未來,可以把這些知識(shí)(之前項(xiàng)目中提到的知識(shí))運(yùn)用在工作中。
也希望在本次面試中,可以得到面試官的一些建議和指導(dǎo)。
?
????如果是三面/四面/HR面,并且你切實(shí)覺得可能不再那么純技術(shù)了,你的自我介紹可以向軟實(shí)力角度偏移,這里拿我的自我介紹給個(gè)例子:
??? tips:整理你自己的自我介紹的時(shí)候,請(qǐng)切記不要太書面語,背起來不舒服不說,真正到自我介紹的時(shí)候也會(huì)顯得生硬。
? ?您好,我是來自XX大學(xué)XX專業(yè)的XX。
? ?我想從技術(shù)理論、項(xiàng)目實(shí)踐、工作能力上來簡(jiǎn)單介紹一下自己。
? ?首先是技術(shù)理論。我主攻的方向是Java后臺(tái)。技術(shù)上來說,我對(duì)于Java基礎(chǔ)、JVM、并發(fā)容器、線程池等等還是比較熟悉的,另外在框架方面用SpringBoot比較多,讀過Spring的源碼。而數(shù)據(jù)庫層面的話,磁盤數(shù)據(jù)庫中我對(duì)于MySQL尤其是InnoDB引擎比較熟悉,內(nèi)存數(shù)據(jù)庫中對(duì)于Redis比較熟悉。
? ?而在項(xiàng)目實(shí)踐方面,我對(duì)于理論和實(shí)踐的結(jié)合一直是比較看重的。從大一入學(xué)兩個(gè)月我就有帶領(lǐng)大一的學(xué)生隊(duì)伍參加院里的項(xiàng)目比賽,之后陸陸續(xù)續(xù)到今天累計(jì)也做了不下十幾個(gè)項(xiàng)目了。而在這些項(xiàng)目中,在綜合方面我主要擔(dān)任的也都是一個(gè)負(fù)責(zé)人的角色,而在技術(shù)方面我主要做的則都是Java后臺(tái)的部分。我開過會(huì)議,出過文檔,寫過代碼,也參加過有好幾百人作為聽眾的大型答辯,應(yīng)該說不管在硬實(shí)力還是軟實(shí)力上,都得到了很不錯(cuò)的鍛煉。
? ?最后是我的工作能力。我現(xiàn)今任我們專業(yè)XX班的班長,已經(jīng)歷時(shí)一年半,對(duì)于組織工作應(yīng)該說是非常熟悉了。另外,我也有參與學(xué)校里一個(gè)較大型的信息技術(shù)工作室,出任其中的技術(shù)部負(fù)責(zé)人,偶爾會(huì)帶領(lǐng)學(xué)弟學(xué)妹們進(jìn)行一些項(xiàng)目實(shí)踐,以及參與引導(dǎo)部門及工作室的規(guī)劃安排。事務(wù)很多很雜,也培養(yǎng)了我強(qiáng)大的規(guī)劃力和執(zhí)行力,相信這也能夠使我在未來的工作中得心應(yīng)手。
???
面試中
1
技術(shù)面試的時(shí)候應(yīng)該注意什么
要從表達(dá)和內(nèi)容兩方面來講。
(1)表達(dá)
?
表達(dá)切記一定要口齒清楚,邏輯清晰。
口齒清楚
口齒清楚這一點(diǎn)相信大家都能領(lǐng)會(huì)。但是也不排除有些小朋友一緊張口齒就不利索,這個(gè)一定要注意。
更有甚者有時(shí)候遇到不太確定的問題,想要以口齒不清來蒙混過關(guān),這種更不可取,基本是搬石砸腳。
邏輯清晰
如何保證這一點(diǎn)呢?有時(shí)候當(dāng)遇到一個(gè)措手不及的問題,很難保證我們的邏輯又快又清晰。
所以最簡(jiǎn)單的方式,就是用速度的犧牲來換取邏輯的明了。甚至有時(shí)候你可以短暫地沉默一會(huì)兒,好好整理一下思路,千萬別張口就來,導(dǎo)致說得亂七八糟不成體系。
?
(2)內(nèi)容
對(duì)于一些切入點(diǎn)非常小的問題,直接回答就可以。比如說:
Q:對(duì)象的鎖信息是存在哪里的?
A:在對(duì)象頭MarkWord里
?
但是對(duì)于一些切入點(diǎn)比較大的問題。例如:
Q:講講垃圾回收?
Q:集合里ArrayList和LinkedList有什么區(qū)別?
回答的內(nèi)容切記不可過于簡(jiǎn)短,但也不能胡亂堆砌。最好的方式是水平擴(kuò)展或者垂直擴(kuò)展。
不妨就拿上面的一個(gè)問題來舉個(gè)例子。比如說講講垃圾回收。
水平擴(kuò)展的話,應(yīng)該怎么講呢?
A:
有關(guān)垃圾回收,我們首先要考慮兩個(gè)問題。一是如何判斷對(duì)象可回收,二是用什么樣的方式來回收。
首先對(duì)于前者,有引用計(jì)數(shù)法和可達(dá)性分析兩種方法,它們分別……(講講它們的含義,優(yōu)缺點(diǎn))
而對(duì)于后者,市面上主要有標(biāo)記-清除,標(biāo)記-整理,復(fù)制三種回收算法,它們分別……(講講含義,優(yōu)缺點(diǎn))
結(jié)合這些算法,市面上就出現(xiàn)了很多垃圾收集器,例如Serial,ParNew,CMS,G1……(順便講講它們的回收邏輯,優(yōu)缺點(diǎn))
面試官:(暗自點(diǎn)頭)
水平擴(kuò)展也就是從一個(gè)問題出發(fā),把與它相關(guān)的整棵知識(shí)樹或者整顆知識(shí)樹的一部分(如果樹太大的話)講出來,體現(xiàn)你的知識(shí)是有架構(gòu)有體系的。
?
垂直擴(kuò)展的話,又應(yīng)該怎么講呢?
A:
垃圾回收的話,自JDK1.8后,市面上就非常流行G1垃圾回收器了。它是不分新生代和老年代的,基本原理是……(講講含義,優(yōu)點(diǎn))
但是垃圾的頻繁回收勢(shì)必會(huì)導(dǎo)致用戶體驗(yàn)的下降,雖然G1已經(jīng)很優(yōu)秀了,作為開發(fā)者我們還是需要關(guān)注JVM的優(yōu)化(話鋒一轉(zhuǎn),開始走向深度)
(講一些具體的優(yōu)化策略)
面試官:(暗自點(diǎn)頭)
垂直擴(kuò)展主要是需要自行找到一個(gè)切入點(diǎn)。或者面試官已經(jīng)把切入點(diǎn)給到你了,那么接下來你要引入自己的思考,按照一個(gè)沒有漏洞的邏輯走向深度,體現(xiàn)你是勤于思考并且善于發(fā)現(xiàn)并解決問題的人。
?
2
面試尬場(chǎng)怎么辦
首先如果是因?yàn)槟愦鸩簧蟻矶螆?chǎng),你就乖乖說你不會(huì),千萬別強(qiáng)撐。
如果不是這個(gè)情況,是面試官一時(shí)沉默的話:
有時(shí)候面試官可能很忙,他可能都沒來得及看完你的簡(jiǎn)歷就來給你面試。換言之,他并沒有做太多的準(zhǔn)備。所以臨時(shí)尬場(chǎng)也是非常正常的。
所以現(xiàn)在你要做的就是:讓面試官不要尬場(chǎng)。
打個(gè)比方:
Q:你說你熟悉線程池,那你說說看線程池都有些什么重要的參數(shù)?
A:比如有核心線程數(shù)、最大線程數(shù)、允許存活時(shí)間、阻塞隊(duì)列等等(順便簡(jiǎn)單說一下這幾個(gè)參數(shù)都是什么含義)
Q:嗯不錯(cuò)……(開始沉默)
一般面試官的沉默可能是你回答完這一個(gè)問題之后,他一時(shí)間想不到問什么。這個(gè)時(shí)候你可以繼續(xù)沿著這個(gè)問題擴(kuò)展下去:
A:關(guān)于線程池還有一些需要注意的地方。比如當(dāng)一個(gè)任務(wù)添加進(jìn)來的時(shí)候……(講一下任務(wù)添加到線程池的流程)
A:考慮到這樣一個(gè)流程,所以我們?cè)诳刂谱畲缶€程數(shù)、阻塞隊(duì)列的時(shí)候是需要注意的。如果最大線程數(shù)設(shè)置過大,或者阻塞隊(duì)列設(shè)置上限過長,可能導(dǎo)致OOM(又聯(lián)系回前面參數(shù)的問題)
是不是聯(lián)系回去不要緊,但是只要你依然在講這個(gè)問題相關(guān)的知識(shí)樹里的東西,就可以有效地緩解尬場(chǎng),還會(huì)讓面試官覺得:
面試官:(嗯這小伙基礎(chǔ)還挺扎實(shí))
? ?
3
如何學(xué)會(huì)埋坑
埋坑是非常重要的一個(gè)技巧。
什么叫埋坑?就是在回答前一個(gè)問題的時(shí)候,適當(dāng)?shù)貙?duì)面試官進(jìn)行引導(dǎo),讓他能夠問你想讓他的問題。
面試前是最容易埋坑的。一是簡(jiǎn)歷里的項(xiàng)目經(jīng)歷,專業(yè)技能;二是自我介紹階段,講一些自己擅長的技術(shù)點(diǎn)等等,引導(dǎo)面試官去問你。
而在面試的過程中,應(yīng)該如何埋坑呢?
打個(gè)簡(jiǎn)單的比方。
比如現(xiàn)在面試官問你:”ArrayList和LinkedList有什么區(qū)別?“
你先中規(guī)中矩地回答。回答完之后,我們可以根據(jù)我們的擅長點(diǎn)做一些不同的策略:
如果你比較擅長并發(fā)容器,你可以說:
ArrayList和LinkedList都屬于單線程框架,是并發(fā)不安全的。如果要并發(fā)安全的話,需要使用CopyOnWriteArrayList或者ConcurrentLinkedQueue
?
如果你比較擅長線程池,你可以說:
ArrayList和LinkedList分別是對(duì)數(shù)組和鏈表的封裝。JAVA中比較重要的對(duì)于數(shù)組、鏈表的封裝集合類還有線程池中的阻塞隊(duì)列,例如ArrayBlockingQeque和LinkedBlockingQueue
?
當(dāng)然了,埋坑只能啟到一定的導(dǎo)向作用,最終決定權(quán)還是在面試官手上。不要太刻意,不然會(huì)適得其反。
面試結(jié)束
1
面試官:“你有什么想問我的嗎”該說什么?
這個(gè)問題可以給幾個(gè)例子:
您對(duì)我有什么建議嗎?
您平時(shí)工作中主要做些什么呢?
如果我有幸能夠被錄取的話,主要會(huì)做一些什么樣的工作呢?
2
我怎樣才能知道我是否通過了
我個(gè)人不建議在面試完后直接問面試官:”我通過了嗎?“
而且面試本來就是雙向選擇,你是在眾多offer中挑一個(gè)最喜歡的,人家也是在眾多面試者中挑最好的那一批。
所以如果你想要知道自己是否通過了,最好的方式是從面試官對(duì)你的態(tài)度中窺探。
比如你最后問:”您平時(shí)工作中主要都做些什么呢?“
他給你回答得非常詳細(xì),而且還會(huì)主動(dòng)跟你聊一點(diǎn)別的,比如告訴你進(jìn)來以后會(huì)做什么之類的,那說明他還是很認(rèn)可你的。
如果他只是簡(jiǎn)單說一下,有點(diǎn)敷衍的樣子,不排除只是他工作忙的可能,但你最好也可以考慮一下,找找其他出路了。
另外,等面試結(jié)束后,如果你有推薦你去面試的推薦人或者HR的聯(lián)系方式,你也可以直接問他們面試的結(jié)果。
?
我兩年半的技術(shù)人生
????最后附上我兩年半的技術(shù)生涯,中間不免有些彎路,但總體還是令我滿意的。
希望給有需要的人以參考。
??
1
2017(入學(xué)
7-8月
參加社會(huì)上的Java語言基礎(chǔ)培訓(xùn)課程,學(xué)習(xí)Java,基本上到可以簡(jiǎn)單使用Swing的程度,對(duì)于反射泛型等中高級(jí)知識(shí)一竅不通;
10月
拉了五個(gè)也是大一的小伙伴參加學(xué)院的創(chuàng)新創(chuàng)業(yè)比賽,基于Java Swing寫了一個(gè)井字策略游戲,拿到學(xué)院的優(yōu)勝獎(jiǎng);
11月
機(jī)緣巧合認(rèn)識(shí)了一位研二的研究生,經(jīng)他推薦進(jìn)入一位教授的實(shí)驗(yàn)室做商業(yè)網(wǎng)站;
12月
在研究生的帶領(lǐng)下認(rèn)識(shí)SpringBoot和Mybatis,原理一竅不通,但是可以寫一點(diǎn)CRUD;
總結(jié)
Java語言最基礎(chǔ)內(nèi)容的使用比較熟練了
有了可憐到幾乎可以忽略不計(jì)的web后臺(tái)開發(fā)經(jīng)驗(yàn)
當(dāng)時(shí)學(xué)院算法學(xué)習(xí)氛圍比較好,到年末我大概相當(dāng)于共計(jì)刷了一百道LeetCode中等題
2
2018(大一~大二)
1-3月寒假
進(jìn)入培訓(xùn)機(jī)構(gòu)學(xué)習(xí)web前端,了解了html-css-js,學(xué)會(huì)ajax;
4-6月
劃水度過,我不知道我在干嘛,就好好上課;
7-8月暑假
做一些基于SpingBoot的簡(jiǎn)單實(shí)踐,初步學(xué)習(xí)Unity游戲引擎;
9-10月
劃水;
11-12月
學(xué)校各種創(chuàng)新比賽啟動(dòng),我都參加了,最后同時(shí)啟動(dòng)了大約6-7個(gè)校園小項(xiàng)目;
總結(jié)
這是我多角度嘗試的一年(比如web前端、游戲開發(fā)),因?yàn)槲疫€并沒有決定以后從事什么方向。大約在暑假后(9月),我才覺得自己未來應(yīng)該會(huì)做Java后臺(tái);
在后臺(tái)技術(shù)上提高不多,只是熟練了那么一丟丟;
項(xiàng)目啟動(dòng)很多,那個(gè)時(shí)候覺得項(xiàng)目很重要很能鍛煉人,后來覺得其實(shí)做那么多差不多級(jí)別的項(xiàng)目并不是很有意義。
4
2019(大二~大三)
1-2月寒假
我啟動(dòng)了太多項(xiàng)目,CRUD崽忙不過來了!!
3-6月
各種項(xiàng)目比賽遍地開花的幾個(gè)月:
3月:兩個(gè)創(chuàng)新培育項(xiàng)目,一個(gè)國創(chuàng)一個(gè)市創(chuàng)評(píng)級(jí)
4月:上海市計(jì)算機(jī)應(yīng)用能力大賽二等獎(jiǎng)
6月:校大夏杯創(chuàng)業(yè)大賽銅獎(jiǎng)
但只有我自己心里清楚,獎(jiǎng)是拿得很不錯(cuò),但是技術(shù)上其實(shí)都是一樣的東西,而且非常簡(jiǎn)單非常基礎(chǔ)。全是傳統(tǒng)的小型單體web項(xiàng)目,業(yè)務(wù)驅(qū)動(dòng)。
還是3-6月
比我大兩級(jí)的拿到螞蟻金服正式offer的學(xué)長來講了Java面經(jīng),我終于意識(shí)到自己太菜了。但是跟著大三春招的洪流,我也沒忍住投了幾個(gè)簡(jiǎn)歷試試:
攜程:一站式面試,我不知道一站式是什么意思,去面了一面自我感覺良好,就直接走了!走了!沒在那等著繼續(xù)面下去,就沒了。
字節(jié)跳動(dòng) · 北京:視頻面試,在第二面掛了,評(píng)價(jià)是”相對(duì)大二學(xué)生來說比較優(yōu)秀,但是暫時(shí)還沒達(dá)到實(shí)習(xí)崗位的要求“
7月
買了一堆螞蟻學(xué)長推薦的書籍,例如《高性能MySQL》、《深入理解Java虛擬機(jī)》、《Java并發(fā)編程實(shí)踐》、《圖解HTTP》等,開始有計(jì)劃地閱讀起來;
8月
去安徽會(huì)場(chǎng)參加全國大學(xué)生計(jì)算機(jī)設(shè)計(jì)大賽的答辯,榮獲一等獎(jiǎng)。還是那句話,真沒啥技術(shù)含量。但是提升了我答辯的能力和吹噓的水平;
9-12月
繼續(xù)讀書。
總結(jié)
這是我從實(shí)踐逐步轉(zhuǎn)戰(zhàn)理論學(xué)習(xí)的一年。之前的我太過于知其然而不知其所以然了,寫項(xiàng)目都是不考慮原理的。自螞蟻學(xué)長分享了Java面經(jīng)之后,為我指出了方向。
這一年我仔細(xì)閱讀了《高性能MySQL》前七章,《深入理解Java虛擬機(jī)》近整本,也買了《MySQL技術(shù)內(nèi)幕 InnoDB存儲(chǔ)引擎》看完了一整本,做了很多筆記。
我還買了很多其他雜七雜八的書,例如《輕量級(jí)微服務(wù)架構(gòu)》、《圖解TCP/IP》、《大型網(wǎng)站架構(gòu)》等等,有些是幾乎讀不懂,有些是沒怎么讀,大抵算是這一年走的彎路。
5
2020(大三)
1月
瘋狂整理、復(fù)習(xí),中旬參加了攜程的日常實(shí)習(xí)面試,通過了,年前進(jìn)入攜程實(shí)習(xí);
2月
過年幾天還帶了兩本書回老家,但是真的學(xué)不進(jìn)去。回來后因?yàn)橐咔檫h(yuǎn)程辦公,同時(shí)不斷進(jìn)行復(fù)習(xí)與整理,準(zhǔn)備春招;
3月
開始進(jìn)入春招面試階段。只投了字節(jié)和阿里,都通過了;
4月
一直到今天4.11,一直是靜待offer。沒有什么事情,就不疾不徐地學(xué)一學(xué)SpringCloudAlibaba,平時(shí)就談?wù)剳賽?#xff0c;打打游戲,看看電影。
????我兩年半的技術(shù)生涯,主要走的是 實(shí)踐學(xué)習(xí) → 理論學(xué)習(xí) → 實(shí)踐理論相結(jié)合 這樣一條路線。
????一開始的實(shí)踐學(xué)習(xí)就像是培訓(xùn)班生活,只不過是自我培訓(xùn);
????然后到理論學(xué)習(xí)層面,有幸聽到螞蟻學(xué)長的面經(jīng)講座,加上有之前的實(shí)踐基礎(chǔ),讓我的理論學(xué)習(xí)有方向感且不會(huì)太虛浮;
????最后是實(shí)踐理論相結(jié)合層面,主要就是把我一些新學(xué)習(xí)的沒實(shí)踐過的理論付諸實(shí)踐。就比如學(xué)習(xí)了JVM調(diào)優(yōu)和問題排查,就自己寫一個(gè)死鎖程序或者OOM程序然后用排查工具來排查一下問題。
????最后祝認(rèn)真閱讀到這里的你,一定會(huì)拿到心儀中的offer!
END
史上最全的延遲任務(wù)實(shí)現(xiàn)方式匯總!附代碼(強(qiáng)烈推薦)
因?yàn)槲艺f:volatile 是輕量級(jí)的 synchronized,面試官讓我回去等通知!
有人說:輕量級(jí)鎖一定比重量級(jí)鎖快!我忍不住笑了
關(guān)注公眾號(hào)發(fā)送”進(jìn)群“,老王拉你進(jìn)讀者群。
? ??
總結(jié)
以上是生活随笔為你收集整理的面经分享:历时半个月,终于拿到了蚂蚁金服的offer!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试官 | Class.forName
- 下一篇: 「视频版」当线程池溢出之后,程序会奔溃吗