約束high level
db design
詳細設計
擴充套件資訊流設計
使用者可以上傳**,分享**;關注其他人,亦可以看到自己的和好友的top**;
功能性
根據名稱搜尋**
使用者關注他人
生成和展示資訊流,包含所有關注的人的top**
非功能性
5. 高可用
6. 低時延:資訊流產生時延 < 200ms
7. ap系統:保可用性,特殊情況使用者一段時間看不到**也是ok的
8. 高可靠,上傳的**不能丟失
out of scope
- ***首先和面試官宣告該系統的幾個設計關鍵點
- 使用者會上傳大量**,儲存系統的管理是關鍵
- 檢視**需要低時延
- 資料100%不丟失***
**可以儲存在分布式檔案儲存,hdfs / s3
a wide-column datastore可以儲存list作為value,適合儲存乙個user擁有的imageid,乙個user擁有的followers
image_info:table
pk:image_id:varchar(32)
int
name image_path :varchar(256)
title:varchar(2048)
size:int
user_id:int
created_at:datetime
update_at:datetime
is_delete:int (nosql延遲刪除,所以不需要該欄位)
user:table
pk:user_id:int
name:varchar(256 20)
created_at:datetime
last_login:datetime
user_relation:table
pk:from_id + to_id
from_id: int
to_id: int
is_follow:int
created_at:datetime
update_at: datetime
message:table
pk: message_id:int
user_id:int
image_id:int
title:varchar(2048)
created_at:datetime
top_message:table
pk:user_id:int
update_at:datetime
top_message:text
- user:int和datetime都是4b,4 + 20 + 4 + 4 = 32 b;500m * 32 b ~= 16 g
- image:4 + 256 + 4 + 4 + 4 = 272 b;1m * 272 b = 0.27 g per day
- userfollow:500m * 500 followers * 12b = 3 tb
讀寫服務分離 設計模式面試題
參考 常用的設計模式彙總,超詳細!這個模式本身很簡單而且使用在業務較簡單的情況下。一般用於小專案或者具體產品很少擴充套件的情況 這樣工廠類才不用經常更改 它由三種角色組成 來用類圖來清晰的表示下的它們之間的關係 抽象工廠模式 先來認識下什麼是產品族 位於不同產品等級結構中,功能相關聯的產品組成的家族...
面試題 PHP面試題
建議 比如是系統配置,缺少了無法執行,自然使用 require 如果某一段程式少了,只是少了統計 訪問的,不是必不可少的。可以使用 include 而加不加 once 就是效率上的區別,雖然系統會幫你考慮只包含一次,但系統的判斷會降低效率,因此,更應該在開發之初,把目錄結構調整高好,盡量不使用 on...
Java面試題 設計模式
單例模式 保證被建立一次,節省系統開銷。工廠模式 簡單工廠 抽象工廠 解耦 觀察者模式 定義了物件之間的一對多的依賴,這樣一來,當乙個物件改變時,它的所有的依賴者都會收到通知並 自動更新。外觀模式 提供乙個統一的介面,用來訪問子系統中的一群介面,外觀定義了乙個高層的介面,讓子系統更容易使 用。模版方...