8月20号晚上8点进行了蚂蚁金服Java开发岗的第三面,下面开始:
- 自我介绍(要求从实践过程以及技术背景角度着重介绍)
- 实习经历,说说你在公司实习所做的事情,学到了什么
- 关于你们的交易平台,说下整体架构以及上下游的依赖
- 关于你说的缩短响应时间的优化改进,你是通过什么机制去做异步调用的
- 那既然是远程调用外部服务,如果一直获取不到结果怎么办?你做了什么处理机制?
- 对微服务框架有什么了解?看过源码吗?背后的原理能不能讲讲,比如发起一次远程调用,它背后具体发生了什么
- 关于项目就说到这里。接下来考察一下Java基础,ThreadLocal了解吗?有没有用过?说下它的使用场景以及底层实现原理
- 使用ThreadLocal会有什么隐患吗?为什么会有这个隐患?
- 既然使用 ThreadLocal 可能会造成内存泄漏,那要如何去避免?
- 聊聊JVM,说一下JVM的内存管理中的堆内存(我回答了堆的存放内容,以及划分为新生代和老年代,但是面试官的意思是有三个分区:新生代、老年代、永久带。我就很奇怪,永久带不是指方法区么???于是面试完去查了资料,在《深入理解Java虚拟机》一书中有这么一句话描述:虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap,目的应该是与Java堆区分开来。神坑啊,其实我说的也没错的,感觉亏大了,当时就该和面试官硬刚一波的。。。
- GC过程了解吧,说说GC的主要过程,其实面试官想要的答案是GC算法,我却解释了很多关于可达性分析,提醒之后说了三种GC算法
- 说下常用的垃圾收集器的原理以及过程
- GC又分young GC和full GC,你说说什么情况下会发生full GC?
- 关于第13问,说了一个场景是老年代空间不足触发full GC。面试官细问什么情况下会造成老年代空间不足?
- Spring框架用过吧?说下bean在初始化的时候,static代码块、init方法、setProperty方法的执行顺序是怎么样的?(虽然看过源码,听到这个还是有点懵逼,不知道怎么回答,于是就说了依赖注入中bean的初始化过程,以AbstractApplicationContext为例说了bean的初始化源码,具体可以看我的博客:https://my.oschina.net/edwardge/blog/1820156,似乎得到了面试官的肯定)
- 那关于Spring的事务有了解吗?(直接说不知道,跳过)
- 用过什么数据库?有什么办法可以提高数据库的检索速度?(索引)
- 那你说说你对索引的了解(说了索引的优点,索引的类型以及索引失效的情况)
- 索引的缺点是什么?建立索引要付出什么代价?
- 设计模式有了解吗?(说了下单例模式,包括概念以及使用场景)
- 说说单例模式中的懒汉模式和饿汉模式
- TCP/IP协议是在哪一层?
- 毕业时间,回学校的安排
- 准备实习到什么时候?
- 期望的工作地点(杭州、上海)
- 你有什么想要问我的吗?(问了对我这次面试的评价,面试人很nice,指出了我的优势和劣势:Java基础掌握的比较扎实,但是对于更深层次上技术的思考有所欠缺;虽然网络或者一些知识在工作当中用到的机会不多,但还是要求掌握一些,这里有待加强。)
二面结束,50min,说的口干舌燥。。。不知道结果如何,总之有面试机会就是一次提升,通过不断的积累和总结去提升自己,继续努力~