主题
面试速答(先看这里)
**一句话结论:**工作4年,springboot技术栈,工作在一家还不错的某个领域的头部公司,做过几个项目,最近一个项目在做一个自研的流程引擎。
60秒标准回答:
工作4年,springboot技术栈,工作在一家还不错的某个领域的头部公司,做过几个项目,最近一个项目在做一个自研的流程引擎
流程引擎是完全自研,介绍一下这个项目。功能节点(异步)、
你们自研的流程引擎遵守了 BPMN 规范吗?流程节点支持重试吗?流程的重试是如何实现的?
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**流程引擎是完全自研,介绍一下这个项目。
- **要点2:**你们自研的流程引擎遵守了 BPMN 规范吗?
- **要点3:**整个项目中最大的技术难点是什么?
- **要点4:**第三方想用你的流程引擎,是怎么用的?
- **要点5:**调DUBBO的话是通过泛化调用实现的吗?
**记忆锚点:**laiyanhong-9tr5c → wwwyuquecom → zwpzru → https → CPU → DUBBO
关键取舍:
- 服务端接口性能优化的手段: 如何设计高并发系统: 调DUBBO的话是通过泛化调用实现的吗?
- hook(钩子) 泛化调用: dubbo服务调用: 优雅停机: 线上问题排查,是一个面试官很喜欢问的东西,所有人都需要准备几个,可以是OOM、FullGC、Load飙高,接口性能慢,慢SQL等等。
易错提醒:
- 关于这一点, 回答的时候需要注意,首先要能讲清楚自研的背景以及原因,并且还需要能够对开源的产品有所了解就最好了,能知道自己做的产品和开源的有什么区别,好处、坏处是什么,有什么需要改进的地方等等。
- 服务端挂了怎么避免被调用到?
加分表达:
- LOAD 1 , LOAD 5 业务中做了分库分库的场景介绍一下。
- LOAD 1 ,LOAD 5 OOM: CPU飙高: CPU利用率: 业务中做了分库分库的场景介绍一下。
追问准备:
- 功能节点(异步)、 你们自研的流程引擎遵守了 BPMN 规范吗?
- 流程节点支持重试吗?
- 流程的重试是如何实现的?
- 整个项目中最大的技术难点是什么?
面试者背景
工作4年,springboot技术栈,工作在一家还不错的某个领域的头部公司,做过几个项目,最近一个项目在做一个自研的流程引擎。
面试过程
> 流程引擎是完全自研,介绍一下这个项目。功能节点(异步)、 > > 你们自研的流程引擎遵守了BPMN规范吗?流程节点支持重试吗?流程的重试是如何实现的? > > 整个项目中最大的技术难点是什么?数据库实现了发布/订阅的功能,有其他的方案吗?不想依赖MQ的原因是什么?redis可以实现发布/订阅的功能吗? > > 抗10W的实例执行做了哪些技术手段? > > 第三方想用你的流程引擎,是怎么用的?节点支持哪些协议? > > 调DUBBO的话是通过泛化调用实现的吗?泛化调用的原理是什么?GenericService和普通的调用方式,区别是什么? > > DUBBO的一次服务调用过程是怎样的?代理、序列化、 > > DUBBO的负载均衡是如何实现的?服务端挂了怎么避免被调用到?心跳 > > 服务端在服务执行过程中,重启了,怎么办?hook(钩子) > > 工作中有排查过哪些线上问题吗?OOM 内存泄漏、CPU飙高 > > 应用中中什么情况会导致CPU飙高?CPU的哪个指标飙高了? > > CPU利用率和负载有关系吗?LOAD 1 ,LOAD 5 > > 业务中做了分库分库的场景介绍一下。2000w,为什么2000w要分表?如何分表的? > > 分库分表后回带来什么问题?分表查询、join问题、 > > 订单库做分库分表,该选择哪个字段做分表字段(买家ID还是卖家ID?)?基因法。 > > 选择分表字段的时候会考虑哪些因素?查询条件。 > > 分库和分表有什么区别?分区是什么? > > 用过哪些设计模式?责任链、观察者、策略、享元
题目解析
> 流程引擎是完全自研,介绍一下这个项目。功能节点(异步)、 > > 你们自研的流程引擎遵守了BPMN规范吗?流程节点支持重试吗?流程的重试是如何实现的?
这个地方主要是考察这个流程引擎的背景,这种东西一般面试官会比较重点考察自研而不是直接使用开源产品的必要性。
关于这一点,回答的时候需要注意,首先要能讲清楚自研的背景以及原因,并且还需要能够对开源的产品有所了解就最好了,能知道自己做的产品和开源的有什么区别,好处、坏处是什么,有什么需要改进的地方等等。
> 整个项目中最大的技术难点是什么?数据库实现了发布/订阅的功能,有其他的方案吗?不想依赖MQ的原因是什么?redis可以实现发布/订阅的功能吗?
这个地方是听上去很明显的方案不合理,使用数据库实现发布/订阅模式,这种方案一定有改进的空间,这对于候选人的要求就是:你要知道你的方案不好、并且你要知道好的方案是什么、否则,没戏。
Redis实现发布订阅:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/mqynn8npgq34vuc6
> 抗10W的实例执行做了哪些技术手段?
这个是重点!而且是面试中很容易出彩的点。不管你工作中有没有遇到,或者你实际上有没有做过哪些技术手段,但是面试的时候都可以答。
服务端接口性能优化的手段:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/izs89qgmcg3wpzrr
如何设计高并发系统:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/famqumtrg9h7hqfn
> 调DUBBO的话是通过泛化调用实现的吗?泛化调用的原理是什么?GenericService和普通的调用方式,区别是什么? > > DUBBO的一次服务调用过程是怎样的?代理、序列化、 > > DUBBO的负载均衡是如何实现的?服务端挂了怎么避免被调用到?心跳 > > 服务端在服务执行过程中,重启了,怎么办?hook(钩子)
泛化调用:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/gvu33ddugu1cxw6h
dubbo服务调用:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/wpqk86wrqd2ezc3o
优雅停机:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/fg8zlke0gzflhr8n
> 线上问题排查,是一个面试官很喜欢问的东西,所有人都需要准备几个,可以是OOM、FullGC、Load飙高,接口性能慢,慢SQL等等。重点是问题发生的过程,排查的思路,解决的方案,以及得到的结果。 > > 工作中有排查过哪些线上问题吗?OOM 内存泄漏、CPU飙高 > > 应用中中什么情况会导致CPU飙高?CPU的哪个指标飙高了? > > CPU利用率和负载有关系吗?LOAD 1 ,LOAD 5
OOM:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/oecw9lcknmhgn24h
CPU飙高:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/meix4bpk31i1eq86
CPU利用率:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/ts42qwgaaf0d5yda
> 业务中做了分库分库的场景介绍一下。2000w,为什么2000w要分表?如何分表的? > > 分库分表后回带来什么问题?分表查询、join问题、 > > 订单库做分库分表,该选择哪个字段做分表字段(买家ID还是卖家ID?)?基因法。 > > 选择分表字段的时候会考虑哪些因素?查询条件。 > > 分库和分表有什么区别?分区是什么?
为什么2000万分表:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/qip38dxx0o5cbmsa
分库分表:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/wu3l9oeig5dl21v6
分区:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/ig7x84alxqygw644
分表字段:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/gygn8dr3mnrtt31u
分页查询:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/vsq0zo2v54kqr3gg
> 用过哪些设计模式?责任链、观察者、策略、享元
策略、工厂、责任链、模板方法以及门面,这几种是一定能在工作中用到的设计模式,需要掌握!
https://www.yuque.com/laiyanhong-9tr5c/zwpzru/zhqys5isg645uig6
https://www.yuque.com/laiyanhong-9tr5c/zwpzru/yr05463wp0dmbaoo
https://www.yuque.com/laiyanhong-9tr5c/zwpzru/ntrtq7its9137awe
https://www.yuque.com/laiyanhong-9tr5c/zwpzru/xr03lrq1z9fu4v7p