虛驚一場!因為一個“Redis”,我差點卒于美團三面!

在找工作的過程中,對于 Redis 技術知識的掌握已經成為必須的技能。美團面試常常就會被問到Redis相關知識,而這次我就差點掛在了美團3面,面試官連問我以下幾個Redis的問題,然后就卡殼了...

  • redis了解嗎?Redis key 的過期策略Redis了解嗎?你說說怎么用redis實現分布式鎖?
  • Redis常用數據結構及底層數據結構實現
  • 如何解決 Redis 的并發競爭 Key 問題
  • 如何保證緩存與數據庫雙寫時的數據一致性?
  • Redis 持久化有哪幾種方式,怎么選?
  • Redis 的 zset 怎么實現的?
  • Redis 主從同步是怎樣的過程?
  • ... ...(剩下的不太記得了...為此面試完回來針Redis專門做了一個大總結)
11.jpg

01 Redis面試問題常見劃分(6個部分,附帶完整的答案解析)

第一部分:Redis 的概念理解
第二部分:Redis 數據結構與指令
第三部分:Redis 高并發處理策略
第四部分:Redis 集群結構以及設計理念
第五部分:Redis 緩存管理與持久化機制
第六部分:Redis 應用場景設計
注意:前面例舉了所有的問題,在先不看解析的條件下,可先自行試水。。解析在最后。。

此外,筆記是全程手寫出來的,希望大家拿到筆記后別丟進收藏夾吃灰!??

1.1 Redis面試問題:第一部分:Redis 的概念理解

  1. 什么是 Redis?
  2. Redis 的特點有哪些?
  3. Memcache 與 Redis 的區別都有哪些?
  4. Redis 相比 Memcached 有哪些優勢?
  5. 如何實現本地緩存?請描述一下你知道的方式
  6. Redis 通訊協議是什么?有什么特點?

1.2 Redis面試問題:第二部分:Redis 數據結構與指令

image
image.gif
  1. Redis 支持的數據類型
  2. Redis 常用的命令有哪些?
  3. 一個字符串類型的值能存儲最大容量是多少?
  4. Redis 各個數據類型最大存儲量分別是多少?
  5. 請介紹一下 Redis 的數據類型 SortedSet(zset)以及底層實現機制?
  6. Redis 事務相關命令有哪些?
  7. 什么是 Redis 事務?原理是什么?
  8. Redis 事務的注意點有哪些?
  9. Redis 為什么不支持回滾?
  10. 請介紹一下 Redis 的 Pipeline(管道),以及使用場景
  11. 請說明一下 Redis 的批量命令與 Pipeline 有什么不同?
  12. 請介紹一下 Redis 的發布訂閱功能
  13. Redis 的鏈表數據結構的特征有哪些?
  14. 請介紹一下 Redis 的 String 類型底層實現?
  15. Redis 的 String 類型使用 SSD 方式實現的好處?
  16. 設置鍵的生存時間和過期時間有哪些命令?

1.3 Redis面試問題:第二部分:第三部分:Redis 高并發處理策略

  1. 為什么 Redis 需要把所有數據放到內存中?
  2. Redis 是單線程的嗎?
  3. Redis 為什么設計成單線程的?
  4. 什么是緩存穿透?怎么解決?
  5. 什么是緩存雪崩? 怎么解決?
  6. 緩存的更新策略有幾種?分別有什么注意事項?
  7. 請介紹幾個可能導致 Redis 阻塞的原因
  8. 怎么去發現 Redis 阻塞異常情況?

1.4 Redis面試問題:第二部分:第四部分:Redis 集群結構以及設計理念

image
  1. Redis 集群架構模式有哪幾種?
  2. Redis 集群最大節點個數是多少?
  3. Redis 集群的主從復制模型是怎樣的?
  4. 請介紹一下 Redis 集群實現方案
  5. Redis 集群會有寫操作丟失嗎?為什么?
  6. Redis 慢查詢是什么?通過什么配置?
  7. Redis 的慢查詢修復經驗有哪些?怎么修復的?
  8. 如何優化 Redis 服務的性能?
  9. Redis 的主從復制模式有什么優缺點?
  10. Redis sentinel(哨兵)模式優缺點有哪些?
  11. 如何設置 Redis 的最大連接數?查看 Redis 的最大連接數?查看 Redis 的當前
  12. 介紹一些 Redis 常用的安全設置?

1.5 Redis面試問題:第二部分:第五部分:Redis 緩存管理與持久化機制

image
  1. Redis 持久化機制有哪些?
  2. Redis 持久化機制 AOF 和 RDB 有哪些不同之處?
  3. 請介紹一下 RDB 持久化機制的優缺點
  4. 請介紹一下 AOF 持久化機制的優缺點
  5. 如果 AOF 文件的數據出現異常, Redis 服務怎么處理?
  6. 常見的淘汰算法有哪些?
  7. Redis 淘汰策略有哪些?
  8. Redis 緩存失效策略有哪些?
  9. Redis 如何做內存優化?
  10. 什么是 bigkey? 有什么影響?
  11. 怎么發現 bigkey?
  12. Redis 的內存消耗分類有哪些?內存統計使用什么命令?
  13. 簡單介紹一下 Redis 的內存管理方式有哪些?
  14. 如何設置 Redis 的內存上限?有什么作用?
  15. Redis 報內存不足怎么處理?

1.6 Redis面試問題:第六部分:Redis 應用場景設計

  1. Redis 適用場景有哪些?
  2. Redis 常用的業務場景有哪些?
  3. Redis 支持的 Java 客戶端有哪些? 簡單說明一下特點。
  4. 請簡單描述一下 Jedis 的基本使用方法?
  5. Jedis 連接池鏈接方法有什么優點?
  6. 什么是分布式鎖?有什么作用?
  7. 分布式鎖可以通過什么來實現?
  8. 介紹一下分布式鎖實現需要注意的事項?
  9. Redis 怎么實現分布式鎖?
  10. 緩存命中率表示什么?
  11. 怎么提高緩存命中率?
  12. 請介紹一下 Spring 注解緩存

總共是從Redis的概念理解、數據結構與指令、高并發處理策略、集群結構以及設計理念、緩存管理與持久化機制、應用場景設計等六大部分整理了以上的70高頻問,答案解析總共是有25頁(如下圖所示),篇幅有限沒法全部在文章中寫上(后面還有手寫筆記等),但可分享給需要的朋友 ??

Redis總結免費下載地址(點擊皆可):面試解析+手寫筆記+進階pdf

image
image

02 一份純手寫的Redis筆記

這是從朋友那里拿過來的,看了之后感覺還是挺不錯的。整個筆記分為五個部分: 第一部分:Redis基礎篇 第二部分:Redis數據結構篇 第三部分:Redis持久化篇 第四部分:Redis集群篇 第五部分:Redis的其他問題

2.1 第一部分:Redis基礎篇

  • 什么是Redis ?mRedis優缺點
  • 為什么要用緩存?為什么使用Redis?
  • 使用緩存會出現什么問題?
  • Redis為什么早期版本選擇單線程?
  • Redis為什么這么快?
image

2.2 第二部分:Redis數據結構篇

  • Redis常用數據結構及實現?
  • Redis 的 SDS 和C中字符串相比的優勢?
  • 字典是如何實現的? Rehash了解嗎?
  • 跳躍表是如何實現的?原理?
  • HyperLogLog有了解嗎?
  • 布隆過濾器有了解嗎?
  • GeoHash了解嗎?
  • 壓縮列表了解嗎?
  • 快速列表quicklist了解嗎?
  • Stream結構有了解嗎?
image

2.3 第三部分:Redis持久化篇

  • 什么是持久化?
  • Redis中的兩種持久化方式?
  • RDB和AOF各自有什么優缺點?
  • 兩種方式如何選擇?
  • Redis 的數據恢復
image

2.4 第四部分:Redis集群篇

  • 主從同步了解嗎?
  • 哨兵模式了解嗎?
  • Redis集群使用過嗎?原理?
  • 集群中數據如何分區?
  • 節點之間的通信機制了解嗎?
  • 集群數據如何存儲的有了解嗎?
image

2.5 第五部分:Redis的其他問題

  • Redis 如何實現分布式鎖?
  • Redis過期鍵的刪除策略?
  • Redis的淘汰策略有哪些?
  • Redis常見性能問題和解決方案?
image

03 Redis進階必看:《Redis實戰》+《Redis設計與實現》

3.1 《Redis實戰》

深入淺出地介紹了Redis的5種數據類型,并通過多個實用示例展示了Redis用法。除此之外,還講述了Redis 的優化方法以及擴展方法,對于學習和使用Redis來說不可多得的參考筆記。

image

本筆記一共由三個部分組成:

第一部分 入門:對Redis進行了介紹,說明了Redis 的基本使用方法、它擁有的5種數據結構以及操作這5種數據結構的命令,并講解了如何使用Redis去構建文章聚合網站、cookie、購物車、網頁緩存、數據庫行緩存等一系列程序;

  • 第1章 初識Redis
  • 第2章 使用Redis構建Web應用

第二部分 核心概念: 對Redis命令進行了更詳細的介紹,并展示了如何使用Redis去構建更為復雜的輔助工具和應用程序,并在最后展示了如何使用Redis去構建一個簡單的社交網站;

  • 第3章 Redis命令
  • 第4章 數據安全與性能保障
  • 第5章 使用Redis構建支持程序
  • 第6章 使用Redis構建應用程序組件
  • 第7章 基于搜索的應用程序
  • 第8章 構建簡單的社交網站

第三部分 進階內容:對Redis用戶經常會遇到的一些問題進行了介紹,講解了降低Redis內存占用的方法、擴展Redis性能的方法以及使用Lua語言進行腳本編程的方法;

  • 第9章 降低內存占用
  • 第10章 擴展Redis
  • 第11章 Redis的Lua腳本編程
image
image

3.2 《Redis設計與實現》

全面而完整地講解了Redis的內部機制與實現方式,對Redis的大多數單機功能以及所有多機功能的實現原理進行了介紹,展示了這些功能的核心數據結構以及關鍵的算法思想,圖示豐富,描述清晰,并給出大量參考信息。通過閱讀,讀者可以快速、有效地了解Redis的內部構造以及運作機制,更好、更高效地使用Redis。

image

本筆記主要分為四大部分:

第一部分“數據結構與對象”:介紹了Redis 中的各種對象及其數據結構,并說明這些數據結構如何影響對象的功能和性能;

  • 第二章 簡單動態字符串
  • 第三章 鏈表
  • 第四章 字典
  • 第五章 跳躍表
  • 第六章 整數集合
  • 第七章 壓縮列表
  • 第八章 對象
image

第二部分“單機數據庫的實現”:對Redis實現單機數據庫的方法進行了介紹,包括數據庫、RDB持久化、AOF持久化、事件等;

  • 第九章 數據庫
  • 第十章 RDB持久化
  • 第十一章 AOF持久化
  • 第十二章 事件
  • 第十三章 客戶端
  • 第十四章 服務器
image

第三部分“多機數據庫的實現”:對Redis的Sentinel、復制、集群三個多機功能進行了介紹;

  • 第十五章 復制
  • 第十六章 Sentinel
  • 第十七章 集群
image

第四部分“獨立功能的實現對Redis”: 中各個相對獨立的功能模塊進行了介紹,涉及發布與訂閱、事務、Lua腳本、排序、二進制位數組、慢查詢日志、監視器等;

  • 第十八章 發布與訂閱
  • 第十九章 事務
  • 第二十章 Lua腳本
  • 第二十一章 排序
  • 第二十二章 二進制位數組
  • 第二十三章 慢查詢日志
  • 第二十四章 監視器
image

總而言之,面試官問來問去,問的那些Redis知識點也就這么多吧,許是我復習的不夠到位,知識點掌握不夠熟練,所以面試才會卡殼。將這些Redis面試知識解析以及我整理的一些學習筆記分享出來給大家參考學習,希望你們不要像我一樣(??

整理不易,覺得有幫助的朋友可以幫忙點贊分享支持一下小編~
你的支持,我的動力;祝各位前程似錦,offer不斷!!!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容