东莞6年Java开发面试题与答案(技术篇)

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

东莞6年Java开发面试题与答案(技术篇)

学习教程(传送门)

东莞6年Java开发面试题与答案(技术篇)

**一、Java基础**
**二、并发编程**
**三、JVM与性能调优**
**四、数据库与优化**
**五、框架与中间件**
**六、分布式与系统设计**
**七、编码与算法**
**八、综合提问**

**总结**

学习教程(传送门)
往期文章

学习教程(传送门)

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

东莞6年Java开发面试题与答案(技术篇)


一、Java基础

String类为什么被设计为final?
答案

安全性:防止子类覆盖String的方法(如substringconcat)导致不可预测的行为,例如多线程环境下的字符串操作。
哈希值缓存StringhashCode()方法在第一次调用后会缓存结果,确保不可变性支持高效的哈希表操作。
字符串常量池优化:不可变性使得字符串可以被复用,减少内存开销,提升性能。

抽象类与接口的区别?
答案

设计目的:抽象类用于代码复用(如部分方法实现),接口用于定义行为契约(如Comparable)。
成员变量:抽象类可有普通成员变量,接口变量默认为public static final
多继承:类只能继承一个抽象类,但可实现多个接口。
JDK 8后:接口支持默认方法和静态方法,抽象类仍保留构造方法和状态管理能力。


二、并发编程

synchronized和ReentrantLock的区别?
答案

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

线程池的拒绝策略有哪些?适用场景是什么?
答案

AbortPolicy(默认):直接抛出异常,适用于需严格保证任务不丢失的场景。
CallerRunsPolicy:由提交任务的线程执行任务,适用于任务可降级的场景(如日志记录)。
DiscardOldestPolicy:丢弃队列最老任务并重试,适用于实时性要求高的场景。
DiscardPolicy:静默丢弃新任务,适用于允许任务丢失的场景(如监控数据采集)。


三、JVM与性能调优

如何排查堆内存溢出(OOM)?
答案

工具使用

jmap生成堆转储文件(jmap -dump:format=b,file=heap.hprof <pid>)。
MATVisualVM分析对象占用,定位内存泄漏点(如未释放的集合类对象)。

常见场景

大对象未分页查询(如全表加载到内存)。
缓存未设置过期策略(如HashMap缓存数据无限增长)。

G1垃圾回收器的工作流程?
答案

分区回收:将堆划分为多个Region,优先回收垃圾最多的Region,减少停顿时间。
Mixed GC:分为Young GC(回收Eden区)和Mixed GC(回收部分Old区),通过预测模型控制回收时间。
适用场景:大堆内存(如8GB以上)、高吞吐与低延迟兼顾的应用(如电商系统)。


四、数据库与优化

MySQL索引失效的常见场景及优化方案?
答案

失效场景

对索引列使用函数或表达式(如WHERE YEAR(create_time) = 2025)。
类型隐式转换(如字符串字段用数字查询)。
违反最左前缀原则(如联合索引跳过首字段)。

优化方案

使用覆盖索引(避免回表)。
分库分表(如按时间或用户ID拆分)。

如何设计高并发的秒杀系统?
答案

架构要点

流量削峰:通过消息队列(如Kafka)缓冲请求,限制并发访问数据库。
缓存预热:将库存数据预加载到Redis,通过原子操作(DECR)防止超卖。
分布式锁:使用Redis的SETNX或Redisson实现锁机制,避免重复下单。
降级策略:静态资源CDN加速,核心服务与非核心服务隔离。


五、框架与中间件

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

三级缓存机制

singletonFactories:存储未初始化的Bean工厂对象。
earlySingletonObjects:存储早期暴露的Bean(未完成属性注入)。
singletonObjects:存储完整的Bean。

限制:仅支持Setter/Field注入的循环依赖,构造函数注入无法解决。

Redis持久化机制RDB与AOF的优缺点对比?
答案

RDB

优点:快照恢复速度快,文件紧凑。
缺点:可能丢失最后一次快照后的数据。

AOF

优点:数据安全性高(支持每秒同步)。
缺点:文件体积大,恢复速度慢。

混合模式(Redis 4.0+):结合RDB快照和AOF日志,平衡性能与数据安全。


六、分布式与系统设计

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

2PC(两阶段提交):强一致性,但存在单点故障和阻塞问题,适用于银行交易等场景。
TCC(补偿事务):通过Try-Confirm-Cancel三个阶段实现最终一致性,适用于高并发电商系统。
本地消息表:业务与消息表耦合,通过异步重试保证最终一致性(如订单与积分系统)。

如何设计一个高可用的微服务架构?
答案

服务治理

使用注册中心(如Nacos)实现服务发现与健康检查。
熔断降级(如Hystrix)防止雪崩效应。

链路追踪:集成SkyWalking或Zipkin,监控服务调用链性能。
容器化部署:通过Kubernetes实现自动扩缩容和故障恢复。


七、编码与算法

手写LRU缓存淘汰算法

public class LRUCache<K, V> {
              
    private final int capacity;
    private final LinkedHashMap<K, V> cache;

    public LRUCache(int capacity) {
              
        this.capacity = capacity;
        this.cache = new LinkedHashMap<K, V>(capacity, 0.75f, true) {
              
            @Override
            protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
              
                return size() > capacity;
            }
        };
    }

    public V get(K key) {
              
        return cache.getOrDefault(key, null);
    }

    public void put(K key, V value) {
              
        cache.put(key, value);
    }
}

二叉树的最大深度(LeetCode 104)

public int maxDepth(TreeNode root) {
              
    if (root == null) return 0;
    return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}

八、综合提问

项目中如何优化接口响应时间?
答案思路

数据库层:添加索引、分库分表、使用读写分离。
缓存层:引入Redis缓存热点数据,设置合理的过期策略。
代码层:异步处理非核心逻辑(如日志记录)、减少循环嵌套复杂度。
网络层:使用CDN加速静态资源、压缩传输数据(如GZIP)。


总结

东莞企业对Java开发者的核心要求:

技术深度:JVM调优、高并发设计、分布式事务解决方案。
实战经验:结合制造业或电商场景,解决大数据量、高并发的实际问题。
架构能力:熟悉微服务、容器化、自动化运维等企业级技术栈。

希望本文助您在东莞的Java技术面试中脱颖而出! 💪

学习教程(传送门)

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

往期文章

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

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

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

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

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

请登录后发表评论

    暂无评论内容