25年9月东华软件 Java开发实习生线上 二面
#JAVA##JAVA面经##JAVA内推#
能简单说说 SpringBoot 自动配置的核心原理吗?
“核心是 ‘条件装配 + Spring Factories 机制’:
1️⃣ 启动时扫描META-INF/spring.factories,加载EnableAutoConfiguration指定的配置类(如DataSourceAutoConfiguration)
2️⃣ 每个配置类带@Conditional系列注解(如@ConditionalOnClass),仅当条件满足时生效(例:classpath 存在HikariDataSource才配数据源)
3️⃣ 通过@ConfigurationProperties绑定application.yml配置
✅ 价值:开箱即用,但可深度定制——曾通过@AutoConfigureBefore调整 Redis 配置加载顺序,解决多数据源初始化冲突。”
@Conditional 注解是怎么控制 Bean 加载的?
“它是 Spring 条件化装配的‘开关’:
🔹 基础用法:配合自定义Condition实现(重写matches方法判断环境)
🔹 Spring Boot 封装:
@ConditionalOnClass:类存在才加载(如 RedisTemplate 存在才注册缓存 Bean)@ConditionalOnProperty:配置项满足才生效(如feature.xxl=true时启用调度模块)
🔹 项目实战:@Bean @ConditionalOnProperty(name = "cache.enable", havingValue = "true") public CacheService redisCache() { return new RedisCacheService(); }→ 环境切换时零代码修改,运维通过配置开关功能,大幅提升灵活性。”
项目中怎么做数据权限控制?比如部门数据隔离,你当时怎么实现的?
“MyBatis 拦截器 + ThreadLocal 方案:
1️⃣ 用户登录后,将deptId存入ThreadLocal(Shiro Filter 拦截)
2️⃣ 自定义DataScopeInterceptor:
- 拦截
Executor.query- 解析 SQL,对标注
@DataScope的 Mapper 方法,动态拼接AND dept_id = #{currentDeptId}
3️⃣ 关键处理:- 多表关联时,仅对主表加条件(通过注解指定表别名)
- 管理员角色跳过拦截(
if (user.isAdmin()) return invocation.proceed())
✅ 效果:教师端查询学生列表时,自动隔离部门数据,业务代码零侵入。上线后审计无越权案例。”
百万级数据用 limit offset 分页时,性能瓶颈怎么优化?
“游标分页(Keyset Pagination)是首选:
-- 传统(慢):SELECT * FROM orders ORDER BY id LIMIT 1000000, 10 -- 优化(快):SELECT * FROM orders WHERE id > {last_id} ORDER BY id LIMIT 10✅ 优势:
- 避免扫描 offset 行,直接定位(利用主键索引)
- 查询耗时稳定(O(log n)),10万偏移量从 3s → 50ms
⚠️ 限制:不支持跳页,但产品接受‘上一页/下一页’交互
🔧 补充方案:- 超大偏移量场景:用 Elasticsearch 的
search_after- 统计总数:单独缓存
COUNT(*)(定时更新)
项目验证:消息中心列表查询,P99 耗时下降 98%。”
HashMap 链表转红黑树的阈值为什么是 8?这个数值有依据吗?
“有严谨数学依据:
- 源码注释明确引用 泊松分布:在理想 hash 函数下,链表长度 ≥8 的概率 ≈ 0.00000006(百万分之一)
- 阈值设为 7(TREEIFY_THRESHOLD-1):留缓冲避免频繁树化/链化
- 空间权衡:红黑树节点占用 ≈ 链表 2 倍内存,仅高频冲突时启用
✅ 设计哲学:用概率论平衡时间与空间——日常开发中,我们更应关注 hash 均匀性(如重写 hashCode),而非纠结阈值。”
Java 进程 CPU 异常时,你会怎么用 jstack 排查?
“四步精准定位法:
1️⃣top -Hp <pi找 CPU 高的线程 ID → 转 16 进制(如 12345 → 0x3039) 2️⃣ 导出线程栈 3️⃣ 定位问题线程 4️⃣ :
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏
查看10道真题和解析