银十期间得蚂蚁面试机会(本人非985/211,蚂蚁真的不是很在乎学历!!!),有了一次社招机会,前后经历三关,受益匪浅,在此与各位朋友分享经历与心得。
蚂蚁金服Java研发一面(电话面,30分钟左右)
- 自我介绍,讲下最有难度的项目
- 对线程安全的理解
- 比如有一个局部变量i=1,两个线程同时执行,是否线程安全
- 比如再有一个共享变量,如何保证线程安全
- 说说ThreadLocal,底层如何实现
- hashmap实现原理
- volatile关键字,解决了什么问题
- 类加载机制
- JVM内存分布/内存结构?栈和堆的区别?堆的结构?为什么两个survivor区?
- 对象在堆内存创建的生命周期
- Spring的原理?AOP的实现?
- 面向对象的设计原则?OCP?
- 分布式系统如何保证数据一致性
- 有一个方法接收一个消息类型数据,通过if-else处理,如何优化
- 设计一个秒杀系统?考虑哪些问题?
- 有什么问题想问
面试官没有问得很深入,就是对于线程安全高并发比较看重是真的,整个面试过程还是聊得挺愉快,收获很大,蚂蚁的面试官还是很nice,很有耐心,引导性地提问。
蚂蚁金服Java研发二面(现场面,30分钟左右)
- 从http请求发出到响应的整个流程
- 追问如何http请求发送过来之后如何拦截,怎样配置拦截,具体怎样拦截(只知道tomcat拦截,在web.xml中配置,感觉是在问tomcat底层)
- 说说类加载机制,可以自定义类加载器吗,为什么要自定义类加载器
- 了解什么分布式数据一致性算法,具体说说
- MySQL事务隔离级别以及MVCC机制
- Redis缓存雪崩、缓存穿透以及如何解决?
- 再次问了设计秒杀系统
- 说说同步和异步,什么时候用同步,什么时候用异步
- 在linux上面用过什么调优工具,用过什么监控工具,怎样监控自己应用资源消耗情况
- 如果CPU占用资源很高有可能是什么问题,CPU占用资源低但是系统响应速度很慢可能是什么问题
- jvm怎样调优,堆内存栈空间设置多少合适..
蚂蚁金服Java研发三面(现场面,40分钟左右)
- 如果让你实现一个MQ,怎么样保证消息不丢失?
- 硬盘io速度会变慢,有什么解决办法吗?
- mysql的innodb索引数据结构为什么是b+树,用hash来实现可以吗?
- 分布式事务的实现?
- 如何解决redis和mysql数据一致性?
- 常见的MySQL主从同步方案有哪些?优劣势比较过?
- 这次问的是秒杀如何防止超卖?
- 最近有没有学习过新技术?
- 有什么想问我的?
- 三年到五年的职业规划?
总结
- java的基础知识点,主要围绕在集合类和多线程等:ArrayList、LinkedList、HashSet、HashpMap的数据结果,以及如何扩容、以及ConcurrentHashMap相关的多线程安全等。
- JVM的内存分配、几个常见的垃圾回收算法以及原理、还有对应的JVM优化参数需要牢记。
- 网络:TCP的三次握手等网络都必问,重点掌握网络协议。
- Redis:作为分布式缓存的主力,基本也是BAT每次必考,重点是Redis的数据结构、内存、算法、持久化,以及与别的缓存memcached的优劣势。
- 多线程:状态流转、多线程的实现,以及与高并发的区别等。
- Spring框架问得是最多的,BAT非常喜欢问,重点掌握。
- 最后就是分布式架构设计
- 常用的分布式架构设计方案:单点登录、分布式缓存、存储、消息的选型,还有就是数据库端的优化方案(需要提前了解)。
- 最好能提前了解深入一个类似秒杀这样的项目,如果面试官问到类似的项目,你能把设计思路讲出来,这对你的面试结果是很大的加分项。
以上是Java面试1—到5年以上开发必问到的面试问点,也都是一线互联网公司Java面试必备技能,下面是参照阿里年薪50W所需具备的技能图,大家可以参考下!
同时针对这12个技能,我在这整理了一份Java架构进阶面试专题PDF文档(含450题解析,包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发,设计模式,MySQL等知识点解析,内容丰富,图文结合!)
这份专题文档是免费分享的,有需要的朋友转发此文后关注我私信回复【面试】即可获取资料的免费领取方式!
同时还有一些关于Java面试的视频解析和架构学习笔记图分享