25个有关Drools规则引擎的面试题


Drools 是一个业务规则管理系统 (BRMS),具有基于前向和后向链接推理的规则引擎,更准确地称为生产规则系统,使用 Rete 算法的增强实现。
KIE(知识就是一切)是 drools、optaPlanner、jBPM、Guvnor、uberFire 和相关技术的新总称。
Drools 支持其业务规则引擎和企业框架的 Java 规则引擎 API(Java 规范请求 94)标准,用于在组织、应用程序或服务中构建、维护和执行业务策略。

  
1) 什么是Drools?
Drools是一个业务规则管理系统(BRMS)解决方案。使用这个框架,用户可以定义规则,指定当一个特定的条件被满足时需要做什么动作。它扩展并实现了Rete模式匹配算法。在项目中,它通常用于定义业务规则。业务规则是由事实和条件语句组成的。
 
2) 为什么使用Drools而不是其他编程语言?
规则逻辑可以用Java这样的编程语言来完成。考虑到一个珠宝店需要根据珠宝的类型来维持计算折扣的业务逻辑。但是这样的规则可能每天都在变化,需要在我们的代码中定期更新,这是不可取的。另外,我们总是需要一个开发人员来做这样的改变。因此,在业务规则管理系统中把这种逻辑定义为规则是一个好的做法。如果明天要改变折扣,即使是非技术人员也能做到。
 
3) KIE是什么意思?
KIE是 "知识就是一切 "的意思。它代表着知识就是一切。从Drools 6.0开始,一个新的方法被用来创建一个知识库和一个知识会话。知识库是一个管理一套规则和流程的界面。知识库的主要任务是存储和重用规则,因为创建规则是非常昂贵的。规则包含在org.drools.KnowledgeBase这个包里面。这些通常被称为知识定义或知识。知识库提供了创建会话的方法。
 
4) 什么是决策表?你使用过吗?
Drools的决策表是基于excel的决策表。Drools的主要优点是,非技术人员也可以改变逻辑。但是如果我们看一下.drl文件,任何修改都需要技术知识。当.drl变得越来越复杂时,对于像商业分析师这样的非技术人员就会变得越来越困难。另外,经常修改drools文件也很麻烦。因此,在非程序员要经常修改的地方,决策表这种格式是一个非常好的选择。
 
5) 什么是JBoss Enterprise BRMS?
JBoss Enterprise BRMS是一个推理引擎,用于业务的政策和规则开发。它还可以管理访问和更改。
 
7) 什么是Drools的产品化版本?
JBoss Enterprise BRMS是Drools的产品化版本,它有企业级的支持。
 
8) 在DRL Drools中,积累是什么意思?
 Accumulate是Drools 4.0版本中引入的条件性元素。它用于遍历对象列表,帮助验证Java操作中的数据。
ex. accumulate (Counter() ; $cnt : count())
 
9) Drools有状态与无状态的知识会话是什么意思?
无状态的会话,形成最简单的用例,不利用推理。一个无状态的会话可以像一个函数一样被调用,传递一些数据,然后接收一些结果回来。有状态的会话寿命较长,允许随着时间的推移进行迭代变化。
无状态会话

  • 在执行规则时,事实中的任何变化都不会被规则引擎察觉。
  • dispose()方法被自动调用以释放会话。
  • 在执行规则的过程中,事实的任何变化都不会被规则引擎察觉,所以如果任何规则被修改,将不会有其他规则的重新激活。

有状态的会话
  • 在执行规则的过程中,事实的任何变化都会被规则引擎知晓。
  • 应该调用dispose()方法来释放会话,以避免内存泄漏。
  • 由于事实中的任何变化对规则引擎来说都是可用的,所以如果一个规则被修改为一个特定的事实,这个变化将重新激活所有的规则,并启动建立在修改的事实上的规则。

  
10) 在Drools中是如何实现后向链的?
在后向链中,我们首先做一个决定,然后通过回溯事件的顺序来检查这个决定是否是真的。例如,如果我想知道某位学生是否通过了考试?那么我将做出一个决定,即该学生已经通过。然后通过回溯分析数据的顺序来分析数据。据此决定该决定是否正确。根据要求,可以使用这两种方法中的任何一种。有时也会使用前向链和后向链的组合。后向链通常被称为派生查询,drools用查询结构来实现它。更多简单的例子可以在这个帖子中找到--使用Drools的后向链。
 
11) 你使用了哪些Drools属性?
我使用了以下的属性-
Salience是一个优先级的值。Drools使用它来计算当一个以上的规则的约束条件被满足时,哪个drool应该首先启动。
使用更新使规则引擎意识到一个事实已经被修改。这可能会导致其他相关规则再次被触发。在某些情况下,如下图所示,它会导致无限循环。
无限循环可以通过使用no-loop属性来避免,如下面的例子所示。
 
12) 在drools中,有哪些不同的执行控制语句?
如果你的KieBase定义了多个规则,如果你想有选择地执行其中的一个子集,Drools提供了几个功能来完成这个任务。
  • agenda-group:这是一个可选的关键字。它可以被分配给所有的规则。如果没有分配到任何议程组,规则默认属于âmainâ议程。
  • ruleflow-group: 它的行为与议程组完全相似,只是它一般用于jBPM流程中的规则。
  • activation-group是drools drl文件中的一个保留关键字。可以有一条规则或多条规则属于一个特定的激活-组。属于激活组的规则以类似于java中 "if...else if...else "块的方式启动。在一个激活组中,一次只能启动一条规则。

 
13) 列出JBoss企业的基本组件。

JBoss企业的一些基本组件包括。

  • JBoss企业网--平台。它是一个软件架构,主要支持和运行各种业务规则管理系统组件。
  • JBoss企业应用-平台。它是另一个软件架构,也用于支持和运行各种业务规则管理系统
  • 业务规则引擎--它是一个集中的存储库,包含了所有基本的Drools知识,可以用来运行、编辑和管理大量的业务规则。
  • 业务规则存储库

 
14) 写一个编码,展示一个简单的规则,以便打印有关九月假期的信息。

下面的简单编码可以帮助打印出关于九月假期的任何信息。

rule “validate holiday”
dialect “mvel”
dialect “java”
when
$h1 : Holiday (month == “September”)
then
System.out.println ($h1.name + “:” + $h1.month);
end

 
15) 描述一下KIE
KIE是 "知识就是一切 "的首字母缩写。最新版本的Drools有一种方法,用来创建不同的知识库和会话。这些知识库作为管理规则集的接口和处理的接口。KIE的主要目标之一是存储各种知识库,并在需要时重复使用这些规则。这样做的主要原因是,重复制作一套新的规则会很昂贵,而且很费时间。
 
16) 在Drools中实现 "后向链 "的程序是什么?
在 "后向链 "中,人们必须首先做出一个选择,然后通过回溯一系列的场合来检查这个选择是否有效。例如,如果需要查看某位学生是否通过考试?这时,我就会选择该学生已经通过。然后通过对信息的连续调查回溯来剖析信息。以同样的方式,做出的决定要么是正确的,要么是错误的。根据需要,这两种方法都可以利用。有时还可以利用前向和后向链的混合。在后向链中,它经常被称为归纳查询,Drools用建设性的问题来实现它。
 
17) 列出Drools中使用的不同执行语句
一些在Drools中常用的执行控制语句包括。

  • 规则流组。它一般用于JBoss业务项目管理流程中的规则
  • 议程-组。它是一个可选的关键字,分配给数据库中所有的规则。
  • 激活--组。这是所有Drools DRL文件中的一个保留关键词。激

  
18) 在商业项目管理中使用规则引擎有哪些优势?

在商业项目管理中使用规则引擎的一些优势包括。

  • 高灵活性:将你的准则保存在知识库中,让你在选择不断变化时有效调整。
  • 易于学习。规则比程序代码更容易理解,所以它们可以成功地用于弥补业务专家和工程师之间的任何障碍。
  • 减少复杂度。当安装大量的决定时,它主要集中在你的程序代码上,这无疑会使你的应用程序变成一个坏梦。另外,规则可以更好地处理多面性的扩展,因为它们利用业务规则的可预测描绘。
  • 可重用性。将规则保持在一个点上会促使你的业务规则有更多值得注意的重用性。同样地,传统的程序性代码经常迫使无意义的基础准则品种,因此在不同的环境中越来越难以重用。

 
19) 你对Drools流程的理解是什么?
Drools Process(也被称为Drools Flow)是一个框架,除了提供各种业务流程的工作流。
 
20) 什么是全局变量?
全局变量是Drools的一个关键词。"全局 "是指在Drools中使用的变量,它对.drl文件中的所有规则都是可见的。使用全局变量的主要目的是,它可以用于任何类型的对象,而不用担心不匹配的问题。
  
22) 在Drools中积累.drl文件是什么意思?
Accumulate是Drools最新版本中引入的一个额外的元素,用于迭代对象的列表,也有助于在利用Java的操作中对数据进行认证。例如:accumulate (Counter() ; $cnt : count())
 
23) 为什么在Drools中变量前使用符号"$"?
在Drools中,变量前使用符号"$"是为了确保规则的变量和POJO类的变量之间有区别。
 
24) 请说出知识会话中的接口类型,并对其进行区分。
知识会话中的两种接口类型是。
  • 无状态的知识会话
  • 有状态的知识会话

 
25) 什么是BPM?
BPM是指业务流程管理。BPM有两个不同的方面。作为管理学科的BPM和作为软件工程的BPM。长期以来,BPM供应商一直试图对这两个不同的方面进行抽象。这条路导致了更多的混乱,而不是其他的东西。

BPM作为一门管理学科,是每个战略执行经理的责任。它是为了确保组织在其核心业务流程中表现良好。这涉及到理解组织所提供的价值以及如何实现这些价值。这意味着要分析、记录和改进人员和系统共同工作的方式。作为这项工作的一部分,使用模型和图表是有用的。

BPMN图表达了完成某个目标的步骤的执行流程。需要注意的是,这些模型是用于人与人之间的沟通。它们可以是欠规范的,这意味着它们可以包含有价值的高层次信息,而不包括不必要的细节。这种欠规范的流程模型也被称为抽象的业务流程。