前段时间有小伙伴面试蚂蚁金服成功,我让他总结下面试经验,然后就把文档发过来了。以下为面试内容。
一面:
===
1.数据库
=====
-
事务ACID特性
-
悲观锁,乐观锁 分别的使用场景
-
数据库死锁,原因?怎么注意避免
-
SQL优化,执行计划,索引以及底层数据结构**
2. java基础&并发
=============
-
HashMap 底层数据结构,hash冲突的几种处理方式
-
ConcurrentHashMap 怎么保障的线程安全
-
线程池几个核心参数,核心线程数怎么设置,默认的几种饱和策略
-
ThreadLocal 源码 以及内存泄漏的原因
-
CountDownLatch.await() 方法怎么处理InterruptedException
-
AQS抽象队列同步器源码
-
ForkJoinPool 原理
-
重入锁ReentrantLock 基本使用,需要注意什么
-
CAS 原理,存在的问题
-
关键字volatile了解过吗?保障了什么,可以举例子来说明吗
3. 框架相关
========
-
RocketMQ 怎么保障消息不丢失
-
Spring AOP基本使用,以及源码,动态代理的两种方式各自的原理。
-
SpringBoot2.0 为什么默认使用CGLIB
-
Spring 循环依赖问题
4. 项目相关
========
-
针对我以前写过一个插件扩展功能,问其基本实现原理,然后回答了基于Spring 容器具有继承和多子容器容器隔离的特性实现了不同租户功能的隔离。
-
通过阅读Spring maven打包插件源码了解了spring 加载jar的机制,然后依赖了该项目中的一些关键jar 实现了自己的classLoader。然后面试官问 classLoader动态加载
-
class 怎么保障元空间不OOM,回答的如果自己使用的classLoader的话 需要先卸载对应的class。
一面总结,总体来说
面试题都很常见。但是阿里的面试官喜欢往深了问,如果没有相应的基础很难招架。一面比较顺利,电话结束后面试官说后面面试官再和你聊
二面
==
自我介绍
项目相关
- 聊自己最有成就感的项目
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
回答的是刚毕业还是一个小白的时候,独自负责成功上线的一个项目,在这个过程中不断的解决尽管现在看起来很简单的问题。最后成功上线,也获得了客户和公司的认可
- 然后问 自己最有挑战的项目,难点?回答了 以前做过的信贷决策引擎系统2.1. 设计的方向是平台化,我们为业务提供的是一套决策流程框架,具体的业务指标是由模型算法工程师通过Python来实现,
平台只是通过Python脚本执行引擎去执行模型中的每一个指标,最后将指标结果进行汇总计算出来一个结果提供给银行作为参考。而针对流程中需要定制开发的部分,我们通过提供一个扩展接口包,各自的银行开发人员只需要去实现这个扩展包 就可以进行定制开发了,开发完成以后将开发好的jar包上传至扩展管理平台 (每一个银行在技术上就是一个spring上下文),就可以将银行的需要的功能动态的加载进系统中了。2.2. 晚上定时跑批系统的高并发处理。由于评级系统在评级的过程中涉及到大量的数据接口,因此评级整体上通过异步来处理的。通过MQ和Redis来做的异步评级2.3 由于评级系统内部涉及到大数据量的接口查询和存储,因此需要提高系统的一个吞吐,可以通过一个注重吞吐量的垃圾收集器来处理,另外由于外部接口即可能是同步的也可能是异步回调的,因此我们内部通过抽象“异步回调模型”来实现了一个统一的标准。另外系统中大量使用了线程池,因为对我们对线程池做了相应的优化。
面试官问,系统中这么多接口 怎么保障数据一致性? 回答的通过数据库乐观锁来实现,每一个指标所依赖的接口请求状态在这个指标记录都会做保存。