史上最全阿里 Java 面試題總結
以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識點和相關試題。
JAVA基礎
-
JAVA中的幾種基本資料型別是什麼,各自佔用多少位元組。
-
String類能被繼承嗎,為什麼。
-
String,Stringbuffer,StringBuilder的區別。
-
ArrayList和LinkedList有什麼區別。
-
講講類的例項化順序,比如父類靜態資料,建構函式,欄位,子類靜態資料,建構函式,字 段,當new的時候,他們的執行順序。
-
用過哪些Map類,都有什麼區別,HashMap是執行緒安全的嗎,併發下使用的Map是什麼,他們 內部原理分別是什麼,比如儲存方式,hashcode,擴容,預設容量等。
-
JAVA8的ConcurrentHashMap為什麼放棄了分段鎖,有什麼問題嗎,如果你來設計,你如何 設計。
-
有沒有有順序的Map實現類,如果有,他們是怎麼保證有序的。
-
抽象類和介面的區別,類可以繼承多個類麼,介面可以繼承多個介面麼,類可以實現多個介面 麼。
-
繼承和聚合的區別在哪。
-
IO模型有哪些,講講你理解的nio ,他和bio,aio的區別是啥,談談reactor模型。
-
反射的原理,反射建立類例項的三種方式是什麼。
-
反射中,Class.forName和ClassLoader區別 。
-
描述動態代理的幾種實現方式,分別說出相應的優缺點。
-
動態代理與cglib實現的區別。
-
為什麼CGlib方式可以對介面實現代理。
-
final的用途。
-
寫出三種單例模式實現 。
-
如何在父類中為子類自動完成所有的hashcode和equals實現?這麼做有何優劣。
-
請結合OO設計理念,談談訪問修飾符public、private、protected、default在應用設 計中的作用。
-
深拷貝和淺拷貝區別。
-
陣列和連結串列資料結構描述,各自的時間複雜度。
-
error和exception的區別,CheckedException,RuntimeException的區別。
-
請列出5個執行時異常。
-
在自己的程式碼中,如果建立一個java.lang.String類,這個類是否可以被類載入器加 載?為什麼。
-
說一說你對java.lang.Object物件中hashCode和equals方法的理解。在什麼場景下需 要重新實現這兩個方法。
-
在jdk1.5中,引入了泛型,泛型的存在是用來解決什麼問題。
-
這樣的a.hashcode() 有什麼用,與a.equals(b)有什麼關係。
-
有沒有可能2個不相等的物件有相同的hashcode。
-
Java中的HashSet內部是如何工作的。
-
什麼是序列化,怎麼序列化,為什麼序列化,反序列化會遇到什麼問題,如何解決。
-
java8的新特性。
JVM知識
-
什麼情況下會發生棧記憶體溢位。
-
JVM的記憶體結構,Eden和Survivor比例。
-
JVM記憶體為什麼要分成新生代,老年代,持久代。新生代中為什麼要分為Eden和Survivor。
-
JVM中一次完整的GC流程是怎樣的,物件如何晉升到老年代,說說你知道的幾種主要的JVM參 數。
-
你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms和G1,包括原理,流程,優缺點。
-
垃圾回收演算法的實現原理。
-
當出現了記憶體溢位,你怎麼排錯。
-
JVM記憶體模型的相關知識瞭解多少,比如重排序,記憶體屏障,happen-before,主記憶體,工作 記憶體等。
-
簡單說說你瞭解的類載入器,可以打破雙親委派麼,怎麼打破。
-
講講JAVA的反射機制。
-
你們線上應用的JVM引數有哪些。
-
g1和cms區別,吞吐量優先和響應優先的垃圾收集器選擇。
-
怎麼打出執行緒棧資訊。
-
請解釋如下jvm引數的含義: -server -Xms512m -Xmx512m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m - XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 - XX:+UseCMSInitiatingOccupancyOnly。
開源框架知識
-
簡單講講tomcat結構,以及其類載入器流程,執行緒模型等。
-
tomcat如何調優,涉及哪些引數 。
-
講講Spring載入流程。
-
Spring AOP的實現原理。
-
講講Spring事務的傳播屬性。
-
Spring如何管理事務的。
-
Spring怎麼配置事務(具體說出一些關鍵的xml 元素)。
-
說說你對Spring的理解,非單例注入的原理?它的生命週期?迴圈注入的原理,aop的實現原 理,說說aop中的幾個術語,它們是怎麼相互工作的。
-
Springmvc 中DispatcherServlet初始化過程。
-
netty的執行緒模型,netty如何基於reactor模型上實現的。
-
為什麼選擇netty。
-
什麼是TCP粘包,拆包。解決方式是什麼。
-
netty的fashwheeltimer的用法,實現原理,是否出現過呼叫不夠準時,怎麼解決。
-
netty的心跳處理在弱網下怎麼辦。
-
netty的通訊協議是什麼樣的。
-
springmvc用到的註解,作用是什麼,原理。
-
springboot啟動機制。
-
點選這裡有一套答案版的Spring試題。
作業系統
-
Linux系統下你關注過哪些核心引數,說說你知道的。
-
Linux下IO模型有幾種,各自的含義是什麼。
-
epoll和poll有什麼區別。
-
平時用到哪些Linux命令。
-
用一行命令檢視檔案的最後五行。
-
用一行命令輸出正在執行的java程序。
-
介紹下你理解的作業系統中執行緒切換過程。
-
程序和執行緒的區別。
-
top 命令之後有哪些內容,有什麼作用。
-
線上CPU爆高,請問你如何找到問題所在。
多執行緒
-
多執行緒的幾種實現方式,什麼是執行緒安全。
-
volatile的原理,作用,能代替鎖麼。
-
畫一個執行緒的生命週期狀態圖。
-
sleep和wait的區別。
-
sleep和sleep(0)的區別。
-
Lock與Synchronized的區別 。
-
synchronized的原理是什麼,一般用在什麼地方(比如加在靜態方法和非靜態方法的區別,靜 態方法和非靜態方法同時執行的時候會有影響嗎),解釋以下名詞:重排序,自旋鎖,偏向鎖,輕 量級鎖,可重入鎖,公平鎖,非公平鎖,樂觀鎖,悲觀鎖。
-
用過哪些原子類,他們的原理是什麼。
-
JUC下研究過哪些併發工具,講講原理。
-
用過執行緒池嗎,如果用過,請說明原理,並說說newCache和newFixed有什麼區別,構造函 數的各個引數的含義是什麼,比如coreSize,maxsize等。
-
執行緒池的關閉方式有幾種,各自的區別是什麼。
-
假如有一個第三方介面,有很多個執行緒去呼叫獲取資料,現在規定每秒鐘最多有10個執行緒同 時呼叫它,如何做到。
-
spring的controller是單例還是多例,怎麼保證併發的安全。
-
用三個執行緒按順序迴圈列印abc三個字母,比如abcabcabc。
-
ThreadLocal用過麼,用途是什麼,原理是什麼,用的時候要注意什麼。
-
如果讓你實現一個併發安全的連結串列,你會怎麼做。
-
有哪些無鎖資料結構,他們實現的原理是什麼。
-
講講java同步機制的wait和notify。
-
CAS機制是什麼,如何解決ABA問題。
-
多執行緒如果執行緒掛住了怎麼辦。
-
countdowlatch和cyclicbarrier的內部原理和用法,以及相互之間的差別(比如 countdownlatch的await方法和是怎麼實現的)。
-
對AbstractQueuedSynchronizer瞭解多少,講講加鎖和解鎖的流程,獨佔鎖和公平所 加鎖有什麼不同。
-
使用synchronized修飾靜態方法和非靜態方法有什麼區別。
-
簡述ConcurrentLinkedQueue和LinkedBlockingQueue的用處和不同之處。
-
導致執行緒死鎖的原因?怎麼解除執行緒死鎖。
-
非常多個執行緒(可能是不同機器),相互之間需要等待協調,才能完成某種工作,問怎麼設計這種協調方案。
-
用過讀寫鎖嗎,原理是什麼,一般在什麼場景下用。
-
開啟多個執行緒,如果保證順序執行,有哪幾種實現方式,或者如何保證多個執行緒都執行完 再拿到結果。
-
延遲佇列的實現方式,delayQueue和時間輪演算法的異同。
-
點選這裡有一套答案版的多執行緒試題。
TCP與HTTP
-
http1.0和http1.1有什麼區別。
-
TCP三次握手和四次揮手的流程,為什麼斷開連線要4次,如果握手只有兩次,會出現什麼。
-
TIME_WAIT和CLOSE_WAIT的區別。
-
說說你知道的幾種HTTP響應碼,比如200, 302, 404。
-
當你用瀏覽器開啟一個連結(如:http://www.javastack.cn)的時候,計算機做了哪些工作步驟。
-
TCP/IP如何保證可靠性,說說TCP頭的結構。
-
如何避免瀏覽器快取。
-
如何理解HTTP協議的無狀態性。
-
簡述Http請求get和post的區別以及資料包格式。
-
HTTP有哪些method
-
簡述HTTP請求的報文格式。
-
HTTP的長連線是什麼意思。
-
HTTPS的加密方式是什麼,講講整個加密解密流程。
-
Http和https的三次握手有什麼區別。
-
什麼是分塊傳送。
-
Session和cookie的區別。
-
點選這裡有一套答案版的試題。
架構設計與分散式
-
用java自己實現一個LRU。
-
分散式叢集下如何做到唯一序列號。
-
設計一個秒殺系統,30分鐘沒付款就自動關閉交易。
-
如何使用redis和zookeeper實現分散式鎖?有什麼區別優缺點,會有什麼問題,分別適用什麼 場景。(延伸:如果知道redlock,講講他的演算法實現,爭議在哪裡)
-
如果有人惡意建立非法連線,怎麼解決。
-
分散式事務的原理,優缺點,如何使用分散式事務,2pc 3pc 的區別,解決了哪些問題,還有 哪些問題沒解決,如何解決,你自己專案裡涉及到分散式事務是怎麼處理的。
-
什麼是一致性hash。
-
什麼是restful,講講你理解的restful。
-
如何設計一個良好的API。
-
如何設計建立和保持100w的長連線。
-
解釋什麼是MESI協議(快取一致性)。
-
說說你知道的幾種HASH演算法,簡單的也可以。
-
什麼是paxos演算法, 什麼是zab協議。
-
一個線上文件系統,文件可以被編輯,如何防止多人同時對同 一份文件進行編輯更新。
-
線上系統突然變得異常緩慢,你如何查詢問題。
-
說說你平時用到的設計模式。
-
Dubbo的原理,有看過原始碼麼,資料怎麼流轉的,怎麼實現叢集,負載均衡,服務註冊 和發現,重試轉發,快速失敗的策略是怎樣的 。
-
一次RPC請求的流程是什麼。
-
自己實現過rpc麼,原理可以簡單講講。Rpc要解決什麼問題。
-
非同步模式的用途和意義。
-
程式設計中自己都怎麼考慮一些設計原則的,比如開閉原則,以及在工作中的應用。
-
設計一個社交網站中的“私信”功能,要求高併發、可擴充套件等等。 畫一下架構圖。
-
MVC模式,即常見的MVC框架。
-
聊下曾經參與設計的伺服器架構並畫圖,談談遇到的問題,怎麼解決的。
-
應用伺服器怎麼監控效能,各種方式的區別。
-
如何設計一套高併發支付方案,架構如何設計。
-
如何實現負載均衡,有哪些演算法可以實現。
-
Zookeeper的用途,選舉的原理是什麼。
-
Zookeeper watch機制原理。
-
Mybatis的底層實現原理。
-
請思考一個方案,實現分散式環境下的countDownLatch。
-
後臺系統怎麼防止請求重複提交。
-
描述一個服務從釋出到被消費的詳細過程。
-
講講你理解的服務治理。
-
如何做到介面的冪等性。
-
如何做限流策略,令牌桶和漏斗演算法的使用場景。
-
什麼叫資料一致性,你怎麼理解資料一致性。
-
分散式服務呼叫方,不依賴服務提供方的話,怎麼處理服務方掛掉後,大量無效資源請求 的浪費,如果只是服務提供方吞吐不高的時候該怎麼做,如果服務掛了,那麼一會重啟,該怎 麼做到最小的資源浪費,流量半開的實現機制是什麼。
-
dubbo的泛化呼叫怎麼實現的,如果是你,你會怎麼做。
-
遠端呼叫會有超時現象,如果做到優雅的控制,JDK自帶的超時機制有哪些,怎麼實現的。
演算法
-
10億個數字裡裡面找最小的10個。
-
有1億個數字,其中有2個是重複的,快速找到它,時間和空間要最優。
-
2億個隨機生成的無序整數,找出中間大小的值。
-
給一個不知道長度的(可能很大)輸入字串,設計一種方案,將重複的字元排重。
-
遍歷二叉樹。
-
有3n+1個數字,其中3n箇中是重複的,只有1個是不重複的,怎麼找出來。
-
寫一個字串(如:www.javastack.cn)反轉函式。
-
常用的排序演算法,快排,歸併、冒泡。 快排的最優時間複雜度,最差複雜度。氣泡排序的 優化方案。
-
二分查詢的時間複雜度,優勢。
-
一個已經構建好的TreeSet,怎麼完成倒排序。
-
什麼是B+樹,B-樹,列出實際的使用場景。
-
一個單向連結串列,刪除倒數第N個數據。
-
200個有序的陣列,每個數組裡面100個元素,找出top20的元素。
-
單向連結串列,查詢中間的那個元素。
資料庫知識
-
資料庫隔離級別有哪些,各自的含義是什麼,MYSQL預設的隔離級別是是什麼。
-
什麼是幻讀。
-
MYSQL有哪些儲存引擎,各自優缺點。
-
高併發下,如何做到安全的修改同一行資料。
-
樂觀鎖和悲觀鎖是什麼,INNODB的標準行級鎖有哪2種,解釋其含義。
-
SQL優化的一般步驟是什麼,怎麼看執行計劃,如何理解其中各個欄位的含義。
-
資料庫會死鎖嗎,舉一個死鎖的例子,mysql怎麼解決死鎖。
-
MYsql的索引原理,索引的型別有哪些,如何建立合理的索引,索引如何優化。
-
聚集索引和非聚集索引的區別。
-
select for update 是什麼含義,會鎖表還是鎖行或是其他。
-
為什麼要用Btree實現,它是怎麼分裂的,什麼時候分裂,為什麼是平衡的。
-
資料庫的ACID是什麼。
-
某個表有近千萬資料,CRUD比較慢,如何優化。
-
Mysql怎麼優化table scan的。
-
如何寫sql能夠有效的使用到複合索引。
-
mysql中in 和exists 區別。
-
資料庫自增主鍵可能的問題。
-
MVCC的含義,如何實現的。
-
你做過的專案裡遇到分庫分表了嗎,怎麼做的,有用到中介軟體麼,比如sharding jdbc等,他 們的原理知道麼。
-
MYSQL的主從延遲怎麼解決。
訊息佇列
-
訊息佇列的使用場景。
-
訊息的重發,補充策略。
-
如何保證訊息的有序性。
-
用過哪些MQ,和其他mq比較有什麼優缺點,MQ的連線是執行緒安全的嗎,你們公司的MQ服務 架構怎樣的。
-
MQ系統的資料如何保證不丟失。
-
rabbitmq如何實現叢集高可用。
-
kafka吞吐量高的原因。
-
kafka 和其他訊息佇列的區別,kafka 主從同步怎麼實現。
-
利用mq怎麼實現最終一致性。
-
使用kafka有沒有遇到什麼問題,怎麼解決的。
-
MQ有可能發生重複消費,如何避免,如何做到冪等。
-
MQ的訊息延遲了怎麼處理,訊息可以設定過期時間麼,過期了你們一般怎麼處理。
快取
-
常見的快取策略有哪些,如何做到快取(比如redis)與DB裡的資料一致性,你們專案中用到了 什麼快取系統,如何設計的。
-
如何防止快取擊穿和雪崩。
-
快取資料過期後的更新如何設計。
-
redis的list結構相關的操作。
-
Redis的資料結構都有哪些。
-
Redis的使用要注意什麼,講講持久化方式,記憶體設定,叢集的應用和優劣勢,淘汰策略等。
-
redis2和redis3的區別,redis3內部通訊機制。
-
當前redis叢集有哪些玩法,各自優缺點,場景。
-
Memcache的原理,哪些資料適合放在快取中。
-
redis和memcached 的記憶體管理的區別。
-
Redis的併發競爭問題如何解決,瞭解Redis事務的CAS操作嗎。
-
Redis的選舉演算法和流程是怎樣的。
-
redis的持久化的機制,aof和rdb的區別。
-
redis的叢集怎麼同步的資料的。
-
知道哪些redis的優化操作。
-
Reids的主從複製機制原理。
-
Redis的執行緒模型是什麼。
-
請思考一個方案,設計一個可以控制快取總體大小的自動適應的本地快取。
-
如何看待快取的使用(本地快取,集中式快取),簡述本地快取和集中式快取和優缺點。
-
本地快取在併發使用時的注意事項。
-
點選這裡有一套答案版的Redis試題。
搜尋
-
elasticsearch瞭解多少,說說你們公司es的叢集架構,索引資料大小,分片有多少,以及一些 調優手段 。elasticsearch的倒排索引是什麼。
-
elasticsearch 索引資料多了怎麼辦,如何調優,部署。
-
elasticsearch是如何實現master選舉的。
-
詳細描述一下Elasticsearch索引文件的過程。
-
詳細描述一下Elasticsearch搜尋的過程。
-
Elasticsearch在部署時,對Linux的設定有哪些優化方法?
-
lucence內部結構是什麼。
以上面試題整理來源於網路,僅供給大家參考,沒有答案哦。大家對比一下,自己還差多遠?從而提高面試成功率。