“小道消息”的@Fenng 前幾天發(fā)了三道產(chǎn)品經(jīng)理的面試題,題目是關于微信的,如下:
其中第二題是一道偏技術的問題,出現(xiàn)在產(chǎn)品經(jīng)理的面試中確實有點意外,但這題不失為一道很好的產(chǎn)品設計與系統(tǒng)分析的題目。系統(tǒng)分析也是我們“產(chǎn)品經(jīng)理學技術”系列文章規(guī)劃中的一個部分,也是將我們所講的技術進行“升華”的一部分內容。
下面我們嘗試回答一下這個問題,算是拋磚引玉了,大家有好的答案也可以給我們留言進行討論。
朋友圈的基本數(shù)據(jù)結構設計是怎樣的?既能做到完美閱讀權限設置,又能兼顧性能?
關于消息的基礎數(shù)據(jù),比如文字、圖片、時間、位置等這些咱就不表了。這些數(shù)據(jù)基本上與權限和性能沒有多大關系,可以理解為單獨存儲,純技術活。這里只討論權限與性能相關的數(shù)據(jù)結構。
而在權限管理上,微信采用了給用戶打“標簽”來進行分組,這個標簽的分組與微信通訊錄一致。在數(shù)據(jù)上,就是給每個關系增加一個“標簽”標記。這里需要注意的是,雖然微信的關系在產(chǎn)品使用上給用戶是雙向的(即互相關注),但是在存儲的時候,是給互相關的兩個用戶分別建立了關系數(shù)據(jù),也就是每個人獨有自己的一份“通訊錄”。這通過刪除了自己的好友之后,自己并不從別人的通訊錄刪除就可以看得出來。標簽分組的基礎數(shù)據(jù)就是這樣了,這也是后面朋友圈權限管理的基礎。
對于個人朋友圈timeline所能看到的消息,按照一般的邏輯是先獲取所有朋友的消息,然后剔除掉沒有授權給自己看的消息、剔除掉自己屏蔽的用戶消息,然后才得到自己當前看到的timeline。如果是這樣的邏輯的話,等于每次刷新朋友圈,都要跑到所有的消息池里面去找到上述通訊錄中朋友們的消息,還要對找到的每條消息去判斷用戶是否有權限閱讀。這顯然是效率低下的方式,更何況微信是這么大的一個訪問量和數(shù)據(jù)量。所以,這種數(shù)據(jù)結構設計是行不通的了。
一般邏輯下朋友圈每次讀取的過程
解決這種性能問題一般的思路就是把需要大計算量的過程分散到平時零散的時間去做。在這里的思路就是:平時就把每個用戶需要的timeline數(shù)據(jù)按照權限設置準備好,等到用的時候(刷新朋友圈)就直接讀取準備好的內容。那么答案就出來了:除了存儲一份上面講到的文字,圖片等基本信息外,還需要給每個用戶存儲一份timeline數(shù)據(jù),注意,是每個用戶一份。當然,這里的“每份”不需要存儲完整信息,只需要存儲消息的ID和時間(可能需要)。每個人刷新自己的朋友圈時,讀取自己的那份數(shù)據(jù)就行了,既不用去消息池子里面篩選,也不用判斷用戶權限。
那是怎么實現(xiàn)權限控制呢?
當一個用戶發(fā)布一條消息時會按照上面講的標簽設置相關的權限,服務器就會給每個有權限接收這條消息的用戶的timeline中寫入這條消息。也就是在用戶發(fā)布的這一刻,就做好了權限安排,而不是等到讀取的時候。這樣就自然減少了讀取的時候的計算量,提高了效率。
發(fā)布時進行權限控制(示意圖,實際比這復雜)
至于分庫分表這些就不展開了,知道有這么回事就行。有時候這種技術上的設計也是會限制產(chǎn)品的設計。
那怎么證明上面說的合理呢?
感興趣的同學可以去測試下:先發(fā)一條帶閱讀權限的消息,比如允許某個標簽的人看。然后再給這個標簽添加一個新人。結果是這個新人是看不到這條消息的,因為權限劃分是在發(fā)布的時候就劃分好了,新人加入標簽的時間是在發(fā)布之后,所以沒法獲得這條消息的權限分配機會,雖然他后來在標簽組中,但是仍然沒有辦法看到這條消息。
這就是上面問題的答案,其實主要考察的是在產(chǎn)品設計時是否能夠考慮到技術方案的限制。我把上面的答案貼在知乎上,有人就問了:微信產(chǎn)品團隊是在一開始設計就考慮到了這個問題,還是經(jīng)過不斷的迭代成現(xiàn)在這樣的?這是個好問題,好的產(chǎn)品經(jīng)理應該在設計的時候就考慮到這種情況,或者至少應該有相應的預案,而不至于在出現(xiàn)問題或者被研發(fā)發(fā)難時束手無策。在這個案例中,微信是一開始考慮到了還是迭代過來的并不重要,對于微信“朋友圈”來說,本來就是一個迭代產(chǎn)品,最早的權限管理是單獨于通訊錄的,那個時候是純插件的模式,現(xiàn)在才與通訊錄共用了分組模式進行權限管理。
如果對于上面的技術對產(chǎn)品設計的影響還不是很清晰的話,那么就再跟兩個問題(好的產(chǎn)品經(jīng)理除了能回答問題外,還要能提出問題^_^):
1、朋友圈的消息為啥不能編輯,只能刪除?
我理解這是產(chǎn)品設計和技術實現(xiàn)平衡的結果。編輯功能對于主要以發(fā)布照片和即時消息的朋友圈來說,并不是剛性的需求。但是在上面的技術框架下,編輯功能在技術上,就不好實現(xiàn)。具體來說就是:前面我們講了,權限的控制是在發(fā)布的時候確定了,如果增加編輯功能的話,意味著一旦用戶在編輯的時候調整了閱讀權限的話,就需要將之前寫入到有權限的用戶timeline的數(shù)據(jù)刪除掉,重新寫入一遍,這對于技術實現(xiàn)來說,也是一個很大的成本,需要更新的數(shù)據(jù)很多(該條消息所有涉及到的用戶的timeline數(shù)據(jù)都要更新)。所以,平衡的結果是寧愿讓用戶刪除了重新發(fā)布,也不提供編輯的功能。你可能又要問了,刪除時就不用更新相關人的timeline嗎?首先刪除比寫入簡單多了,第二個是用戶timeline的數(shù)據(jù)可能還真不用刪除。具體原因就不解釋了,想知道的給我們留言單獨解釋。
2、上述發(fā)布時的權限分配規(guī)則中會考慮屏蔽的人嗎?也就是問,如果一個用戶A屏蔽了某個人B的朋友圈,B發(fā)布的消息會進入A的timeline的準備數(shù)據(jù)中嗎(不是指用戶微信里看到的)?
先說一下我的答案:在發(fā)布時的權限控制是不會考慮屏蔽的人的。前面我們講了,在消息發(fā)布的時候,服務器會根據(jù)用戶設置的權限信息,將消息有選擇的放到有權限閱讀人的timeline中。如果這個時候需要考慮屏蔽的人的話,那就還要去讀取每個有權限閱讀的人的屏蔽人清單,然后根據(jù)每個人的清單去決定是不是放到這個人的timeline中,顯然這又會增加多大的計算量。那么有人就要問了,那怎么實現(xiàn)屏蔽的功能呢?兩種方法實現(xiàn),一種是在這個用戶刷新朋友圈時,將讀取到的自己的那份timeline數(shù)據(jù)(含屏蔽人的消息),在服務器端過濾掉屏蔽人的消息;另外一種則是讀取的時候,服務器端按照原樣下發(fā)給客戶端,客戶端根據(jù)存儲的屏蔽清單來過濾,被屏蔽的則不顯示給用戶。兩種方法在實現(xiàn)效率上幾乎沒有差別,通過對于微信的使用體驗來看,我傾向于這個是由客戶端來過濾的。實際這也可以有方法去驗證,這里就不做了。這種屏蔽方案也是基于上面提到的“把需要大計算量的過程分散到平時零散的時間去做”。
那么怎么驗證上述關于屏蔽的邏輯是對的呢?上面我們在驗證“發(fā)布時進行權限分配”中講到了,后添加標簽分組的人,是看不到之前發(fā)布的分組權限消息的。這里我們也可以通過類似的方法驗證:把用戶屏蔽后,該用戶的消息全部看不到,但是取消屏蔽之后,又立即能在朋友圈中看到,包括之前發(fā)布的消息但沒有看過的消息。
最后要說的是,作為一個微信設計的旁觀者,以上答案是作為一個用戶從系統(tǒng)分析的角度去考慮的,并不代表微信確實是這樣的一個設計思路,但答案中的方案已經(jīng)盡可能做到了可以驗證。答案中也沒有涉及到具體的技術,僅僅是一個系統(tǒng)分析的思路。
很高興看到越來越多的產(chǎn)品經(jīng)理招聘開始注重技術能力了。前段時間各大互聯(lián)網(wǎng)公司的產(chǎn)品經(jīng)理校招也出現(xiàn)了不少“技術”相關的試題,說明業(yè)內開始意識到技術能力對于產(chǎn)品設計的輔助作用。還是那句話,技術并不是產(chǎn)品設計必須的,但是能有的話效率會提升很多。
來源: 互聯(lián)網(wǎng)的一些事
本文系作者:
運營那些事兒
授權發(fā)表,鳥哥筆記平臺僅提供信息存儲空間服務。
本文為作者獨立觀點,不代表鳥哥筆記立場,未經(jīng)允許不得轉載。
《鳥哥筆記版權及免責申明》
如對文章、圖片、字體等版權有疑問,請點擊
反饋舉報
我們致力于提供一個高質量內容的交流平臺。為落實國家互聯(lián)網(wǎng)信息辦公室“依法管網(wǎng)、依法辦網(wǎng)、依法上網(wǎng)”的要求,為完善跟帖評論自律管理,為了保護用戶創(chuàng)造的內容、維護開放、真實、專業(yè)的平臺氛圍,我們團隊將依據(jù)本公約中的條款對注冊用戶和發(fā)布在本平臺的內容進行管理。平臺鼓勵用戶創(chuàng)作、發(fā)布優(yōu)質內容,同時也將采取必要措施管理違法、侵權或有其他不良影響的網(wǎng)絡信息。
一、根據(jù)《網(wǎng)絡信息內容生態(tài)治理規(guī)定》《中華人民共和國未成年人保護法》等法律法規(guī),對以下違法、不良信息或存在危害的行為進行處理。
1. 違反法律法規(guī)的信息,主要表現(xiàn)為:
1)反對憲法所確定的基本原則;
2)危害國家安全,泄露國家秘密,顛覆國家政權,破壞國家統(tǒng)一,損害國家榮譽和利益;
3)侮辱、濫用英烈形象,歪曲、丑化、褻瀆、否定英雄烈士事跡和精神,以侮辱、誹謗或者其他方式侵害英雄烈士的姓名、肖像、名譽、榮譽;
4)宣揚恐怖主義、極端主義或者煽動實施恐怖活動、極端主義活動;
5)煽動民族仇恨、民族歧視,破壞民族團結;
6)破壞國家宗教政策,宣揚邪教和封建迷信;
7)散布謠言,擾亂社會秩序,破壞社會穩(wěn)定;
8)宣揚淫穢、色情、賭博、暴力、兇殺、恐怖或者教唆犯罪;
9)煽動非法集會、結社、游行、示威、聚眾擾亂社會秩序;
10)侮辱或者誹謗他人,侵害他人名譽、隱私和其他合法權益;
11)通過網(wǎng)絡以文字、圖片、音視頻等形式,對未成年人實施侮辱、誹謗、威脅或者惡意損害未成年人形象進行網(wǎng)絡欺凌的;
12)危害未成年人身心健康的;
13)含有法律、行政法規(guī)禁止的其他內容;
2. 不友善:不尊重用戶及其所貢獻內容的信息或行為。主要表現(xiàn)為:
1)輕蔑:貶低、輕視他人及其勞動成果;
2)誹謗:捏造、散布虛假事實,損害他人名譽;
3)嘲諷:以比喻、夸張、侮辱性的手法對他人或其行為進行揭露或描述,以此來激怒他人;
4)挑釁:以不友好的方式激怒他人,意圖使對方對自己的言論作出回應,蓄意制造事端;
5)羞辱:貶低他人的能力、行為、生理或身份特征,讓對方難堪;
6)謾罵:以不文明的語言對他人進行負面評價;
7)歧視:煽動人群歧視、地域歧視等,針對他人的民族、種族、宗教、性取向、性別、年齡、地域、生理特征等身份或者歸類的攻擊;
8)威脅:許諾以不良的后果來迫使他人服從自己的意志;
3. 發(fā)布垃圾廣告信息:以推廣曝光為目的,發(fā)布影響用戶體驗、擾亂本網(wǎng)站秩序的內容,或進行相關行為。主要表現(xiàn)為:
1)多次發(fā)布包含售賣產(chǎn)品、提供服務、宣傳推廣內容的垃圾廣告。包括但不限于以下幾種形式:
2)單個帳號多次發(fā)布包含垃圾廣告的內容;
3)多個廣告帳號互相配合發(fā)布、傳播包含垃圾廣告的內容;
4)多次發(fā)布包含欺騙性外鏈的內容,如未注明的淘寶客鏈接、跳轉網(wǎng)站等,誘騙用戶點擊鏈接
5)發(fā)布大量包含推廣鏈接、產(chǎn)品、品牌等內容獲取搜索引擎中的不正當曝光;
6)購買或出售帳號之間虛假地互動,發(fā)布干擾網(wǎng)站秩序的推廣內容及相關交易。
7)發(fā)布包含欺騙性的惡意營銷內容,如通過偽造經(jīng)歷、冒充他人等方式進行惡意營銷;
8)使用特殊符號、圖片等方式規(guī)避垃圾廣告內容審核的廣告內容。
4. 色情低俗信息,主要表現(xiàn)為:
1)包含自己或他人性經(jīng)驗的細節(jié)描述或露骨的感受描述;
2)涉及色情段子、兩性笑話的低俗內容;
3)配圖、頭圖中包含庸俗或挑逗性圖片的內容;
4)帶有性暗示、性挑逗等易使人產(chǎn)生性聯(lián)想;
5)展現(xiàn)血腥、驚悚、殘忍等致人身心不適;
6)炒作緋聞、丑聞、劣跡等;
7)宣揚低俗、庸俗、媚俗內容。
5. 不實信息,主要表現(xiàn)為:
1)可能存在事實性錯誤或者造謠等內容;
2)存在事實夸大、偽造虛假經(jīng)歷等誤導他人的內容;
3)偽造身份、冒充他人,通過頭像、用戶名等個人信息暗示自己具有特定身份,或與特定機構或個人存在關聯(lián)。
6. 傳播封建迷信,主要表現(xiàn)為:
1)找人算命、測字、占卜、解夢、化解厄運、使用迷信方式治病;
2)求推薦算命看相大師;
3)針對具體風水等問題進行求助或咨詢;
4)問自己或他人的八字、六爻、星盤、手相、面相、五行缺失,包括通過占卜方法問婚姻、前程、運勢,東西寵物丟了能不能找回、取名改名等;
7. 文章標題黨,主要表現(xiàn)為:
1)以各種夸張、獵奇、不合常理的表現(xiàn)手法等行為來誘導用戶;
2)內容與標題之間存在嚴重不實或者原意扭曲;
3)使用夸張標題,內容與標題嚴重不符的。
8.「飯圈」亂象行為,主要表現(xiàn)為:
1)誘導未成年人應援集資、高額消費、投票打榜
2)粉絲互撕謾罵、拉踩引戰(zhàn)、造謠攻擊、人肉搜索、侵犯隱私
3)鼓動「飯圈」粉絲攀比炫富、奢靡享樂等行為
4)以號召粉絲、雇用網(wǎng)絡水軍、「養(yǎng)號」形式刷量控評等行為
5)通過「蹭熱點」、制造話題等形式干擾輿論,影響傳播秩序
9. 其他危害行為或內容,主要表現(xiàn)為:
1)可能引發(fā)未成年人模仿不安全行為和違反社會公德行為、誘導未成年人不良嗜好影響未成年人身心健康的;
2)不當評述自然災害、重大事故等災難的;
3)美化、粉飾侵略戰(zhàn)爭行為的;
4)法律、行政法規(guī)禁止,或可能對網(wǎng)絡生態(tài)造成不良影響的其他內容。
二、違規(guī)處罰
本網(wǎng)站通過主動發(fā)現(xiàn)和接受用戶舉報兩種方式收集違規(guī)行為信息。所有有意的降低內容質量、傷害平臺氛圍及欺凌未成年人或危害未成年人身心健康的行為都是不能容忍的。
當一個用戶發(fā)布違規(guī)內容時,本網(wǎng)站將依據(jù)相關用戶違規(guī)情節(jié)嚴重程度,對帳號進行禁言 1 天、7 天、15 天直至永久禁言或封停賬號的處罰。當涉及欺凌未成年人、危害未成年人身心健康、通過作弊手段注冊、使用帳號,或者濫用多個帳號發(fā)布違規(guī)內容時,本網(wǎng)站將加重處罰。
三、申訴
隨著平臺管理經(jīng)驗的不斷豐富,本網(wǎng)站出于維護本網(wǎng)站氛圍和秩序的目的,將不斷完善本公約。
如果本網(wǎng)站用戶對本網(wǎng)站基于本公約規(guī)定做出的處理有異議,可以通過「建議反饋」功能向本網(wǎng)站進行反饋。
(規(guī)則的最終解釋權歸屬本網(wǎng)站所有)