Java 开发工程师一面面经
完整信息
本篇目录
刚面完浩鲸 Java 后端一面,面了1个小时,整体体验挺好的。面试官问得比较细,基础和项目都有,而且很多题都会继续追“为什么这么设计”,不是单纯背八股。
我这场没有手撕算法,MySQL 也基本没怎么问,主要集中在 Java、Redis、Spring、AI 和项目。
面试内容
先自我介绍,然后开始基础题。
Java:
String字面量直接赋值和new String()有什么区别- 口述 Java 8
HashMap.put()整个流程 - HashMap 为什么一开始不用红黑树
- 为什么链表长度达到 8,但是数组容量小于 64 时优先扩容,而不是直接树化
- HashMap 扩容时元素为什么只会留在原位置或者移动到
oldIndex + oldCap - PECS 是什么,
? extends和? super分别适合什么场景
Redis:
- Redis 为什么这么快
- Redis 命令执行是单线程,为什么还能支撑高并发
- Redis 过期 Key 的删除策略
- Redis 怎么实现延迟队列
- Sorted Set 怎么做延迟任务
- Pub/Sub 能不能做消息队列,有什么问题
- Redis Stream 和普通 Pub/Sub、专业 MQ 相比怎么样
Spring:
- Spring Boot 自动配置原理
@ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty- Spring Boot 支持哪些外部化配置,优先级怎么样
- Spring Bean 生命周期
- BeanPostProcessor 在生命周期中的位置
- BeanPostProcessor 怎么使用、作用范围是什么
- Spring AOP 的本质
- JDK 动态代理和 CGLIB 的区别
- AOP 有哪些失效场景
- 同类调用为什么会导致 AOP 失效
- final/static/非 Spring Bean 等情况下为什么可能无法代理
然后问到了 AI:
- 有没有用过 Spring AI
- 自己接大模型主要做过什么
- 什么是大模型幻觉
- 大模型为什么会产生幻觉
- 有哪些方法可以缓解幻觉
- RAG 是什么
- 为什么 RAG 能降低大模型幻觉
这一块我感觉现在面试确实越来越容易问,不能只会平时用 AI 写代码,RAG、幻觉这些概念最好也准备一下。
项目深挖
项目问得挺多,首先重点追了我实习的数据权限重构。
主要包括:
- 数据权限重构原来的问题是什么
- 为什么要自己做
@CrmDataScope - AOP 怎么生成并注入权限 SQL
- 为什么从
roleKey硬编码改成dataScope - 多角色用户的数据权限怎么处理
- 加缓存以后,数据权限怎么和缓存结合
- 为什么把权限计算从 AOP 里抽出来
- 一个 Service 调另一个 Service 时,权限应该怎么传
- 权限应该传最终 SQL,还是传可见部门集合
后面又问了数据同步框架:
- 为什么要用模板方法模式
- 水位线、分页拉取、数据转换、批量写入整个流程
- 为什么必须所有分页拉完以后才能推进水位线
- 如果拉第一页以后就更新水位线,然后服务宕机会发生什么
- 怎么保证同步任务不漏数据
这里我们的原则是宁愿重复拉取,通过幂等避免重复写入,也不能因为提前推进水位线导致漏数据。
然后又追了飞书单点登录:
- OAuth2 登录完整流程
state是干什么的- 为什么还要绑定浏览器标识
- 一次性 ticket 为什么要存在 Redis
- Lua 为什么能保证 ticket 原子消费
- ticket 换 JWT 这种操作叫什么
- 除了换 JWT,还能不能换 Session
- Session 和 JWT 有什么区别
- 为什么项目最后选择 JWT
- JWT 无状态是不是意味着没有“会话”这个概念
学校项目
最后问了和医院合作的足底压力项目:
- 整个系统是做什么的
- 自己负责哪些部分
- 压力数据采集后的整体业务流程
- 简历里的“资源安全访问”是怎么实现的
- 为什么不直接把原始文件路径暴露给前端
- 临时资源副本什么时候生成
- 副本放在哪里
- 是不是每次访问都会重新物理复制一份文件
- 如果优化这个方案会怎么做
- 有没有了解过文件系统
这部分最后被指出可以再了解一下文件系统相关知识。
总体感受
这一轮基础问得比较深,但不是特别偏门。比较明显的特点是,面试官很喜欢从一个知识点继续问“为什么”。
比如 HashMap 不只是让你背 put 流程,还会问为什么不直接用红黑树;AOP 不只是问原理,还会继续问各种失效场景;项目也不是听完介绍就结束,而是会根据你的设计继续加条件。
项目部分数据权限和同步框架问得比较多,感觉还是很看重候选人是不是真的做过,以及能不能解释当时为什么这么设计。
AI 这块也值得准备,我这次大模型幻觉还能解释,但被继续问到幻觉产生原因和 RAG 为什么有效时答得就比较一般。
最后反问了团队业务和技术栈,面试官介绍他们主要是运营商相关业务,部分项目会比较老,新项目会使用比较新的 Spring Boot 等技术,基础设施偏阿里系。
最后我又问了一下自己今天表现以及有什么需要补强的地方,面试官反馈整体表现不错,觉得基础各方面比较扎实,而且很多地方有自己的理解。
整体面试体验不错,面试官交流起来也比较舒服。
本篇目录
当前问题0168
- 01
先自我介绍,然后开始基础题。
- 02
`String` 字面量直接赋值和 `new String()` 有什么区别
- 03
口述 Java 8 `HashMap.put()` 整个流程
- 04
HashMap 为什么一开始不用红黑树
- 05
为什么链表长度达到 8,但是数组容量小于 64 时优先扩容,而不是直接树化
- 06
HashMap 扩容时元素为什么只会留在原位置或者移动到 `oldIndex + oldCap`
- 07
PECS 是什么,`? extends` 和 `? super` 分别适合什么场景
- 08
Redis 为什么这么快
- 09
Redis 命令执行是单线程,为什么还能支撑高并发
- 10
Redis 过期 Key 的删除策略
- 11
Redis 怎么实现延迟队列
- 12
Sorted Set 怎么做延迟任务
- 13
Pub/Sub 能不能做消息队列,有什么问题
- 14
Redis Stream 和普通 Pub/Sub、专业 MQ 相比怎么样
- 15
Spring Boot 自动配置原理
- 16
`@ConditionalOnClass`、`@ConditionalOnMissingBean`、`@ConditionalOnProperty`
- 17
Spring Boot 支持哪些外部化配置,优先级怎么样
- 18
Spring Bean 生命周期
- 19
BeanPostProcessor 在生命周期中的位置
- 20
BeanPostProcessor 怎么使用、作用范围是什么
- 21
Spring AOP 的本质
- 22
JDK 动态代理和 CGLIB 的区别
- 23
AOP 有哪些失效场景
- 24
同类调用为什么会导致 AOP 失效
- 25
final/static/非 Spring Bean 等情况下为什么可能无法代理
- 26
有没有用过 Spring AI
- 27
自己接大模型主要做过什么
- 28
什么是大模型幻觉
- 29
大模型为什么会产生幻觉
- 30
有哪些方法可以缓解幻觉
- 31
RAG 是什么
- 32
为什么 RAG 能降低大模型幻觉
- 33
数据权限重构原来的问题是什么
- 34
为什么要自己做 `@CrmDataScope`
- 35
AOP 怎么生成并注入权限 SQL
- 36
为什么从 `roleKey` 硬编码改成 `dataScope`
- 37
多角色用户的数据权限怎么处理
- 38
加缓存以后,数据权限怎么和缓存结合
- 39
为什么把权限计算从 AOP 里抽出来
- 40
一个 Service 调另一个 Service 时,权限应该怎么传
- 41
权限应该传最终 SQL,还是传可见部门集合
- 42
为什么要用模板方法模式
- 43
水位线、分页拉取、数据转换、批量写入整个流程
- 44
为什么必须所有分页拉完以后才能推进水位线
- 45
如果拉第一页以后就更新水位线,然后服务宕机会发生什么
- 46
怎么保证同步任务不漏数据
- 47
OAuth2 登录完整流程
- 48
`state` 是干什么的
- 49
为什么还要绑定浏览器标识
- 50
一次性 ticket 为什么要存在 Redis
- 51
Lua 为什么能保证 ticket 原子消费
- 52
ticket 换 JWT 这种操作叫什么
- 53
除了换 JWT,还能不能换 Session
- 54
Session 和 JWT 有什么区别
- 55
为什么项目最后选择 JWT
- 56
JWT 无状态是不是意味着没有“会话”这个概念
- 57
整个系统是做什么的
- 58
自己负责哪些部分
- 59
压力数据采集后的整体业务流程
- 60
简历里的“资源安全访问”是怎么实现的
- 61
为什么不直接把原始文件路径暴露给前端
- 62
临时资源副本什么时候生成
- 63
副本放在哪里
- 64
是不是每次访问都会重新物理复制一份文件
- 65
如果优化这个方案会怎么做
- 66
有没有了解过文件系统
- 67
最后反问了团队业务和技术栈,面试官介绍他们主要是运营商相关业务,部分项目会比较老,新项目会使用比较新的 Spring Boot 等技术,基础设施偏阿里系。
- 68
最后我又问了一下自己今天表现以及有什么需要补强的地方,面试官反馈整体表现不错,觉得基础各方面比较扎实,而且很多地方有自己的理解。