事出有因

Redis是一个分布式NoSQL数据库,因其数据都存储在内存中,所以访问速度极快,因此几乎所有公司都拿它做缓存使用,所以Redis常被称为分布式缓存。

一次我的一个同事让我帮他看Redis相关的问题,我看到了他使用了Hash数据类型,其实它就对应Java里的Map。同事要往里存十几个key/value对,于是他就像使用本地Map一样,连续的调用了十几次的put操作。

哎,我只好心理默默的想着,以后再招聘时,一定要加强Redis的考察力度。

记一次面试

我:Redis想在都成了标配了,几乎每个写代码的人都用过,那你说说Redis的全名是什么?

他:Redis不就是它的全名吗?其实会用不就行了嘛,我不关注这些。

(我心里真想一脚把他踹飞,你不会还有理了咋地,不过一向“有内涵”的我,这次要好好地“软怼”他。)

我:哦,没关系,其实好多人都不知道它的全名。Redis有一种数据类型叫做String,即字符串。Java里也有个数据类型叫String,它们一样吗?

他:应该一样吧,我平时写Java代码都是直接把一个String类型给存进去的。

(Redis是个中间件,用C语言写的,和Java没有关系的。)

我:是吗?其实除了Java外还有很多语言可以操作它,比如Python。当然也可以把一个Python里的String存储到Redis里,这没有问题吧。

他:是的,没有问题。

我:那你说Redis里的String到底是对应Java里的String,还是Python里的String呢?

他:这个。。。

(哈哈,小样,让你逞能,现在不NB了吧)

我:哦,没关系,其实好多人都不知道它到底是哪个语言里的String。

(其实Redis里的String压根就不是个字符串,那它是个什么呢?)

我:Redis里有个数据类型Hash,你用过吧。

他:用过,和Java里的Map很像。

我:如果往Hash里存一个key/value,你怎么做?

他:就像Map一样,调用put方法把key/value存进去就行了。

我:那存10对key/value呢?

他:调用10次put方法不就行了嘛。

(瞧他得瑟那样吧)

我:那要存100对,难道就调用100次put吗?

他:这个。。。

我:哦,没关系,不是每个人都会去思考这些问题的。

(我还真见过有人连续调用几乎二十次的,那么为什么不能这样做呢?)

我:Redis支持事务吗?

他:支持啊。

我:那你说说Redis事务是什么样子的?

他:就是多条命令,要么都执行,要么都不执行。

(哎呦,可以呀,竟然回答对了。拜托,任何事务都是这样的好不好,原子性嘛)

我:假如我要执行3条命令,执行到第2条时出现了错误,那事务会回滚吗?

他:肯定会呀,不然还叫事务干嘛。

(哎呦呦,又NB起来了)

我:是吗?Are you 确定?

他:这个。。。

我:哦,没关系,一般情况下也不会有人去使用Redis的事务。

(Redis的事务命令是“真的事务”吗?出现错误时会回滚吗?)

我:如果Redis是单节点,向它发送命令总能获取到数据。如果Redis是集群,会有很多节点,如果向A节点发送命令,发现数据不在A上而在B节点上,此时会怎么样?

他:Redis应该负责返回我请求的数据,既然我向A发的命令就应该由A负责。

我:是吗?你的意思是要A去B上帮你取数据吗?

他:难道不是吗?

(Redis是如何处理数据不在本节点这样情况的呢?)

我:好吧,这个问题你可以回去想想。

(明明就是井底之蛙,非要摆出一副自己看到了宇宙边缘的样子。)

(END)

作者是工作超过10年的码农,现在任架构师。喜欢研究技术,崇尚简单快乐。追求以通俗易懂的语言解说技术,希望所有的读者都能看懂并记住。下面是公众号和知识星球的二维码,欢迎关注!

       

【面试】我是如何在面试别人Redis相关知识时“软怼”他的的更多相关文章

  1. Redis相关知识整理

    Redis相关知识整理 1. Redis和MySQL的区别?a).mysql是关系型数据库,而redis是NOSQL,非关系型数据库.mysql将数据持久化到硬盘,读取数据慢,而redis数据先存储在 ...

  2. redis 相关知识

    1. 什么是Redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...

  3. 【面试】我是如何面试别人List相关知识的,深度有点长文

  4. 面试必问之http以及浏览器相关知识

    /** 1.HTTP以及HTTPS概念 HTTP是超文本传输协议,是一个用于传输超媒体文档的应用层协议,被用于在web浏览器和网站服务器之间,以明文方式传递信息, 不提供任何方式的饿数据加密,因此使用 ...

  5. Python——Redis相关知识

    一.连接 Redis import redis 连接方式:redis提供了2个方法 1:StrictRedis:实现大部分官方的命令 2:Redis:是StrictRedis的子类,用于向后兼容旧版的 ...

  6. Redis相关知识

    Redis 存储的五种 字符串类型:string 一个String类型的value最大可以存储512M String是最常用的一种数据类型,普通的key/value存储. 散列类型:  hash 键值 ...

  7. 【面试】我是如何在面试别人Spring事务时“套路”对方的

    “中国最好面试官” 自从上次写了一篇“[面试]我是如何面试别人List相关知识的,深度有点长文”的文章后,有读者专门加我微信,说我是“中国最好面试官”,这个我可受不起呀. 我只是希望把面试当作是一次交 ...

  8. 如何准备Java面试?如何把面试官的提问引导到自己准备好的范围内?

    Java能力和面试能力,这是两个方面的技能,可以这样说,如果不准备,一些大神或许也能通过面试,但能力和工资有可能被低估.再仔细分析下原因,面试中问的问题,虽然在职位介绍里已经给出了范围,但针对每个点, ...

  9. 《吊打面试官》系列-Redis基础知识

    前言Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下 ...

随机推荐

  1. d3.js制作连线动画图和编辑器

    此文章为原创文章,原文地址:https://www.cnblogs.com/eagle1098/p/11431679.html 连线动画图 编辑器 效果如上图所示.本项目使用主要d3.jsv4制作,分 ...

  2. Leetcode之回溯法专题-79. 单词搜索(Word Search)

    Leetcode之回溯法专题-79. 单词搜索(Word Search) 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元 ...

  3. Win10中用yolov3训练自己的数据集全过程(VS、CUDA、CUDNN、OpenCV配置,训练和测试)

    在Windows系统的Linux系统中用yolo训练自己的数据集的配置差异很大,今天总结在win10中配置yolo并进行训练和测试的全过程. 提纲: 1.下载适用于Windows的darknet 2. ...

  4. 企业代码版本管理之争:TrunkBased vs GitFlow vs AoneFlow vs OneFlow vs ExeFlow

    目录 引言 TrunkBased GitFlow AoneFlow OneFlow ExeFlow 综述 引言 网络上版本管理系统之争持久而喧嚣,依照声量来讲目前应该是Git占了较大的优势.不过我们本 ...

  5. hdu 6435 CSGO

    题意:现在有n个主武器, m个副武器, 你要选择1个主武器,1个副武器, 使得 题目给定的那个式子最大. 题解:这个题目困难的地方就在于有绝对值,| a - b | 我们将绝对值去掉之后 他的值就为 ...

  6. 利用GPU训练网络时遇到的一些问题

    1. OSError: [Error 12] Cannot allocate memory 解决办法: 出现这个错误时我是绝望的...因为我看了别人的解决办法,要加内存条才能解决...但是我不甘心,想 ...

  7. MAMP 访问时显示文件列表

    原文链接:他叫自己MR张 背景 MAMP是Mac下的一个PHP+Nginx+MySQL的集成环境,支持多站点,不同版本PHP. 今天有人请教MAMP如何显示文件列表的问题,这里记录一下. 知识补充 一 ...

  8. Java日志框架总结

    1. 前言 从写代码开始,就陆陆续续接触到了许多日志框架,较常用的属于LOG4J,LogBack等.每次自己写项目时,就copy前人的代码或网上的demo.配置log4j.properties或者lo ...

  9. 【Offer】[5] 【替换空格】

    题目描述 思路分析 Java代码 代码链接 题目描述 请实现一个函数,把字符串中的每个空格替换成"%20". 例如输入"We are happy.",则输出&q ...

  10. 05 python内置函数大全

    一.数学运算 abs:返回数字的绝对值 abs(-1) round:保留浮点数的小数位数,默认保留整数.四舍五入. round(1.553,1) #1.6 divmod:计算除数和被除数的结果,并返回 ...