記人生第一次阿里巴巴技術面試被拒經歷
作為一個研發人員,我相信大家都有一個大廠夢。夢想着有一天,能夠去大廠工作,去享受那種高手如林的工作環境,去真正體會什么是真正的高並發、海量存儲、大數據,去這些大的舞台,發揮自己的聰明才智,做一款服務千萬級用戶的產品,升職加薪,走上人生”巔峰“。沒錯,我也同樣有這樣的期待,期待加入BAT這樣的大廠,從投遞簡歷到一面被拒大概經歷了15個工作日,就過程而言,阿里的面試體驗還是不錯的,給予候選人,不管是在時間和空間上很大的自主選擇權。就結果來看,讓我意識到自己認知盲區,自己本身存在的缺點。
本次投遞的崗位信息:
- 部門:阿里巴巴IOT事業部
- BASE:無錫
- 級別:P7
01 投遞簡歷
由於工資上漲的腳步,無法追趕上海房價上漲的步伐,本人在兩年前在無錫置業,隨着年齡的日益增長,倍感生活的壓力。從2019年伊始一直計划着有合適機會的話,回無錫工作,一個偶然的下午 2019年9月29,出於好奇,想了解無錫互聯網相關的工作機會,通過BOSS直聘,看到阿里巴巴在無錫有HC,於是准備了一份簡歷,發給了招聘負責人。說實話,看完無錫的整體互聯網需求,心里還是有些失落,原因如下幾點:
- 機會較少,有不錯產品的公司較少,大量技術外包公司
- 薪資較上海,有比較大的差距,基本是腰斬
- 上升空間、潛力有限,在這座城市從事互聯網行業工作,比較容易出現天花板
那些在一線城市(北京、上海、深圳)工作IT從業人員,在選擇退居新一線和二線城市的時候,需要慎重,得有心理准備。
02 預約電面
在2019年10月12號從南京出差回上海的動車上,接到了一個陌生電話,顯示固話所在地 浙江-杭州 ,面試官首先會說明來意,介紹部門信息和崗位信息,Base情況。接下來,就是詢問,可不可以當即進行電話面試,因為火車上人來人往(毫無准備,借口拒絕),推遲到下周二(2019年10月15號)。這里建議收到電話面試邀請的同學,在沒有准備充分的情況下,不要貿然答應電話面試,建議有兩種選擇:
- 拒絕本次電話面試預約,表示自己最近沒有換工作的計划
- 順延面試時間,表示當前比較忙,將面試時間順延,充分准備
據在阿里的朋友講,之前有被拒記錄,會對后面再次面試,有較大影響,可能因為第一次被拒記錄,直接無法進入電面環節,更有甚者,在HR面因為之前被拒評價,被一票否決。言而總之,總而言之,認認真真准備,機會都是為有准備的人而准備的。
03 面試准備
從網上收集資料並整理發現,不管是深度還是廣度,阿里面試的問題涉獵方方面面,如果之前沒有准備的話,想在兩天內復習完,難度較大,第一面主要是基礎,大概的復習思路是:
- 從簡歷中挑選一個自己最熟悉,有技術亮點的項目,梳理業務流程(What、Why、How)和技術棧(架構設計,中間件,開發框架)。梳理好這些,將有助於在面試的過程中,引導並暗示面試官進行提問,把話題的主動權權掌握在自己手中,不要被面試官牽着走,容易掉到坑里去。
- 算法: 排序算法(冒泡、選擇、插入、快排、希爾、歸並、堆排、計數、基數、桶排)、查找算法(暴力查找、二分、二叉樹、哈希)、LRU、LFU、FIFO、FILO
- 數據結構: 數組、鏈表(單向、雙向)、樹(二叉樹,完全二叉樹、查找樹、紅黑樹、多路樹、B-Tree、B+Tree)、圖
- 千年不變的JAVA基礎連環炮: JVM、Java集合、鎖、並發編程(CAS、自旋、LockSupport)、網絡編程(IO/BIO/NIO)、反射、動態代理、新特性、線程池、ClassLoader、線程間通信
- Spring連環炮: IOC、AOP、Spring Bean生命周期、Spring容器初始化過程、Servlet生命周期、后知處理器、BeanFactory和FactoryBean的區別、Spring處理請求過程、Spring父子容器
- ORM框架: Mybatis原理、一級緩存、二級緩存、Mapper掃描過程、動態代理過程(JDK自帶與Cglib比較)
- 數據庫: B+樹、索引結構、索引的分類、樂觀鎖、悲觀鎖、共享鎖、排它鎖、MVCC、GAP、ACID特性、隔離級別、事務原理、造成數據庫死鎖的原因,如何避免數據庫死鎖、如何使用explain、什么情況下會導致索引失效、如何進行數據庫優化、建立索引需要注意什么
- 中間件: nginx、配置中心(Disconf,Diamond、阿波羅)、Zookeeper、Elastic-Job、Dubbo、cat監控、Spring Cloud、ElasticSearch、oss、mq、redis、elk、druid、drools
- Web容器: Tomcat、Netty、JBoss
- 協議: Http、Tcp/IP、UDP、Https
- 加密: Md5(加鹽)、AES、SHA1、RSA
- 工具: Maven、Git、UML(用例圖、流程圖、ER圖、時序圖)
- 分布式: CAP、BASE、分布式事務(兩階段、三階段、TCC、本地消息表)、服務的互斥性、服務的冪等性、分布式鎖(mysql、redis、zookeeper)、數據一致性問題
- 設計模式: 結合Spring框架:單例模式、工廠方法、簡單工廠、抽象工廠、創建者、責任鏈、策略、代理、模版方法、觀察者
- 源代碼: JUC、HashMap、ConcurrentHashMap、HashTable、sync、AQS、ReentrantLock、ThreadLocal、Dubbo、Spring、Netty、NIO(epoll、selector)
- 性能調優: 代碼、數據庫、緩存、NoSql、JVM、頁面靜態化、CDN
04 電話面試
經過兩天的匆忙准備,面試官非常准時地按照之前約定的時間,出現在電話的那頭,而我在這頭。
簡單寒暄,再次確認Base信息,隨即進入面試環節:
Q1:請介紹一下給你留下印象最深刻的項目是什么,用到了哪些技術
Q2:HashMap底層實現是什么
Q3:HashMap加載因子和擴容機制是什么
Q4:HashMap既然用到了紅黑樹,那么應該重寫什么方法
Q5:ThreadLocal是如何實現的
Q6:分布式事務問題如何解決的
Q7:如何保證MQ消息和服務的冪等性
Q8:Dubbo的底層通信原理和IO模型
Q9:Dubbo的負載均衡算法有哪些,默認是什么
Q10:Dubbo和Spring Cloud的比較
Q11:有沒有了解過阿里開源的配置中心產品
Q12:JDK自帶的線程池比較
Q13:Spring AOP原理
Q14:Mybatis使用過程中,沒有寫具體的Mapper實現,是采用了什么技術
Q15:基於Jdk動態代理如何實現
Q16:JDK動態代理和Cglib比較
Q17:數據庫樂觀鎖和悲觀鎖
Q18:數據庫為什么要建立索引,需要注意什么
Q19:有沒有看過一些源碼,並做下講解
到此,面試結束,整個電話面試時長1個小時10分,比較順暢,有幾個比較底層的問題,沒有回答上來,只能講大概,缺少全局性思維,不會的就是回答的不會,沒仔細研究過的也就是回答的沒有仔細。(以上問題僅憑記憶留存)
05 通知結果
在面試完第一面之后,整體自我感覺還算不錯,確實有幾個底層的原理性問題,沒有回答上來。接下來就是等待面試結果的過程,整個等待面試結果的過程,大概的過程是這樣的:
自信(感覺還可以) ---> 喜悅(還在流程中) ---> 懷疑(未收到二面通知) ---> 焦慮(是不是掛了) ---> 失落(面試被拒) ---> 釋然(思考與總結)
在不知道面試結果的情況下,繼續准備二面的內容,最近公司有兩個比較急的項目都我這邊,白天忙工作,晚上復習到2~3點。在這里,非常感謝在背后默默支持我,充當后勤部長的小高同學。在這期間,通過朋友內部查詢,面試后4天,簡歷狀態顯示一直處在流程中,哈哈哈,這里我感覺應該要二面了。大概過了一周后,還是沒有收到二面的通知,這個時候就有點坐不住了。再次讓朋友內部確認,結果慘痛。面試官給的評價是:技術深度不夠,技術熱情不足,人溝通和邏輯很好,朋友也安慰我:面試就是碰,不同的面試官看中的點不一樣,作為一位RD,自己心里最清楚(自己基礎不夠牢靠),接到結果的那一刻,心里還是有些許失落。失落之余是對自己這些年的反思和總結。也給自己在接下來的工作中,指明了方向。整個阿里面試的流程,到此結束。(吐槽一下:面試被拒,沒有收到任何郵件與短信通知,建議在招聘環節中,做到有始有終)
06 思考與總結
思考:
-
在面試環節中,哪些問題給面試官留下了,技術深度不夠的印象?
關於深度不夠,個人感覺有幾個原理性的問題,沒有回答上來,最為致命。
-
在面試環節中,哪些問題給面試官留下來,技術熱情不足的印象?
關於技術熱情,沒有做成讓面試官滿意的答案,現有在公司項目中的解決方案只停留在解決當前問題和能用就行階段,源代碼了解程度不夠,對技術只是停留在知其然階段,沒有表現出技術改變世界的決心。
總結:
- 平時忙於處理團隊的事情,對技術的深度的求知欲,逐漸降低
- 對技術原理的好奇心,逐漸喪失,只是停留在使用層面
- 准備不夠充分,在投遞簡歷之后沒有利用好簡歷篩選的時間,梳理知識點
- 其實阿里的面試,也沒有想象中的難,在深度和廣度上充分准備,相信一定可以拿到Offer
計划:
- 開通本博客,記錄成長歷程
- 從基礎着手,深入源代碼,了解背后技術實現原理
- 保持好奇心
- 每周能夠產出一篇技術博客
- 如果還有機會的話,明年此時,再戰阿里,爭取能進二面