25個有關Drools規則引擎的面試題

banq發表於2022-03-18

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圖表達了完成某個目標的步驟的執行流程。需要注意的是,這些模型是用於人與人之間的溝通。它們可以是欠規範的,這意味著它們可以包含有價值的高層次資訊,而不包括不必要的細節。這種欠規範的流程模型也被稱為抽象的業務流程。
 

相關文章