流程
插曲
时间约的是下午4点15,面试官来得很准时,简单打了几声招呼,才发现我的麦克风没开,几经折腾换了室友的电脑面试。
面试官说总共时间45min(间接告诉我5点结束),先用3min简单介绍一下自己,20min算法题,20min技术问题
给我3min的自我介绍我eng是30s就介绍完了,一心想着尽快弥补因为麦克风耽误的时间
到算法题的时候已经4点23分了
算法题
标题:服务循环依赖检测
描述信息
在微服务的架构下,公司内部会有非常多的独立服务。
服务之间可以相互调用,往往大型应用调用链条很长,如果出现循环依赖将出现非常恶劣的影响。
对于一个具体应用,已知各个服务的调用关系(即依赖关系),请判断是否存在循环调用。
输入:
一组服务依赖关系list,('A', 'B') 表示 A 会调用 B 服务
service_relations = [('A', 'B'), ('A', 'C'), ('B', 'D'), ('D', 'A')]
输出:
由于存在 A - B - D - A 故存在循环依赖,返回True;反之如果不存在,返回False
最终还是没有做出来,但是面试官看到了我的做题笔记,我和他讲解了一下我的想法,并说明是暴力算法,效率不高
技术问题
为什么选用redis做缓存
布隆过滤器怎么实现的
你们项目的布隆过滤器误判率多大
布隆过滤器容量多大
讲讲布隆过滤器降低误判率的原理
缓存穿透、击穿和雪崩是什么?怎么解决
Spring AOP的底层原理
动态代理是怎么实现的
动态代理设计模式是怎么样的?
Zookeeper是强一致性的嘛?
说说选举机制
结束
面试官全程都比较严肃,期间也有好几次没有get到面试官的意思
4.58最后面试官问了我两次——有没有什么想问他的问题
我都回避了,并坦述自己状态不好,已经没有心思继续追问了
面后感
其实整体难度比网上流传的难度都小,从问题上也可以看出JVM、多线程、数据结构、计网、操作系统这些基本功也都没有提及到,这次失利给自己最大的感受就是可惜,分享此篇,与大家共勉!