阿里-蚂蚁金服社招面经
首先介紹一下自己,18年本科(末流985,電子信息工程專業)畢業,兩年多工作經驗,畢業第一年在一個國企,之后在杭州一個創業公司,這次面試的是螞蟻金服。在這先申明,介紹這么詳細只是為了大家方便參考,大家可以參考工作經驗、年限,個人覺得如果你是通過內推渠道或者已經通過簡歷篩選,其實學歷或者說學校對面試的影響不是特別大。因為疫情原因,都是電話面試,如果算上hr面試,一共是五面。
第一面? 大概一個小時
是一個阿里這邊的一個同事聯系到我,我們約好面試時間。
1.先自我介紹一下
主要是介紹工作經驗、項目經歷、你在項目中承擔的角色是什么等(這些是重點,要有邏輯和側重點來介紹)我分享一下我的介紹大家可以參考。我18年在××大學畢業,之后在**公司××部門擔任開發工程師,我們主要做的項目是***,我在這個項目中主要是后臺開發,也會寫一些對UI要求不是很高的頁面。比較有挑戰的是因為項目需要,需要開發一個規則引擎,我基于開源的doorls封裝實現,具體的技術原理、技術實現如果感興趣我們可以之后再討論。之后因個人發展考慮到了杭州,因考慮到自己缺乏一個項目完整項目周期的歷練,進入了一個創業公司。開始接觸到分布式設計理論、微服務架構這些主流的架構設計。我們項目是一個涉及三高場景的支付交易的系統(具體是啥就不說了,要不然就暴露了哈哈哈)。技術選型是基于springboot開發微服務、dubbo做rpc框架、數據庫主要是mysql和redis、mongdb等.常用的分布式技術比如分庫分表、分布式鎖、分布式事務等都有考慮涉及,技術細節可以之后討論。
?
2.那大概說一下你們支付系統
這個主要是涉及自己對自己做過項目的熟悉程度,要對寫在簡歷上的東西負責,且要對項目有思考、比如技術選型時候的考慮、系統存在的問題、如何改進等。
?
3.你們用到rocketMq 是基于什么考慮?
?
4.你們項目也用到了kafka,那為什么不統一一下,只用rocketMq或者只用kafka不行嗎?基于什么考慮?
這個要結合具體的業務場景、為什么rocketmq合適而kafka不合適?主要要理解rocketmq和kafka的優勢和劣勢。
?
5.那說一下rocketmq如何保證消息不丟失呢?從原理上說一下
?
6.系統中如果保證消息不會重復消費?
我們都知道回答冪等,但是要提供出具體的實現方式、比如插入用唯一索引來保證插入的唯一性、更新時候狀態設置等,具體實現可以上網找一下。、
?
7.你說你們用到了分布式鎖?具體場景是什么樣的?怎么實現的?
我們有營銷系統(相當于優惠券系統)要保證庫存不會出現超賣情況。主流實現方式有數據庫、redis、zk。各個實現方式的原理、優勢劣勢、我們業務場景、基于這個我們考慮用**方案。這個需要個人有所思考。
?
8.因為涉及到高并發的場景,那你怎么保證數據庫更新的有效性?
這個其實主要涉及到mysql的鎖機制。樂觀鎖如何實現、悲觀鎖分類以及如何上鎖等。要特別注意行鎖和間隙鎖實現,這個是重點,可能大多數人也一知半解,但是必須要搞懂的。我當初面試時候也是沒回答好。
?
9.如何保證數據的一致性?
這個屬于分布式事務的一部分。大家可以去掘金搜索一下,很多好文章。
?
10.好了,今天差不多了。你有什么問題問我嗎?
這個就看個人了,真誠一點就好。我主要還是會問這次面試我的表現還有不足,但是不問具體的技術問題。面試也是為了檢驗自己和進步嘛。
?
第二面? ? 40分鐘
流程差不多,都是先自我介紹,然后通過項目提問,我主要寫一些我還記得問題吧。
1.你們項目中redis怎么用的?基于什么考慮的?
?
2.你們項目中dubbo用來rpc,那如果自己設計一個正常的rpc要考慮哪些?如何設計?
這個我們要了解rpc的基本功能涉及到哪些?包括協議如何設計、如何序列化、網絡傳輸(同步阻塞、異步阻塞等方式)
?
3.說一下dubbo服務注冊和發現的過程。
spi機制要了解。
?
4.用zk做注冊中心,那zk數據結構是怎樣的?如何選舉?
?
5.你們分庫分表是如何做?
涉及到為什么分庫分表?主要是數據量考慮。如何分庫分表?分庫分表技術.幾種技術優勢劣勢對比。
?
6.你們的訂單號和流水號這些是如何產生的?
這是生成分布式全局id的技術考察。當然還要結合自己的業務。
?
7.之后就是問問題環節了。當然面試過程中還會穿插一些java基礎、比如currenthashmap等并發容器、讀寫鎖、AQS等,要基于版本來說 比如1.7和1.8的實現就很不同。
?
第三面 大概45分鐘
流程差不多,都是先自我介紹,然后通過項目提問,我主要寫一些我還記得問題吧。這一面比較注重數據庫方面。注意這里只是說比較注重數據庫,不是說沒有問其他問題。具體問題我也記不太清,知識點可以大概說一下。
1.innodb中索引的結構,這里涉及索引的數據結構、主鍵索引和普通索引區別、索引優化。這個要結合項目、比如如何發現慢sql、如何判斷使用了什么索引?explain的使用。
?
2.innodb的事務。主要涉及到mvcc以及視圖回滾等,各個隔離級別下的問題以及如何解決?比如mysql默認是可重復讀級別,但是會有幻讀問題,你得從原理上了解為什么會出現幻讀、那如何解決呢,我們可以通過間隙鎖來解決,那間隙鎖的原理是什么?間隙鎖有什么問題。回答的時候最好把這些問題都涉及到,引導面試官。因為面試是一個相互的過程,相當于聊天,要有來有回,不要人家問什么你就回答什么。
?
3.mysql的性能分析和解決。這個其實是比較開放性的題目,從分析工具到優化過程都可以說,只是要真誠,要是項目中真正遇到過的,不能隨意瞎編。
?
4.還有分布式事務實現。主流的實現手段,項目中使用的分布式事務實現方法、為什么選擇這種方法,基于什么考慮?還是方案的優劣比較。
?
4.問問題環節。
?
第四面? 總監面 大概20分鐘
這一面主要會考察你在架構方面的思考,不會摳技術細節
1.因為你們系統支付流程是異步,那如何保證數據一致性呢?
這個問題首先你得了解分布式CAP理論和base理論,知道分布式系統要解決的是什么問題,分布式系統的難點是什么。具體解決方案是什么?比如我們為了保證數據的最終一致性,我們要用分布式事務,那具體的實現方法是如何保證數據最終一致性的,如何做補償、比如對賬系統設計。不僅僅從技術角度,還可以涉及到業務上,比如如何進行資金流轉、風控等。
?
2.系統穩定性如何保證,比如某個服務掛掉,如何保證業務正常進行?
這個涉及到如何進行系統限流、降級。當然限流方法原理比如漏桶方法、令牌桶方法等原理和優勢和劣勢要了解、以及具體的實現方法是什么要知道。除了技術方法,還涉及到運維上緊急處理線上問題的預案
?
這一面比較寬泛,所以自由發揮的空間很大,但是自己的知識廣度還是要夠,要了解一些技術或者經典方案,這樣才能有得聊。
?
第五面? hr面 大概40分鐘
?
1.介紹一下自己
?
2.介紹你的項目(我還以為hr不會問這些)主要從業務上來說就好,不要說特別技術的東西。
?
3.你們團隊大概有多少人,你在團隊中是什么角色?
?
4.你為什么離職(每段經歷都要提一下,我這邊只有兩段經歷,誠實回答就好,但是千萬不要說上一家公司或者領導的壞話,這個不是面試技巧,我個人覺得你已經離職了,無論什么原因離職,但是離職了就沒必要去評價任何人,特別是把這種評價告訴另一個人)
?
5.你的職業規劃大概說一下(短期和長期)
?
6.自己評價一下你在前幾家公司的工作表現和領導對你的評價。如果領導和你評價不一致,你覺得是什么原因?
?
7.你對下一個工作的期望(這個問題其實我覺得你應該在找工作前就想好,你來面試一個公司肯定是有過考慮的,可以在剛開始面試時候為了了解面試流程挑幾個公司練手,但是之后一定不要海投)
?
8、評價一下之前的面試官(這些都是你之后的同事或者領導,雖然我覺得這很片面,但是還是不要有過多的負面情緒,理由和4點一樣,不要隨意去評價一個人,特別是你連面都沒見過)
?
?
總結
筆試我沒有寫上,因為是一面結束之后補的筆試,難度就是leetcode簡單和中等。
1.面試是一個相互交流的過程,不卑不亢就好,當然保持謙虛總沒錯。
2.Java基礎我沒寫上,是因為一些基礎知識我覺得無論面試還是工作都得自己理解,還有spring的源碼 mybatis源碼這些是加分項,不是必須,但建議還是看一看源碼,特別是spring源碼,太經典了。
3.每個面試官注重的東西不一樣,所以有些知識可能我們了解不深,如果遇到不會直接說不會,千萬不要瞎扯。因為問題會層層深入,不要給人留下不真誠的印象。
4.平時積累很重要,學習是對抗焦慮的唯一方法。
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的阿里-蚂蚁金服社招面经的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell脚本练习集合1
- 下一篇: excel文件如何取消打开密码