阿里云开放平台一面
面试官是一位姐姐,很温柔,不会让人感到有压力。一上来先给我介绍了一下他们部门是做什么的,大概花了10分钟左右,总结来说就是提供Open API 给用户、生态合作伙伴,是他们能够快速构建云上自动化运维体系,算是核心部门。
接下来面试开始,她让我自我介绍,着重说一下做过哪些项目,里面遇到了哪些问题,是如何解决的,说要从中考察我的沟通能力。最好是讲成小白都能听懂的程度。
讲的过程中面试官问了很多细节,包括:
某个地方为什么要读写分离?如果写失败了会影响业务吗?这里你用了多线程,是怎么考虑的?为什么读写分离是可行的?
为什么使用neo4j图数据库而不是其他的?有做过调研吗?如果这块业务现在让你重新设计,你会怎么做?
服务注册为什么用zookeeper而不是k8s?redis里面存的数据是如何保证一致性的?有做额外的保证措施吗?
用kafka来实现消息通知发布,在业务中需要消息是有序的吗?怎么实现的?
这些问题我答的不是很好,近期主要背八股去了,所以一被问到细节就会懵一会儿,然后kafka那块我只是用过,具体实现原理我不知道,就也回答的很吃力。
中间问了一些八股,主要有:
redis底层数据结构;redis缓存雪崩,击穿,穿透等;持久化的两种方式和区别;内存淘汰策略;然后再次问项目里使用redis是怎么保证数据一致性的,还说使用redis最大的问题就是不能保证数据的一致性,这里我回答的是先改缓存再改数据库。
说说你对微服务的理解;maven如何解决依赖冲突?A引用了B的的一个版本,C又引用B的另一个版本,B的版本是怎么确定的?scope的作用?
java的hashmap的fastfail机制(不会);synchronized会发生死锁吗?为什么?CAS锁底层实现原理;线程sleep和wait的区别,会释放对象锁吗?分别什么时候使用?jvm内存溢出和内存泄露的区别,分别有哪些场景?如何避免内存泄漏?(在finally块释放资源)看过jdk源码吗?(有,但不多。。。)
最后问了full gc和minor gc的区别以及主要的过程?
总结:项目部分拉跨了,Redis那部分答得还行,但是java那块涉及到底层原理的就答得不是很好了,更别说后面maven部分的问题了,这里完全凭以前仅有的一点印象回答的。
后面聊天的时候面试官说其实maven里还有好多问题可以问的,而且Spring,SpringMVC,SpringBoot,Mybatis,kafka这些也还有很多可以问的,感觉她的意思是我还没发力呢你就倒下了。
总体就是这样,还得加油啊。