前几天通过boss投递了腾讯的岗位,之后就收到短信定了一个面试时间,面试的平台是腾讯自己的平台——面呗,在线视频面试,上面有个oj可以在线做题,类似牛客网的在线面试。
到了约定时间,提前调好了麦克风,开始面试。
首先是简单的自我介绍。介绍完后,进入正题。
接着面试官看你的简历上的项目,说介绍下你做过的最大型的项目吧。我就蒙蔽了,说最大型的那个是我两年前做的,能不能介绍我最近最熟悉的项目,面试官说可以。然后我就说了业务流程,我做的是类似电商的系统,就是普通的下单、生成订单这种流程。
介绍完后,面试官说,那你说说你们项目系统架构。说了业务架构,还有部署架构,业务架构就说分成了几个微服务,部署架构就是用的阿里云,SLB,K8S,Redis,RocketMQ,MySQL之类的。
接着问了,你们业务不大的话RocketMQ用来做什么,我说延时任务和异步,然后面试官问了RocketMQ延时任务底层怎么实现的?你们生产RocketMQ怎么部署的?怎么保证RocketMQ的高可用?RocketMQ有哪些角色?
接着问,你们下单,是怎么保证不重复提交?如果同一时间并发两个相同的请求,怎么去重?如果客户确实要下两个订单呢?
你们系统有没有对账?对账有什么用吗?如果有人手工改数导致了对账失败,怎么处理?怎么防止运维手工改数?怎么知道这个数据是手工改过的?
接着,直接上八股文。
简历写了熟悉java基础,那java的基本类型都几个字节?一个最小的类空间占用多大?cas是什么?cas底层怎么实现的?Java的动态代理了解吗?底层是怎么做的?Spring的动态代理又是怎么做的?Spring怎么解决循环依赖的问题?
简历写了熟悉多线程编程,并发包的ReentrantLock底层怎么实现?AQS的同步队列有什么用?公平锁非公平锁的区别?并发包里有多个线程同步工具,具体有哪些?为什么需要这么多,ReentranctLock不够用吗?线程池熟悉吗,说一下线程池是怎么工作的?如果线程池一个任务需要处理1ms,每2ms进来一个任务,线程数会达到coreSize吗?
简历写熟悉Redis,redis的数据类型底层的数据结构有哪些?你们生产是怎么部署的?怎么保证高可用?选主是谁选出来的?redis有什么持久化方式?分布式锁是怎么实现的?简历写了RedLock,那说说RedLock实现原理?
简历写熟悉MySQL,一个update语句的整个流程说一下?mysql所以为什么使用b+树,他和b树有什么区别?你们生产的MySQL用的什么隔离级别?RC和RR隔离级别有什么区别?什么是脏读什么是幻读?MySQL怎么解决幻读的呢?MVCC底层是怎么实现的?
写一道简单的算法题吧。一道easy题,不过是改版的,这里需要找出所有的下标位置,还需要运行出正确结果。leetcode 28题的变种
好的,你的情况我了解了,有什么要问我的吗?好好准备一下项目的描述,很快有二面的面试官联系你。
以上,就是整个面试流程了。