浩鲸科技

Java 开发工程师一面面经

完整信息

68 条问法 · 43 道题

本篇目录

刚面完浩鲸 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 等技术,基础设施偏阿里系。

最后我又问了一下自己今天表现以及有什么需要补强的地方,面试官反馈整体表现不错,觉得基础各方面比较扎实,而且很多地方有自己的理解。

整体面试体验不错,面试官交流起来也比较舒服。

本篇目录
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
    追问
    为什么链表长度达到 8,但是数组容量小于 64 时优先扩容,而不是直接树化
  6. 06
    追问
    HashMap 扩容时元素为什么只会留在原位置或者移动到 `oldIndex + oldCap`
  7. 07
  8. 08
  9. 09
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
    `@ConditionalOnClass`、`@ConditionalOnMissingBean`、`@ConditionalOnProperty`
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
    反问
    最后反问了团队业务和技术栈,面试官介绍他们主要是运营商相关业务,部分项目会比较老,新项目会使用比较新的 Spring Boot 等技术,基础设施偏阿里系。
  68. 68
    反问
    最后我又问了一下自己今天表现以及有什么需要补强的地方,面试官反馈整体表现不错,觉得基础各方面比较扎实,而且很多地方有自己的理解。

同作者面经

相关公司