浦发银行 java工程师 社招面经
1. 算法题,求数组中位数。
A:使用快排,partition() 返回当前排序索引,如果等于数组长度的一半就能
提前返回。
不过时间复杂度说错了。。其实应该是N,后来面试官帮忙纠错还认真解释,点
赞嗷
2. 算法实现用到了重载,重载和重写有什么区别?
A:重写用于多态实现,多态分抽象多态和接口多态,涉及到字节码
invokevirtual this #<offset> 和方法表,抽象多态方法解析时调用相同偏移
量的方法代码
接口多态线扫一次寻找对应方法代码。重载用于相同类方法调用跳转。
3. 项目用户接口限流怎么实现的?
A:自定义注解 + 配套的注解拦截器,Spring Boot 提供
HandlerInterceptor
快速构建,底层使用反射。
4. 谈谈对 Spring AOP IOC 的理解
啊这一开始还以为想知道我对AOP 的理解,扯了一堆切点、增强逻辑啥的。。
后来面试官改问AOP 的实现原理,回答的是 JDK 动态代理和 CGLIB 代理。
5. 这两个有啥区别?
A:jdk 动态代理用接口实现,对象需要实现接口;后者用扩展子类实现,private
和final 方法不适用。
6. HashMap 实现
A:经典拉链碰撞,拉链长变红黑树,一顿 bala
7. 对应的多线程版本?有啥不同?
A:jdk 1.8 ConcurrentHashMap 使用 CAS 对每个桶位加锁
8. CAS 有啥缺点?
A:说了下竞争激烈时性能明显变慢,
面试官说还有,啊这一时想不起来疯狂顾左右而言他
后来才想起来乐观锁
还有个ABA 问题。。
9. 刚提到了红黑树,添加元素相关操作了解吗?
A:只说了左旋、右旋、颜色变换,面试官也没往下问,不用往下解释,算是小
福利把。
10. TCP 拥塞算法了解吗?
A:慢启动、拥塞避免、拥塞发生、快速恢复... 一顿 balabala
11. 数据库索引,隔离级别
A:基本功就不说了,补充了下 Innodb 用 next key lock 解决可重复读下的幻读问题,事务隔离A 使用 undo log,D 使用 redo log 实现等等。。
12. 索引这么牛逼,我给每列都设一个好吗?
A:这里回答的是辨识度。。其实就是 Innodb 定义的选择性(cardinality)。。
一顿比划大概讲明白了。。
13. 还了解什么排序算法吗?A:嘿嘿,碰巧看过 Arrays.sort() 源码,回答了下传入的是 int[] 数组时的
场景,较短(大概40 多)时使用插入排序,较长(大概接近 300)时使用归并排序,中间值使用双基线快排(算法4 有相关讲解)