- 相關推薦
騰訊微信產品經理筆試面試題
其中第二題是一道偏技術的問題,出現在產品經理的面試中確實有點意外,但這題不失為一道很好的產品設計與系統分析的題目,
騰訊微信產品經理筆試面試題
。系統分析也是我們“產品經理學技術”系列文章規劃中的一個部分,也是將我們所講的技術進行“升華”的一部分內容。下面我們嘗試回答一下這個問題,算是拋磚引玉了,大家有好的答案也可以給我們留言進行討論。
朋友圈的基本數據結構設計是怎樣的?既能做到完美閱讀權限設置,又能兼顧性能?
關于消息的基礎數據,比如文字、圖片、時間、位置等這些咱就不表了。這些數據基本上與權限和性能沒有多大關系,可以理解為單獨存儲,純技術活。這里只討論權限與性能相關的數據結構。
而在權限管理上,微信采用了給用戶打“標簽”來進行分組,這個標簽的分組與微信通訊錄一致。在數據上,就是給每個關系增加一個“標簽”標記。這里需要注意的是,雖然微信的關系在產品使用上給用戶是雙向的(即互相關注),但是在存儲的時候,是給互相關的兩個用戶分別建立了關系數據,也就是每個人獨有自己的一份“通訊錄”。這通過刪除了自己的好友之后,自己并不從別人的通訊錄刪除就可以看得出來。標簽分組的基礎數據就是這樣了,這也是后面朋友圈權限管理的基礎。
對于個人朋友圈timeline所能看到的消息,按照一般的邏輯是先獲取所有朋友的消息,然后剔除掉沒有授權給自己看的消息、剔除掉自己屏蔽的用戶消息,然后才得到自己當前看到的timeline。如果是這樣的邏輯的話,等于每次刷新朋友圈,都要跑到所有的消息池里面去找到上述通訊錄中朋友們的消息,還要對找到的每條消息去判斷用戶是否有權限閱讀。這顯然是效率低下的方式,更何況微信是這么大的一個訪問量和數據量。所以,這種數據結構設計是行不通的了。
一般邏輯下朋友圈每次讀取的過程
解決這種性能問題一般的思路就是把需要大計算量的過程分散到平時零散的時間去做,
資料共享平臺
《騰訊微信產品經理筆試面試題》(http://salifelink.com)。在這里的思路就是:平時就把每個用戶需要的 timeline數據按照權限設置準備好,等到用的時候(刷新朋友圈)就直接讀取準備好的內容。那么答案就出來了:除了存儲一份上面講到的文字,圖片等基本信息外,還需要給每個用戶存儲一份timeline數據,注意,是每個用戶一份。當然,這里的“每份”不需要存儲完整信息,只需要存儲消息的ID和時間 (可能需要)。每個人刷新自己的朋友圈時,讀取自己的那份數據就行了,既不用去消息池子里面篩選,也不用判斷用戶權限。那是怎么實現權限控制呢?
當一個用戶發布一條消息時會按照上面講的標簽設置相關的權限,服務器就會給每個有權限接收這條消息的用戶的timeline中寫入這條消息。也就是在用戶發布的這一刻,就做好了權限安排,而不是等到讀取的時候。這樣就自然減少了讀取的時候的計算量,提高了效率。
發布時進行權限控制(示意圖,實際比這復雜)
至于分庫分表這些就不展開了,知道有這么回事就行。有時候這種技術上的設計也是會限制產品的設計。
那怎么證明上面說的合理呢?
感興趣的同學可以去測試下:先發一條帶閱讀權限的消息,比如允許某個標簽的人看。然后再給這個標簽添加一個新人。結果是這個新人是看不到這條消息的,因為權限劃分是在發布的時候就劃分好了,新人加入標簽的時間是在發布之后,所以沒法獲得這條消息的權限分配機會,雖然他后來在標簽組中,但是仍然沒有辦法看到這條消息。
這就是上面問題的答案,其實主要考察的是在產品設計時是否能夠考慮到技術方案的限制。我把上面的答案貼在知乎上,有人就問了:微信產品團隊是在一開始設計就考慮到了這個問題,還是經過不斷的迭代成現在這樣的?這是個好問題,好的產品經理應該在設計的時候就考慮到這種情況,或者至少應該有相應的預案,而不至于在出現問題或者被研發發難時束手無策。在這個案例中,微信是一開始考慮到了還是迭代過來的并不重要,對于微信“朋友圈”來說,本來就是一個迭代產品,最早的權限管理是單獨于通訊錄的,那個時候是純插件的模式,現在才與通訊錄共用了分組模式進行權限管理。
如果對于上面的技術對產品設計的影響還不是很清晰的話,那么就再跟兩個問題(好的產品經理除了能回答問題外,還要能提出問題^_^):
【騰訊微信產品經理筆試面試題】相關文章:
騰訊產品游戲策劃筆試經驗10-27
騰訊產品及游戲策劃筆試題目10-09
騰訊 產品類筆試歸來 有部分題10-07
騰訊WEB前端筆試題和面試題答案10-09
騰訊產品+游戲策劃筆試題目+經驗帖06-27
騰訊運營筆試題10-08
產品經理筆試題目07-16
騰訊校招筆試題08-08
騰訊技術綜合筆試題09-15
騰訊校園招聘廣州筆試經驗08-28