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