2020成功入職阿里:阿里的三套Java研發崗面試題總結(文末有答案)

之前過了幾個簡單的簡歷面,所以總結了幾套面試的試題供大家分享。覺得挺不錯的,也給大家做個參考。一起過來看看吧

第一套(文末有答案)

一面:

HashMap 實現原理,ConcurrentHashMap 實現原理

紅黑樹,為什麼允許局部不平衡TCP,UDP 區別,為什麼可靠和不可靠

一次 HTTP 請求的全過程,包括域名解析、定位主機等

TCP 三次握手

MySQL 事務是什麼?四大特性,四大隔離級別

ConcurrentHashMap 和 Hashtable 區別

spring IOC 和 AOP,以及各有什麼優點

有哪幾種常用的線程池

什麼情況下使用 Runnable 和 Thread 創建線程,Runnable 和 Callable 的區別

線程方法中的異常如何處理,副線程可以捕獲到嗎

synchronized 和鎖的區別,什麼情況下使用 synchronized 和 ReentrantLock

JVM 的對象分配在哪個區,Class 對象分配在哪個區

二面:

常用的設計模式介紹:單例模式、裝飾者模式等

Java 會出現內存溢出嗎?什麼情況下會出現?

雙親委派模型,為什麼這樣做?

對象什麼情況下進入老年代?

快速排序說一下過程

AOP 實現原理:動態代理

BIO、NIO(如何實現的)、AIO

消息中間件有哪些?他們之間的優劣勢?

Redis,持久化框架

棧和隊列

垃圾回收算法

MySQL 的索引

Tomcat 類加載器

OOM 內存洩漏,什麼情況下會出現,如何排查

三面:

介紹你實踐的性能優化案例,以及你的優化思路

微服務和 SOA 的區別,優劣勢

SQL 慢查詢的優化方案,索引和表的優化方案。

MySQL 與 MongoDB 的區別,海量數據的存儲

緩存框架,例如 Redis、Memcached 之間的區別,優劣勢比較

請描述一致 hash 算法

分佈式 session 的共享方案有哪些,有什麼優劣勢

高併發情況,系統的優化方案有哪些,以及優先級排序。

第二套(文末有答案)

一面:

ArrayList 和 linkedlist 區別。ArrayList 是否會越界。

ArrayList 和 hashset 有何區別。

hashset 存的數是有序的麼。

volatile 和 synchronized 區別

多態的原理

數據庫引擎 Innodb 和 myisam 區別

Redis 的數據結構

Redis 是基於內存的麼

Redis 的 list zset 的底層實現

http 和 https 的區別,tcp 握手過程

jvm 垃圾回收算法手寫冒泡

手寫單例包括多線程下

Java 線程間怎麼實現同步,notify()與 notifyAll()的區別

數據庫的悲觀鎖和樂觀鎖應用場景。

排序算法的複雜度,快速排序非遞歸實現。

海量數據過濾,黑名單過濾一個 url。

二面:

list set map 底層使用什麼實現的有哪些典型實現

hashmap 擴容是怎麼擴容的,為什麼是 2 的冪

concurrenthashmap 為什麼線程安全,採用了什麼措施應對高併發

線程池的參數有什麼意義

Springmvc 請求流程

Spring IOC,autowired 如何實現

Spring boot SpringClound 的基本架構設計

Dubbo 和 SpringClound 的區別在哪裡,優劣勢

說說一致性 Hash 算法

三面:

分佈式架構設計哪方面比較熟悉

講講你對 CDN 的瞭解,與分佈式緩存和本地緩存的區別

多線程和高併發有什麼區別

高併發下有哪些常用的技術解決方案,舉三個高併發場景設計例子

說一個你對 JVM 優化的實際案例,包括實際步驟和方法

Docker 有使用過和了解嗎?Docker 和 JVM 的區別是什麼?

Docker 的基本架構和使用場景?

負載均衡有接觸過哪些開源框架,優劣勢是什麼?

數據庫分庫分表需要怎樣來實現?

數據庫端的常用優化策略?

如果讓你來設計秒殺系統,你的設計思路是什麼,為什麼要這樣設計?

面試總結:

java 的基礎知識點,主要圍繞在集合類和多線程等:ArrayList、LinkedList、HashSet、HashpMap的數據結果,以及如何擴容、以及 ConcurrentHashMap 相關的多線程安全等。

JVM 的內存分配、幾個常見的垃圾回收算法以及原理、還有對應的 JVM 優化參數需要牢記。 網絡:TCP 的三次握手等網絡都必問,重點掌握網絡協議。

Redis:作為分佈式緩存的主力,基本也是 BAT 每次必考,重點是 Redis 的數據結構、內存、 算法、持久化,以及與別的緩存 memcached 的優劣勢。

多線程:狀態流轉、多線程的實現,以及與高併發的區別等。Spring 框架問得是最多的,BAT 非常喜歡問,重點掌握。

最後就是分佈式架構設計 常用的分佈式架構設計方案:單點登錄、分佈式緩存、存儲、消息的選型,還有就是數據 庫端的優化方案(需要提前瞭解)。 最好能提前瞭解深入一個類似秒殺這樣的項目,如果面試官問到類似的項目,你能把設計 思路講出來,這對你的面試結果是很大的加分項。

第三套(文末有答案)

一面

自我介紹

談一個你覺得你學到最多的項目,使用了什麼技術,挑戰在哪裡

Spring 的 bean 的作用域?(比如:singleton,prototype 等)

Spring 的 IOC 實現原理?沒有無參構造函數能實例化嗎?有參構造函數注入?(xml 配置)

通過反射,談到了方法區,然後,類加載機制?

synchronized 的實現原理?Volatile 能保證原子性嗎?為什麼?

hashmap 和 concurrenthashmap 的 size 方法怎麼實現的

JVM 的調優參數?(-Xmn,-Xms 等具體參數設置)

線程池優點,參數,如果我想實現 newSingleThreadPoll,應該怎麼配置,構造方法傳什麼 參數

mysql 死鎖,怎麼解決,如果不要求執行順序,死鎖怎麼解決

ioc 和 aop 原理

線程的五態?轉化過程?

TCP 三次握手,為什麼三次握手?

JVM 內存分區?(主存,工作內存,堆,棧。。。。)

講一下 GC?

為什麼要用老年代和新生代?

新生代進入老生代的情況?

新生代的分區?

二面

變著法的問了一大堆線程池的知識 (主要考對應的參數)

java 內存模型

lock 和 synchronized 的區別

reentrantlock 的實現

hashmap 和 concurrenthashmap

B+樹和 B-樹的區別

複合索引 聚集索引和非聚集索引的區別?

數據庫索引 主鍵和唯一索引有什麼區別

索引失效條件,什麼時候該建立索引

innDB 和 MyISAM 的區別?

線程安全(阻塞同步,非阻塞同步,無同步)

三面

主要高併發和分佈式架構設計

服務器模型以及之間的區別

線程池的設計

線程池如何做負載均衡

如何實現線程調度算法

複合索引是如何實現的?

如何設計單點登錄,單點登錄的原理

redis 緩存和 memcached 緩存的區別,以及各自的優劣勢

大型高併發網站如何做性能優化:Web 性能、數據庫性能、應用服務器性能等。

實踐中如何優化 MySQL:SQL 語句及索引的優化、數據庫表結構的優化、系統配置的優化、 硬件的優化

分庫分表和讀寫分離如何設計

微服務架構:dubbo 和 springcloud 的區別,以及各自對應的使用場景。

總結:

希望這三套面試題能夠給在求職路上的你一些幫助,我也幫大家整理了部分的答案和更多的面試題給大家,希望大家在面試的時候也能夠用到。Java 面試題 400 多頁 pdf 文檔關注私信【555】獲取,還可領取更多Java面試題資料

2020成功入職阿里:阿里的三套Java研發崗面試題總結(文末有答案)


分享到:


相關文章: