95后小伙费时半个月成功拿下阿里offer,分享一下面试经历

前言

首先想给所有程序员一点建议:在日常工作中,万万不要仅局限于自己手头上的工作,因为自己负责的工作内容可能只是某系统上的“冰山一角”,这个系统是前辈们留下的财富,我们要学会怎么去利用它。这个时候,就需要我们站得高一些,看得远一点,去了解这个系统的整个经脉,揣测当初它设计的“Why?How?”,换做自己应该会怎么做,这样或许你将会离架构师更近一步。

一面+二面

1.做个自我介绍吧。

2.你平时是怎么学习技术的呢?

3.看你的项目,咱们聊聊分布式吧。

4.raft 的缺点,怎么解决?

5.你了解哪些一致性协议?

6.zab 和 raft 比较一下?zab 设置 observer 的好处,坏处?

7.multi-raft 谈一下?

8.cap 了解吗?为什么不能都保证?raft 保证了什么?

9.gossip 了解吗?redis 集群是怎么做到一致性的?

10.有哪些场景需要保证强一致性,有哪些场景需要保证最终一致性?

11.为什么有些场景需要保证可用性?

12.hbase 了解吗?

13.netty 的性能为什么好?pb 的序列化协议为什么性能好?

14.零拷贝讲一下?

15.select 和 epoll 的区别?

16.命令模式了解吗?给我讲一下?

17.代理模式讲一下?应用场景?aop 的实现为什么要用动态代理?

18.raft 的 leader 选举过程?

19.raft 的日志复制过程?

20.日志复制如果使用 follower 来接收日志,leader 崩掉,日志不一致的情况,

怎么设计日志复制功能。

21.es 的前缀查询了解吗?

22.怎么实现一个前缀查询?

23.前缀树存中文的问题?怎么解决?

24.做一道题吧:

一个一维数组,全是0 和 1,找最长的 1 子数组。

拓展一下:一个二维数组,找最大的1 的矩阵 。

  1. 线程池、参数详解?你怎么设置参数(I/O 密集型、计算密集型)

26.JVM 内存区域

27.如何排查一下线上 OOM 问题?

28.类加载机制?

29.双亲委派?tomcat 如何打破的

30.你最近读什么书吗?

31.你有什么想问我的吗?

因为好久不刷题,题没写出来,挂在这里了,还是要多刷题。最后祝大家早日上岸,offer 多多。

三面+四面

1.算法题,求数组中位数。

A:使用快排,partition() 返回当前排序索引,如果等于数组长度的一半就能

提前返回。

不过时间复杂度说错了。。其实应该是N,后来面试官帮忙纠错还认真解释,点

赞嗷

2.算法实现用到了重载,重载和重写有什么区别?

A:重写用于多态实现,多态分抽象多态和接口多态,涉及到字节码

invokevirtual this # 和方法表,抽象多态方法解析时调用相同偏移

量的方法代码

接口多态线扫一次寻找对应方法代码。重载用于相同类方法调用跳转。

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 有相关讲解)

我的面试经验汇总

下面先给大家上一个总的目录大纲,基础的东西就不进行过多的赘述,我们将会从面试必问的说起,同时由于每篇的内容过多,我们也只说重点,太过基础的内容谁都会,我就不多敲字浪费大家的时间了!
有需要的朋友点击这里自取就好了,希望资料对你有帮助!

SpringCloud

Redis

JVM

MySQL

Zookeeper

Kafka

Dubbo

spring

Rabbitmq

springboot

最后

由于文章篇幅有限,PDF的内容又很多,全部手敲下来很累…所以需要阅读阅读学习的,大家“一件三连后:“查看下方””即可拿到手之后自己学习吧,博主真的打字打累了。

有需要的朋友点击这里自取就好了,希望资料对你有帮助!
预祝大家前程似锦,工作顺利!

你可能感兴趣的:(java,程序员,面试专题,多态,java,编程语言,面试,spring)