摘要:以下為大家整理了阿里巴巴史上最全的面試題,涉及大量面試知識(shí)點(diǎn)和相關(guān)試題。的內(nèi)存結(jié)構(gòu),和比例。多線程多線程的幾種實(shí)現(xiàn)方式,什么是線程安全。點(diǎn)擊這里有一套答案版的多線程試題。線上系統(tǒng)突然變得異常緩慢,你如何查找問題。
以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識(shí)點(diǎn)和相關(guān)試題。
JAVA基礎(chǔ)
JAVA中的幾種基本數(shù)據(jù)類型是什么,各自占用多少字節(jié)。
String類能被繼承嗎,為什么。
String,Stringbuffer,StringBuilder的區(qū)別。
ArrayList和LinkedList有什么區(qū)別。
講講類的實(shí)例化順序,比如父類靜態(tài)數(shù)據(jù),構(gòu)造函數(shù),字段,子類靜態(tài)數(shù)據(jù),構(gòu)造函數(shù),字
段,當(dāng)new的時(shí)候,他們的執(zhí)行順序。
用過哪些Map類,都有什么區(qū)別,HashMap是線程安全的嗎,并發(fā)下使用的Map是什么,他們
內(nèi)部原理分別是什么,比如存儲(chǔ)方式,hashcode,擴(kuò)容,默認(rèn)容量等。
JAVA8的ConcurrentHashMap為什么放棄了分段鎖,有什么問題嗎,如果你來設(shè)計(jì),你如何
設(shè)計(jì)。
有沒有有順序的Map實(shí)現(xiàn)類,如果有,他們是怎么保證有序的。
抽象類和接口的區(qū)別,類可以繼承多個(gè)類么,接口可以繼承多個(gè)接口么,類可以實(shí)現(xiàn)多個(gè)接口
么。
繼承和聚合的區(qū)別在哪。
IO模型有哪些,講講你理解的nio ,他和bio,aio的區(qū)別是啥,談?wù)剅eactor模型。
反射的原理,反射創(chuàng)建類實(shí)例的三種方式是什么。
反射中,Class.forName和ClassLoader區(qū)別 。
描述動(dòng)態(tài)代理的幾種實(shí)現(xiàn)方式,分別說出相應(yīng)的優(yōu)缺點(diǎn)。
動(dòng)態(tài)代理與cglib實(shí)現(xiàn)的區(qū)別。
為什么CGlib方式可以對接口實(shí)現(xiàn)代理。
final的用途。
寫出三種單例模式實(shí)現(xiàn) 。
如何在父類中為子類自動(dòng)完成所有的hashcode和equals實(shí)現(xiàn)?這么做有何優(yōu)劣。
請結(jié)合OO設(shè)計(jì)理念,談?wù)勗L問修飾符public、private、protected、default在應(yīng)用設(shè)
計(jì)中的作用。
深拷貝和淺拷貝區(qū)別。
數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu)描述,各自的時(shí)間復(fù)雜度。
error和exception的區(qū)別,CheckedException,RuntimeException的區(qū)別。
請列出5個(gè)運(yùn)行時(shí)異常。
在自己的代碼中,如果創(chuàng)建一個(gè)java.lang.String類,這個(gè)類是否可以被類加載器加
載?為什么。
說一說你對java.lang.Object對象中hashCode和equals方法的理解。在什么場景下需
要重新實(shí)現(xiàn)這兩個(gè)方法。
在jdk1.5中,引入了泛型,泛型的存在是用來解決什么問題。
這樣的a.hashcode() 有什么用,與a.equals(b)有什么關(guān)系。
有沒有可能2個(gè)不相等的對象有相同的hashcode。
Java中的HashSet內(nèi)部是如何工作的。
什么是序列化,怎么序列化,為什么序列化,反序列化會(huì)遇到什么問題,如何解決。
java8的新特性。
JVM知識(shí)
什么情況下會(huì)發(fā)生棧內(nèi)存溢出。
JVM的內(nèi)存結(jié)構(gòu),Eden和Survivor比例。
JVM內(nèi)存為什么要分成新生代,老年代,持久代。新生代中為什么要分為Eden和Survivor。
JVM中一次完整的GC流程是怎樣的,對象如何晉升到老年代,說說你知道的幾種主要的JVM參
數(shù)。
你知道哪幾種垃圾收集器,各自的優(yōu)缺點(diǎn),重點(diǎn)講下cms和G1,包括原理,流程,優(yōu)缺點(diǎn)。
垃圾回收算法的實(shí)現(xiàn)原理。
當(dāng)出現(xiàn)了內(nèi)存溢出,你怎么排錯(cuò)。
JVM內(nèi)存模型的相關(guān)知識(shí)了解多少,比如重排序,內(nèi)存屏障,happen-before,主內(nèi)存,工作
內(nèi)存等。
簡單說說你了解的類加載器,可以打破雙親委派么,怎么打破。
講講JAVA的反射機(jī)制。
你們線上應(yīng)用的JVM參數(shù)有哪些。
g1和cms區(qū)別,吞吐量優(yōu)先和響應(yīng)優(yōu)先的垃圾收集器選擇。
怎么打出線程棧信息。
請解釋如下jvm參數(shù)的含義:
-server -Xms512m -Xmx512m -Xss1024K
-XX:PermSize=256m -XX:MaxPermSize=512m -
XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 -
XX:+UseCMSInitiatingOccupancyOnly。
開源框架知識(shí)
簡單講講tomcat結(jié)構(gòu),以及其類加載器流程,線程模型等。
tomcat如何調(diào)優(yōu),涉及哪些參數(shù) 。
講講Spring加載流程。
Spring AOP的實(shí)現(xiàn)原理。
講講Spring事務(wù)的傳播屬性。
Spring如何管理事務(wù)的。
Spring怎么配置事務(wù)(具體說出一些關(guān)鍵的xml 元素)。
說說你對Spring的理解,非單例注入的原理?它的生命周期?循環(huán)注入的原理,aop的實(shí)現(xiàn)原
理,說說aop中的幾個(gè)術(shù)語,它們是怎么相互工作的。
Springmvc 中DispatcherServlet初始化過程。
netty的線程模型,netty如何基于reactor模型上實(shí)現(xiàn)的。
為什么選擇netty。
什么是TCP粘包,拆包。解決方式是什么。
netty的fashwheeltimer的用法,實(shí)現(xiàn)原理,是否出現(xiàn)過調(diào)用不夠準(zhǔn)時(shí),怎么解決。
netty的心跳處理在弱網(wǎng)下怎么辦。
netty的通訊協(xié)議是什么樣的。
springmvc用到的注解,作用是什么,原理。
springboot啟動(dòng)機(jī)制。
點(diǎn)擊這里有一套答案版的Spring試題。
操作系統(tǒng)
Linux系統(tǒng)下你關(guān)注過哪些內(nèi)核參數(shù),說說你知道的。
Linux下IO模型有幾種,各自的含義是什么。
epoll和poll有什么區(qū)別。
平時(shí)用到哪些Linux命令。
用一行命令查看文件的最后五行。
用一行命令輸出正在運(yùn)行的java進(jìn)程。
介紹下你理解的操作系統(tǒng)中線程切換過程。
進(jìn)程和線程的區(qū)別。
top 命令之后有哪些內(nèi)容,有什么作用。
線上CPU爆高,請問你如何找到問題所在。
多線程
多線程的幾種實(shí)現(xiàn)方式,什么是線程安全。
volatile的原理,作用,能代替鎖么。
畫一個(gè)線程的生命周期狀態(tài)圖。
sleep和wait的區(qū)別。
sleep和sleep(0)的區(qū)別。
Lock與Synchronized的區(qū)別 。
synchronized的原理是什么,一般用在什么地方(比如加在靜態(tài)方法和非靜態(tài)方法的區(qū)別,靜
態(tài)方法和非靜態(tài)方法同時(shí)執(zhí)行的時(shí)候會(huì)有影響嗎),解釋以下名詞:重排序,自旋鎖,偏向鎖,輕
量級鎖,可重入鎖,公平鎖,非公平鎖,樂觀鎖,悲觀鎖。
用過哪些原子類,他們的原理是什么。
JUC下研究過哪些并發(fā)工具,講講原理。
用過線程池嗎,如果用過,請說明原理,并說說newCache和newFixed有什么區(qū)別,構(gòu)造函
數(shù)的各個(gè)參數(shù)的含義是什么,比如coreSize,maxsize等。
線程池的關(guān)閉方式有幾種,各自的區(qū)別是什么。
假如有一個(gè)第三方接口,有很多個(gè)線程去調(diào)用獲取數(shù)據(jù),現(xiàn)在規(guī)定每秒鐘最多有10個(gè)線程同
時(shí)調(diào)用它,如何做到。
spring的controller是單例還是多例,怎么保證并發(fā)的安全。
用三個(gè)線程按順序循環(huán)打印abc三個(gè)字母,比如abcabcabc。
ThreadLocal用過么,用途是什么,原理是什么,用的時(shí)候要注意什么。
如果讓你實(shí)現(xiàn)一個(gè)并發(fā)安全的鏈表,你會(huì)怎么做。
有哪些無鎖數(shù)據(jù)結(jié)構(gòu),他們實(shí)現(xiàn)的原理是什么。
講講java同步機(jī)制的wait和notify。
CAS機(jī)制是什么,如何解決ABA問題。
多線程如果線程掛住了怎么辦。
countdowlatch和cyclicbarrier的內(nèi)部原理和用法,以及相互之間的差別(比如
countdownlatch的await方法和是怎么實(shí)現(xiàn)的)。
對AbstractQueuedSynchronizer了解多少,講講加鎖和解鎖的流程,獨(dú)占鎖和公平所
加鎖有什么不同。
使用synchronized修飾靜態(tài)方法和非靜態(tài)方法有什么區(qū)別。
簡述ConcurrentLinkedQueue和LinkedBlockingQueue的用處和不同之處。
導(dǎo)致線程死鎖的原因?怎么解除線程死鎖。
非常多個(gè)線程(可能是不同機(jī)器),相互之間需要等待協(xié)調(diào),才能完成某種工作,問怎么設(shè)計(jì)這種協(xié)調(diào)方案。
用過讀寫鎖嗎,原理是什么,一般在什么場景下用。
開啟多個(gè)線程,如果保證順序執(zhí)行,有哪幾種實(shí)現(xiàn)方式,或者如何保證多個(gè)線程都執(zhí)行完
再拿到結(jié)果。
延遲隊(duì)列的實(shí)現(xiàn)方式,delayQueue和時(shí)間輪算法的異同。
點(diǎn)擊這里有一套答案版的多線程試題。
TCP與HTTP
http1.0和http1.1有什么區(qū)別。
TCP三次握手和四次揮手的流程,為什么斷開連接要4次,如果握手只有兩次,會(huì)出現(xiàn)什么。
TIME_WAIT和CLOSE_WAIT的區(qū)別。
說說你知道的幾種HTTP響應(yīng)碼,比如200, 302, 404。
當(dāng)你用瀏覽器打開一個(gè)鏈接(如:http://www.javastack.cn)的時(shí)候,計(jì)算機(jī)做了哪些工作步驟。
TCP/IP如何保證可靠性,說說TCP頭的結(jié)構(gòu)。
如何避免瀏覽器緩存。
如何理解HTTP協(xié)議的無狀態(tài)性。
簡述Http請求get和post的區(qū)別以及數(shù)據(jù)包格式。
HTTP有哪些method
簡述HTTP請求的報(bào)文格式。
HTTP的長連接是什么意思。
HTTPS的加密方式是什么,講講整個(gè)加密解密流程。
Http和https的三次握手有什么區(qū)別。
什么是分塊傳送。
Session和cookie的區(qū)別。
點(diǎn)擊這里有一套答案版的試題。
架構(gòu)設(shè)計(jì)與分布式
用java自己實(shí)現(xiàn)一個(gè)LRU。
分布式集群下如何做到唯一序列號(hào)。
設(shè)計(jì)一個(gè)秒殺系統(tǒng),30分鐘沒付款就自動(dòng)關(guān)閉交易。
如何使用redis和zookeeper實(shí)現(xiàn)分布式鎖?有什么區(qū)別優(yōu)缺點(diǎn),會(huì)有什么問題,分別適用什么
場景。(延伸:如果知道redlock,講講他的算法實(shí)現(xiàn),爭議在哪里)
如果有人惡意創(chuàng)建非法連接,怎么解決。
分布式事務(wù)的原理,優(yōu)缺點(diǎn),如何使用分布式事務(wù),2pc 3pc 的區(qū)別,解決了哪些問題,還有
哪些問題沒解決,如何解決,你自己項(xiàng)目里涉及到分布式事務(wù)是怎么處理的。
什么是一致性hash。
什么是restful,講講你理解的restful。
如何設(shè)計(jì)一個(gè)良好的API。
如何設(shè)計(jì)建立和保持100w的長連接。
解釋什么是MESI協(xié)議(緩存一致性)。
說說你知道的幾種HASH算法,簡單的也可以。
什么是paxos算法, 什么是zab協(xié)議。
一個(gè)在線文檔系統(tǒng),文檔可以被編輯,如何防止多人同時(shí)對同
一份文檔進(jìn)行編輯更新。
線上系統(tǒng)突然變得異常緩慢,你如何查找問題。
說說你平時(shí)用到的設(shè)計(jì)模式。
Dubbo的原理,有看過源碼么,數(shù)據(jù)怎么流轉(zhuǎn)的,怎么實(shí)現(xiàn)集群,負(fù)載均衡,服務(wù)注冊
和發(fā)現(xiàn),重試轉(zhuǎn)發(fā),快速失敗的策略是怎樣的 。
一次RPC請求的流程是什么。
自己實(shí)現(xiàn)過rpc么,原理可以簡單講講。Rpc要解決什么問題。
異步模式的用途和意義。
編程中自己都怎么考慮一些設(shè)計(jì)原則的,比如開閉原則,以及在工作中的應(yīng)用。
設(shè)計(jì)一個(gè)社交網(wǎng)站中的“私信”功能,要求高并發(fā)、可擴(kuò)展等等。 畫一下架構(gòu)圖。
MVC模式,即常見的MVC框架。
聊下曾經(jīng)參與設(shè)計(jì)的服務(wù)器架構(gòu)并畫圖,談?wù)動(dòng)龅降膯栴},怎么解決的。
應(yīng)用服務(wù)器怎么監(jiān)控性能,各種方式的區(qū)別。
如何設(shè)計(jì)一套高并發(fā)支付方案,架構(gòu)如何設(shè)計(jì)。
如何實(shí)現(xiàn)負(fù)載均衡,有哪些算法可以實(shí)現(xiàn)。
Zookeeper的用途,選舉的原理是什么。
Zookeeper watch機(jī)制原理。
Mybatis的底層實(shí)現(xiàn)原理。
請思考一個(gè)方案,實(shí)現(xiàn)分布式環(huán)境下的countDownLatch。
后臺(tái)系統(tǒng)怎么防止請求重復(fù)提交。
描述一個(gè)服務(wù)從發(fā)布到被消費(fèi)的詳細(xì)過程。
講講你理解的服務(wù)治理。
如何做到接口的冪等性。
如何做限流策略,令牌桶和漏斗算法的使用場景。
什么叫數(shù)據(jù)一致性,你怎么理解數(shù)據(jù)一致性。
分布式服務(wù)調(diào)用方,不依賴服務(wù)提供方的話,怎么處理服務(wù)方掛掉后,大量無效資源請求
的浪費(fèi),如果只是服務(wù)提供方吞吐不高的時(shí)候該怎么做,如果服務(wù)掛了,那么一會(huì)重啟,該怎
么做到最小的資源浪費(fèi),流量半開的實(shí)現(xiàn)機(jī)制是什么。
dubbo的泛化調(diào)用怎么實(shí)現(xiàn)的,如果是你,你會(huì)怎么做。
遠(yuǎn)程調(diào)用會(huì)有超時(shí)現(xiàn)象,如果做到優(yōu)雅的控制,JDK自帶的超時(shí)機(jī)制有哪些,怎么實(shí)現(xiàn)的。
算法
10億個(gè)數(shù)字里里面找最小的10個(gè)。
有1億個(gè)數(shù)字,其中有2個(gè)是重復(fù)的,快速找到它,時(shí)間和空間要最優(yōu)。
2億個(gè)隨機(jī)生成的無序整數(shù),找出中間大小的值。
給一個(gè)不知道長度的(可能很大)輸入字符串,設(shè)計(jì)一種方案,將重復(fù)的字符排重。
遍歷二叉樹。
有3n+1個(gè)數(shù)字,其中3n個(gè)中是重復(fù)的,只有1個(gè)是不重復(fù)的,怎么找出來。
寫一個(gè)字符串(如:www.javastack.cn)反轉(zhuǎn)函數(shù)。
常用的排序算法,快排,歸并、冒泡。 快排的最優(yōu)時(shí)間復(fù)雜度,最差復(fù)雜度。冒泡排序的
優(yōu)化方案。
二分查找的時(shí)間復(fù)雜度,優(yōu)勢。
一個(gè)已經(jīng)構(gòu)建好的TreeSet,怎么完成倒排序。
什么是B+樹,B-樹,列出實(shí)際的使用場景。
一個(gè)單向鏈表,刪除倒數(shù)第N個(gè)數(shù)據(jù)。
200個(gè)有序的數(shù)組,每個(gè)數(shù)組里面100個(gè)元素,找出top20的元素。
單向鏈表,查找中間的那個(gè)元素。
數(shù)據(jù)庫知識(shí)
數(shù)據(jù)庫隔離級別有哪些,各自的含義是什么,MYSQL默認(rèn)的隔離級別是是什么。
什么是幻讀。
MYSQL有哪些存儲(chǔ)引擎,各自優(yōu)缺點(diǎn)。
高并發(fā)下,如何做到安全的修改同一行數(shù)據(jù)。
樂觀鎖和悲觀鎖是什么,INNODB的標(biāo)準(zhǔn)行級鎖有哪2種,解釋其含義。
SQL優(yōu)化的一般步驟是什么,怎么看執(zhí)行計(jì)劃,如何理解其中各個(gè)字段的含義。
數(shù)據(jù)庫會(huì)死鎖嗎,舉一個(gè)死鎖的例子,mysql怎么解決死鎖。
MYsql的索引原理,索引的類型有哪些,如何創(chuàng)建合理的索引,索引如何優(yōu)化。
聚集索引和非聚集索引的區(qū)別。
select for update 是什么含義,會(huì)鎖表還是鎖行或是其他。
為什么要用Btree實(shí)現(xiàn),它是怎么分裂的,什么時(shí)候分裂,為什么是平衡的。
數(shù)據(jù)庫的ACID是什么。
某個(gè)表有近千萬數(shù)據(jù),CRUD比較慢,如何優(yōu)化。
Mysql怎么優(yōu)化table scan的。
如何寫sql能夠有效的使用到復(fù)合索引。
mysql中in 和exists 區(qū)別。
數(shù)據(jù)庫自增主鍵可能的問題。
MVCC的含義,如何實(shí)現(xiàn)的。
你做過的項(xiàng)目里遇到分庫分表了嗎,怎么做的,有用到中間件么,比如sharding jdbc等,他
們的原理知道么。
MYSQL的主從延遲怎么解決。
消息隊(duì)列
消息隊(duì)列的使用場景。
消息的重發(fā),補(bǔ)充策略。
如何保證消息的有序性。
用過哪些MQ,和其他mq比較有什么優(yōu)缺點(diǎn),MQ的連接是線程安全的嗎,你們公司的MQ服務(wù)
架構(gòu)怎樣的。
MQ系統(tǒng)的數(shù)據(jù)如何保證不丟失。
rabbitmq如何實(shí)現(xiàn)集群高可用。
kafka吞吐量高的原因。
kafka 和其他消息隊(duì)列的區(qū)別,kafka 主從同步怎么實(shí)現(xiàn)。
利用mq怎么實(shí)現(xiàn)最終一致性。
使用kafka有沒有遇到什么問題,怎么解決的。
MQ有可能發(fā)生重復(fù)消費(fèi),如何避免,如何做到冪等。
MQ的消息延遲了怎么處理,消息可以設(shè)置過期時(shí)間么,過期了你們一般怎么處理。
緩存
常見的緩存策略有哪些,如何做到緩存(比如redis)與DB里的數(shù)據(jù)一致性,你們項(xiàng)目中用到了
什么緩存系統(tǒng),如何設(shè)計(jì)的。
如何防止緩存擊穿和雪崩。
緩存數(shù)據(jù)過期后的更新如何設(shè)計(jì)。
redis的list結(jié)構(gòu)相關(guān)的操作。
Redis的數(shù)據(jù)結(jié)構(gòu)都有哪些。
Redis的使用要注意什么,講講持久化方式,內(nèi)存設(shè)置,集群的應(yīng)用和優(yōu)劣勢,淘汰策略等。
redis2和redis3的區(qū)別,redis3內(nèi)部通訊機(jī)制。
當(dāng)前redis集群有哪些玩法,各自優(yōu)缺點(diǎn),場景。
Memcache的原理,哪些數(shù)據(jù)適合放在緩存中。
redis和memcached 的內(nèi)存管理的區(qū)別。
Redis的并發(fā)競爭問題如何解決,了解Redis事務(wù)的CAS操作嗎。
Redis的選舉算法和流程是怎樣的。
redis的持久化的機(jī)制,aof和rdb的區(qū)別。
redis的集群怎么同步的數(shù)據(jù)的。
知道哪些redis的優(yōu)化操作。
Reids的主從復(fù)制機(jī)制原理。
Redis的線程模型是什么。
請思考一個(gè)方案,設(shè)計(jì)一個(gè)可以控制緩存總體大小的自動(dòng)適應(yīng)的本地緩存。
如何看待緩存的使用(本地緩存,集中式緩存),簡述本地緩存和集中式緩存和優(yōu)缺點(diǎn)。
本地緩存在并發(fā)使用時(shí)的注意事項(xiàng)。
搜索
elasticsearch了解多少,說說你們公司es的集群架構(gòu),索引數(shù)據(jù)大小,分片有多少,以及一些
調(diào)優(yōu)手段 。elasticsearch的倒排索引是什么。
elasticsearch 索引數(shù)據(jù)多了怎么辦,如何調(diào)優(yōu),部署。
elasticsearch是如何實(shí)現(xiàn)master選舉的。
詳細(xì)描述一下Elasticsearch索引文檔的過程。
詳細(xì)描述一下Elasticsearch搜索的過程。
Elasticsearch在部署時(shí),對Linux的設(shè)置有哪些優(yōu)化方法?
lucence內(nèi)部結(jié)構(gòu)是什么。
關(guān)注以下公眾號(hào)回復(fù) "答案" 獲取全部面試題整理及參考答案。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76882.html
摘要:更是中高級面試過程中經(jīng)常會(huì)問的技術(shù),無論你是否用過,你都必須熟悉。下面我為大家準(zhǔn)備了一些常見的的面試題,一些是我經(jīng)常問別人的,一些是我過去面試遇到的一些問題,總結(jié)給大家,希望對大家能有所幫助。 想往高處走,怎么能不懂 Dubbo? Dubbo是國內(nèi)最出名的分布式服務(wù)框架,也是 Java 程序員必備的必會(huì)的框架之一。Dubbo 更是中高級面試過程中經(jīng)常會(huì)問的技術(shù),無論你是否用過,你都必須...
摘要:好不容易在月號(hào)這天中午點(diǎn)左右接到了來自阿里的面試電話。這里會(huì)不斷收集和更新基礎(chǔ)相關(guān)的面試題,目前已收集題。面試重難點(diǎn)的和的打包過程多線程機(jī)制機(jī)制系統(tǒng)啟動(dòng)過程,啟動(dòng)過程等等掃清面試障礙最新面試經(jīng)驗(yàn)分享,此為第一篇,開篇。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 各大公司 Java 后端開發(fā)面試題總結(jié) 各大公司 Jav...
閱讀 3940·2021-10-12 10:12
閱讀 2899·2021-09-10 11:18
閱讀 3683·2019-08-30 15:54
閱讀 2816·2019-08-30 15:53
閱讀 648·2019-08-30 13:54
閱讀 977·2019-08-30 13:21
閱讀 2269·2019-08-30 12:57
閱讀 1699·2019-08-30 11:10