阿里巴巴面經、面試流程、面試題

從去年年中一直到今年年初,我面阿里總共面了5-6次,經歷了三次完整的4輪技術面 + 1輪HR面,目前將面試過程和常見題目記錄一下,供參考。

面試流程

面試輪次

阿里社招一般都是P6級別以上,技術面4輪以上 + 1輪HR面。

阿里校招一般都是P4、P5級別,技術面3輪 + 1輪HR面。

面試側重點

以社招P6爲例,來看看每輪考察的側重點。

一面

一面面試官一般是你組內師兄或組長,主要考察Java基礎、中間件原理以及項目經歷;面試時長30-60分鐘。
Java基礎和中間件考察範圍會在文末附上。

項目經歷這塊,選擇一個具有代表性的講解即可,這裏指的代表性,建議選擇和應聘崗位相關度稍高,難度稍大的項目,保證講解時長處於10-15分鐘左右爲宜。若項目講解時長較短,其他考察點(Java基礎和中間件原理等)會涉及的非常深入,加大面試難度。

二面

二面面試官一般是團隊負責招聘的技術或其他組組長,有時甚至就是一面面試官,主要考察算法,算法這塊的背考就刷LeetCode或牛客網即可,保證刷完300題較爲保險,至少要刷完100道。

LeetCode:https://leetcode-cn.com/problemset/all/ (中文版)
牛客網:https://www.nowcoder.com/ta/coding-interviews?page=1 (劍指offer)

算法這塊的考察一般是面試官發送面試鏈接,面試者進入鏈接然後寫代碼即可,一般題量在1-3道,面試時長30-60分鐘。偶爾需要開視頻哦。

筆試代碼一般不強制要求100%可運行,但是儘可能保證自己的代碼可順利運行,包括main方法的測試用例。這裏切記,不會寫的地方,寧可寫思路,也不要寫存在重大bug的代碼。

三面

三面面試官一般爲你所在部門的主管,側重考查項目難點、中間件底層實現以及場景題。從三面開始,考題就比較寬泛了,一般45分鐘左右。

這裏一定要準備好項目中遇到的難點問題,如果準備的不好,面試官會diss你,甚至面試評價中會寫上幾筆,影響你最終的錄取。

有的同學可能會問,我們參與的很多項目都是偏業務,基本沒什麼難點。如果業務量比較大,如QPS達到萬級別及以上,你可以往高可用等保障策略上講解。如果業務量確實較小,可以往復雜的功能實現上講解,這裏可"發揮"的空間就比較大了,實在目前沒有複雜的功能,可以往後期可以優化或即將要做的功能上講解。

四面

四面面試官一般是你部門主管的上級或其他部門的主管,側重中間件底層、場景題以及個人發展規劃等,開放性較大,一般30分鐘左右。

比較有意思的是,某一次四面面試官問,你最近在看什麼書,最想推薦給我的是哪一本,爲什麼?這裏就需要各位平時在日常開發之餘,還是需要不斷充電啊。

HR面

HR一般是你所在部門的HRG,考察一般側重你個人發展,常見問題:

  • 最近幾次離職的原因;
  • 當前的職級、薪資情況以及期望薪資;
  • 你認爲在當前公司中遇到的最大的挑戰是什麼;
  • 你在當前公司得到了哪些提升;
  • 你對未來的職業規劃是怎樣的;
  • 你認爲你和其他求職者相比有哪些優點;
  • 項目講解(這裏不要偏向技術,偏業務的講解就行,偶爾會diss你,要抗住);
  • 你到公司最大的期望是什麼;

經過四輪技術 + 一輪HR大概率穩了,但是偶爾可能會有一些小插曲,比如HC被鎖、大老闆針對你的面試評價保持懷疑態度等都有可能導致你的offer審批不下來。

HR面之後一週左右HR會通知你的offer方案,這個時候你經過前面的面試,對你的崗位工作也有了一定的瞭解,然後可以參考自己的offer方案再決定是否接下offer。

當你接下口頭offer後,後續會安排體檢(一週)和背調(一週),完成之後會發放書面offer,這個時候就妥了,等着入職吧。

面試寶典

Java基礎、中間件基礎

以下是面試期間整理的面試題目錄,具體內容就不貼了,建議大家自己動手整理,加深印象。

  • 爲什麼重寫equals()方法就必須重寫hashCode()方法?
  • Object有哪些方法?
  • 接口和抽象類的區別,什麼情況下用接口或抽象類?
  • 爲什麼String設計成不可變?String 和 StringBuilder、StringBuffer 的區別?
  • String s = new String(“abc”) 和 String s = “abc” 的區別?
  • Arraylist、HashMap的初始容量、加載因子、擴容增量?
  • 有序的Map有哪些?爲什麼TreeMap是有序的?哪些集合是線程安全的?
  • HashMap的底層數據結構,是如何插入的?哈希衝突解決方案?爲什麼是非線程安全的?
  • HashMap爲什麼初始容量總是2的n次方?
  • ConcurrentHashMap 和 Hashtable 的區別?
  • synchronized的使用方式、底層實現以及JDK1.6的優化?
  • 談談 synchronized和ReentrantLock 的區別?
  • Java內存模型及volatile實現原理?
  • volatile和synchronized的區別,volatile一定能替代synchronized嗎?
  • CountDownLatch、CyclicBarrier、Semaphore、LockSupport和Exchanger?
  • ThreadLocal實現原理強引用、軟引用、弱引用、虛引用?
  • JDK提供的併發容器CopyOnWrite、ArrayListBlockingQueue(阻塞隊列FIFO)ConcurrentLinkedQueue(非阻塞隊列)等實現方式?
  • CAS
  • ReentrantLock的實現?
  • 多線程的實現方式,start()是立刻啓動嗎?
  • ThreadPoolExecutor的重要參數?執行順序?如何設置參數?
  • 什麼是死鎖,死鎖的四個必要條件?
  • Java內存區域?
  • 對象的訪問定位有哪兩種方式?
  • 如何判斷對象是否死亡?(兩種方法)
  • 垃圾收集算法?常見的垃圾回收器?
  • JVM參數?JVM調優?Full GC的觸發條件?
  • 一個線程OOM後,其他線程還能正常運行嗎?
  • 類加載過程?類加載器?Java字節碼文件結構?
  • BIO(Blocking I/O)、僞異步IO、NIO(New I/O)、AIO?
  • 數據庫查詢緩慢是什麼原因,如何優化?
  • 索引實現?
  • 大表優化?
  • 如何實現MySQL的讀寫分離?
  • 數據庫的樂觀鎖和悲觀鎖?
  • MySQL的鎖機制?
  • 數據庫事務的特性(ACID)和隔離級別?
  • MVCC實現可重複讀?
  • RC隔離級別下,讀A行數據,updateA 行數據,讀B行數據,updateB行數據,再updateA行數據,請問加了幾次鎖?對A加鎖是在什麼時候加了幾次鎖?
  • MySQL的事務實現?何時加行鎖?
  • Redis數據結構及各結構的內部實現?
  • Redis爲什麼快?
  • Redis通信協議?
  • Redis事務?
  • Redis 的過期策略以及內存淘汰機制?
  • Redis持久化方式?
  • Redis主從複製機制redis 集羣模式的工作原理能說一下麼?在集羣模式下,redis 的 key 是如何尋址的?分佈式尋址都有哪些算法?瞭解一致性 hash 算法嗎?
  • Redis 和 DB 一致性?緩存穿透?緩存擊穿?緩存雪崩?緩存清洗?併發競爭Key?
  • Spring的優點,用到了哪些設計模式,IOC和AOP的理解?
  • Bean的生命週期?
  • 解釋Spring支持的幾種bean的作用域?
  • BeanFactory、FactoryBean的區別?
  • Spring如何處理單例Bean的循環依賴?
  • SpringMVC、Mybatis 執行過程?
  • Spring事務?
  • SpringBoot最大的優勢(三連問)?
  • Spring Cloud Eureka 服務發現?
  • Ribbon負載均衡?
  • 爲什麼使用Dubbo?
  • Dubbo服務註冊原理?
  • Dubbo提供的負載均衡策略?
  • 如何基於 dubbo 進行服務治理、服務降級、失敗重試以及超時重試?
  • RabbitMQ Exchange 類型?
  • 如何保證消息順序性?
  • 爲什麼使用消息隊列?消息隊列的缺點?常見的消息隊列組件比較?
  • MQ如何保證高可用?
  • MQ如何處理重複消費?
  • RabbitMQ消息堆積?
  • MQ如何保證可靠傳輸?
  • ES的分佈式架構原理?
  • ES寫入數據的工作原理是什麼啊?
  • 底層的 lucene 介紹一下唄?倒排索引瞭解嗎?
  • ES在數據量很大的情況下(數十億級別)如何提高查詢效率?
  • ES 生產集羣的部署架構是什麼?
  • 分佈式事務?
  • 使用哪些組件或者方法可以提升網站性能、可用性以及併發量?
  • 設計高可用(系統7×24小時不間斷服務)系統的常用手段?
  • 如何設計高併發系統?
  • CAP和BASE理論?
  • 分佈式 ID 生成器?
  • 基於 Redis 的分佈式鎖?
  • Redis分佈式鎖過期了但業務沒執行完?
  • 內存溢出排查方法?CPU高負載排查方法?
  • 如何保障雙11狂歡下的99.99%高可用?
  • 秒殺系統設計?

以上目錄能覆蓋一大部分考題,更加深入的底層原理、場景題等需要平時工作的沉澱思考以及框架源碼的閱讀總結。

建議平時工作之餘,堅持閱讀優秀的框架源碼,這對面試答題以及日後編碼具有極大的效應。以下列出部分推薦的源碼:

  • Java基礎:集合、JUC
  • DB:Redis、MongoDB、MySQL(任選其一,推薦Redis,相對簡單)
  • ORM:Mybatis、Spring Data Jpa、Hibernate (任選其一,選平時工作中使用頻率來選即可)
  • MQ:RabbitMQ、Kafka、RocketMQ、ActiveMQ(任選其一,選平時工作中使用頻率來選即可,但還是推薦Kafka)
  • J2EE:Spring、Spring Boot
  • Web框架:Spring MVC、Spring Security、Spring Webflux(一般瞭解mvc即可,其他看興趣)
  • 註冊中心:Eureka、Zookeeper(任選其一,推薦Eureka)
  • 分佈式事務:TCC Transaction、Seata、Fesar(任選其一,主要了解實現思路)
  • 其他:Zuul、Hystrix、Redisson、Netty、Dubbo、Ribbon、ES、HBase

常考的已加粗,重點閱讀總結。

具體的阿里內推機會可關注公衆號進行了解和交流。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章