本人详解
作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》
公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题
中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯
转载说明:务必注明来源(注明:作者:王文峰哦)
【吊打面试官】厦门6年Java开发面试题与答案(技术篇)
- 学习教程(传送门)
-
-
-
- **一、Java基础**
- **二、并发编程**
- **三、JVM与性能调优**
- **四、数据库与优化**
- **五、框架与中间件**
- **六、分布式与系统设计**
- **七、编码与算法**
- **八、综合提问**
- **总结**
-
-
- 学习教程(传送门)
- 往期文章
学习教程(传送门)
1、掌握 JAVA入门到进阶知识(持续写作中……)
2、学会Oracle数据库用法(创作中……)
3、手把手教你vbs脚本制作(完善中……)
4、牛逼哄哄的 IDEA编程利器(编写中……)
5、吐血整理的 面试技巧(更新中……)
一、Java基础
-
HashMap的底层实现原理?JDK1.8后的优化是什么?
答案:- 基于数组+链表/红黑树实现,通过哈希算法确定键值对的位置。
- JDK1.8后,当链表长度超过8且数组长度≥64时,链表转为红黑树,提升查询效率;哈希冲突时采用尾插法避免死链。
- 线程不安全,多线程环境下推荐使用
ConcurrentHashMap
。
-
Java中volatile关键字的作用?如何保证可见性和有序性?
答案:- 保证变量的可见性:修改后立即同步到主内存,其他线程读取时强制刷新本地缓存。
- 禁止指令重排序:通过内存屏障(Memory Barrier)实现。
- 不保证原子性(如
i++
需结合synchronized
或AtomicInteger
)。
二、并发编程
-
ReentrantLock和synchronized的区别?
答案:- API层面:
ReentrantLock
需手动加锁/释放,支持公平锁、可中断、超时等待;synchronized
是JVM关键字,自动释放锁。 - 性能:JDK1.6后
synchronized
优化后性能接近,高竞争场景下ReentrantLock
更灵活。 - 功能扩展:
ReentrantLock
可通过Condition
实现分组唤醒。
- API层面:
-
线程池的核心参数和工作流程?拒绝策略有哪些?
答案:- 参数:核心线程数、最大线程数、任务队列、线程存活时间、拒绝策略。
- 流程:任务提交后优先使用核心线程,队列满后创建非核心线程,超过最大线程数触发拒绝策略。
- 拒绝策略:
AbortPolicy
(抛异常)、CallerRunsPolicy
(调用者线程执行)、DiscardOldestPolicy
(丢弃最老任务)、DiscardPolicy
(静默丢弃)。
三、JVM与性能调优
-
如何排查OOM(内存溢出)问题?常见的OOM场景有哪些?
答案:- 工具:
jmap
生成堆转储文件,MAT
或VisualVM
分析对象占用。 - 场景:堆内存不足(对象过多)、方法区溢出(动态类生成)、栈溢出(递归过深)、直接内存溢出(NIO未释放)。
- 调优:调整堆大小(
-Xms/-Xmx
)、优化代码(避免内存泄漏)、使用弱引用等。
- 工具:
-
G1垃圾回收器的特点?与CMS的区别?
答案:- G1:面向大堆内存,分区(Region)回收,可预测停顿时间,适合高吞吐和低延迟场景。
- CMS:基于标记-清除算法,追求低停顿,但会产生内存碎片,Full GC时可能长时间停顿。
四、数据库与优化
-
MySQL索引失效的常见场景?如何优化慢查询?
答案:- 失效场景:对索引列使用函数、类型隐式
发布者:admin,转转请注明出处:http://www.yc00.com/web/1754863751a5209510.html
评论列表(0条)