2級設計
3級設計
4級設計
拓展:限流實現
1.設計一種編碼/解碼的模式來轉換url為5-字元的編碼
2.使用單一資料庫來儲存從短url到原始url的對映
3.在查詢短url時,存在就返回原始url,不存在就返回空
1.效能:要是10000qps呢?
2.伸縮性和可用性:db宕機呢?
1.使用key-value資料庫
2.使用md5轉換為128bits,採用64編碼則需要21位元組,在截斷為5位元組
如何解決衝突問題?
1.使用多伺服器;
切分:伺服器id=hash(url)%n;
對熱門伺服器進行熱備份來進行流量的負載均衡
2.可靠性;
備份,恢復和永續性
1.使用乙個集群來專門生成id
2.如何避免url被爬蟲(使用對映表先將url外部id轉化為內部id)
3.如何限制單一使用者的rps(限流)
4.如何實現重定向伺服器
背景:輸入密碼登入,要求使用者不能在1小時之內登入出錯超過5次
內存放乙個hashmap,存誰在哪個時間做了某件被限制的事情
無法實現需求
使用cache,帶上過期資訊,設定1小時之後自動過期
key=事件名字+使用者id,value=1小時內的出錯次數
使用者登陸出錯時,在cache中找到這個key,將value+1,並延長銷毀時間為一小時之後
缺點:不正確;
每分鐘為單位乙個bucket
使用cache,key=時間戳+事件+使用者id,value=出錯次數,過期時間=2小時
使用者登陸出錯時,在cache中建立這個key,將value+1,以當前時間為key往前數60分鐘,看出錯次數有沒有超過5次
場景題1:如何設計商品類目資料庫,設計不同類的商品的資料庫,怎麼樣設計保證查詢效率。
場景題2:設計遊戲的排行榜。我說redis的zset,於是跟我討論了半小時的查詢使用者排名,查詢指定排名區間的時間複雜度。我不是很懂跳表的結構,於是跟我討論了跳表的資料結構還怎麼設計。
場景題3:有 k 個陣列,所有陣列元素個數之和為n,每個陣列都是公升序排列,問有哪些方法合併陣列呢?秒答k路歸併,面試官要求時間複雜度 小於 o(kn),於是討論了很久直到面試結束。
1.寫個快排
問你寫的是從前往後遍歷,和從後往前遍歷有什麼區別,有什麼好處。
我???
面試官:從記憶體方面考慮
我:是快取問題嗎
面試 官:cpu載入時的預取機制嗎?不了解
2.寫個雜湊表,不用太考慮邊界條件,實現插入和查詢兩個介面。
用的鍊錶法處理衝突
最後面試官給我講了一些存在的問題
3.實現乙個remove_if函式,刪除單鏈表中指定節點
**寫的不夠簡潔吧,面試官最後給我發了個他自己寫的**…
1,演算法題,長度為n的陣列,每個元素相鄰都不相等,a0小於a1,倒數第二個元素大於最後乙個元素,找其中的滿足ak大於ak-1,ak大於ak+1,二分法做,好像是leetcode原題
三道場景題
1**不同品類,不同大類的表設計,參考mooc網那個資料庫新零售實戰課程,原題
2排行榜的設計,資料結構,查詢複雜度,實時更新
3多執行緒設計,100個woker執行緒,乙個io執行緒,如何避免輪詢,如果解決訊息的通知
應用:有上億條有序的訓練資料,記憶體一次可以存大概一萬條,現在想要每次取乙個batch(大概1千條左右)進來訓練,如何設計取法
演算法:有兩個元素完全相同但順序不同的陣列,求最少刪掉多少元素可以使得兩個陣列相同
其他基本知識的問題不太記得了,都挺基礎的
三面先是問了hash表的底層實現的幾種方式,各自的優缺點,然後大概50min都在基於雜湊表的各種場景上的應用進行深挖,主要是從體系結構的角度去問的,包括訪問效率(涉及到***,針對的是鍊錶和陣列兩種結構),插入刪除和查詢之間的trade off,問的非常細,面試官很nice,一直在提醒我引導我思考,包括我不是很熟悉的bitmap他也費了很大的勁讓我想明白了怎麼用來優化雜湊表,三面就這乙個點的展開
秒殺系統設計總結
秒殺問題 1.前端 突然增加網路訪問頻寬 使用者可能存在重複提交 2.後端 商品超賣 資料庫樂觀鎖 cas無鎖 redis分布式鎖 mq非同步形式修改庫存 使用者需要等待 單機壓力大 單獨一服務形式部署 docker。可以實現快速擴容 使用者操作頻率塊 閘道器限流 使用者作弊 資料庫訪問壓力大 分表...
系統設計經驗總結
極簡原則 夠用就好原則。設計世界上有兩類人,一種喜歡把事情越做越複雜 別人有的功能我要全有,也許是個賣點,單不一定被多數人接受 一種喜歡追求極致 如 喬幫主 蘋果產品持續有這麼多的粉絲,持續購買,對於大部分使用者來說外觀精緻,操作簡捷容易上手。商業成功原則 設計的好壞,最終其實只有乙個,市場是否認可...
系統設計書編寫基礎總結
系統設計書 流程 專案 1,畫面定義書。2,表定義書 設計圖最佳 3,呼叫api定義書。4,message定義 5,batch等等 1,畫面定義書結構 所有的sheet開始都是 系統名,該定義書名,作成日,改定日,畫面id,畫面名稱,畫面種類 其次參考欄要預備 sheet1 改定歷史 版本versi...