前言
前段时间有幸被阿里的一位同学内推,参加了阿里巴巴Java岗位的面试,本人21年双非本科软件工程专业,目前有一年半的工作经验,面试前就职于一家外包公司。如果在自己本人拿到offer之前,如果有人告诉我一年工作经验可以直接从外包进阿里,我肯定是不信。但是真的发生在自己身上,真的觉得非常非常幸运与不可思议。
Alibaba的这次面试总共有五面,包括:
- 第一轮电话面试(同事面):将近1h20min,主要是介绍项目与基础知识
- 第二轮视频面试(组长面):将近1h,同样也是介绍项目与基础知识
- 第三轮视频面试(主管面):将近40min,更深次的项目以及分布式的解决方案
- 第四轮视频面试(主管面):将近1h,项目介绍以及基础知识,也会问你的职业规划
- 第五轮视频面试(HR):将近30min,离职原因和薪资问题
第一轮电话面试(同事面)
- HashMap和HashTable以及CocurrentHashMap详细说明
- 网络IO模型?什么是多路复用IO?select和epoll的差别?
- TCP三次握手的过程,如果没有第三次握手有什么问题?
- 常用的线程池有哪些?各自的应用场景?
- Java类加载机制?双亲委派模型的好处?
- JAVA并发包组件了解多少?
- 什么时候多线程会发生死锁?怎么来预防
- 操作系统的用户态和核心态切换条件以及为什么要切换
- 数据库事务特点?事务隔离级别?项目中的事务实现?脏读、不可重复读、幻读各举个例子?
第二轮视频面试(组长面)
- 数据库索引?B+树?为什么要建索引?什么样的字段需要建索引,建索引的时候一般考虑什么?索引会不会使插入、删除操作效率变低,怎么解决(分表分库作)?
- 设计模式,单例模式,怎么保证线程安全?锁效率太低,怎么提高效率?
- CAS?CAS本质是什么?什么是原子性?Compare and Swap两步操作,为什么能保证原子性(涉及到CPU指令)?
- 分布式锁的实现知道到哪些?你更推荐哪一种锁?
- Redis的持久化操作有哪些?