AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

面試官:一個子任務要依賴兩個父任務完成才能執行,該怎么設計?

來源: 責編: 時間:2024-09-10 09:44:01 110觀看
導讀大家好,我是君哥。今天分享一道面試題。面試官:有一個場景,如果一個子任務的執行,要依賴兩個父任務執行完成后才能執行,該怎么設計? 我:可以設置兩個父任務的信號,父任務執行完成后更新信號已完成。子任務被觸發時判斷兩個父

大家好,我是君哥。今天分享一道面試題。GK528資訊網——每日最新資訊28at.com

面試官:有一個場景,如果一個子任務的執行,要依賴兩個父任務執行完成后才能執行,該怎么設計? GK528資訊網——每日最新資訊28at.com

:可以設置兩個父任務的信號,父任務執行完成后更新信號已完成。子任務被觸發時判斷兩個父任務是否執行完成,只有兩個父任務都執行完成,子任務才會執行。如果條件不滿足,就先掛起。下面是一段示例代碼:GK528資訊網——每日最新資訊28at.com

private static AtomicInteger parentTask1 = new AtomicInteger(0);private static AtomicInteger parentTask2 = new AtomicInteger(0);private static Object locker = new Object();public static void main(String[] args) throws InterruptedException { Thread childThread = new Thread(() -> {  while (true) {   try {    synchronized (locker) {     if (parentTask1.get() == 1 && parentTask2.get() == 1) {      //doSomething      break;     }     locker.wait();    }   } catch (InterruptedException e) {    e.printStackTrace();   }  } }); childThread.start(); Thread parentThread1 = new Thread(() -> {  parentTask1.incrementAndGet();  synchronized (locker){   locker.notifyAll();  } }); parentThread1.start();}

父任務執行完成后喚醒子任務。GK528資訊網——每日最新資訊28at.com

面試官:有其他方法嗎? GK528資訊網——每日最新資訊28at.com

:也可以使用 CompletableFuture,使用任務依賴來控制任務執行,下面是一個示例代碼:GK528資訊網——每日最新資訊28at.com

CompletableFuture<Boolean> parentTask1 = CompletableFuture.supplyAsync(() -> { System.out.println("doParentTask1"); return true;});CompletableFuture<Boolean> parentTask2 = CompletableFuture.supplyAsync(() -> { System.out.println("doParentTask2"); return true;});CompletableFuture childTask = CompletableFuture.allOf(parentTask1, parentTask2);childTask.thenApply(c -> { try {  if (parentTask1.get() && parentTask2.get()){   System.out.println("doChildTask");  } } catch(Exception e) {  e.printStackTrace(); } finally {  System.out.println("child task do error"); } return c;});childTask.join();

面試官:那在分布式場景或集群環境下,前面說的方案可以解決問題嗎? GK528資訊網——每日最新資訊28at.com

:分布式場景或者集群環境下,肯定是不能使用上面的線程調度方案的,因為多個任務可能跑在不同進程里。GK528資訊網——每日最新資訊28at.com

面試官:現在開源的分布式任務調度框架有很多,比如 xxl-job、PowerJob,有這個場景相關的調度方案嗎? GK528資訊網——每日最新資訊28at.com

:目前的任務調度框架支持子任務配置,但是還沒有子任務依賴兩個父任務執行結果這個場景的配置。GK528資訊網——每日最新資訊28at.com

面試官:那有什么方案可以解決分布式場景下的問題嗎? GK528資訊網——每日最新資訊28at.com

:我想到一個簡單的方案,可以在數據庫或緩存中維護一個父任務的狀態標志,比如一張狀態表保存 parentTask1、parentTask2 這兩個任務狀態,每當子任務被觸發時先查一下這兩個狀態是否都被更新成 1,如果是再執行業務邏輯,否則直接退出任務。GK528資訊網——每日最新資訊28at.com

面試官:你說的這個方案,如果只跑一次,還可以,如果任務執行比較頻繁,比如兩個父任務每分鐘跑一次,子任務也會每分鐘都會被觸發。你這個方案能滿足要求嗎? GK528資訊網——每日最新資訊28at.com

:一分鐘頻率太高了,需要記錄每次父任務的狀態,而且同一個父任務每分鐘執行的狀態要能區分開。因為可能有極端的情況,parentTask1 上一分鐘的還沒有跑完,但 parentTask2 下一分鐘的已經跑完了,父子任務關聯會出現混亂,如果子任務依賴父任務跑批產生的數據,就會出問題。GK528資訊網——每日最新資訊28at.com

面試官:嗯,你說的這個情況是存在的,如果讓你設計,你會怎么解決呢GK528資訊網——每日最新資訊28at.com

:可以給父子任務賦值一個 taskId,根據這個 taskId 來做關聯。比如 parentTask1 的 taskId 是 P202409100000011,parentTask2 配套的 taskId 是 P202409100000012,子任務配套的 taskId 是 P202409100000013。子任務被觸發時,根據 P202409100000013 來判斷  P202409100000011 和 P202409100000012 是否執行完成。子任務下一次觸發時,taskId 就是 P202409100000023,下下次就是 P202409100000033,每次子任務 Id 都是根據父任務 taskId 計算出來。GK528資訊網——每日最新資訊28at.com

面試官:這個 taskId 怎么生成和關聯,有思路嗎? GK528資訊網——每日最新資訊28at.com

:這個還是有點難度的。我說一個思路,不一定好。我們定義一張表,如下圖:GK528資訊網——每日最新資訊28at.com

圖片圖片GK528資訊網——每日最新資訊28at.com

給這個場景定義一個自增 id,這個 id 由 parentTask1 來獲取,獲取后先進行記錄再執行任務。parentTask2 啟動時,找到 parentTask1 有值但是 parentTask2 為空的記錄。先根據 parentTask1 的記錄taskId 計算出自己的 taskId,然后保存數據庫。而子任務被觸發時,從表里查詢已經有 parent_task1_id 和 parent_task2_id 并且兩個狀態都為 1,但是沒有 child_task_id 的記錄,更新 child_task_id 字段,然后執行任務邏輯。GK528資訊網——每日最新資訊28at.com

面試官:恭喜你進入下一輪。GK528資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-112704-0.html面試官:一個子任務要依賴兩個父任務完成才能執行,該怎么設計?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Asp.Net Core實戰-MiniProfiler性能分析

下一篇: 在PHP編程中,將數據快速轉換為JSON格式

標簽:
  • 熱門焦點
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發布會上看到了iQOO的首款平板產品iQOO Pad。雖
  • 小米降噪藍牙耳機Necklace分享:聽一首歌 讀懂一個故事

    在今天下午的小米Civi 2新品發布會上,小米還帶來了一款新的降噪藍牙耳機Necklace,我們也在發布結束的第一時間給大家帶來這款耳機的簡單分享。現在大家能見到最多的藍牙耳機
  • 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

    一、MSBuild簡介MSBuild是一種基于XML的構建引擎,用于在.NET Framework和.NET Core應用程序中自動化構建過程。它是Visual Studio的構建引擎,可在命令行或其他構建工具中使用
  • 量化指標是與非:挽救被量化指標扼殺的技術團隊

    作者 | 劉新翠整理 | 徐杰承本文整理自快狗打車技術總監劉新翠在WOT2023大會上的主題分享,更多精彩內容及現場PPT,請關注51CTO技術棧公眾號,發消息【WOT2023PPT】即可直接領取
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 微軟邀請 Microsoft 365 商業用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業用戶,開放 Clipchamp 應用,邀請用戶通過該應用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
Top