序言
真沒想到,我那一次應粉絲請假刷真題的文章大獲好評:應粉絲要求,請假一周,面了9家深圳非外包初級開發,只為刷一刷真題(文末有福利),直接給我干到了有史以來最好的資料,也是感謝粉絲的一鍵三連,

本來是早就想出答案的了,但是一直在接私活(開發一個簡歷系統,等結賬后會開源甚至是帶著粉絲們從0開始手敲,使用的技術是SpringBoot+Freemarker),
很多的評論和私信說讓我趕緊出一期答案,我決定以連載的形式進行出答案,一來方便查閱,二來可以保證質量,話不多說,我們開始!有問題可以在私信里面噴我,別來評論區(卑微)

一、 redis的持久化機制
思路
這道題其實不難,思路是我們首先要先說出Redis的持久化機制有哪幾種,最后給個結論,什么時候用哪一種,我們公司使用的是哪一種,
回答
Redis提供了RDB持久化和AOF持久化,
RDB持久化是指在指定的時間間隔內將記憶體中的資料集快照寫入磁盤,也是默認的持久化方式,這種方式是就是將記憶體中資料以快照的方式寫入到二進制檔案中,他的好處是一旦采用該方式,那么你的整個Redis資料庫將只包含一個檔案,這樣非常方便進行備份,他在恢復資料的時候速度比AOF快,他的壞處是會丟失很多的資料,
AOF持久化是Redis會將每一個收到的寫命令都通過write函式追加到檔案中(默認是 appendonly.aof),他的優勢是丟失的資料盡可能少,但是他恢復資料的速度比RDB慢,
目前在企業中,我是兩者都用,揚長避短,
二、redis都配置過吧,配置步驟
思路
這道題其實面試官是想考察一下你是否真正使用過Redis,而不是背八股文的,如果對Redis不熟的可以看我的這篇文章:我用一天時間爆肝出了這份Redis詳細筆記
回答
下面我就說一下最主流的配置:SpringBoot整合Redis
總共就三步走:
- 引入依賴
- 書寫配置
- 使用StringRedisTemplate或者RedisTemplate
三、redis快取擊穿和快取穿透
思路
這道題其實有一點背八股文內味了,但是需要用自己的語言概述出來是最好的,給面試官一種你理解了的感覺,我們要用大白話解釋什么是快取擊穿和快取穿透,然后再說一下如何避免這個問題,
回答
- 快取擊穿:key對應的資料存在,但在redis中過期,此時若有大量并發請求過來,這些請求發現快取過期一般都會從后端DB加載資料并回設到快取,這個時候大并發的請求可能會瞬間把后端DB壓垮,
- 快取擊穿的解決方案:
- 設定熱點資料永遠不過期,
- 介面限流與熔斷,降級,
- 使用互斥鎖(mutex key)
- 快取穿透:快取穿透是指快取和資料庫中都沒有的資料,而用戶不斷發起請求,比如用一個不存在的用戶id獲取用戶資訊,不論快取還是資料庫都沒有,若黑客利用此漏洞進行攻擊可能壓垮資料庫,
- 快取穿透的解決方案:
- 介面層增加校驗,如用戶鑒權校驗,id做基礎校驗,id<=0的直接攔截,
- 使用布隆過濾器,
四、mysql索參考過嗎,他有幾種資料結構型別
思路
這道題純粹送分,如果自己不是很懂,千萬不要說太多,
回答
B樹、B+樹、哈希
五、每種索引資料結構型別有什么區別?
B樹
MySQL 使用的是 Btree 索引,一顆B樹,淺藍色的塊我們稱之為一個磁盤塊,可以看到每個磁盤塊包含幾個資料項(深藍色所示)和指標(黃色所示),

B+tree
B+Tree中,所有資料記錄節點都是按照鍵值大小順序放在同一層的葉子節點上,而非葉子節點只存盤key資訊,這樣可以大大增加每個節點存盤的key值的數量,降低B+Tree的高度,

六、B樹或者B+樹的作業原理
和上題類似,可以看我的上一篇博客中的第三部分:你真的了解MySQL了嗎,那你給我說一下鎖機制!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/292022.html
標籤:java
