首页 > 奇安信Golang服务端面经
头像
去打工搬砖
编辑于 2020-09-29 13:19
+ 关注

奇安信Golang服务端面经

奇安信:
一天走完了流程进备胎池,面试中体验还是不错的,就是排队系统一言难尽。。。。
一面(40分钟,部分面经):
项目相关:
这个分布式缓存是做什么的?
缓存和缓存后面的数据库怎么保证数据的一致性?
什么是LRU算法?嘴撕LRU算法。。
如果有数据插入进来会到队列头部,那如果有大量数据插入进来,原来的热数据不是会被挤出内存?怎么解决?这个问题?
一致性哈希(这个面试官不懂一致性哈希,一直不懂为什么这个环结构能降低数据迁移的代价。最后画图讲清楚。。。。。)
校内经历做过一些爬虫,这里问了一些爬虫相关的东西。(我都忘了牛客的简历上有写这个东西,挺突兀的。。。。)
怎么反爬?
爬过哪些网站?
微博怎么爬,知乎怎么爬的。
用什么语言做的?
基础:
MongoDB有什么事务的支持?
事务有什么特征?
一致性?
假设A向B转了10块钱,这时候在A数据库中减了10,但是在B的数据库中加10的过程中失败了,怎么办?用类似消息队列持久化请求,不断重试?如果一直不成功?甚至B的账号注销了?直接利用持久化的信息回滚A,退回钱。
手撕算法:
一个数据组,无序,数据没有规律,怎么在其中找出一个数?直接遍历,时间复杂度O(n)可以吗?不可以。要小于O(n)级别。(这里我想他的意思是一个固定的数组,然后不断去找,通过Map去记录可能可以加速)
二分查找。
二面(吐槽一下排队系统):
一面面完过了10几分钟,给我发二面通知,排队排了快一个小时没排到;中午给我发邮件说推迟到下午,下午排在第一个,过了快一小时还是没面试官出现。。。。然后我就取消了。。。。。一个小时后打电话叫我继续面。。说是牛客排队系统是不准的。。
基本都在扩展项目:
项目了的LRU是怎么实现的,用Map和Queue是实现的。
用Map和Queue太消耗内存了,怎么办?Map里存的是key/value的指针,不存具体的值。
还有其它方法?牺牲时间效率,去掉Map,只用Queue去做LRU。
缓存怎么解决时间戳问题?
每个value都设置缓存过期时间,查找值的时候,把如果发现过期了,就去后面的数据库捞起来更新?
如果需要一过期就踢出内存呢?
开启另外一个线程,定时扫描。代价太大。。
不会了。。。
有没有了解过redis的内存淘汰策略?随机淘汰一批。(恍然大悟)
面试官给我总结了redis和memcached的内存淘汰策略,让我可以多去了解缓存方面相关的开源产品的实现方案。
有没有看过什么源码呢?比如etcd之类的
最近看什么书?有什么收获?
了解面向对象吗?
最后建议我以后可以去学习一下Rust语言,意思是这个语言像C++这类一样可以学到很多计算机底层的知识,但是学习成本又比C++小很多,Java和Go封装的太好,比较适合做业务,但会掩盖很多问题。
HR面(10多分钟):
常规问题,能不能提前来实习,怎么考量offer,地域要求。

更多模拟面试

全部评论

(4) 回帖
加载中...
话题 回帖