✅工作4年,自研流程引擎项目

面试者背景

工作4年,springboot技术栈,工作在一家还不错的某个领域的头部公司,做过几个项目,最近一个项目在做一个自研的流程引擎。

面试过程

:::warning 流程引擎是完全自研,介绍一下这个项目。功能节点(异步)、

你们自研的流程引擎遵守了BPMN规范吗?流程节点支持重试吗?流程的重试是如何实现的?

整个项目中最大的技术难点是什么?数据库实现了发布/订阅的功能,有其他的方案吗?不想依赖MQ的原因是什么?redis可以实现发布/订阅的功能吗?

抗10W的实例执行做了哪些技术手段?

第三方想用你的流程引擎,是怎么用的?节点支持哪些协议?

调DUBBO的话是通过泛化调用实现的吗?泛化调用的原理是什么?GenericService和普通的调用方式,区别是什么?

DUBBO的一次服务调用过程是怎样的?代理、序列化、

DUBBO的负载均衡是如何实现的?服务端挂了怎么避免被调用到?心跳

服务端在服务执行过程中,重启了,怎么办?hook(钩子)

工作中有排查过哪些线上问题吗?OOM 内存泄漏、CPU飙高

应用中中什么情况会导致CPU飙高?CPU的哪个指标飙高了?

CPU利用率和负载有关系吗?LOAD 1 ,LOAD 5

业务中做了分库分库的场景介绍一下。2000w,为什么2000w要分表?如何分表的?

分库分表后回带来什么问题?分表查询、join问题、

订单库做分库分表,该选择哪个字段做分表字段(买家ID还是卖家ID?)?基因法。

选择分表字段的时候会考虑哪些因素?查询条件。

分库和分表有什么区别?分区是什么?

用过哪些设计模式?责任链、观察者、策略、享元

:::

题目解析

:::color4 流程引擎是完全自研,介绍一下这个项目。功能节点(异步)、

你们自研的流程引擎遵守了BPMN规范吗?流程节点支持重试吗?流程的重试是如何实现的?

:::

这个地方主要是考察这个流程引擎的背景,这种东西一般面试官会比较重点考察自研而不是直接使用开源产品的必要性。

关于这一点,回答的时候需要注意,首先要能讲清楚自研的背景以及原因,并且还需要能够对开源的产品有所了解就最好了,能知道自己做的产品和开源的有什么区别,好处、坏处是什么,有什么需要改进的地方等等。


:::color4 整个项目中最大的技术难点是什么?数据库实现了发布/订阅的功能,有其他的方案吗?不想依赖MQ的原因是什么?redis可以实现发布/订阅的功能吗?

:::

这个地方是听上去很明显的方案不合理,使用数据库实现发布/订阅模式,这种方案一定有改进的空间,这对于候选人的要求就是:你要知道你的方案不好、并且你要知道好的方案是什么、否则,没戏。

Redis实现发布订阅:https://www.yuque.com/hollis666/xkm7k3/oz0kvggva663l911

:::color4 抗10W的实例执行做了哪些技术手段?

:::

这个是重点!而且是面试中很容易出彩的点。不管你工作中有没有遇到,或者你实际上有没有做过哪些技术手段,但是面试的时候都可以答。

服务端接口性能优化的手段:https://www.yuque.com/hollis666/xkm7k3/ifuuagaqo3yd8vqb

如何设计高并发系统:https://www.yuque.com/hollis666/xkm7k3/gfgqpua8gu3oag44

:::color4 调DUBBO的话是通过泛化调用实现的吗?泛化调用的原理是什么?GenericService和普通的调用方式,区别是什么?

DUBBO的一次服务调用过程是怎样的?代理、序列化、

DUBBO的负载均衡是如何实现的?服务端挂了怎么避免被调用到?心跳

服务端在服务执行过程中,重启了,怎么办?hook(钩子)

:::

泛化调用:https://www.yuque.com/hollis666/xkm7k3/kogite7l9dkksl4q

dubbo服务调用:https://www.yuque.com/hollis666/xkm7k3/io1pkwin43mkwaup

优雅停机:https://www.yuque.com/hollis666/xkm7k3/gxda8y

:::color4 线上问题排查,是一个面试官很喜欢问的东西,所有人都需要准备几个,可以是OOM、FullGC、Load飙高,接口性能慢,慢SQL等等。重点是问题发生的过程,排查的思路,解决的方案,以及得到的结果。

工作中有排查过哪些线上问题吗?OOM 内存泄漏、CPU飙高

应用中中什么情况会导致CPU飙高?CPU的哪个指标飙高了?

CPU利用率和负载有关系吗?LOAD 1 ,LOAD 5

:::

OOM:https://www.yuque.com/hollis666/xkm7k3/vdnaxh

CPU飙高:https://www.yuque.com/hollis666/xkm7k3/yp216u

CPU利用率:https://www.yuque.com/hollis666/xkm7k3/hhmxp4xri441moiq

:::color4 业务中做了分库分库的场景介绍一下。2000w,为什么2000w要分表?如何分表的?

分库分表后回带来什么问题?分表查询、join问题、

订单库做分库分表,该选择哪个字段做分表字段(买家ID还是卖家ID?)?基因法。

选择分表字段的时候会考虑哪些因素?查询条件。

分库和分表有什么区别?分区是什么?

:::

为什么2000万分表:https://www.yuque.com/hollis666/xkm7k3/ovg68pfik2vo2eh8

分库分表:https://www.yuque.com/hollis666/xkm7k3/wpus0g

分区:https://www.yuque.com/hollis666/xkm7k3/fxbeuozlr7x7zaon

分表字段:https://www.yuque.com/hollis666/xkm7k3/mec4ust5rpfob78r

分页查询:https://www.yuque.com/hollis666/xkm7k3/znu3byuscn503ags

:::color4 用过哪些设计模式?责任链、观察者、策略、享元

:::

策略、工厂、责任链、模板方法以及门面,这几种是一定能在工作中用到的设计模式,需要掌握!

https://www.yuque.com/hollis666/xkm7k3/elzv4u

https://www.yuque.com/hollis666/xkm7k3/trigus

https://www.yuque.com/hollis666/xkm7k3/yhmvq8

https://www.yuque.com/hollis666/xkm7k3/xrldzr6lf0mey3aw

原文: https://www.yuque.com/hollis666/xkm7k3/ydwnwnnu60a2alvm