本人是双非院校科班研究生,Java开发3年工做经验,如下是最近的面试总结:mysql
先说下个人面试准备经历,为了保证本身简历有较大必定的几率经过筛选,我在2018毕业后面试了多家公司,去了一家上海一家小公司一直工做到今年5月。程序员
和往年相比,今年的金三银四看上去不是那么顺利,可能和个人准备不足有关,可是令我惊讶的是第一家给我面试机会的公司居然是阿里巴巴。一开始接到面试通知时,心情特别复杂,紧张又兴奋,阿里巴巴是出了名的深挖项目实战,实际上我项目部分是相对薄弱的。此次面试,一共三轮,共计四个小时左右,这三轮面试对我来讲,简直是灵魂拷问,至于结局,往下看吧!面试

蚂蚁基本是电话面。第一面leader面,第二面总监面,第三面交叉面。redis
第一轮面试:1小时28分钟算法
面试官问的面试题:spring
- 最近作的项目介绍一下
- 作的过程当中遇到了什么问题,如何解决的
- redis集群高可用原理,一台挂了,怎么切换到另外一台
- 如何保证redis和mysql数据一致
- 数据库事务
- 很大的表如何优化
- limit的局限性,limit值很大的时候有什么问题
- mysql锁介绍一下,有哪些应用场景
- 索引失效的场景
- 线程的生命周期
- 线程池很高怎么处理
- 在分布式任务中,一个微服务的不少线程报错,如何处理和定位
- JVM内存分为哪几块
- 介绍一下垃圾回收机制
- 有没有阅读JDK源码的习惯
第二轮面试:1小时11分钟sql
- ThreadLocal原理,放在堆仍是栈。用过吗?
- Sync 能够做用在哪里? 有什么区别?Sync的底层原理?
- 轻量级锁升级成重量级锁会有开销?有没有什么办法让锁不升级?上来就用重量级锁?
- aop原理,实际使用过吗?
- Springboot的使用过程当中,有哪些以为比较方便的地方?
- 对spring的核心原理有哪些了解?会根据所答来进行深刻的问。
- Spring实例化bean的时候会实例化全部的bean吗?
- Spring实例化的时候须要先构建一个实例吗?
- Bean的循环依赖是怎么解决的?
- 项目中为何使用Redis?
- Redis的性能优化你如何实现?
- 从底层实现角度讲讲Redis为何快?
- 线上Redis有哪些事项须要注意?
- 线上如何让Redis 6.x性能发挥到最大?
- 线上Redis持久化方案如何选型?为何?
- 谈谈Redis底层多路复用实现细节
- 有没有使用Redis作过设计呢?
- JVM的调优大体步骤?
- Jvm的收集器有哪些?各自的优势和缺点?以及各自的回收算法?
- Sql的优化?sql语句自己的优化?sql所用到索引的优化?
- 哪些状况会致使sql的索引失效?
- 索引的底层结构以及优缺点?
第三轮面试交叉面:1小时15分钟数据库
- 项目相关的问题
- 秒杀项目须要考虑的问题
- 秒杀场景用到分布式锁的状况,
- 服务隔离是如何作的,假设没有分库分表的状况下,服务如何作隔离
- 数据库CPU占用率高的缘由
- 磁盘总空间50G,统计出来的空间有30G,剩余20G可能去哪里了
- 限流如何去作,不用redis,还能够怎么实现(令牌桶,滑动窗口)
- 项目转变成微服务后遇到的问题,如何解决,
- 分布式事物的实现原理(我本身引上来的TCC的分布式事物)
- RocketMQ问得较多(呜..没有答好)
- 在RocketMQ的群组消费中,每一个消费组都会消费主题的一份全量消息吗?为何?
- 假设一个RocketMQ集群部署在两个机房,每一个机房都有一些NameServer、Broker和客户端节点,当两个机房间的链路中断时,NameServer、Broker能不能正常提供服务?为何?
- 若是不须要严格顺序,为了提高消费性能,能够不能够将Consumer设置为自动确认消费位置,而后批量拉取消息放到内存队列中,而后异步多线程并行执行消费业务逻辑?为何?
- RocketMQ能不能保证在“从消息生产直到消费完成”这个过程当中,消息不重不丢(Exactly once) ?
- 在RocketMQ的一个Broker 上,使用一个消息序号消费某个队列的消息。其中,消息文件(commitlog)的数量是m个,全部消息文件中的消息条数是k条,目标队列对应的索引文件(consumerQueue)的数量是n个,队列中共有j条消息。查找消息的最快时间复杂度是多少?O(n)仍是O(1),为何?
- RocketMQ使用了哪一种零拷贝技术?
- RocketMQ中如何解决重复消费?
- Dubbo 有哪些核心组件?底层原理?Spi是什么?spi的好处是什么
- 最近在学什么?讲讲SpringCloud alibaba的一些东西
小结性能优化
项目相关的问题多线程
蚂蚁没有考算法,基础知识也有考一些,感受更看重眼缘和讲项目的能力。
大厂的面试,就是挂和被捞的过程。去年下半年没面上几个钟意的公司以后,已经下决心继续打磨一下本身。在今年上半年开始了新的面试。但我目前的简历技能模块上重点强调本身对redis、多线程、jvm、MySQL这些知识点有比较熟练的掌握(后面二面后我被挖底层挖怕了,以致于我如今简历改为了熟悉掌握)
另一个缘由就是RocketMQ没有深刻研究过, 答得吞吞吐吐,聊完RockerMQ后, 我把话题转移到Kafka时,听面试官的语气停顿了一下,估计有些小失望吧!但此次经历给个人感觉仍是很不同的
而程序员在应聘时更是须要经历层层面试。俗话说,磨刀不误砍柴工,作好面试前的准备工做能够帮助你们更好地应对面试官的问题以及面试中的突发状况。
总的来讲,本身若是有想要去的大公司,必定要提高好本身,让本身的能力和素质与公司匹配的上,我也一直相信,机会永远是留给有准备的人。