阿里面经总结(最新)
快手
面经1-一面
开始先是手撕算法两道
- 自我介绍
- 两道手撕 将字符串转化为整数 (这里当时出现溢出值问题,进行了思考解决,写了两种方式)synchronize , 可以使用的几种形式,代码写出
操作系统 和 数据结构
- hash解决冲突 ( 开放定址法、链地址法、再哈希法、建立公共溢出区 )
- 上述四种方式详细的过程、思路
- 链地址法和再哈希法之间的关联和区别
- 两者分别适用场景
- 两者底层的数据结构,关联和区别
- 链表和数组的底层结构设计、关联、区别、应用场景
常用算法
- 常用的排序算法 ( 冒泡、堆、快速、桶、选择、插入 )
- 堆排序和选择排序使用场景上有什么区别
- 选择排序和堆排序对于资源的利用 ( 选择排序适合数据量少的情况、堆排序适合数据量多的情况,资源利用率、设计思路 )
- 常用的查找结构都有什么? ( 二分查找法、插值法、hash查找、分块查找、树表查找 )
数据结构
- b树和b+树和红黑树的设计思路、结构区别、使用区别
- 队列和栈有什么区别
- 他们的使用场景 ( 栈:数据匹配、数据反转;队列:任务队列、共享打印机 )
Jvm
- jvm内存模型
- jvm垃圾回收算法
- jvm垃圾回收器
- cms、g1的设计思路、关联和区别、垃圾回收阶段的不同
- 让你设计系统中进行选择其中一个回收器,你的想法是什么
使用框架、底层原理
- 在你的开发中最常使用的框架
- SpringBoot常用注解
- RestController和Controller有什么区别
- 你在完成项目的过程中是怎么处理异常的 (全局异常梳理)
- 全局拦截器的设计、项目中实现 (注解、类)
- Aop的了解、怎么使用
- Aop底层实现( JDK、CGLib、动态代理实现 )
- asm是什么 (字节码增强器)
给大家分享一个Github仓库,上面有大彬整理的300多本经典的计算机书籍PDF,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~
MySql
- Mysql事务隔离级别
- 什么情况下使用读已提交
- 对于脏读的理解
redis
- 对于redis的理解
- redis在项目中进行怎么样的使用
- redis 为什么读取速度那么块 (io、单线程、内存)
- 为什么redis单线程会快 (完全基于内存、单线程避免不必要的上下文切换、cpu消耗、加锁问题。。。)
- 对于很多文件和数据,怎么进行数据的查找、排序,使用什么样的数据结构 (类似于TopK、这个主要是让你进行优化、类似于位图、hash、过滤器之类的)
- 反问: 对于部门的业务、技术栈对我的建议、和整个面试的感觉
面经1-二面
Java基础
- 自我介绍
- 抽象类和接口有什么区别
- 在使用过程中,接口和抽象类的选择以及使用场景
计网、Linux
- http 和j https 的区别
- https 过程中都使用哪些加密的算法 ( 对称加密、非对称加密 )
- 都怎么使用的,这些j加密算法的理解
- Linux都是用过哪些常用命令 (cat、less、tail、grep、wc....)
- 查看系统内存 ( top )
- 查看系统内存,返回多个指标,怎么查看内存的占用率
- 怎么将系统内存显示的数据进行排序
Java基础加深、线程、锁、数据机构等等
- java里面的类加载器的设计
- 类加载器的类之间的可见性 (委托机制、单一性、可见性)
- 如果父级对子级进行调用,会出现什么异常
- 线程都有哪些状态
- blocking和waiting有什么区别吗
- 如果是sleep(1000) 会让线程进入什么状态
- synchronize的使用流程
- java中的原子类实现原理
- 对CAS的了解
- 对CAS底层了解
- HashMap的底层实现原理
- HashMap的put流程
- ConcurrentHashMap的实现原理
框架Spring,代理
- Spring的Aop的底层实现
- 动态代理的了解 ( 见上面文章 )
- 静态代理和动态代理的区别
- 对动态代理性能的了解
- 浅拷贝和深拷贝的区别
- 手撕 : topK问题 ( 堆、优先队列、快排、冒泡 )
- 大顶堆小顶堆的设计思路
收尾的小问题
- 在实习中最有成就感的项目
- 对抖音和快手的看法
- 反问 业务的具体方向对我的整体感觉和建议
面经1-三面
- 自我介绍
- 介绍一个你最得意的项目
- 介绍一下你的实习经历
- 实习项目中介绍一个你印象最深的需求
- 这个需求的设计、使用的框架详细介绍
- 这个项目的上线效果怎么样的
- 上线需要的什么问题
- 你在实习公司的转正情况
- 还有其他的offer吗
- 你对快手怎么看的
- 面试官主动介绍部门
- 反问 部门的业务、地点 ( 因为之前面试的组hc没了,转到隔壁组,重新问的业务方面 )对我整体面试看法 ( 说的是看我之前面试,聊的挺详细的,面评也不错,等hr )
面经1-HR面试
- 面试官先自我介绍了
- 最近2-3年,挑一个最有代表性的一件事
- 你为什么觉得这件事最有代表性呢
- 在你的整体实习的话,给自己打分你会打几分 、10分制 ( 我打的8分 )
- 你都做了那些事情,让你打的8分
- 那你觉得从那些手段方法提升剩下的2分呢
- 你完成实习之后,有哪些收获呢
- 考虑提前实习吗
- 毕业之后的未来规划
- 之后的定居城市怎么想的
- 还有什么进行的面试流程吗
- 你心中对这些公司的排序 ( 地点、技术、前景 )
- 反问 什么时候出结果对我的整体感觉
面经2-一面
1、聊项目
2、线程的几种状态
3、线程池的状态
4、线程池的运行过程
5、如何合理地配置线程池
6、怎么实现阻塞队列
7、怎么监控线程池的运行状态,答的用一些线程监控的工具,面试官说指代码层面上,只争对线程池,没答上
线程池执行类ThreadPoolExecutor给了相关的API来监控某一个线程池的执行状态,能实时获取线程池当前活动线程数、正在排队线程数、已执行线程数、总线程数等。
ThreadPoolExecutor tpe = ((ThreadPoolExecutor) es); while (true) { System.out.println(); int queueSize = tpe.getQueue().size(); System.out.println("当前排队线程数:" + queueSize); int activeCount = tpe.getActiveCount(); System.out.println("当前活动线程数:" + activeCount); long completedTaskCount = tpe.getCompletedTaskCount(); System.out.println("执行完成线程数:" + completedTaskCount); long taskCount = tpe.getTaskCount(); System.out.println("总线程数:" + taskCount); Thread.sleep(3000); }
8、java中有几种锁
9、锁升级的过程(自旋的缺点,CAS有什么不足)
10、对象头的结构
11、synchronized和ReentrantLock区别
12、ReentrantLock是怎么实现的,讲到AQS,顺便说了AQS
13、还有哪些基于AQS的同步工具
14、volatile作用
15、volatile怎么保证可见性和防止指令重排序
16、mysql的隔离级别
17、事务acid
18、mysql如何保证acid
19、redo log和undo log区别
20、redo log和undo log是如何生成的(这块细节忘了,只说了先写内存,然后再刷盘)
21、介绍几种消息队列
22、说说rabittmq架构(说了分为虚拟机、交换机和队列,然后说了下消息的传递过程,面试官否认了,说这只是应用层面)
23、jvm的内存模型
24、对象什么情况会进去老年代
25、spring ioc aop
26、注解底层怎么实现的(动态代理)
27、注解失效有哪些原因(自己还经历过@Transaction失效的bug的,当时没答上来,被自己气死)
28、bean的加载过程
算法:有序数组生成平衡二叉树,当时已满60分钟,面试官给了5分钟的时间限制,看我思考了一会,问我有没有思路,我说暂时还没,然后就换了一道题
面经2-二面
1、聊项目
2、mysql默认隔离级别
3、如何实现可重复读
4、如何解决幻读
5、间隙锁和nextkey锁
6、mysql锁是锁的什么(索引)
7、mysql的索引结构,有什么优点
8、怎么实现读写分离
9、主从复制是怎么实现同步的,答传bin log文件,后续数据更新怎么同步,答mysq不了解,但我知道redis主从复制后续是通过一个复制缓存区来记录新增的命令,通过发送这些命令实现同步
10、说说redis架构(单线程,io多路复用)
11、redis的底层数据结构知道吗(只知道用到了跳表,然后说了下跳表)
12、缓存穿透和缓存雪崩,解决方法
13、缓存和数据库怎么保证一致性
14、说说threadlocal怎么实现的
15、threadlocalmap中key为啥要用弱引用,key被gc后value怎么办
16、说说四种引用
17、spring事务传播机制
18、spring如何解决循环依赖
19、说说tcp协议
20、tcp如何保证不会接受重复的报文
21、tcp如何保证有序
算法:lc124. 二叉树中的最大路径和
部门:商业化技术部
面经2-三面
- 自我介绍
- Redis 是单线程还是多线程?为什么快?
- IO多路复用和非阻塞IO? IO多路复用提升了什么性能? IO多路复用提升了CPU哪方面的指标
- 线程池使用过吗?线程池的运行原理?
- IO密集型和CPU密集型的区别
- IO密集型的线程数配置过多会对CPU有什么影响?
- Zookeeper 的原理
- 为什么使用Zookeeper
- Zookeeper为什么要主从,选举机制
- MySQL的主从是什么原理
- TCP为什么是可靠的
- 能提前实习吗?
- 未来三到五年的规划?
- 算法题 lc简单题
- 能来提前实习吗?
反问:对应届生的要求。
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~
如果访问不了Github,可以访问*******。
#java##java面经#