【吊打面试官】厦门6年Java开发面试题与答案(技术篇)

本人详解
作者:王文峰,参加过 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++需结合synchronizedAtomicInteger)。


二、并发编程

ReentrantLock和synchronized的区别?
答案

API层面ReentrantLock需手动加锁/释放,支持公平锁、可中断、超时等待;synchronized是JVM关键字,自动释放锁。
性能:JDK1.6后synchronized优化后性能接近,高竞争场景下ReentrantLock更灵活。
功能扩展ReentrantLock可通过Condition实现分组唤醒。

线程池的核心参数和工作流程?拒绝策略有哪些?
答案

参数:核心线程数、最大线程数、任务队列、线程存活时间、拒绝策略。
流程:任务提交后优先使用核心线程,队列满后创建非核心线程,超过最大线程数触发拒绝策略。
拒绝策略AbortPolicy(抛异常)、CallerRunsPolicy(调用者线程执行)、DiscardOldestPolicy(丢弃最老任务)、DiscardPolicy(静默丢弃)。


三、JVM与性能调优

如何排查OOM(内存溢出)问题?常见的OOM场景有哪些?
答案

工具jmap生成堆转储文件,MATVisualVM分析对象占用。
场景:堆内存不足(对象过多)、方法区溢出(动态类生成)、栈溢出(递归过深)、直接内存溢出(NIO未释放)。
调优:调整堆大小(-Xms/-Xmx)、优化代码(避免内存泄漏)、使用弱引用等。

G1垃圾回收器的特点?与CMS的区别?
答案

G1:面向大堆内存,分区(Region)回收,可预测停顿时间,适合高吞吐和低延迟场景。
CMS:基于标记-清除算法,追求低停顿,但会产生内存碎片,Full GC时可能长时间停顿。


四、数据库与优化

MySQL索引失效的常见场景?如何优化慢查询?
答案

失效场景:对索引列使用函数、类型隐式转换、!=<>OR连接非索引列、最左前缀原则未遵守。
优化:使用EXPLAIN分析执行计划、覆盖索引、避免SELECT *、分库分表、读写分离。

什么是幻读?如何解决?
答案

幻读:同一事务中多次查询的结果集行数不一致(新增/删除数据)。
解决:使用SELECT ... FOR UPDATE(悲观锁)或MVCC+Next-Key Lock(InnoDB默认通过间隙锁防止幻读)。


五、框架与中间件

Spring如何解决循环依赖?
答案

通过三级缓存:

singletonFactories(提前暴露未初始化的对象)。
earlySingletonObjects(存放早期对象)。
singletonObjects(完整Bean)。

仅支持单例作用域的Setter/Field注入循环依赖,构造函数注入无法解决。

Redis持久化机制RDB和AOF的区别?如何选择?
答案

RDB:快照保存,恢复快但可能丢失最后一次快照后的数据。
AOF:记录写命令,数据更安全但文件较大、恢复慢。
选择:高可用场景建议RDB+AOF混合使用(Redis 4.0+)。


六、分布式与系统设计

如何设计一个秒杀系统?核心难点是什么?
答案

设计要点

流量削峰:队列缓冲(如Kafka)、限流(令牌桶/漏桶)。
缓存预热:库存数据预加载到Redis。
异步处理:下单与支付解耦。
降级策略:超时后关闭未支付订单。

难点:高并发下的数据一致性、防止超卖(Redis原子操作或分布式锁)。

分布式事务的解决方案有哪些?
答案

2PC:两阶段提交,强一致性但性能低。
TCC:Try-Confirm-Cancel,业务侵入性强。
本地消息表:异步确保最终一致性。
Seata:AT模式(自动补偿)或Saga模式(长事务)。


七、编码与算法

手写一个线程安全的单例模式

public class Singleton {
              
    private static volatile Singleton instance;
    
    private Singleton() {
              }
    
    public static Singleton getInstance() {
              
        if (instance == null) {
              
            synchronized (Singleton.class) {
              
                if (instance == null) {
              
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

二叉树层序遍历(LeetCode 102)

public List<List<Integer>> levelOrder(TreeNode root) {
              
    List<List<Integer>> res = new ArrayList<>();
    if (root == null) return res;
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    while (!queue.isEmpty()) {
              
        int size = queue.size();
        List<Integer> level = new ArrayList<>();
        for (int i = 0; i < size; i++) {
              
            TreeNode node = queue.poll();
            level.add(node.val);
            if (node.left != null) queue.offer(node.left);
            if (node.right != null) queue.offer(node.right);
        }
        res.add(level);
    }
    return res;
}

八、综合提问

项目中最有挑战的技术难点是什么?如何解决的?
答案思路

结合实际项目,描述问题背景(如高并发、数据一致性)。
分析技术选型(如引入Redis集群、分库分表)。
结果验证(性能提升数据、线上监控效果)。


总结

厦门企业对中高级Java开发者的要求侧重:

原理深度:JVM、并发、框架源码。
实战经验:高并发架构、分布式系统设计。
问题解决能力:调优、线上故障排查。
建议结合项目经验提前梳理技术亮点,并熟悉常见中间件(如RocketMQ、Dubbo)的使用场景。

希望本文助您面试顺利! 💪

学习教程(传送门)

1、掌握 JAVA入门到进阶知识(持续写作中……
2、学会Oracle数据库用法(创作中……
3、手把手教你vbs脚本制作(完善中……
4、牛逼哄哄的 IDEA编程利器(编写中……
5、吐血整理的 面试技巧(更新中……

往期文章

 第一章:日常_JAVA_面试题集15(含答案)
 第二章:日常_JAVA_面试题集14(含答案)
 平安壹钱包面试官:请你说一下Mybatis的实现原理
 Java开发-热点-热门问题精华核心总结-推荐
 往期文章大全……

一键三连 一键三连 一键三连~

本人详解
作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》
公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题
中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯
转载说明:务必注明来源(注明:作者:王文峰哦)

一键三连 一键三连 一键三连~
以上就是今天的内容,关注我,不迷路

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容