編輯導讀:為了提高我們的思維能力,需要有意識地觀察生活,並做一些產品思考。本文作者將以一道產品的筆試題為例,談談業務調度設計的邏輯測驗及分析,希望對你有幫助。
個人一直覺得產品面試是一件非常有挑戰的事情,今天選擇從一個角度分享B端產品的面試技巧。
這是一道筆試的面試題,這道源自於老狗某日在等電梯時的突發奇想。
一棟樓內有N部互相關聯的電梯,當任一樓層內的用戶,按下呼叫鍵(上/下)後,系統對接載乘客需求的響應邏輯該如何設計,目標是讓電梯實現高效且合乎我們日常使用體驗。
這個問題,通常情況下,請作為筆試題,並給候選人至少30分鐘以上思考時間。
老狗當初冒出這個想法的時候,自己考自己,花了幾天時間才把邏輯給抽象出來,從我實際面試經驗來看,如果這個問題在當面溝通時拋給候選人的話,實時能夠描繪出邏輯的人,基本為零。
但這絕對是一個值得去琢磨的問題,對於提升自己的邏輯性有非常大的幫助。
這個問題的本質是什麼?
這個問題本質上,我把它定義為「業務調度設計能力」。
在B端產品經理的專業能力樹中,業務調度的邏輯抽象能力,我認為是極其重要的一項基本能力,帶大家一起分析下這個問題。
最熟悉的場景,卻不曾思考過的複雜邏輯。
問題中,包含了非常多的變量:
樓層數是變量;電梯數是變量;呼叫電梯的人,所處的樓層是變量;呼叫電梯的人,往上/往下的需求是變量;呼叫電梯的人,與電梯轎箱的相對位置是變量;呼叫電梯的人,往上/往下的需求,與電梯運行的相對方向,也是變量;目標是高效的接載邏輯,高效背後代表了以下訴求:
較低的使用能耗;運行過程中儘可能多的進行接載送達;滿足整體的快速接載及送達;在邏輯高效的基礎上,確保邏輯架構的合理,便於擴展其他分支邏輯,比如:
考慮轎箱內乘客的體驗,當前樓層距離呼叫樓層過近時,不能瞬間停靠,需要排除;某一轎箱故障/檢修時,需要排除;某一轎箱滿載時,需要排除;某一轎箱長時間停滯時(被人卡門),是否要排除候選;更多;所以,如果你是電梯軟體系統的產品經理,你認為接載的業務調度邏輯該如何設計呢?
一、如何設計?
業務調度的邏輯思考:
依據效率優先原則,優先考慮優先條件全部滿足的場景。其背後的邏輯,與我們趕火車時的邏輯非常類似:當我們要從杭州去上海的時候,假設每趟火車的時長都一致的情況下,我們應該如何選擇火車?
趕火車時的常理思維:
選擇當前所有已發列車中,最快到達杭州站的火車且往上海去的,然後順路上車是最快的。相對我而言,雖然發車但反向開走的火車,我都會排除掉。如果沒有向杭州來且往上海去的運行中的火車,則我會考慮未發車的火車。電梯場景下的業務調度設計:
電梯按下呼叫按鈕瞬間,我們需要選出一個目標電梯來接載。在觸發按鈕的狀態下,電梯可以分成「運行狀態」,和「靜止狀態」兩個分類:
為了節能,我們優先考慮運行中的電梯;為了考慮具備接載的可能,選擇距離最近,且順向的電梯即為目標,若逆向直接納入排除列表,再選擇下一個距離最近的繼續判斷是否順向……若運行中的電梯,沒有找到順向者,則考慮靜止狀態的電梯;為了節能,優先考慮距離最近的電梯且未被排除的電梯,即為目標;若都沒有合適的電梯,則系統等待當前電梯任務結束後,再重新判斷;核心解決思路:抽象出最關鍵的調度核心邏輯,同時考慮邏輯擴展的可能性。
二、供參考的個人答案
選出當前距離任務樓層最近,且,未被排除的電梯(被排除的可以狀態很多:如滿載超重、故障代碼、人為卡門超時、維修暫停、節能暫停等……),判斷是否有可選電梯;若有電梯,則判斷該電梯是否正在執行運輸任務;若是(執行中),則判斷是否執行順向任務;若是(順向),則將任務插入該電梯運行隊列,實現接載(此處可以有擴展邏輯,如順向,但距離過近則排除等);若否(反向),則列為「排除電梯」,並重新執行邏輯1;若否(未執行),則將任務插入該電梯運行隊列,實現接載;若無電梯,則等待空餘電梯通知,通知發生時,清空排除電梯清單,重新執行邏輯*所謂「順向」的判斷邏輯:呼叫指令的發起樓層,位於電梯當前樓層至行駛方向終點間的樓層間隔內(即避免方向相同,但「已過站」的問題)。
三、延展思考
業務調度設計過程中,高效判斷邏輯,嚴謹的閉環設計是核心重點。
其實除了電梯,還有其他很有意思的調度設計思考題。比如火車的車票,應該如何進行售賣及控制(多個站點停靠,多位置,需求只佔中間的某一程),系統應該如何設計調度規則,才能實現合理的需求與供給匹配?
當然這個題太複雜,根本不適合做面試題,但是建議B端的產品,可以在各種碎片時間進行一些調度邏輯的設計,練練腦。:)
本文由 @十六年產品老狗 原創發布於人人都是產品經理,未經作者許可,禁止轉載。
題圖來自Unsplash,基於CC0協議。