最全老板要我开发一个简单的工作流引擎 !,阿里java面试题及答案

我的面试宝典:一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

image

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

image

还有源码相关的阅读学习

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

第3关

老板来了:要支持并行节点。

我查了一下午啥是并行节点,发现并行节点是一个包含很多审批人的大节点,这个大节点里任何一个人审批通过,则该节点就完成。

然后很快就加入了并行节点:

  • 并行节点是一个复杂节点,该节点激活时,任何一个子节点都可以进行审批,且任何一个子节点是完成状态时,该节点完成。

加入新状态 Skip:

  • 当一个并行节点的子节点状态为非(Ready, Waiting)时,其它兄弟节点及其子节点的状态被置为Skip。

举个栗子🌰:

在这里插入图片描述

老板:这个设计添加新节点还挺方便的。

第4关

老板又来了:节点要支持嵌套,比如会签节点里有个并行节点,并行节点里又有个复杂节点,要可以嵌套任意层的那种。

我:其实已经支持了~

在这里插入图片描述

  • 能无限扩展的树形结构可以支持任意复杂流程。

老板:小伙子有点东西!

第5关

老板又来了:要支持条件节点。

工作流附带一个表单,要根据表单的内容确定下一步进入哪个分支。

经过几天的冥思苦想,我加入了条件节点:

  • 条件节点类似并行节点,只不过只有满足条件的子节点才能进入接下来的审批。

在这里插入图片描述

老板:已阅。

第6关

老板又来了:审批人多加两种类型,比如可以从表单中选择下一个审批人,还有根据发起人不同选择不同的审批人。

经过一番考虑,我把简单节点分成了3类:

  • 第一种:审批人是写死的。

  • 第二种:审批人从表单中读取。

  • 第三种:根据发起人和一个映射函数,算出审批人。比如 get_主管(“钱某”) 得到钱某的主管 李某。

在这里插入图片描述

老板:嗯。

第7关

老板又来了:节点可以从前往后审批,那能不能从后往前驳回?

我: …

首先实现了驳回到发起人的功能,相当于一切从头开始:

只有Ready状态的节点有权利驳回。(就像只有Ready状态的节点有权利审批一样)

在这里插入图片描述

老板:你小子偷懒。

第8关

老板又来了:先实现驳回到上一个审批人吧。

驳回到上一个审批人其实是个很复杂的逻辑,因为工作流中的节点可以无限嵌套,所以如何确定上一个状态有哪些审批人并不简单。

牺牲了一些头发,我终于实现了驳回上一级的功能:

在这里插入图片描述

老板:阅。

第9关

老板又来了:实现一个驳回到任意节点的功能。

我发现这个需求并不难实现:

  • 不断的驳回上一级,直到Ready状态的节点包含要驳回到的节点为止。

老板:嗯。

第10关

老板又来了:在普通节点加一个时间限制,要是在规定时间内没完成就显示已超时。

我:还有这种需求?

不过还是实现了。

在这里插入图片描述

此时我明白了需求和头发呈负相关,需求越多,头发越少。

第11关

老板又来了:加一个代理功能,比如有件事让你审批,但是你拿不准,那就转给拿得准的人审批。

马上我发现这个需求跟以往有本质的不同,以往的工作流的节点关系一开始就是固定的,就是在发起流程之前确定的,

但是现在要在审批过程中更改。

无非是加了一些班,掉了一些头发,最终设计了如下方案:

  • 代理操作的本质是,新建一个并行节点作为本节点的父节点,再新建一个兄弟节点放代理人,这样自己和代理人都能审批通过。

  • 代理操作可以无限嵌套,即代理人也可以找人代理。

在这里插入图片描述

第12关

老板又来了:能不能再加一个取消代理的功能?

。。。我已经宠辱不惊了,加就加:

  • 取消代理是代理的逆操作

  • 如果代理人审批过了那就不能取消代理

本次面试答案,以及收集到的大厂必问面试题分享:

字节跳动超高难度三面java程序员面经,大厂的面试都这么变态吗?

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

问面试题分享:

[外链图片转存中…(img-IZkJOFYH-1715612347047)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值