3年以上经验Java开发面试题
一、Java基礎(chǔ)
1.1、基礎(chǔ)知識(shí)
1.1.1、int Integer區(qū)別
1.1.2、wait sleep區(qū)別
1.1.3、gbk轉(zhuǎn)utf-8
1.1.4、接口和抽象類區(qū)別
1.2、并發(fā)編程
1.2.1、volatile底層實(shí)現(xiàn)
1.2.2、synchronized與lock底層實(shí)現(xiàn),區(qū)別
1.2.3、公平鎖 非公平鎖
1.2.4、cas
1.2.5、線程池
1.2.6、juc并發(fā)包
1.2.7、鎖的升級(jí)
1.2.8、ThreadLoacl如何實(shí)現(xiàn)的線程隔離
1.2.9、ForkJoin如何實(shí)現(xiàn)的線程合并
1.3、jdk源碼
1.3.1、HashMap&ConcurrentHashMap
1.3.1.1、數(shù)據(jù)結(jié)構(gòu)
1.3.1.2、put流程
1.3.1.3、兩者區(qū)別有哪些
1.3.1.4、1.7和1.8版本區(qū)別有哪些
1.3.2、幾種常見(jiàn)集合類的區(qū)別
1.4、設(shè)計(jì)模式
1.4.1、手寫線程安全單例模式
1.4.2、項(xiàng)目中用到的設(shè)計(jì)模式
1.4.3、六種面向?qū)ο笤O(shè)計(jì)原則
1.5、JVM
1.5.1、垃圾回收
1.5.1.1、可達(dá)性分析算法
1.5.1.2、常見(jiàn)的垃圾回收算法
1.5.1.3、垃圾收集器
1.5.1.4、垃圾收集過(guò)程
1.5.2、內(nèi)存模型
1.5.3、oom問(wèn)題如何排查
二、框架
2.1、Spring
2.1.1、IOC&AOP原理
2.1.2、循環(huán)依賴問(wèn)題
2.1.3、普通對(duì)象和Bean的區(qū)別
2.1.4、說(shuō)說(shuō)看過(guò)的相關(guān)源碼
2.2、Mybatis
2.2.1、常用標(biāo)簽
2.2.2、底層調(diào)用流程
2.2.3、插件原理
2.3、SpringMVC
2.3.1、底層調(diào)用流程
2.4、SpringBoot
2.4.1、看過(guò)的源碼
2.4.2、和Spring的區(qū)別
2.5、SpringCloud
2.5.1、看過(guò)的源碼
2.5.2、sentinel和hystrix的區(qū)別
2.6、Dubbo
2.6.1、dubbo有幾種降級(jí)策略
2.6.2、dubbo都有哪些協(xié)議
三、數(shù)據(jù)庫(kù)
3.1、MySQL
3.1.1、索引結(jié)構(gòu)及為什么要用這個(gè)結(jié)構(gòu)
3.1.2、索引失效
3.1.3、sql優(yōu)化
3.1.4、索引類型
3.1.5、分庫(kù)分表策略如何優(yōu)化能減少數(shù)據(jù)轉(zhuǎn)移
3.1.6、事務(wù)隔離級(jí)別及底層實(shí)現(xiàn)
3.2、Redis
3.2.1、數(shù)據(jù)類型
3.2.2、項(xiàng)目中如何使用的
3.2.3、持久化策略
3.2.4、淘汰策略
3.2.5、性能問(wèn)題排查及優(yōu)化
3.2.6、redis做分布式鎖
3.2.7、如何保證原子操作
3.2.8、底層數(shù)據(jù)結(jié)構(gòu)
3.2.9、哨兵模式和Cluster模式的區(qū)別
四、分布式
4.1、Raft協(xié)議
4.1.1、選舉流程
4.1.2、數(shù)據(jù)同步流程
4.1.3、項(xiàng)目中遇到的問(wèn)題
4.2、Nginx
4.2.1、項(xiàng)目中的使用
4.2.2、使用時(shí)配置文件中的關(guān)鍵字是什么
4.3、分布式和集群的區(qū)別
五、消息隊(duì)列
5.1、RabbitMQ&Kafka
5.1.1、區(qū)別
5.1.2、項(xiàng)目中的使用
5.1.3、如何保證消息的可靠性(不丟失、不重復(fù))
六、搜索引擎
6.1、Es和Solr區(qū)別
七、容器化
7.1、Docker
7.1.1、項(xiàng)目中的使用
7.2、K8s
7.2.1、基本概念
八、Linux
8.1、常用的命令
8.2、如何排查性能問(wèn)題
九、算法
9.1、跳臺(tái)階
9.2、求開(kāi)方
9.3、判斷鏈表有環(huán)
9.4、鏈表去重(空間O(n),時(shí)間O(1))
9.5、數(shù)組取交集
9.6、兩個(gè)大文件取url交集,小內(nèi)存機(jī)器
9.7、斐波那契數(shù)列
9.8、兩個(gè)棧實(shí)現(xiàn)隊(duì)列
9.9、棧 取max 時(shí)間O(1)
9.10、指定題目
給出一個(gè)數(shù)組,數(shù)組的元素為整數(shù),想對(duì)這個(gè)數(shù)組進(jìn)行拆分,使拆分之后的數(shù)組元素之和接近N,如數(shù)組[19,17,16,1,2,1,2,3,4],使拆分之后的子數(shù)組之和接近或等于20,輸出拆分之后的數(shù)據(jù)列表
十、網(wǎng)絡(luò)協(xié)議
10.1、Http
10.1.1、http是純文本協(xié)議嗎
10.1.2、報(bào)文都有哪些內(nèi)容
10.1.3、后端怎么知道一個(gè)請(qǐng)求過(guò)來(lái)是ajax還是其他請(qǐng)求
10.2、Https
10.2.1、調(diào)用流程(詳細(xì))
10.3、Tcp
10.3.1、為什么要三次握手四次揮手
10.3.2、如何保證傳輸過(guò)程的可靠性
十一、其他
11.1、領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)
11.2、敏捷開(kāi)發(fā)
十二、總結(jié)
以上是本人在2021年3月跳槽過(guò)程中遇到的真實(shí)面試題,能想起來(lái)的都整理在上面了,只是一個(gè)大綱,當(dāng)然面試官會(huì)結(jié)合簡(jiǎn)歷和項(xiàng)目來(lái)提問(wèn),每個(gè)問(wèn)題具體問(wèn)到多深,會(huì)延展到多廣,就看你怎么聊了。
這次跳槽面試最大的感覺(jué)就是各家公司對(duì)Java基礎(chǔ)還是非??粗氐?#xff0c;無(wú)論是幾年經(jīng)驗(yàn),面的是大廠還是普通公司,基礎(chǔ)這些東西還是要好好準(zhǔn)備準(zhǔn)備。當(dāng)然這里說(shuō)的Java基礎(chǔ),包括了常問(wèn)的jdk源碼、并發(fā)編程、JVM這些。而且大廠必考算法,我的算法比較弱,雖然也偶爾在leetcode上刷題,但畢竟算法這方面之前沒(méi)太重視,還是吃了不少虧。
另外簡(jiǎn)歷中寫的技術(shù)棧,不管項(xiàng)目中是否用過(guò),一定至少是自己研究過(guò)再往簡(jiǎn)歷上寫,不然就是給自己挖坑。例如,簡(jiǎn)歷中寫了消息隊(duì)列相關(guān)的技術(shù)棧,面試官一般會(huì)結(jié)合項(xiàng)目來(lái)問(wèn),首先看你有沒(méi)有用過(guò),具體是怎么用的,如果你在項(xiàng)目中沒(méi)有用過(guò),只是自己研究過(guò),也一定要自己想個(gè)場(chǎng)景,并且給出思路來(lái)跟面試官聊,證明你雖然沒(méi)有用過(guò),但如果未來(lái)的工作中有需要,你是可以勝任的。
對(duì)于某一項(xiàng)技術(shù),會(huì)不會(huì)用只能表示你能不能用它干活,對(duì)于一個(gè)有經(jīng)驗(yàn)的開(kāi)發(fā)人員,快速入門一項(xiàng)技術(shù)是必備能力,這不是加分項(xiàng)。加分項(xiàng)是你有沒(méi)有對(duì)某一個(gè)技術(shù)有過(guò)深入了解,能不能在面試的過(guò)程中,把你深入了解這項(xiàng)技術(shù)時(shí)掌握的學(xué)習(xí)能力給體現(xiàn)出來(lái)。如果面試官認(rèn)為你的學(xué)習(xí)能力出眾,并且有較強(qiáng)獨(dú)立思考的能力,有什么難題你都有一套自己的方法論來(lái)解決,那你就有資格來(lái)談薪了。
平時(shí)多積累、多總結(jié),總是沒(méi)壞處的,我從去年年底開(kāi)始寫博客,雖然寫的不多,質(zhì)量也比較水,但每一篇博文對(duì)我自己來(lái)說(shuō)都是一個(gè)歸納總結(jié)的過(guò)程,所以這次面試比較順利。
平時(shí)工作中注意通過(guò)解決問(wèn)題來(lái)對(duì)一項(xiàng)技術(shù)積累深度,工作之余開(kāi)闊視野來(lái)積累技術(shù)廣度。當(dāng)能夠感覺(jué)自己進(jìn)步的時(shí)候,是會(huì)對(duì)學(xué)習(xí)上癮的。
總結(jié)
以上是生活随笔為你收集整理的3年以上经验Java开发面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 漏洞扫描器学习
- 下一篇: 100道最新Java面试题,常见面试题及