百度 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有相关讲解)
总结
大厂八股这块必须安排明白,面试不管实习校招主要问这些基础知识,一般面试官会顺着你的回答继续延伸,所以大家回答的时候慎说一些不太清楚的东西,基本等于给自己挖坑。。。
面试官相当好,会对回答反馈,整个过程相当流利,不过看上海 HC 就 10 个。。。呜呜呜 许愿二面吧
#百度##校招##面经##Java工程师#