分享
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
一面(40分钟,部分面经):
项目相关:
这个分布式缓存是做什么的?
缓存和缓存后面的数据库怎么保证数据的一致性?
什么是LRU算法?嘴撕LRU算法。。
如果有数据插入进来会到队列头部,那如果有大量数据插入进来,原来的热数据不是会被挤出内存?怎么解决?这个问题?
一致性哈希(这个面试官不懂一致性哈希,一直不懂为什么这个环结构能降低数据迁移的代价。最后画图讲清楚。。。。。)
校内经历做过一些爬虫,这里问了一些爬虫相关的东西。
怎么反爬?
爬过哪些网站?
微博怎么爬,知乎怎么爬的。
用什么语言做的?
基础:
MongoDB有什么事务的支持?
事务有什么特征?
一致性?
假设A向B转了10块钱,这时候在A数据库中减了10,但是在B的数据库中加10的过程中失败了,怎么办?用类似消息队列持久化请求,不断重试?如果一直不成功?甚至B的账号注销了?直接利用持久化的信息回滚A,退回钱。
手撕算法:
一个数据组,无序,数据没有规律,怎么在其中找出一个数?直接遍历,时间复杂度O(n)可以吗?不可以。要小于O(n)级别。(这里我想他的意思是一个固定的数组,然后不断去找,通过Map去记录可能可以加速)
二分查找。
二面:
基本都在扩展项目:
项目了的LRU是怎么实现的,用Map和Queue是实现的。
用Map和Queue太消耗内存了,怎么办?Map里存的是key/value的指针,不存具体的值。
还有其它方法?牺牲时间效率,去掉Map,只用Queue去做LRU。
缓存怎么解决时间戳问题?
每个value都设置缓存过期时间,查找值的时候,把如果发现过期了,就去后面的数据库捞起来更新?
如果需要一过期就踢出内存呢?
开启另外一个线程,定时扫描。代价太大。。
不会了。。。
有没有了解过redis的内存淘汰策略?随机淘汰一批。(恍然大悟)
面试官给我总结了redis和memcached的内存淘汰策略,让我可以多去了解缓存方面相关的开源产品的实现方案。
有没有看过什么源码呢?比如etcd之类的
最近看什么书?有什么收获?
了解面向对象吗?
最后建议我以后可以去学习一下Rust语言,意思是这个语言像C++这类一样可以学到很多计算机底层的知识,但是学习成本又比C++小很多,Java和Go封装的太好,比较适合做业务,但会掩盖很多问题。
有疑问加站长微信联系(非本文作者))
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2417 次点击
下一篇:开源十年一周总结
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传