1個月刷完1096道面試題手冊,上周成功入職阿里P7(Java崗)

隨著五月份的到來,一轉眼2020年即將過去一半了,覺得時間轉瞬即逝,所以在四月份我去面試了某大廠的Java開發(fā)的崗位,自己也是很心虛的,因為并不是所有的知識點自己都會的,而是有的熟悉有的不會。等了大概半個多小時吧,對面走來了一位看著就很NB的男子,看著手里還有工作在處理。然后就沖我笑了笑,說:“不好意思,久等了”,示意讓我坐下。然后面試就開始了,看了看我的簡歷,說看我Redis部分不錯,就從這開始吧。我說:Redis....嗯可以。

Redis是什么?

面試官:那你先說說Redis是什么吧?

我:(這不就是總結下 Redis 的定義和特點嘛)Redis 是 C 語言開發(fā)的一個開源的(遵從 BSD 協(xié)議)高性能鍵值對(key-value)的內(nèi)存數(shù)據(jù)庫,可以用作數(shù)據(jù)庫、緩存、消息中間件等。

它是一種 NoSQL(not-only sql,泛指非關系型數(shù)據(jù)庫)的數(shù)據(jù)庫。

我頓了一下,接著說,Redis 作為一個內(nèi)存數(shù)據(jù)庫:

性能優(yōu)秀,數(shù)據(jù)在內(nèi)存中,讀寫速度非???,支持并發(fā) 10W QPS。

單進程單線程,是線程安全的,采用 IO 多路復用機制。

豐富的數(shù)據(jù)類型,支持字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。

支持數(shù)據(jù)持久化。

可以將內(nèi)存中數(shù)據(jù)保存在磁盤中,重啟時加載。

主從復制,哨兵,高可用。

可以用作分布式鎖。

可以作為消息中間件使用,支持發(fā)布訂閱。

五種數(shù)據(jù)類型

面試官:總結的不錯,看來是早有準備啊。剛來聽你提到 Redis 支持五種數(shù)據(jù)類型,那你能簡單說下這五種數(shù)據(jù)類型嗎?

我:當然可以,但是在說之前,我覺得有必要先來了解下 Redis 內(nèi)部內(nèi)存管理是如何描述這 5 種數(shù)據(jù)類型的。

說著,我拿著筆給面試官畫了一張圖:

我:首先 Redis 內(nèi)部使用一個 redisObject 對象來表示所有的 key 和 value。

redisObject 最主要的信息如上圖所示:type 表示一個 value 對象具體是何種數(shù)據(jù)類型,encoding 是不同數(shù)據(jù)類型在 Redis 內(nèi)部的存儲方式。

比如:type=string 表示 value 存儲的是一個普通字符串,那么 encoding 可以是 raw 或者 int。

我頓了一下,接著說,下面我簡單說下 5 種數(shù)據(jù)類型:

①String 是 Redis 最基本的類型,可以理解成與 Memcached一模一樣的類型,一個 Key 對應一個 Value。Value 不僅是 String,也可以是數(shù)字。

String 類型是二進制安全的,意思是 Redis 的 String 類型可以包含任何數(shù)據(jù),比如 jpg 圖片或者序列化的對象。String 類型的值最大能存儲 512M。

②Hash是一個鍵值(key-value)的集合。Redis 的 Hash 是一個 String 的 Key 和 Value 的映射表,Hash 特別適合存儲對象。常用命令:hget,hset,hgetall 等。

③List 列表是簡單的字符串列表,按照插入順序排序??梢蕴砑右粋€元素到列表的頭部(左邊)或者尾部(右邊) 常用命令:lpush、rpush、lpop、rpop、lrange(獲取列表片段)等。

應用場景:List 應用場景非常多,也是 Redis 最重要的數(shù)據(jù)結構之一,比如 Twitter 的關注列表,粉絲列表都可以用 List 結構來實現(xiàn)。

數(shù)據(jù)結構:List 就是鏈表,可以用來當消息隊列用。Redis 提供了 List 的 Push 和 Pop 操作,還提供了操作某一段的 API,可以直接查詢或者刪除某一段的元素。

實現(xiàn)方式:Redis List 的是實現(xiàn)是一個雙向鏈表,既可以支持反向查找和遍歷,更方便操作,不過帶來了額外的內(nèi)存開銷。

④Set 是 String 類型的無序集合。集合是通過 hashtable 實現(xiàn)的。Set 中的元素是沒有順序的,而且是沒有重復的。常用命令:sdd、spop、smembers、sunion 等。

應用場景:Redis Set 對外提供的功能和 List 一樣是一個列表,特殊之處在于 Set 是自動去重的,而且 Set 提供了判斷某個成員是否在一個 Set 集合中。

⑤Zset 和 Set 一樣是 String 類型元素的集合,且不允許重復的元素。常用命令:zadd、zrange、zrem、zcard 等。

使用場景:Sorted Set 可以通過用戶額外提供一個優(yōu)先級(score)的參數(shù)來為成員排序,并且是插入有序的,即自動排序。

當你需要一個有序的并且不重復的集合列表,那么可以選擇 Sorted Set 結構。

和 Set 相比,Sorted Set關聯(lián)了一個 Double 類型權重的參數(shù) Score,使得集合中的元素能夠按照 Score 進行有序排列,Redis 正是通過分數(shù)來為集合中的成員進行從小到大的排序。

實現(xiàn)方式:Redis Sorted Set 的內(nèi)部使用 HashMap 和跳躍表(skipList)來保證數(shù)據(jù)的存儲和有序,HashMap 里放的是成員到 Score 的映射。

而跳躍表里存放的是所有的成員,排序依據(jù)是 HashMap 里存的 Score,使用跳躍表的結構可以獲得比較高的查找效率,并且在實現(xiàn)上比較簡單。

數(shù)據(jù)類型應用場景總結:

接下來就是連環(huán)炮式提問,越問越深(⊙o⊙),不免緊張了起來。

Redis 緩存你是怎么使用的?

實際項目中使用緩存會遇到哪些問題?

Redis緩存血崩、緩存穿透、緩存擊穿的區(qū)別?

Redis多線程模型?

Redis 和 Memcached 的區(qū)別?

Redis 的持久化機制?

Redis 持久化機制 AOF 和 RDB 有哪些不同之處?

Redis主從復制原理?

Redis主從復制如何保證數(shù)據(jù)一致性?

Redis數(shù)據(jù)同步原理?

Redis主從復制會存在哪些問題?解決方案是?

緩存的更新策略有幾種?分別有什么注意事項?

請介紹幾個可能導致 Redis 阻塞的原因

Redis 集群架構模式有哪幾種?

Redis 集群最大節(jié)點個數(shù)是多少?

Redis 集群的主從復制模型是怎樣的?

請介紹一下 Redis 集群實現(xiàn)方案

Redis 集群會有寫操作丟失嗎?為什么?

Redis 慢查詢是什么?通過什么配置?

最終全部回答完后,面試官看了我一眼,看來你對Redis了解的很透徹啊,那接下來我們再約一下時間談談JVM性能優(yōu)化、高并發(fā)應用場景解決方案。

由于篇幅限制,所以不能全部一一的展示出來,這里就僅僅展示了一些關于Redis的面試相關的題集和解析,當然面試不可能也只問一部分的內(nèi)容,這只是其中的一部分,這里也整理一份關于Redis的面試題集,有需要的朋友麻煩幫忙轉發(fā),+V x:bjmsb2019即可獲得免費領取面試的領取方式!

Redis 51道面試題+解析

什么是Redis?

什么是緩存穿透?如何避免?什么是緩存雪崩?何如避免?

JVM調(diào)優(yōu)案例式實戰(zhàn)化指導

Java內(nèi)存區(qū)域

垃圾回收器和內(nèi)存分配策略

JVM的執(zhí)行子系統(tǒng)

編寫高效優(yōu)雅Java程序

深入了解性能優(yōu)化

MySQL性能優(yōu)化

事務

SQL優(yōu)化原則

JOIN的原理

執(zhí)行計劃與執(zhí)行明細

執(zhí)行流程

表結構對性能的影響

索引

我的Spring學習筆記

Spring類

Spring MVC

Spring AOP

Spring IOC

SpringBoot

SpringCloud

事務管理


俗話說的好,只要功夫深,鐵杵磨成針,平時準備好,面試不用慌。

而且還有更多的面試題庫及解析:《Java核心知識點整理》、《1000道互聯(lián)網(wǎng)Java工程師面試題》、《Java高級架構進階核心面試知識點》、《Java面試寶典》都可以免費領取噠。

《Java核心知識點整理》-283頁

《1000道互聯(lián)網(wǎng)Java工程師面試題》-485頁

《Java高級架構進階核心面試知識點》-178頁

《Java面試寶典》-150頁

只要功夫深,鐵杵磨成針。面試的學習資料都已經(jīng)整理完了,希望大家可以成功面試上自己心儀的公司。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容