【阿里天貓、螞蟻、釘釘面試題目】
不會(huì)做別著急:文末有答案
1. junit用法,before,beforeClass,after, afterClass的執(zhí)行順序
2. 分布式鎖
3. nginx的請(qǐng)求轉(zhuǎn)發(fā)算法,如何配置根據(jù)權(quán)重轉(zhuǎn)發(fā)
4. 用hashmap實(shí)現(xiàn)redis有什么問(wèn)題(死鎖,死循環(huán),可用ConcurrentHashmap)
5. 線程的狀態(tài)
5. 線程的阻塞的方式
6. sleep和wait的區(qū)別
7. hashmap的底層實(shí)現(xiàn)
8. 一萬(wàn)個(gè)人搶100個(gè)紅包,如何實(shí)現(xiàn)(不用隊(duì)列),如何保證2個(gè)人不能搶到同一個(gè)紅包,可用分布式鎖
9. java內(nèi)存模型,垃圾回收機(jī)制,不可達(dá)算法
10. 兩個(gè)Integer的引用對(duì)象傳給一個(gè)swap方法在方法內(nèi)部交換引用,返回后,兩個(gè)引用的值是否會(huì)發(fā)現(xiàn)變化
11. aop的底層實(shí)現(xiàn),動(dòng)態(tài)代理是如何動(dòng)態(tài),假如有100個(gè)對(duì)象,如何動(dòng)態(tài)的為這100個(gè)對(duì)象代理
12. 是否用過(guò)maven install。 maven test。git(make install是安裝本地jar包)
13. tomcat的各種配置,如何配置docBase
14. spring的bean配置的幾種方式
15. web.xml的配置
16. spring的監(jiān)聽器。
17. zookeeper的實(shí)現(xiàn)機(jī)制,有緩存,如何存儲(chǔ)注冊(cè)服務(wù)的
18. IO會(huì)阻塞嗎?readLine是不是阻塞的
19. 用過(guò)spring的線程池還是java的線程池?
20. 字符串的格式化方法 (20,21這兩個(gè)問(wèn)題問(wèn)的太低級(jí)了)
21. 時(shí)間的格式化方法
22. 定時(shí)器用什么做的
23. 線程如何退出結(jié)束
24. java有哪些鎖?樂(lè)觀鎖 悲觀鎖 synchronized 可重入鎖 讀寫鎖,用過(guò)reentrantlock嗎?reentrantlock與synmchronized的區(qū)別
25. ThreadLocal的使用場(chǎng)景
26. java的內(nèi)存模型,垃圾回收機(jī)制
27. 為什么線程執(zhí)行要調(diào)用start而不是直接run(直接run,跟普通方法沒什么區(qū)別,先調(diào)start,run才會(huì)作為一個(gè)線程方法運(yùn)行)
28. qmq消息的實(shí)現(xiàn)機(jī)制(qmq是去哪兒網(wǎng)自己封裝的消息隊(duì)列)
29. 遍歷hashmap的三種方式
30. jvm的一些命令
31. memcache和redis的區(qū)別
32. mysql的行級(jí)鎖加在哪個(gè)位置
33. ConcurrentHashmap的鎖是如何加的?是不是分段越多越好
34. myisam和innodb的區(qū)別(innodb是行級(jí)鎖,myisam是表級(jí)鎖)
35. mysql其他的性能優(yōu)化方式
36. linux系統(tǒng)日志在哪里看
37. 如何查看網(wǎng)絡(luò)進(jìn)程
38. 統(tǒng)計(jì)一個(gè)整數(shù)的二進(jìn)制表示中bit為1的個(gè)數(shù)
39. jvm內(nèi)存模型,java內(nèi)存模型
40. 如何把java內(nèi)存的數(shù)據(jù)全部dump出來(lái)
41. 如何手動(dòng)觸發(fā)全量回收垃圾,如何立即觸發(fā)垃圾回收
42. hashmap如果只有一個(gè)寫其他全讀會(huì)出什么問(wèn)題
43. git rebase
44. mongodb和hbase的區(qū)別
45. 如何解決并發(fā)問(wèn)題
46. volatile的用途
47. java線程池(好像之前我的理解有問(wèn)題)
48. mysql的binlog
49. 代理模式
50. mysql是如何實(shí)現(xiàn)事務(wù)的
51. 讀寫分離何時(shí)強(qiáng)制要讀主庫(kù),讀哪個(gè)從庫(kù)是通過(guò)什么方式?jīng)Q定的,從庫(kù)的同步mysql用的什么方式
52. mysql的存儲(chǔ)引擎
53. mysql的默認(rèn)隔離級(jí)別,其他隔離級(jí)別
54. 將一個(gè)鏈表反轉(zhuǎn)(用三個(gè)指針,但是每次只發(fā)轉(zhuǎn)一個(gè))
55. spring Aop的實(shí)現(xiàn)原理,具體說(shuō)說(shuō)
56. 何時(shí)會(huì)內(nèi)存泄漏,內(nèi)存泄漏會(huì)拋哪些異常
57. 是否用過(guò)Autowire注解
58. spring的注入bean的方式
59. sql語(yǔ)句各種條件的執(zhí)行順序,如select, where, order by, group by
60. select xx from xx where xx and xx order by xx limit xx; 如何優(yōu)化這個(gè)(看explain)
61. 四則元算寫代碼
62. 統(tǒng)計(jì)100G的ip文件中出現(xiàn)ip次數(shù)最多的100個(gè)ip
63. zookeeper的事物,結(jié)點(diǎn),服務(wù)提供方掛了如何告知消費(fèi)方
64. 5臺(tái)服務(wù)器如何選出leader(選舉算法)
65. 適配器和代理模式的區(qū)別
66. 讀寫鎖
67. static加鎖
68. 事務(wù)隔離級(jí)別
69. 門面模式,類圖(外觀模式)
70. mybatis如何映射表結(jié)構(gòu)
71. 二叉樹遍歷
72. 主從復(fù)制
73. mysql引擎區(qū)別
74. 靜態(tài)內(nèi)部類加載到了哪個(gè)區(qū)?方法區(qū)
75. class文件編譯后加載到了哪
76. web的http請(qǐng)求如何整體響應(yīng)時(shí)間變長(zhǎng)導(dǎo)致處理的請(qǐng)求數(shù)變少,該如何處理?用隊(duì)列,當(dāng)處理不了那么多http請(qǐng)求時(shí)將請(qǐng)求放到隊(duì)列
中慢慢處理,web如何實(shí)現(xiàn)隊(duì)列
77. 線程安全的單例模式
78. 快速排序性能考慮
79. volatile關(guān)鍵字用法
80. 求表的size,或做數(shù)據(jù)統(tǒng)計(jì)可用什么存儲(chǔ)引擎
81. 讀多寫少可用什么引擎
82. 假如要統(tǒng)計(jì)多個(gè)表應(yīng)該用什么引擎
83. concurrenhashmap求size是如何加鎖的,如果剛求完一段后這段發(fā)生了變化該如何處理
84. 1000個(gè)蘋果放10個(gè)籃子,怎么放,能讓我拿到所有可能的個(gè)數(shù)
85. 可重入的讀寫鎖,可重入是如何實(shí)現(xiàn)的?
86. 是否用過(guò)NIO
87. java的concurrent包用過(guò)沒
88. sting s=new string("abc")分別在堆棧上新建了哪些對(duì)象
89. java虛擬機(jī)的區(qū)域分配,各區(qū)分別存什么
90. 分布式事務(wù)(JTA)
91. threadlocal使用時(shí)注意的問(wèn)題(ThreadLocal和Synchonized都用于解決多線程并發(fā)訪問(wèn)。但是ThreadLocal與synchronized有本質(zhì)的區(qū)別。synchronized是利用鎖的機(jī)制,使變量或代碼塊在某一時(shí)該只能被一個(gè)線程訪問(wèn)。而ThreadLocal為每一個(gè)線程都提供了變量的副本,使得每個(gè)線程在某一時(shí)間訪問(wèn)到的并不是同一個(gè)對(duì)象,這樣就隔離了多個(gè)線程對(duì)數(shù)據(jù)的數(shù)據(jù)共享。而Synchronized卻正好相反,它用于在多個(gè)線程間通信時(shí)能夠獲得數(shù)據(jù)共享)
92. java有哪些容器(集合,tomcat也是一種容器)
93. 二分查找算法
94. myisam的優(yōu)點(diǎn),和innodb的區(qū)別
95. redis能存哪些類型
96. http協(xié)議格式,get和post的區(qū)別
97. 可重入鎖中對(duì)應(yīng)的wait和notify
98. redis能把內(nèi)存空間交換進(jìn)磁盤中嗎(這個(gè)應(yīng)該是可以的,但是那個(gè)面試官非跟我說(shuō)不可以)
99. java線程池中基于緩存和基于定長(zhǎng)的兩種線程池,當(dāng)請(qǐng)求太多時(shí)分別是如何處理的?定長(zhǎng)的事用的隊(duì)列,如果隊(duì)列也滿了呢?交換進(jìn)磁盤?基于緩存的線程池解決方法呢?
100. synchronized加在方法上用的什么鎖
101. 可重入鎖中的lock和trylock的區(qū)別
102. innodb對(duì)一行數(shù)據(jù)的讀會(huì)枷鎖嗎?不枷鎖,讀實(shí)際讀的是副本
103. redis做緩存是分布式存的?不同的服務(wù)器上存的數(shù)據(jù)是否重復(fù)?guava cache呢?是否重復(fù)?不同的機(jī)器存的數(shù)據(jù)不同
104. 用awk統(tǒng)計(jì)一個(gè)ip文件中top10
105. 對(duì)表做統(tǒng)計(jì)時(shí)可直接看schema info信息,即查看表的系統(tǒng)信息
106. mysql目前用的版本
107. 公司經(jīng)驗(yàn)豐富的人給了什么幫助?(一般boss面會(huì)問(wèn)這些)
108. 自己相對(duì)于一樣的應(yīng)屆生有什么優(yōu)勢(shì)
109. 自己的好的總結(jié)習(xí)慣給自己今后的工作帶了什么幫助,舉例為證
110. 原子類,線程安全的對(duì)象,異常的處理方式
111. 4億個(gè)int數(shù),如何找出重復(fù)的數(shù)(用hash方法,建一個(gè)2的32次方個(gè)bit的hash數(shù)組,每取一個(gè)int數(shù),可hash下2的32次方找到它在hash數(shù)組中的位置,然后將bit置1表示已存在)
112. 4億個(gè)url,找出其中重復(fù)的(考慮內(nèi)存不夠,通過(guò)hash算法,將url分配到1000個(gè)文件中,不同的文件間肯定就不會(huì)重復(fù)了,再分別找出重復(fù)的)
有1萬(wàn)個(gè)數(shù)組,每個(gè)數(shù)組有1000個(gè)整數(shù),每個(gè)數(shù)組都是降序的,從中找出最大的N個(gè)數(shù),N<1000
113. LinkedHashmap的底層實(shí)現(xiàn)
114. 類序列化時(shí)類的版本號(hào)的用途,如果沒有指定一個(gè)版本號(hào),系統(tǒng)是怎么處理的?如果加了字段會(huì)怎么樣?
115. Override和Overload的區(qū)別,分別用在什么場(chǎng)景
116. java的反射是如何實(shí)現(xiàn)的
1,mysql的三大引擎是啥?
mysql常用的引擎有InnoDB,MyISAM,Memory,默認(rèn)是InnoDB
InnoDB:磁盤表,支持事務(wù),支持行級(jí)鎖,B+Tree索引
ps:優(yōu)點(diǎn): 具有良好的ACID特性。適用于高并發(fā),更新操作比較多的表。需要使用事務(wù)的表。對(duì)自動(dòng)災(zāi)難恢復(fù)有要求的表。
缺點(diǎn):讀寫效率相對(duì)MYISAM比較差。占用的磁盤空間比較大。
mysql的4大特性+4種隔離級(jí)別:
MyISAM:磁盤表,不支持事務(wù),支持表級(jí)鎖,B+Tree索引
ps: 優(yōu)點(diǎn):占用空間小,處理速度快(相對(duì)InnoDB來(lái)說(shuō))
缺點(diǎn):不支持事務(wù)的完整性和并發(fā)性
MEMORY(Heap):內(nèi)存表,不支持事務(wù),表級(jí)鎖,Hash索引,不支持Blob,Text大類型
ps: 優(yōu)點(diǎn):速度要求快的,臨時(shí)數(shù)據(jù)
缺點(diǎn):丟失以后,對(duì)項(xiàng)目整體沒有或者負(fù)面影響不大的時(shí)候。
2,redis的hash算法用的是啥?
redis應(yīng)該是使用一致性hash算法---MurmurHash3 算法,具有低碰撞率優(yōu)點(diǎn),google改進(jìn)的版本cityhash也是redis中用到的哈希算法。
現(xiàn)有的主流的大數(shù)據(jù)系統(tǒng)都是用的 MurmurHash本身或者改進(jìn)
3,nosql為啥比sql快?
Nosql是非關(guān)系型數(shù)據(jù)庫(kù),因?yàn)椴恍枰獫M足關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)一致性等復(fù)雜特性所以速度快;
sql是關(guān)系型數(shù)據(jù)庫(kù),功能強(qiáng)大,但是效率上有瓶頸
4,什么是索引為啥nosql沒索引?nosql有索引滴
索引分為聚簇索引和非聚簇索引兩種,聚簇索引是按照數(shù)據(jù)存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對(duì)于單行的檢索很快。
聚簇索引:有主鍵時(shí),根據(jù)主鍵創(chuàng)建聚簇索引;沒有主鍵時(shí),會(huì)用一個(gè)唯一且不為空的索引列做為主鍵,成為此表的聚簇索引;如果以上兩個(gè)都不滿足那innodb自己創(chuàng)建一個(gè)虛擬的聚集索引
非聚簇索引:非聚簇索引都是輔助索引,像復(fù)合索引、前綴索引、唯一索引
5,B+樹和B樹區(qū)別?
B樹的非葉子節(jié)點(diǎn)存儲(chǔ)實(shí)際記錄的指針,而B+樹的葉子節(jié)點(diǎn)存儲(chǔ)實(shí)際記錄的指針
B+樹的葉子節(jié)點(diǎn)通過(guò)指針連起來(lái)了, 適合掃描區(qū)間和順序查找。
以下列舉22個(gè)視頻資料。
1,應(yīng)該怎么封裝簡(jiǎn)歷才有BATJ面試機(jī)會(huì)?
2,HashMap底層執(zhí)行原理,
3,hashtable和ConcurrentHashMap如何實(shí)現(xiàn)線程安全?
4,jvm的內(nèi)存布局,垃圾回收機(jī)制
5,類加載機(jī)制里的,雙親委派模型
6,闡述事務(wù)的隔離級(jí)別和傳播屬性
7,高并發(fā)下,如何做到安全的修改同一行數(shù)據(jù)?
8,A服務(wù)調(diào)用B服務(wù)多接口,響應(yīng)時(shí)間最短方案;
9,A系統(tǒng)給B系統(tǒng)轉(zhuǎn)100塊錢,如何實(shí)現(xiàn)?
10,動(dòng)態(tài)代理的幾種實(shí)現(xiàn)方式及優(yōu)缺點(diǎn)
11,多線程下讀概率遠(yuǎn)遠(yuǎn)大于寫概率,如何解決并發(fā)問(wèn)題?
12,按線程池內(nèi)部機(jī)制,當(dāng)提交新任務(wù)時(shí),有哪些異常要考慮?
13,@Transaction注解一般寫在什么位置?如何控制其回滾?
14,說(shuō)說(shuō)Spring的IOC容器初始化流程?
15,說(shuō)說(shuō)springboot啟動(dòng)機(jī)制
16,Redis高性能的原因大概可以講一些?
17,你是怎么控制緩存的更新?(被動(dòng)方式/主動(dòng)方式/增量/全量)?
18,淺析Http和https的三次握手有什么區(qū)別。
19,談?wù)凷ession/cookie機(jī)制,如何實(shí)現(xiàn)會(huì)話跟蹤?
20,什么是一致性hash?
21,MQ有可能發(fā)生重復(fù)消費(fèi),如何避免,如何做到冪等?
22,如何做限流策略,令牌桶和漏斗算法的使用場(chǎng)景?
開源庫(kù),持續(xù)更新中,https://github.com/Java9898/Java-Learning-Library
喜歡的點(diǎn)點(diǎn)關(guān)注點(diǎn)點(diǎn)贊