这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
1. 介绍
规则引擎是嵌入在应用程序服务中的组件,它将灵活的业务决策与服务代码分开。业务逻辑规则是使用预定义的语义模块编写的。接受数据输入,解释业务规则,并在执行时做出决策。规则引擎可以大大提高系统的灵活性和可扩展性。
在字节跳动,规则引擎已广泛应用于风控识别、活动操作、配置交付等场景。开发人员可以将业务逻辑与服务代码分离,从而支持灵活而高效的业务策略发布。目前,公司基于规则引擎的动态决策系统已经承担了数千万QPS的决策请求。
规则引擎的实现需要尽可能简单易用,同时满足大容量、高请求和低延迟。
2. 什么是编译
编译的过程就是 把某种语言的源程序,在不改变语义的条件下,转换成另一种语言程序(目标语言程序)
- 如果源代码被编译为在操作系统上运行,则目标代码是汇编/机器代码。
- 如果在虚拟机中编译和执行,目标代码可能不是汇编代码,而是解释器可以理解的一种中间形式的代码。
解释语言和编译语言
- 有些语言会提前一次性转换所有代码。这就是编译语言。所使用的转换工具称为编译器,如C、c++、Go。编译是可重复的
- 编译后的产品不能跨平台,不同的系统对可执行文件有不同的要求
- 特别是c, c++,汇编,源代码不能跨平台
- 有些语言可以一边转换一边执行,用到哪里了就转哪里,这就是解释性语言,使用的翻译工具叫做虚拟机或解释器,比如java、python、javascript
关于Java和Python
- Java同时具有编译和解释。但是编译不会直接编译成机器代码,而是编译成字节码,然后将字节码放入虚拟机中执行。
- Python执行过程还经历两个阶段,第一个阶段是编译成字节码。Pyc,然后将其放入虚拟机执行
3. 词法分析
把源代码字符串转换为词法单元(Token)的这个过程。
确定的有限自动机 DFA | Deterministic Finite Automaton
确定性有限自动机是具有有限数量状态的状态机。状态机可以根据输入字符在任何状态下进行确定的状态转换。