2017-02-14 53 views
-1

最近我經歷了幾次面試。有人問我設計問題。儘管我已經回答了,但是需要知道我是否正確回答了他們,我們能否改進他們。關於一些設計問題

問的第一個問題是與郵件服務器有關。

問題陳述: -

有一個呼叫中心,接收萬個電話everyday.Now每當收到一個條目的數據庫正在取得與呼叫者的名字呼叫,主叫方的電子郵件ID,電話號碼和一些字符串像l1,l2,l3 ....用於每個單獨的呼叫。

例如像傑克的電話,以將在DB

進行
jack | [email protected] | 9999999999 | l1 
jack1 | [email protected] | 9999999991 | l2 
jack2 | [email protected] | 9999999992 | l3 

現在我們就來寫,這將讀取來自DB這些萬個條目,併發送郵件到這些人的郵件將一個應用程序的入口從[email protected]發送給jack,l2 @ callcenter.com給jack1,[email protected]給jack2。這是我提出的是(我被要求給出答案記在想的可擴展性)

我會告訴它是否已讀或未狀態數據庫引入另一列

回答,那麼我們將有一個應用程序將從數據庫中讀取這些條目並將其放入隊列中。此應用程序有5-6個正在運行的任務,它們將從數據庫中讀取並更新數據庫中的狀態,然後將其放入隊列中;現在,其他服務將從隊列中讀取它並將郵件發送給用戶。再次,它將有5-6個任務將執行它。

請給我建議最好的解決方案。

這是問另一個問題是

問題2: -

需要設計具有REST API,它接受了很大的URL,並還給小URL和服務時,一些點擊上URL會導致這個公司的域名,這個應用程序必須顯示相應的輸出。如果大URL是「www.xyz.com/abc/randomPage」,那麼REST API應該計算它並返回給我www。 x.com/weshgtj45jk其中weshgtj45jk是資源的哈希碼。

該解決方案應該是可擴展的,用戶應該得到及時的響應。

我建議的答案。

1)。將會有負載均衡器,在這個負載均衡器之後,我將有兩個節點與這個服務一起部署,這將滿足請求;現在如果明天負載增加,那麼我們可以添加另一個節點。保留兩個節點。 2)。然後,我需要使用像redis這樣的緩存來訪問每個大URL並計算小url。我們會將它保存在CACHE的URL中,以便將來如果查詢它,我們只能從緩存中提供響應。 3)。然後將其存儲在DB中。我們可以將它存儲在cassandra中,這將最終保持一致並且可以支持tera字節的數據。 4)。現在,當給出響應並且用戶單擊URL時,我需要在負載平衡器級別看到哪個哈希代碼對應於哪個頁面。將會有一個hashmap類型的數據結構,它將爲我提供請求將要訪問的資源。

這就是我給他們的迴應。

如果有人能幫助我,那麼這將是一個偉大的學習經驗。

其他如果有人可以建議我某種課程,我可以提高我的設計技能,那麼它會真的很喜歡他。

在此先感謝。

+0

對我來說#1是污染你的數據與應用程序狀態。當你需要發送第二封電子郵件時會發生什麼?誰清除「額外的列」?如果你在採訪中給我這個答案,我會問更多的問題,看看你是否能說服我這是明智的... – John3136

+0

你不需要......這不是問題的一部分。你只需要發送一次郵件就可以了。就像你只是一個沒有回覆郵件給註冊投訴的用戶。如果我們真的需要再次發送一些郵件......有一個好主意該表的主鍵和狀態爲另一個表。狀態將保持數據更新。 – Learner

+0

你談論可擴展性,但你只能發送一封電子郵件?現在作爲面試官,這是對你設計的另一個黑色標記。你將不得不做一些漂亮的花言巧語把它賣給我,或者說「哦,是的,也許這不是最好的方法,讓我想一想......」 - 知道什麼時候退出是一個有用的技巧太... – John3136

回答

0

你的答案似乎很好。 有2本好書設計。 1.頭先設計圖案2.剝離設計圖案。

+0

謝謝阿曼回覆...你知道一些好的書,它考慮了可擴展性(不是垂直設計和水平設計),應該使用什麼樣的數據庫...應該問什麼樣的問題去設計任何問題。 – Learner