4.17螞蟻一面涼經(jīng)
- 自我介紹
- 畢業(yè)想從事什么方向的工作
- 聊一下自己做的項(xiàng)目(我自己挑了一個(gè)黑馬點(diǎn)評)
- UV統(tǒng)計(jì)怎么做的?為什么要這么實(shí)現(xiàn)呢?用HyperLogLog為什么不會占用很大空間呢?16KB怎么去存儲這個(gè)數(shù)據(jù)呢
- 好友關(guān)注怎么做的
- 項(xiàng)目的哪個(gè)點(diǎn)是有挑戰(zhàn)性的(回答了優(yōu)惠券秒殺)
- 秒殺為什么要用消息隊(duì)列
- Redis掛了怎么辦(回答用集群方案來解決)整個(gè)集群掛了就不行了對吧?(面試官追問 回答考慮限流)
- 但你的庫存信息都是在 Redis 里面,對吧?就是限流,你取不到庫存了嗎
- 你怎么保證那個(gè) Redis 里面庫存和 DB 里面的庫存它是一致的,沒有可能出錯(cuò)?
- 你那個(gè) Redis 你去做扣減庫存怎么保障它的原子性呢?
- 不用lua腳本會帶來什么樣的問題?
- 扣減庫存的原子性是為了解決什么樣的問題
- 假設(shè)這個(gè)地方我們不用 lua 腳本,對吧?就用最普通的方案會帶來什么樣的問題?
- 樂觀鎖怎么解決超賣的問題
- 你能那個(gè)詳細(xì)的描述一下 lua 腳本里面是用了什么樣的 Redis 的命令?
- 你lua腳本就是怎么寫的?就是你肯定是用了 Redis 的命令,對吧?
- 比如說你扣了庫存,我們肯定是要做支付,對吧?那庫存和支付的順序是怎么樣?先支付再扣,或者先扣庫存再支付,這個(gè)過程你來講一下吧。
- 創(chuàng)建訂單,然后假設(shè)支付失敗了呢。
- 那怎么去把數(shù)據(jù)寫到 Redis 里面呢?你這個(gè)時(shí)候你 Redis 里面庫存也得回加,對吧?這里就可以會涉及到一個(gè)你 DB 的庫存跟 Redis 的庫存的一致性的問題,怎么去保障它們一致性?
- 因?yàn)橄G失導(dǎo)致的這個(gè)消息消費(fèi)失敗導(dǎo)致的庫存不一致,怎么發(fā)現(xiàn)這個(gè)問題
- 重新發(fā)消息的時(shí)候會不會導(dǎo)致那個(gè)庫存的操作重復(fù)?
- 通過訂單號去做冪等是嗎。
- 那假設(shè)那個(gè)用戶量進(jìn)一步的變大,就可能你一步的去消費(fèi) MQ 的消息的時(shí)候, DB 的壓力還是會比較大,還是會消化不完,這個(gè)時(shí)候我們應(yīng)該怎么去優(yōu)化呢?(考慮集群、分庫)
- 你這個(gè)場景你會怎么去做?分庫用什么字段去分?(回答用訂單號作為分配的依據(jù))
- 假設(shè)一個(gè)用戶下了 3 筆單,然后落到了 3 個(gè)庫,他最終去查的時(shí)候,他會涉及一個(gè)全庫式掃描,對吧?你怎么去避免這種問題呢?(答用用戶id來做分庫)
- 那假設(shè)商家要查他有多少秒殺進(jìn)來的訂單,這個(gè)情況怎么辦呢?
- 如果用 MQ 消息隊(duì)列可以做嗎?用消息隊(duì)列可以去怎么優(yōu)化這個(gè) case (指的是用消息隊(duì)列優(yōu)化商家查詢訂單的速度)嗎?
- 反問階段
全程拷打點(diǎn)評項(xiàng)目,一天后掛了
還是太菜了 再沉淀沉淀吧