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