偶然机会拿到蚂蚁金服的内推,最终止步二面,在这和大家分享一下面试过程。
一面过程
电话打过来的时候,对方使用公司座机。像是使用网络呼叫,存在问题是声音不清楚,整个交流过程经常会有声音中断的现象出现,还好最终没算影响到整体面试。
开始首先进行了一些自我介绍,然后讲了最近做的项目,使用到的技术栈。项目这部分就不再详细介绍,大概是支付整体系统中在交易层面改造过程。前面项目经验交代了当前使用的技术栈是Java、Spring、Mybatis、Dubbo、MySQL、Redis,所以整个技术面试过程都是围绕着这些技术来考察的。
项目中提到了用到的数据库是MySQL:
- 数据库用的什么存储引擎?InnoDB;还了解其他存储引擎吗,它们的适用场景分别是什么?
- InnoDB事务底层实现原理是什么?日志有哪几种类型,分别作用是什么?
- 事务的几种隔离级别,默认是哪一种?
- InnoDB是怎么解决并发一致性问题中的不可重复读?
- 幻读的场景是什么?怎么解决幻读问题的?
- MYSQL有哪些锁,分别在什么操作场景下会用到这些锁?
项目中提到用到的语言是Java:
- sychronized锁和Lock锁区别,从实现方式、效率方面讲讲你对它俩的理解;
- hashmap与hashtable、concurrentHashMap区别,从底层实现、线程安全、扩容过程角度讲一下;
- Spring Bean生命周期,从初始化到销毁过程讲一下?
- Spring AOP底层实现?动态代理;CGLIB和JDK动态代理的区别?
项目中提到用到过Redis:
- Redis有哪些数据类型,常用的是哪一个,Redis 中的String有什么优势?
- Redis 数据淘汰策略有哪些?
- 过期键是如何删除的?
然后就是一些基础性的问题:
- TCP/IP 三次握手与四次挥手过程,五层模型?
- HTTP与TCP区别?
二面过程
二面电话打过来的时候大约在下午五点,没有提前通知。这次使用的是私人手机呼叫,对方非常客气,说占用您30分钟的时间,我们接着聊一聊。
面试开始还是先介绍一下当前做的项目,讲一下内部使用的技术栈以及当前项目整体背景;项目中提到当前用到了一个Saga思想来处理分布式事务问题,面试官随即让讲一下数据库XA、TCC等常用解决方案的实现原理,并结合当前使用的Saga技术进行比较。
开始技术面试:
- 谈谈你对IOC以及AOP的理解,解释一下AOP实现过程;
- IOC容器的启动过程做了哪些工作?
- 线程池有哪些参数,分别有什么作用,线程池的运行原理,四种线程池区别?
- 线程状态由哪一种,各个状态之间是怎么流转的?
- 数据库用的什么?MYSQL。什么存储引擎?InnoDB。
- MYSQL底层索引存储的数据结构什么?B+树与B树的区别,优点是什么,结合磁盘读写结构说一下为什么是B+树这种数据结构?
问了一道场景应用题:
- 数据库有种100万条数据,已经在相关列加了索引,现在继续插入100万条数据,是直接插入吗,还是提供一个方案来优化数据插入?
总结
面试岗位是Java初级开发,题目相对比较简单。由于准备不够充分导致二面几个基础性问题回答不是很好,所以终止在二面。希望其他同学在准备面试阿里这种大厂的时候,能够吸取教训,确保基础问题上不丢分。