
马上进入求职招聘高峰,总结了一份BAT(阿里、百度、字节跳动、美团等)资深Java相关的面试题合集给到大家。
文末有相关的2021最新BAT资深java面试题答案~用于参考
JVM
- JVM内存模型结构
 - 方法区和直接内存什么时候会oom?
 - JVM收集器G1的内存模型和CMS的内存模型有什么不同?
 - jvm调优用过吗?
 - 如何查看java内存使用情况(jconsole、命令jmap、jstack等等)
集合
 - Arraylist、linkedlist差异,应用场景;
 - HashMap在JDK1.8有哪些改动?
 - HashCurrentMap和HashMap的区别在哪里?
 - Hashmap什么时候使用红黑树?
多线程
 - 线程的几种状态,请画出具体的状态流转图?
 - Java wait、sleep的区别?
 - volatile如何实现指令重排序?
 - 线程池中的阻塞队列如果满了怎么办(拒绝策略)?
 - Synchronized和AQS异同,AQS公平非公平如何实现;
 - 多线程里面对一个整型做加减为啥不能用volatile;
 - voliatile和synchonized有什么区别?synchonized和jdk提供的Lock包又有什么区别?
算法
 - 二叉树宽度遍历
 - 红黑树
 - 数据结构的话,链表,树,图的基本知识得懂
 - 了解树的先序遍历,中序遍历,后序遍历。图的广度优先搜索算法,深度优先搜索算法。
Spring
 - Bean的生命周期;
 - 什么是DI、为什么DI、DI的类型(构造器注入、方法注入);
 - Spring boot和spring的差别,tomcat如何嵌入spring boot的/spring boot中的tomcat是如何启动的;
 - Spring如何解决循环依赖问题;
数据库
 - Join(inner、left、right)的区别?
 - Union和union all区别?
 - ACID,具体是啥意思?
 - 事务隔离级别?
 - 幻读和不可重复读的区别?
 - Mysql和mongodb有啥区别?
计算机网路
 - RPC和http的区别
 - 详细描述TCP四次挥手过程
 - 中间件
 - 秒杀项目会使用到哪些中间件?
 - 为什么Redis是单线程?
 - 如何保证Redis和数据库双写一致?
 - 如何设计一个消息队列中间件?
 - 分库分表后,id主键如何处理?
 - 如何设计一个类似Dubbo的RPC?
 
Redis
- Redis五种基本数据类型的使用场景
 - 缓存穿透、缓存击穿、缓存雪崩
 - Redis的过期策略和内存淘汰机制
 - Redis的zset底层数据结构,为什么用跳跃表而不用红黑树
 
设计模式
- 代理模式(应用:一是创建多线程的方式之使用Runnable接口应用了静态代理;二是Spring AOP应用了动态代理)
 - 适配器模式(应用:一是创建多线程的方式之使用Callable接口;二是SpringMVC中的HandleAdapter)
 - 工厂模式(应用:一是Spring IOC;二是Mybatis中的SqlSessionFactory就用到了简单工厂模式)
 - 单例模式(一般会需要手撕单例模式的代码,主要谈DCL模式关于指令重排的问题,以及反射可以破坏除枚举以外的几种方式;单例模式的应用有:一是Spring Bean的作用域默认就是使用单例模式;二是Mybatis中的ErrorContext类也使用了单例模式,这个类用于记录线程执行环境的错误信息)
 - 装饰器模式(应用:JAVA的IO流就用到了装饰器模式)
 - 装饰器模式和代理模式的区别?
 - 策略模式(应用:Arrays类的sort方法就用到了策略模式,Comparator接口就是一个策略接口,将排序方法定义成一个策略,用户可以自定义排序策略,可以是升序也可以是降序)
 - 观察者模式与发布订阅模式的区别?(JDK源码已经为我们提供好了一套观察者模式,Observer就是观察者接口,Observable类是被观察者,是一个具体类,提供了一个存放所有观察者角色的集合,并且也提供了添加观察者、移除观察者、通知观察者等方法)
 
还有很多面试题我在这里就不一一展示了,需要上述BAT资深Java面试题答案可【点击此处】获取!以下还有一些Java学习笔记以及BAT高频面试题可供参考~


京公网安备 11010502036488号