在過去很長一段時間內,國內網際網路一直處於三足鼎立狀態,BAT即百度、阿里巴巴、騰訊。而現在,湧現了越來越多的具有強競爭力的新興網際網路公司,螞蟻金服就是其中之一。下面分享以下今年螞蟻金服最新的面試真題,題目來源於幾位已經成功入職螞蟻金服的程式設計師,希望能夠給大家帶來一些啟發!
對於專案介紹問題的一些相關經驗:
對於程式設計師來說,大部分的網際網路公司面試的第一個問題就是專案介紹,這似乎已經成為了面試的開門題,實際上面試官問這個問題,主要考察的是我們個人的概述能力和全域性視野。有些人在遇到這個問題時,總是抱怨自己每天在堆業務,沒有成長。事實上,很多情況下確定在堆業務,但並不是沒有成長的。並非做中介軟體或者技術架構才是成長,例如我們的需求分析能力,溝通共同作業能力,產品思維能力,抽象建模能力等,都是一個非常重要的硬實力。
那麼我們在問專案時,怎麼回答才好呢?建議最好做到以下幾點:
- 明確專案是做什麼的
- 明確專案的價值。(為什麼做這個專案,它解決了使用者什麼痛點,它帶來什麼價值?)
- 明確專案的功能。(這個專案涉及哪些功能?)
- 明確專案的技術。(這個專案用到哪些技術?)
- 明確個人在專案中的位置和作用。(你在這個專案的承擔角色?)
- 明確專案的整體架構。
- 明確專案的優缺點,如果重新設計你會如何設計。
- 明確專案的亮點。(這個專案有什麼亮點?)
- 明確技術成長。(你通過這個專案有哪些技術成長?)
Java 基礎:
- List和Set的區別
- HashSet是如何保證不重複的
- HashMap是執行緒安全的嗎,為什麼不是執行緒安全的(最好畫圖說明多執行緒環境下不安全)?
- HashMap的擴容過程
- HashMap1.7與1.8的區別,說明1.8做了哪些優化,如何優化的?
- final finally finalize
- 強參照、軟參照、弱參照、虛參照
- Java反射
- Arrays.sort實現原理 和 Collection實現原理
- LinkedHashMap 的應用
- cloneable介面實現原理
- 異常分類以及處理機制
- wait和sleep的區別
- 陣列在記憶體中如何分配
Java 並行:
- synchronized的實現原理以及鎖優化
- volatile的實現原理
- Java的訊號燈
- synchronized在靜態方法和普通方法的區別
- 怎麼實現所有執行緒在等待某個事件的發生才會去執行?
- CAS ? CAS有什麼缺陷?如何解決?
- synchronized和lock有什麼區別?
- Hashtable是怎麼加鎖的?
- HashMap的並行問題?
- ConcurrenHashMap介紹?1.8中為什麼要用紅黑樹?
- AQS
- 如何檢測死鎖?怎麼預防死鎖?
- Java記憶體模型?
- 如何保證多執行緒下i++結果正確?
- 執行緒池的種類,區別和使用場景?
- 分析執行緒池的實現原理和執行緒的排程過程?
- 執行緒池如何調優,最大數目如何確認?
- ThreadLocal原理,用的時候需要注意什麼?
- CountDownLatch和CyclicBarrier 的用法,以及相互之間的差別?
- LockSupport工具
- Condition介面及其實現原理
- Fork/Join框架的理解
- 分段鎖的原理鎖力度減小的思考
- 八種阻塞佇列以及各個阻塞佇列的特性
Spring 相關:
- BeanF actory和FactoryBean ?
- Spring IOC的理解,其初始化過程?
- BeanFactory和ApplicationContext ?
- Spring Bean的生命週期?如何被管理的?
- Spring Bean的載入過程是怎樣的?
- 如果要你實現Spring AOP ,請問怎麼實現?
- 如果要你實現Spring I0C ,你會注意哪些問題?
- Spring是如何管理事務的?事務管理機制?
- Spring的不同事務傳播行為有哪些?幹什麼用的?
- Spring中用到了哪些設計模式
- Spring MVC的工作原理
- Spring迴圈注入的原理
- Spring AOP的理解,各個術語,他們是怎麼相互工作的?
- Spring如何保證Controller並行的安全?
Netty 相關:
- BIO、NIO和AIO
- Netty的各大元件
- Netty的執行緒模型
- TCP粘包/拆包的原因及解決方法
- 瞭解哪幾種序列化協定?包括使用場景和如何去選擇?
- Netty的零拷貝實現
- Netty的高效能表現在哪些方面?
分散式相關:
- Dubbo的底層實現原理和機制
- 描述一-個服務 從釋出到被消費的詳細過程
- 分散式系統怎麼做服務治理
- 介面的冪等性的概念
- 訊息中介軟體如何解決訊息丟失問題
- Dubbo的服務請求失敗怎麼處理
- 重連機制會不會造成錯誤
- 對分散式事務的理解
- 如何實現負載均衡,有哪些演演算法可以實現?
- Zookeeper的用途,選舉的原理是什麼?
- 資料的垂直拆分水平拆分。
- zookeep er原理和適用場景
- zookeeper watch機制
- redis
- 分散式叢集下如何做到唯一-序列號
- 如何做一個分散式鎖
- 用過哪些MQ ,怎麼用的,和其他mq比較有什麼優缺點, MQ的連線是執行緒安全的嗎
- MQ系統的資料如何保證不失
- 列舉出你能想到的資料庫分庫分表策略;分庫分表後,如何解決全表查詢的問題
- zookeeper的選舉策略
- 全域性ID
資料庫:
- mysq|分頁有什麼優化
- 悲觀鎖、樂觀鎖
- 組合索引,最左原則
- mysql的表鎖、行鎖
- mysql效能優化
- mysql的索引分類: B+ , hash ;什麼情況用什麼索引
- 事務的特性和隔離級別
快取:
- Redis用過哪些資料資料,以及Redis底層怎麼實現
- Redis快取穿透,快取雪崩
- 如何使用Redis來實現分散式鎖
- Redis的並行競爭問題如何解決
- Redis持久化的幾種方式,優缺點是什麼,怎麼實現的
- Redis的快取失效策略
- Redis叢集,高可用,原理
- Redis快取分片
- Redis的資料淘汰策略
JVM:
- 詳細jvm記憶體模型
- 講講什麼情況下回出現記憶體溢位,記憶體漏失?
- 說說Java執行緒棧
- JVM年輕代到年老代的晉升過程的判斷條件是什麼呢?
- JVM出現 fullGC 很頻繁,怎麼去線上排查問題?
- 類載入為什麼要使用雙親委派模式?有沒有什麼場景是打破了這個模式?
- 類的範例化順序
- JVM垃圾回收機制,何時觸發MinorGC等操作?
- JVM中一次完整的GC流程(從ygc到fgc)是怎樣的?
- 各種回收器,各自優缺點,重點CMS、G1
- 各種回收演演算法
- OOM錯誤,stackoverflow錯誤,permgen space錯誤
最後總結
最後的總結就給一些建議吧:
- 可以去leetcode上刷題換換思路
- 八大排序演演算法一定要手敲一遍(快排,堆排尤其重要)
- 瞭解一些新興的技術
- 面試之後面試官都會問你有沒有什麼問題,千萬不要沒問題,也別傻乎乎的問一些敏感問題
- 瞭解你要面試的公司的產品及競爭產品
如果您需要獲取的話,一件三聯之後檢視下圖中的內容
思維腦圖展示:
◆JVM和效能優化:
Java面試核心資料整理: