1、 Java
1) 常用数据结构
1. HashMap内部的数据结构是什么?HashMap是线程安全的吗?如何得到一个线程安全的map?HashMap在多线程并发插入时为什么会出现死锁情况,在jdk1.8时还存在这个问题吗,如果不存在Java是怎么优化的?HashMap插入一个元素的过程是什么?红黑树在HashMap中的作用是什么,为什么要用红黑树? ---(HashMap在jdk1.8版本做了较大改动,如果能回答1.7与1.8版本的区别面试会加分)
2. ConcurrentHashMap与HashMap的区别是什么?ConcurrentHashMap内部的数据结构是什么样的?ConcurrentHashMap在jdk1.7是怎么实现线程安全的,在jdk1.8又是怎么实现的?ConcurrentHashMap的加锁机制是什么?红黑树在ConcurrentHashMap中的作用是什么,为什么要用红黑树? ---(ConcurrentHashMap在jdk1.8版本做了较大改动,如果能回答1.7与1.8版本的区别面试会加分)
3. ArrayList和LinkedList有什么区别?ArrayList和LinkedList的性能谁更快,分别适用哪种场景?ArrayList和LinkedList内部的数据结构是什么样的?
4. Equals和HashCode方法的关系是什么?
5. threadlocal的实现机制是什么?
6. String为什么要设置为final类型?String的intern方法有什么作用?Intern方法的机制在jdk1.7和1.8有什么区别?
7. CopyOnWriteArrayList的作用是什么?CopyOnWriteArrayList是怎么实现写时复制的?为什么要有写时复制技术?写时复制适用于什么场景?
2) 多线程
1. 你的项目中有哪些地方用到了多线程?为什么要用多线程?怎么解决多线程同步问题?
2. Java中常见的线程池有哪几种?分别适用什么场景?你的项目中用的都是哪一种线程池?
3. 声明一个线程池需要哪几个参数(说出线程池拒绝策略和阻塞队列会加分)?
4. 线程池添加线程的逻辑是什么(主要回答核心线程数、最大线程数和阻塞队列之间的关系,最好是说出常见的各种线程池之间的区别)?
5. 线程与进程的区别是什么?线程之间如何进行通信?进程之间如何进行通信?(当时进程如何通信我也没有答出来)
6. 形成死锁的条件是什么(四个条件:请求与保持、互斥、不可剥夺,循环等待)?
7. CountDownLatch的作用是什么?是如何实现的?与CyclicBarrier的区别是什么?CountDownLatch和CyclicBarrier分别适用于哪种场景?CyclicBarrier是如何实现的?
8. Volatile作用是什么?是如何实现的?什么是缓存一致性协议?缓存一致性协议的作用是什么?为什么要用缓存一致性协议?
9. Synchronized作用于方法、代码块、静态方法时的区别是什么?Synchronized是如何实现的?Synchronized与ReentrantLock的区别是什么?ReentrantLock是如何实现的?Synchronized与ReentrantLock适用的场景分别是什么?
10. AQS是什么(中文名和英文全称最好都记住)?AQS的作用是什么?AQS是如何实现的?有哪些地方用到了AQS(ReentrantLock就是通过调用AQS来实现的)?
11. 自旋锁/偏向锁/轻量级锁/重量级锁的机制分别是什么?Synchronized与ReentrantLock属于什么类型的锁?
12. CAS是什么意思?为什么要用CAS?
3) Jvm
1. Jvm的内存模型是什么?
2. 方法区里面存的是什么数据?方法区和永久代之间是什么关系?垃圾回收时方法区里面的什么数据会被回收?你的项目的永久代有多大?
3. 元空间和永久代的关系是什么?元空间和永久代有什么区别?
4. 常用的jvm启动参数是什么?
5. 运行时常量池存放在jvm的哪个区域,在jdk1.7之前、jdk1.7和1.8时分别存在哪个区域?(在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区。在JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区。在JDK1.8 hotspot移除了永久代用元空间(Metaspace)取而代之, 这时候字符串常量池还在堆, 运行时常量池还在方法区)
6. 堆和栈的区别是什么?堆和栈分别存放什么数据?
7. 类加载的过程是什么?类加载器分哪几种?什么是双亲委派模型?为什么要用双亲委派模型?什么情况会破坏双亲委派模型?
4) 垃圾回收
1. Java中垃圾回收是什么?为什么要有垃圾回收?垃圾回收是指回收什么数据?
2. 常见的垃圾回收算法有哪些?分别是怎么进行回收的?各种垃圾回收算法适用于哪些场景?
3. 标记清除算法的缺点是什么(要答出内存碎片)?
4. 标记整理算法的整理逻辑有哪些?
5. 如何查看GC日志?
6. 如何判断哪些数据可以被回收?根可达性分析算法是怎么分析的?
7. 常见的垃圾回收器有哪些(CMS和G1收集器重点了解下)?每种回收器分别使用哪种算法?新生代和老年代分别使用什么回收器?你的项目中用的是什么垃圾回收器?为什么要用这个回收器?
8. 和垃圾回收相关的常见jvm参数有哪些?
9. 有垃圾回收机制的存在为什么还会出现内存泄漏?出现了内存泄漏该怎么排查(重点讲述定位的思路和过程,最好结合实际案例来讲)?
10. 内存泄漏和内存溢出的关系是什么?
5) NIO
1. NIO是什么?BIO、NIO、AIO有什么区别?为什么要用NIO?
2. 常见的几种IO模型有哪几种?分别适用哪些场景?
3. NIO是如何提升性能的(可以看下Linux的select/poll/epoll)?
4. Java NIO中包含哪几个模块(Channel、Buffer、Selector等)
5. Reactor和Proactor这两种IO模式有什么区别(在Reactor模式中,会先对每个client注册感兴趣的事件,然后有一个线程专门去轮询每个client是否有事件发生,当有事件发生时,便顺序处理每个事件,当所有事件处理完之后,便再转去继续轮询,多路复用IO就是采用Reactor模式。 在Proactor模式中,当检测到有事件发生时,会新起一个异步操作,然后交由内核线程去处理,当内核线程完成IO操作之后,发送一个通知告知操作已完成,异步IO模型采用的就是Proactor模式。 )?
6. Netty 中几个重要的对象是什么,它们之间的关系是什么?
7. Netty 的线程模型是什么?
8. 什么是粘包与半包问题?粘包与半包为何会出现?如何避免粘包与半包问题?
6) 设计模式
1. 常见的设计模式有哪些(动态代理模式是重点)?
2. 单例模式有哪几种实现(主要分为饿汉式和懒汉式,可以上网多了解一下)?
3. 六大设计原则是什么(开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则)?
7) 其他
1. 让你实现一个连接池你会怎么做?
2. Java中四种引用的区别是什么(强引用/弱引用/软引用/虚引用)?有哪些类用到了出强引用之外的其他三种引用(可以看下ThreadLocal类)?
3. 一致性哈希算法?
2、 框架
1) Spring
1. 为什么要用Spring框架?
2. SpringMVC/SpringBoot/SpringCloud的区别与联系?
3. Spring的IOC、AOP分别是什么意思?为什么要用IOC、AOP?
4. IOC容器里的bean是单例的吗?
5. AOP是如何实现的(要答出jdk动态代理和cglib动态代理以及这两者的区别)?
6. Spring事务的种类(编程式事务管理和声明式事务管理)?
7. Spring事务传播机制?
8. Spring事务管理器的实现原理?
9. Spring用到了哪些设计模式?
10. spring常用的注解?注解是如何实现的(可以用@Autowired 注解来讲解)?
11. Spring支持哪几种bean的作用域?
12. Spring Bean的生命周期?
2) Mybatis
1. Mybatis的优缺点?
2. Mybatis一级/二级缓存?你的项目中是否使用了一级/二级缓存?
3. 什么是MyBatis的接口绑定?有哪些实现方式?
4. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
5. Mybatis都有哪些Executor执行器?它们之间的区别是什么?
6. Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理?
7. Mybatis中的#和$的区别?
8. 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别是什么?
3) RPC
1. RPC是什么,与一般的http有什么区别?
2. RPC框架主要包含哪几个部分?
3. 一次RPC调用的过程是什么(讲一次完整RPC调用的流程)?
4. 常用的负载均衡算法有哪些?Dubbo的集群容错方案有哪些?
3、 第三方开源组件
1) Zookeeper
1. 在CAP理论中,Zookeeper实现了哪两个?
2. Zookeeper如何进行主从选举(选举期间Zookeeper集群不对外提供服务)?
3. ZAB协议?
4. Zookeeper分布式锁与Redis分布式锁/数据库分布式锁的区别?
5. Zookeeper怎么进行一次主从同步?
6. Observer和Follower的区别是什么?
7. Zookeeper完成一次写操作的完整流程?
8. Zookeeper数据持久化?事务日志和快照的关系是什么?
9. Zookeeper处理请求时,是先持久化事务日志还是先将请求应用到DataTree?
2) Redis
1. Redis有哪几种常用的数据类型?
2. Redis的持久化机制(RDB和AOP)?RDB和AOP分别是如何进行持久化的?(aof文件比rdb更新频率高,优先使用aof还原数据。aof比rdb更安全也更大。rdb性能比aof好,如果两个都配了优先加载AOF)
3. Redis有哪几种集群模式(主从模式、哨兵模式、Redis Cluster)?Redis Cluster和哨兵模式有什么区别
4. Jedis客户端分片是如何实现的?与Redis Cluster的服务端分片有什么区别?
5. Redis线程模型?Redis的单线程是指什么?
6. redis的过期策略以及内存淘汰机制是什么(redis采用的是定期删除+惰性删除策略)?
7. 为什么Redis的操作是原子性的,怎么保证原子性的?
8. 什么是缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级?
9. 在更新数据时如何保证缓存与数据库一致(一般来说采用先更新数据库再更新缓存的策略,还有延时双删等策略,可以上网查询)?
4、 数据库
1) Mysql
1. Mysql的索引分为哪几种?聚簇索引和非聚簇索引的区别是什么?
2. 聚簇索引是用什么数据结构存储的(B+树)?为什么要采用B+树存储,有什么好处?B+树和B树有什么区别?
3. 数据库中如何实现乐观锁和悲观锁?
4. Mysql的innodb引擎和myisam引擎有什么区别?
5. Innodb引擎有哪几种事务隔离级别,默认的是哪一种?
6. 脏读、幻读、不可重复读分别是什么意思?哪种隔离级别可以分别解决脏读、幻读、不可重复读?
7. 常见的几种数据库锁有哪几种(共享锁、排它锁、间隙锁等)?
8. Mysql里面的MVCC协议是什么?
9. Mysql集群如何进行一次主从同步?
10. 一张表的数据非常大,需要查询其中一部分数据时性能特别慢,怎么样才能查询的更快?
11. 有一条sql执行非常慢,如何进行优化(重点讲优化的思路)?
12. 现在有一张订单表,数据量很大,如果要从供应商的角度查询数据如何进行查询,从用户的角度查询数据如何进行查询?(数据库主从分离,在从库建立供应商/用户/产品/时间等多维度的索引,进行统计查询时请求从库)
5、 分布式
1) 分布式
1. 熔断与降级的区别?为什么需要熔断与降级?
2. 分布式锁有几种实现方式?
3. CAP理论?
6、 项目与个人
1) 个人
1. 你平时会关注什么技术?
2. 你平时会怎么提升自己?有具体的规划吗?
3. 你有什么职业规划?未来准备往哪个方向发展?
4. 你对我们公司了解吗?你知道你面试的岗位是做什么的吗?你觉得我们的岗位符合你的职业规划吗?
5. 你对996怎么看?
2) 项目
1. 项目中你负责哪一块?画一下架构图?
2. 在项目中你遇到了最难解决的问题是什么?
3. 项目中遇到了什么问题?怎么解决的?
4. 项目为什么要这么设计,有没有可以优化的地方?为什么要这么优化?
5. 你觉得你在这个项目里学到了什么东西?
6. 如果让你来设计这个项目,你会怎么设计?
7、 总结
1) 阿里
1. 阿里有四轮面试,三轮技术面加一轮HR面,一面更多的关注Java基础,二面三面除了Java基础还会问项目相关,准备的时候要更多关注一些原理级的东西,比如Java各种数据结构/jvm/垃圾回收等。
2. HR面要表现得积极向上,能接受加班,愿意吃苦。有时候HR会给予一定的压力,有点压力面的意思,这个时候需要给出积极地答案。
3. 同样问题的答案要相同,千万不能出现一面和HR面时答案不一样的情况(至关重要)。
4. 即使面试不通过也没关系,还可以面阿里其他部门,关键心态要好。
有需要内推的小伙伴,可以联系我微信liu522377005
全部评论
(4) 回帖