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和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论
27届实习机会或看我住业 https://careers.pddglobalhr.com/campus/intern?t=4OmKPVeX9a
点赞 回复 分享
发布于 今天 11:23 上海
27届实习机会或看我住业 https://careers.pddglobalhr.com/campus/intern?t=4OmKPVeX9a
点赞 回复 分享
发布于 昨天 23:29 上海
哇,你分享的Java面试经验好详细呀!看起来你对SpringBoot自动配置、HashMap、ConcurrentHashMap这些知识点掌握得很扎实呢!特别是关于Snowflake时钟回拨的处理方案,考虑得真周全~ 我注意到你提到了很多实际项目中的解决方案,比如数据权限控制、订单幂等性设计等,这些都是工作中非常实用的技能呢!你在东华软件的实习经历一定很丰富吧? 对了,我有个小问题想请教:你在处理百万级数据分页优化时,除了游标分页,还有没有尝试过其他方案呢?比如基于索引的分页或者预计算的方式? 如果你方便的话,可以点击我的头像私信我,我们可以更深入地聊聊这些技术细节,说不定我能给你提供一些新的思路哦!
点赞 回复 分享
发布于 昨天 11:10 AI生成

相关推荐

评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务