【面试】我是如何在面试别人Redis相关知识时“软怼”他的
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
标签: redis, nosql
好文要顶 关注我 收藏该文
编程新说(李新杰)
关注 - 1
粉丝 - 889
推荐博客
+加关注
3
« 上一篇: 【面试】足够“忽悠”面试官的『Spring事务管理器』源码阅读梳理(建议珍藏)
» 下一篇: 品Spring:帝国的基石
posted on 2019-09-26 10:10 编程新说(李新杰) 阅读(1465) 评论(68) 编辑 收藏
< Prev 1 2
评论:
#51楼 2019-09-26 15:58 | Diose
楼主牛逼!
不要太纠结一个put和多个put
你用批量put和用单个单个put 就能差别你比人家优秀?
支持(0) 反对(0)
#52楼 [楼主] 2019-09-26 15:59 | 编程新说(李新杰)
@ MSSQL123
引用
这个很早就发在微信公众号了吧,之前还真有个2B的面试官,受到你的影响,问Redis是什么语言开发的,redis中的string和java的string的区别。无语了,看这个那个二货,我心里想说,你是早上上班时候在公交车上现学现卖的吧?
楼主有点标题党了,非要死扣字眼,你提redis中的string和java的string本身不就是误导吗?你不是在误导人把redis当成一个编程语言?
关于数据类型的multpile批量操作,本质上他就跟单条操作一样,就是一个适合于不同场景的方法,这些东西,是属于知道了就会用的问题,而不是什么高深的问题,你非要搞标题党
Redis的事务本身就跟关系数据库的事...
问redis是什么语言开发的,不过分吧。
假如你买了一辆进口车,你的朋友知道了,问你是从哪国进口的,这过分了吗?
支持(0) 反对(1)
#53楼 [楼主] 2019-09-26 16:00 | 编程新说(李新杰)
@ 流月无双
引用
其实问的可以,下面杠你的大部分都是回答不上来的,学知识要知其然知其所以然,多了解更利于记忆,你只有理解了,你才能随心所欲的使用,不然只是凭着感觉敲代码
你说的很好。学知识就要系统深入的学习。要不然天天crud也没有意思呀。
谢谢啦。
支持(0) 反对(1)
#54楼 2019-09-26 16:03 | Diose
@ 编程新说(李新杰)
引用
@流月无双
引用
引用其实问的可以,下面杠你的大部分都是回答不上来的,学知识要知其然知其所以然,多了解更利于记忆,你只有理解了,你才能随心所欲的使用,不然只是凭着感觉敲代码
你说的很好。学知识就要系统深入的学习。要不然天天crud也没有意思呀。
谢谢啦。
楼主你下次面试可以问别人“你能用c语言写个key-value内存数据库吗?”
我觉得并不难
支持(2) 反对(0)
#55楼 [楼主] 2019-09-26 16:04 | 编程新说(李新杰)
@ Diose
引用
楼主牛逼!
不要太纠结一个put和多个put
你用批量put和用单个单个put 就能差别你比人家优秀?
我没有纠结啊,不过我见过20多个的。
支持(0) 反对(0)
#56楼 [楼主] 2019-09-26 16:06 | 编程新说(李新杰)
@ Diose
引用
@编程新说(李新杰)
引用
引用@流月无双
引用引用
其实问的可以,下面杠你的大部分都是回答不上来的,学知识要知其然知其所以然,多了解更利于记忆,你只有理解了,你才能随心所欲的使用,不然只是凭着感觉敲代码
你说的很好。学知识就要系统深入的学习。要不然天天crud也没有意思呀。
谢谢啦。
楼主你下次面试可以问别人“你能用c语言写个key-value内存数据库吗?”
我觉得并不难
我从来不用“难”和“简单”去评判一个事物。
支持(0) 反对(0)
#57楼 [楼主] 2019-09-26 16:08 | 编程新说(李新杰)
@ sisx
引用
楼主自己心态上有些问题,评论这么多反对意见,难道都是没有道理的吗?点踩按钮还加了display none,感觉像一只鸵鸟。人贵在自省,有则改之,无则加勉嘛。
taiwan人都觉得dalu人吃不起榨菜和茶叶蛋,也是真的吗?
思考问题的角度有待提高。
支持(0) 反对(0)
#58楼 2019-09-26 16:13 | sisx
@ 编程新说(李新杰)
既然这样我也就不说啥了,我确信了你就是那个是看到了宇宙边缘的人。
支持(1) 反对(0)
#59楼 2019-09-26 16:14 | pzyzp
@ 不能飚车
引用
@pzyzp
估计你是想说C#而不是说C吧
就是说的C,C的字符串是后面多了个结束标志。本质也是字符数组。C#和java语言差不多。
支持(0) 反对(0)
#60楼 2019-09-26 16:18 | Diose
@ pzyzp
年纪大的c开发很少知道字符串概念,之前跟一位秃顶硬件大神对接通信 两人沟通都不是一个世界,贼尴尬
支持(0) 反对(0)
#61楼 2019-09-26 16:30 | 不能飚车
@ pzyzp
如果你要说C是这样,那我只能说对你原文后面的描述不太赞同
@Diose
引用
@pzyzp
年纪大的c开发很少知道字符串概念,之前跟一位秃顶硬件大神对接通信 两人沟通都不是一个世界,贼尴尬
估计你很少用C和在C里用字符串,在纯C世界里,依赖字符串这个概念是一件很危险的事。
支持(0) 反对(0)
#62楼 2019-09-26 16:31 | pzyzp
@ Diose
引用
@pzyzp
年纪大的c开发很少知道字符串概念,之前跟一位秃顶硬件大神对接通信 两人沟通都不是一个世界,贼尴尬
这个看人的,愿意去深挖的就会很快了解内部的原理,不愿意学的工作在久也是停留在表面上。
支持(0) 反对(0)
#63楼 2019-09-26 16:33 | pzyzp
@ 不能飚车
的确没用过c,只是学校里学的c语言。还请指出不当之处。
支持(0) 反对(0)
#64楼 2019-09-26 16:38 | 都说我不存在
看官网都没学到redis 居然是remote dictionary server
另回忆起面试官问我 redis 哪个版本开始支持集群模式,哨兵机制的.啊厉害了俺滴哥.
你怼别人具体技术细节的时候,请怼狠点
支持(0) 反对(0)
#65楼 2019-09-26 16:39 | pzyzp
@ 不能飚车
你是想说我后面对字符串的描述跟c中的字符串有出入是吧?这个确实是我是以java和c#中string来说的。我去把答案编辑一下,免得误导别人。
支持(1) 反对(0)
#66楼 2019-09-26 16:40 | weiwxg
看到这么多人在喷楼主我就放心了,至少标明大多数人的心理还是健康的
支持(1) 反对(0)
#67楼 2019-09-26 16:41 | hsm_computer
@ 编程新说(李新杰)
引用
@不堪回首,东风还又
引用
引用楼主的脾气真好
如果我和他们互喷,那和他们还有什么区别。
我又不是小孩子。很多事情都看明白了。
祁黄羊外举不避仇,博主在面试过程中,因对候选人不满,过多带有主观因素,不能说是公,以不公之心办理公司交办之事,不能说是“忠于职守”。
己所不欲勿施于人,博主既然不满候选人,同时又把这种不满加之于候选人,不能说是“仁”。
来者是客,候选人有过失可以当面正大光明地提出,博主当面腹诽,背后写博文,不能说有“礼”。
此博文,博主关闭了“反对”按钮,掩耳盗铃,可谓不“智”。
面对不少善意提醒,博主不知自省,不能说是知“耻”而后“勇”。
我不知道博主“看明白”了什么,也本不想说如此重话,但拔苦亦是慈悲。
我虽愚钝,甚至迂腐,但道德是非不敢忘,所以就事论事写下此文,请博主三思。
https://www.cnblogs.com/lixinjie/p/a-interview-with-a-man-who-has-poor-redis-knowledge.htm