偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

這些常見"刁鉆"的Redis面試問題必看

開發(fā) 前端 Redis
Redis在互聯(lián)網(wǎng)技術(shù)存儲(chǔ)方面使用如此廣泛,幾乎所有的后端技術(shù)面試官都要在Redis的使用和原理方面對(duì)小伙伴們進(jìn)行各種刁難。作為一名在互聯(lián)網(wǎng)技術(shù)行業(yè)打擊過成百上千名的資深技術(shù)面試官,看過了無數(shù)落寞的身影失望的離開,略感愧疚,故獻(xiàn)上此文,希望各位讀者以后面試勢(shì)如破竹,永無失敗!

導(dǎo)讀:在程序員面試過程中Redis相關(guān)的知識(shí)是常被問到的話題。作為一名在互聯(lián)網(wǎng)技術(shù)行業(yè)打擊過成百上千名的資深技術(shù)面試官,本文作者總結(jié)了面試過程中經(jīng)常問到的問題。十分值得一讀。

Redis在互聯(lián)網(wǎng)技術(shù)存儲(chǔ)方面使用如此廣泛,幾乎所有的后端技術(shù)面試官都要在Redis的使用和原理方面對(duì)小伙伴們進(jìn)行各種刁難。作為一名在互聯(lián)網(wǎng)技術(shù)行業(yè)打擊過成百上千名【請(qǐng)?jiān)试S我夸張一下】的資深技術(shù)面試官,看過了無數(shù)落寞的身影失望的離開,略感愧疚,故獻(xiàn)上此文,希望各位讀者以后面試勢(shì)如破竹,永無失敗!

[[237843]]

Redis有哪些數(shù)據(jù)結(jié)構(gòu)?

字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。

如果你是Redis中高級(jí)用戶,還需要加上下面幾種數(shù)據(jù)結(jié)構(gòu)HyperLogLog、Geo、Pub/Sub。

如果你說還玩過Redis Module,像BloomFilter,RedisSearch,Redis-ML,面試官得眼睛就開始發(fā)亮了。

使用過Redis分布式鎖么,它是什么回事?

先拿setnx來爭(zhēng)搶鎖,搶到之后,再用expire給鎖加一個(gè)過期時(shí)間防止鎖忘記了釋放。

這時(shí)候?qū)Ψ綍?huì)告訴你說你回答得不錯(cuò),然后接著問如果在setnx之后執(zhí)行expire之前進(jìn)程意外crash或者要重啟維護(hù)了,那會(huì)怎么樣?

這時(shí)候你要給予驚訝的反饋:唉,是喔,這個(gè)鎖就永遠(yuǎn)得不到釋放了。緊接著你需要抓一抓自己得腦袋,故作思考片刻,好像接下來的結(jié)果是你主動(dòng)思考出來的,然后回答:我記得set指令有非常復(fù)雜的參數(shù),這個(gè)應(yīng)該是可以同時(shí)把setnx和expire合成一條指令來用的!對(duì)方這時(shí)會(huì)顯露笑容,心里開始默念:摁,這小子還不錯(cuò)。

假如Redis里面有1億個(gè)key,其中有10w個(gè)key是以某個(gè)固定的已知的前綴開頭的,如果將它們?nèi)空页鰜?

使用keys指令可以掃出指定模式的key列表。

對(duì)方接著追問:如果這個(gè)redis正在給線上的業(yè)務(wù)提供服務(wù),那使用keys指令會(huì)有什么問題?

這個(gè)時(shí)候你要回答redis關(guān)鍵的一個(gè)特性:redis的單線程的。keys指令會(huì)導(dǎo)致線程阻塞一段時(shí)間,線上服務(wù)會(huì)停頓,直到指令執(zhí)行完畢,服務(wù)才能恢復(fù)。這個(gè)時(shí)候可以使用scan指令,scan指令可以無阻塞的提取出指定模式的key列表,但是會(huì)有一定的重復(fù)概率,在客戶端做一次去重就可以了,但是整體所花費(fèi)的時(shí)間會(huì)比直接用keys指令長。

使用過Redis做異步隊(duì)列么,你是怎么用的?

一般使用list結(jié)構(gòu)作為隊(duì)列,rpush生產(chǎn)消息,lpop消費(fèi)消息。當(dāng)lpop沒有消息的時(shí)候,要適當(dāng)sleep一會(huì)再重試。

如果對(duì)方追問可不可以不用sleep呢?list還有個(gè)指令叫blpop,在沒有消息的時(shí)候,它會(huì)阻塞住直到消息到來。

如果對(duì)方追問能不能生產(chǎn)一次消費(fèi)多次呢?使用pub/sub主題訂閱者模式,可以實(shí)現(xiàn)1:N的消息隊(duì)列。

如果對(duì)方追問pub/sub有什么缺點(diǎn)?在消費(fèi)者下線的情況下,生產(chǎn)的消息會(huì)丟失,得使用專業(yè)的消息隊(duì)列如rabbitmq等。

如果對(duì)方追問redis如何實(shí)現(xiàn)延時(shí)隊(duì)列?我估計(jì)現(xiàn)在你很想把面試官一棒打死如果你手上有一根棒球棍的話,怎么問的這么詳細(xì)。但是你很克制,然后神態(tài)自若的回答道:使用sortedset,拿時(shí)間戳作為score,消息內(nèi)容作為key調(diào)用zadd來生產(chǎn)消息,消費(fèi)者用zrangebyscore指令獲取N秒之前的數(shù)據(jù)輪詢進(jìn)行處理。

到這里,面試官暗地里已經(jīng)對(duì)你豎起了大拇指。但是他不知道的是此刻你卻豎起了中指,在椅子背后。

如果有大量的key需要設(shè)置同一時(shí)間過期,一般需要注意什么?

如果大量的key過期時(shí)間設(shè)置的過于集中,到過期的那個(gè)時(shí)間點(diǎn),redis可能會(huì)出現(xiàn)短暫的卡頓現(xiàn)象。一般需要在時(shí)間上加一個(gè)隨機(jī)值,使得過期時(shí)間分散一些。

Redis如何做持久化的?

bgsave做鏡像全量持久化,aof做增量持久化。因?yàn)閎gsave會(huì)耗費(fèi)較長時(shí)間,不夠?qū)崟r(shí),在停機(jī)的時(shí)候會(huì)導(dǎo)致大量丟失數(shù)據(jù),所以需要aof來配合使用。在redis實(shí)例重啟時(shí),優(yōu)先使用aof來恢復(fù)內(nèi)存的狀態(tài),如果沒有aof日志,就會(huì)使用rdb文件來恢復(fù)。

如果再問aof文件過大恢復(fù)時(shí)間過長怎么辦?你告訴面試官,Redis會(huì)定期做aof重寫,壓縮aof文件日志大小。如果面試官不夠滿意,再拿出殺手锏答案,Redis4.0之后有了混合持久化的功能,將bgsave的全量和aof的增量做了融合處理,這樣既保證了恢復(fù)的效率又兼顧了數(shù)據(jù)的安全性。這個(gè)功能甚至很多面試官都不知道,他們肯定會(huì)對(duì)你刮目相看。

如果對(duì)方追問那如果突然機(jī)器掉電會(huì)怎樣?取決于aof日志sync屬性的配置,如果不要求性能,在每條寫指令時(shí)都sync一下磁盤,就不會(huì)丟失數(shù)據(jù)。但是在高性能的要求下每次都sync是不現(xiàn)實(shí)的,一般都使用定時(shí)sync,比如1s1次,這個(gè)時(shí)候最多就會(huì)丟失1s的數(shù)據(jù)。

Pipeline有什么好處,為什么要用pipeline?

可以將多次IO往返的時(shí)間縮減為一次,前提是pipeline執(zhí)行的指令之間沒有因果相關(guān)性。使用redis-benchmark進(jìn)行壓測(cè)的時(shí)候可以發(fā)現(xiàn)影響redis的QPS峰值的一個(gè)重要因素是pipeline批次指令的數(shù)目。

Redis的同步機(jī)制了解么?

Redis可以使用主從同步,從從同步。第一次同步時(shí),主節(jié)點(diǎn)做一次bgsave,并同時(shí)將后續(xù)修改操作記錄到內(nèi)存buffer,待完成后將rdb文件全量同步到復(fù)制節(jié)點(diǎn),復(fù)制節(jié)點(diǎn)接受完成后將rdb鏡像加載到內(nèi)存。加載完成后,再通知主節(jié)點(diǎn)將期間修改的操作記錄同步到復(fù)制節(jié)點(diǎn)進(jìn)行重放就完成了同步過程。

是否使用過Redis集群,集群的原理是什么?

Redis Sentinal著眼于高可用,在master宕機(jī)時(shí)會(huì)自動(dòng)將slave提升為master,繼續(xù)提供服務(wù)。

Redis Cluster著眼于擴(kuò)展性,在單個(gè)redis內(nèi)存不足時(shí),使用Cluster進(jìn)行分片存儲(chǔ)。

作者簡(jiǎn)介:錢文品(老錢),互聯(lián)網(wǎng)分布式高并發(fā)技術(shù)十年老兵,目前任掌閱科技資深后端工程師。熟練使用 Java、Python、Golang 等多種計(jì)算機(jī)語言,開發(fā)過游戲,制作過網(wǎng)站,寫過消息推送系統(tǒng)和MySQL 中間件,實(shí)現(xiàn)過開源的 ORM 框架、Web 框架、RPC 框架等

責(zé)任編輯:未麗燕 來源: 高可用架構(gòu)
相關(guān)推薦

2018-09-05 12:20:09

數(shù)據(jù)庫Redis面試題

2013-12-03 10:11:41

LinuxLinux面試題

2013-05-22 10:04:18

Hibernate面試問題

2021-02-10 07:38:43

Node.js后端框架

2023-09-13 08:37:56

程序員面試catch

2019-07-15 11:04:37

Spring BootTomcat開發(fā)

2009-03-03 09:33:13

面試ORACLE

2025-02-19 08:13:31

2013-09-30 09:08:30

面試創(chuàng)業(yè)

2020-07-29 10:20:28

Redis數(shù)據(jù)庫字符串

2023-02-10 16:36:30

機(jī)器學(xué)習(xí)評(píng)估指標(biāo)

2022-01-14 08:12:39

瀏覽器面試問http

2020-07-17 20:35:41

Redis數(shù)據(jù)庫緩存

2013-05-29 10:47:50

Android開發(fā)Java多線程java面試題

2022-08-28 20:35:52

三次握手四次揮手TCP

2020-06-17 08:53:19

Redis集群SSH

2019-12-17 18:11:09

跳槽那些事兒機(jī)器學(xué)習(xí)人工智能

2020-03-17 14:53:31

JavaScript面試問題前端

2012-10-18 15:10:51

前端工程師面試題WEB開發(fā)

2020-03-23 09:56:50

軟件測(cè)試面試技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)