Skip to content

一位球友的 2022 年跳槽面试经历,高级 Java 工程师岗位,希望对你有帮助。

下面是正文。

由于没怎么准备,先去市场看看现在的面试行情,大部分知识都是以前积累的

行云集团-高级 Java 工程师岗位

薪资范围: 25k~50k ,3~5年经验 Java 高级开发工程师

一面(60min)

  1. 介绍项目(20min):面试官往死里抠你的职责,项目上下游,项目架构,你如何做的服务拆分?
  2. Spring Bean 的生命周期?这部分我主要根据自己写的一个小框架回答了,因为这个小框架拦截了 BeanPostProcessor ,所以在 Spring 容器在启动的时候会自动检测是否有类实现该接口,在调用类的构造方法之前,会执行 postProcessBeforeInitialization 调用构造方法之后执行 postProcessAfterInitialization,主要这么回答的, 巴拉巴拉讲了快 10 分钟。
  3. Spring 事务的实现原理?
  4. MySQL 事务隔离级别?
  5. MySQL 如何实现事务的?主要 undolog 日志是怎么工作的, 拿事务 id 回答
  6. 当前读与快照读是什么?用缓存和数据库举例子,当前读相当于直接读库,快照度相当于直接读缓存。RC 级别在执行 SQL 前后生成快照。RR 级别在开启事务生成全局快照后续的查询操作只读快照部分,这里还可以扩展,唯一索引其实是当前读。
  7. 为什么 MySQL 表删除了一堆数据,但是文件大小不变?MySQL 对于删除的数据,仅仅只是删除占位,被删除的数据仅缺失了之前数据页的占位。物理删除会造成数据空洞。
  8. MySQL 如何恢复到误删前的状态?
  9. 你在日常工作中对 SQL 进行了什么优化?巴拉巴拉,深度分页的优化、索引的优化、建立合适的联合索引,利用覆盖索引或者索引下推这块牵扯的太多了,就稍微答了一些,这块还可以扩展,例如:针对索引区分度建立联合索引,尽量保持区分度高的在最左。联合查询的时候,关联字段都需要加上索引。有排序场景,尽量不查询 text,Blog 字段,合理利用内存排序,避免 MySQL 的文件排序 这里扩展一下就是,MySQL 有一个叫做 sort_buffer,对这里优化才是关键。

部分问题参考答案

二面 (60min)

  1. 自我介绍
  2. 看你熟悉 DDD 架构模式,介绍一下?大致介绍一下领域驱动设计,概念,聚合,聚合根,领域,值对象等等
  3. 你认为在你做的项目场景中属于哪一个域?上下游分别会以什么状态进入你当前项目的领域?问的太抽象了,从要从领域职责进行划分来回答,什么职责对应什么域,上游域对象存在的状态当前领域对象职责,太抽象了问题。
  4. 你认为 DDD 的优势和劣势?主要从 MVC 架构模式对比,从面向对象角度出发,贫血模型与充血模型的优缺点。MVC 更容易理解,DDD 更难理解,学习成本较高。
  5. 看你项目中做了灰度发布?介绍一下你是怎么做的?这个要从实际项目场景出发了,灰度策略,灰度的范围、粒度,哪个层面实现的。
  6. 看你在灰度的时候还做了数据库双向同步?介绍一下?因为新功能和老功能都要用的啊, 并且 2 套系统都是要用的,数据如果不一致,就会造成问题。基于阿里云 DTS 做的。
  7. 你说 DTS 从 RocketMQ 变为了 Kafka, 你说说 2 个消息队列的区别?这块可能答的不太行,RocketMQ 本质就是基于 Kafka 来做的,但是实时性会比 Kafka 好,并且支持事务性消息,但是 Kafka 也可以有特殊的方法支持事务消息。
  8. Kafka 的优势在哪里?实现原理是什么?批消息处理,零拷贝技术,网络接口层-用户态-内核态,缩短拷贝链路。
  9. 双向数据同步会涉及 BinLog 监听,可能造成消息来回弹,你怎么处理的?幂等,数据标记。
  10. 你在项目中碰到过的问题?有什么亮点?服务器线程打满,负载均衡策略。

本次面经基础基本考察的不多,项目扣的很细,项目中的问题点也会仔细扣。

部分问题参考答案

文章来源于自己总结和网络转载,内容如有任何问题,请大佬斧正!联系我