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