吃透 Java 基础面试八股文
给大家分享我整理的 Java 高频面试题,有小伙伴靠他拿到字节 offer 了。
Java 基础面试题
[Java 的特点]
[Java 与 C++ 的区别]
[JDK/JRE/JVM 三者的关系]
[Java 程序是编译执行还是解释执行?]
[面向对象和面向过程的区别?]
[面向对象有哪些特性?]
[数组到底是不是对象?]
[Java 的基本数据类型有哪些?]
[为什么不能用浮点型表示金额?]
[什么是值传递和引用传递?]
[了解 Java 的包装类型吗?为什么需要包装类?]
[自动装箱和拆箱]
[String 为什么不可变?]
[为何 JDK9 要将 String 的底层实现由 char[]改成 byte[]?]
[String, StringBuffer 和 StringBuilder 区别]
[什么是 StringJoiner?]
[String 类的常用方法有哪些?]
[new String()会创建几个对象?]
[什么是字符串常量池?]
[String 最大长度是多少?]
[Object 常用方法有哪些?]
[讲讲深拷贝和浅拷贝?]
[两个对象的 hashCode()相同,则 equals()是否也一定为 true?]
[Java 创建对象有几种方式?]
[说说类实例化的顺序]
[equals 和==有什么区别?]
[常见的关键字有哪些?]
[final, finally, finalize 的区别]
[final 关键字的作用?]
[方法重载和重写的区别?]
[接口与抽象类区别?]
[常见的 Exception 有哪些?]
[Error 和 Exception 的区别?]
[运行时异常和非运行时异常(checked)的区别?]
[throw 和 throws 的区别?]
[通过故事讲清楚 NIO]
[BIO/NIO/AIO 区别的区别?]
[守护线程是什么?]
[Java 支持多继承吗?]
[如何实现对象克隆?]
[同步和异步的区别?]
[阻塞和非阻塞的区别?]
[Java8 的新特性有哪些?]
[序列化和反序列化]
[什么时候需要用到序列化和反序列化呢?]
[实现序列化和反序列化为什么要实现 Serializable 接口?]
[实现 Serializable 接口之后,为什么还要显示指定 serialVersionUID 的值?]
[static 属性为什么不会被序列化?]
[transient 关键字的作用?]
[什么是反射?]
[反射有哪些应用场景呢?]
[讲讲什么是泛型?]
[如何停止一个正在运行的线程?]
[什么是跨域?]
[跨域问题怎么解决呢?]
PS:双击屏幕可以点赞收藏,记得帮我点个赞哦~
Java 集合面试题
[常见的集合有哪些?]
[List 、Set 和 Map 的区别]
[ArrayList 了解吗?]
[ArrayList 的扩容机制?]
[怎么在遍历 ArrayList 时移除一个元素?]
[Arraylist 和 Vector 的区别]
[Arraylist 与 LinkedList 的区别]
[解决 hash 冲突的办法有哪些?HashMap 用的哪种?]
[使用的 hash 算法?]
[为什么建议设置 HashMap 的容量?]
[扩容过程?]
[put 方法流程?]
[红黑树的特点?]
[在解决 hash 冲突的时候,为什么选择先用链表,再转红黑树?]
[HashMap 的长度为什么是 2 的幂次方?]
[HashMap 默认加载因子是多少?为什么是 0.75?]
[一般用什么作为 HashMap 的 key?]
[HashMap 为什么线程不安全?]
[HashMap 和 HashTable 的区别?]
[LinkedHashMap 底层原理?]
[讲一下 TreeMap?]
[HashSet 底层原理?]
[HashSet、LinkedHashSet 和 TreeSet 的区别?]
[什么是 fail fast?]
[什么是 fail safe?]
[讲一下 ArrayDeque?]
[哪些集合类是线程安全的?哪些不安全?]
[迭代器 Iterator 是什么?]
[Iterator 和 ListIterator 有什么区别?]
[如何让一个集合不能被修改?]
[并发容器]
[ConcurrentHashMap]
[put 执行流程?]
[怎么扩容?]
[ConcurrentHashMap 和 Hashtable 的区别?]
[CopyOnWrite]
[CopyOnWriteArrayList]
[ConcurrentLinkedQueue]
[阻塞队列]
[JDK 提供的阻塞队列]
[原理]
分享一份大彬精心整理的大厂面试手册,包含计算机基础、Java 基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等高频面试题,非常实用,有小伙伴靠着这份手册拿过字节 offer【领取/点击】


Java 并发面试题
[为什么平时都是使用线程池创建线程,直接 new 一个线程不好吗?]
[为什么使用线程池?]
[线程池执行原理?]
[线程池参数有哪些?]
[线程池大小怎么设置?]
[线程池的类型有哪些?适用场景?]
[进程线程]
[线程的生命周期]
[讲讲线程中断?]
[创建线程有哪几种方式?]
[什么是线程死锁?]
[线程死锁怎么产生?怎么避免?]
[线程 run 和 start 的区别?]
[线程都有哪些方法?]
[volatile 底层原理]
[synchronized 的用法有哪些?]
[synchronized 的作用有哪些?]
[synchronized 底层实现原理?]
[volatile 和 synchronized 的区别是什么?]
[ReentrantLock 和 synchronized 区别]
[wait()和 sleep()的异同点?]
[Runnable 和 Callable 有什么区别?]
[线程执行顺序怎么控制?]
[守护线程是什么?]
[线程间通信方式]
[ThreadLocal]
[ThreadLocal 原理]
[ThreadLocal 内存泄漏的原因?]
[ThreadLocal 使用场景有哪些?]
[AQS 原理]
[ReentrantLock 是如何实现可重入性的?]
[锁的分类]
[公平锁与非公平锁]
[共享式与独占式锁]
[悲观锁与乐观锁]
[乐观锁有什么问题?]
[什么是 CAS?]
[CAS 存在的问题?]
[并发工具]
[CountDownLatch]
[CyclicBarrier]
[CyclicBarrier 和 CountDownLatch 区别]
[Semaphore]
[原子类]
[基本类型原子类]
[数组类型原子类]
[引用类型原子类]
[为什么要使用 Executor 线程池框架呢?]
[如何停止一个正在运行的线程?]
[什么是 Daemon 线程?]
[SynchronizedMap 和 ConcurrentHashMap 有什么区别?]
[怎么判断线程池的任务是不是执行完了?]
JVM 面试题
[什么是 JVM?]
[讲一下 JVM 内存结构?]
[Java 对象的定位方式]
[说一下堆栈的区别?]
[什么情况下会发生栈溢出?]
[类文件结构]
[什么是类加载?类加载的过程?]
[什么是双亲委派模型?]
[为什么需要双亲委派模型?]
[什么是类加载器,类加载器有哪些?]
[类的实例化顺序?]
[如何判断一个对象是否存活?]
[可作为 GC Roots 的对象有哪些?]
[什么情况下类会被卸载?]
[强引用、软引用、弱引用、虚引用是什么,有什么区别?]
[GC 是什么?为什么要 GC?]
[Minor GC 和 Full GC 的区别?]
[内存的分配策略?]
[Full GC 的触发条件?]
[垃圾回收算法有哪些?]
[有哪些垃圾回收器?]
[常用的 JVM 调优的命令都有哪些?]
[对象头了解吗?]
[Object o = new Object()占用多少个字节?]
[main 方法执行过程]
[对象创建过程]
[如何排查 OOM 的问题?]
[什么是内存溢出和内存泄露?]
MySQL 面试题
[事务的四大特性?]
[数据库的三大范式]
[事务隔离级别有哪些?]
[生产环境数据库一般用的什么隔离级别呢?]
[编码和字符集的关系]
[utf8 和 utf8mb4 的区别]
[什么是索引?]
[索引的优缺点?]
[索引的作用?]
[什么情况下需要建索引?]
[什么情况下不建索引?]
[索引的数据结构]
[Hash 索引和 B+树索引的区别?]
[为什么 B+树比 B 树更适合实现数据库索引?]
[索引有什么分类?]
[什么是最左匹配原则?]
[什么是聚集索引?]
[什么是覆盖索引?]
[索引的设计原则?]
[索引什么时候会失效?]
[什么是前缀索引?]
[索引下推]
[常见的存储引擎有哪些?]
[MyISAM 和 InnoDB 的区别?]
[MySQL 有哪些锁?]
[MVCC 实现原理?]
[快照读和当前读]
[共享锁和排他锁]
[bin log/redo log/undo log]
[bin log 和 redo log 有什么区别?]
[讲一下 MySQL 架构?]
[分库分表]
[什么是分区表?]
[分区表类型]
[分区的问题?]
[查询语句执行流程?]
[更新语句执行过程?]
[exist 和 in 的区别?]
[MySQL 中 int()和 char()的区别?]
[truncate、delete 与 drop 区别?]
[having 和 where 区别?]
[什么是 MySQL 主从同步?]
[为什么要做主从同步?]
[乐观锁和悲观锁是什么?]
[用过 processlist 吗?]
[MySQL 查询 limit 1000,10 和 limit 10 速度一样快吗?]
[深分页怎么优化?]
[高度为 3 的 B+树,可以存放多少数据?]
[MySQL 单表多大进行分库分表?]
[大表查询慢怎么优化?]
[说说 count()、count()和 count()的区别]
[MySQL 中 DATETIME 和 TIMESTAMP 有什么区别?]
[说说为什么不建议用外键?]
[使用自增主键有什么好处?]
[自增主键保存在什么地方?]
[自增主键一定是连续的吗?]
[InnoDB 的自增值为什么不能回收利用?]
[MySQL 数据如何同步到 Redis 缓存?]
Redis 面试题
[Redis 是什么?]
[Redis 优缺点?]
[Redis 为什么这么快?]
[讲讲 Redis 的线程模型?]
[Redis 应用场景有哪些?]
[Memcached 和 Redis 的区别?]
[为什么要用 Redis 而不用 map/guava 做缓存?]
[Redis 数据类型有哪些?]
[SortedSet 和 List 异同点?]
[Redis 的内存用完了会怎样?]
[Redis 如何做内存优化?]
[keys 命令存在的问题?]
[Redis 事务]
[Redis 事务支持隔离性吗?]
[Redis 事务保证原子性吗,支持回滚吗?]
[持久化机制]
[RDB 和 AOF 如何选择?]
[Redis 有哪些部署方案?]
[主从架构]
[哨兵 Sentinel]
[Redis cluster]
[过期键的删除策略?]
[内存淘汰策略有哪些?]
[如何保证缓存与数据库双写时的数据一致性?]
[缓存穿透]
[缓存雪崩]
[缓存击穿]
[缓存预热]
[缓存降级]
[Redis 怎么实现消息队列?]
[Redis 怎么实现延时队列]
[pipeline 的作用?]
[LUA 脚本]
[什么是 RedLock?]
[Redis 大 key 怎么处理?]
[Redis 常见性能问题和解决方案?]
[说说为什么 Redis 过期了为什么内存没释放?]
[Redis 突然变慢,有哪些原因?]
[为什么 Redis 集群的最大槽数是 16384 个?]
RabbitMQ 面试题
[什么是 RabbitMQ?]
[RabbitMQ 的组件]
[什么时候使用 MQ]
[RabbitMQ 的优缺点]
[RabbitMQ 有哪些重要的角色?]
[Exchange 类型]
[消息丢失]
[生产者确认机制]
[路由不可达消息]
[消费者手动消息确认]
[持久化]
[镜像队列]
[消息重复消费怎么处理?]
[消费端怎么进行限流?]
[什么是死信队列?]
[说说 pull 模式]
[怎么设置消息的过期时间?]
Kafka 面试题
[Kafka 都有哪些特点?]
[请简述下你在哪些场景下会选择 Kafka?]
[Kafka 的设计架构你知道吗?]
[Kafka 分区的目的?]
[你知道 Kafka 是如何做到消息的有序性?]
[Kafka Producer 的执行过程?]
[讲一下你使用 Kafka Consumer 消费消息时的线程模型,为何如此设计?]
[请谈一谈 Kafka 数据一致性原理]
[ISR、OSR、AR 是什么?]
[LEO、HW、LSO、LW 等分别代表什么]
[数据传输的事务有几种?]
[Kafka 消费者是否可以消费指定分区消息?]
[Kafka 消息是采用 Pull 模式,还是 Push 模式?]
[Kafka 高效文件存储设计特点]
[Kafka 创建 Topic 时如何将分区放置到不同的 Broker 中]
[谈一谈 Kafka 的再均衡]
[Kafka 是如何实现高吞吐率的?]
[Kafka 缺点?]
[Kafka 新旧消费者的区别]
[Kafka 分区数可以增加或减少吗?为什么?]
Spring 面试题
[Spring 的优点]
[Spring 用到了哪些设计模式?]
[什么是 AOP?]
[AOP 有哪些实现方式?]
[Spring AOP 的实现原理]
[JDK 动态代理和 CGLIB 动态代理的区别?]
[Spring AOP 相关术语]
[Spring 通知有哪些类型?]
[什么是 IOC?]
[IOC 的好处?]
[什么是依赖注入?]
[IOC 容器初始化过程?]
[Bean 的生命周期]
[BeanFactory 和 FactoryBean 的区别?]
[BeanFactory 和 ApplicationContext 有什么区别?]
[Bean 注入容器有哪些方式?]
[Bean 的作用域]
[Spring 自动装配的方式有哪些?]
[@Autowired 和 @Resource 的区别?]
[@Qualifier 注解有什么作用]
[@Bean 和 @Component 有什么区别?]
[@Component、@Controller、@Repositor 和 @Service 的区别?]
[Spring 事务实现方式有哪些?]
[有哪些事务传播行为?]
[Spring 事务在什么情况下会失效?]
[Spring 怎么解决循环依赖的问题?]
[Spring 启动过程]
[Spring 的单例 Bean 是否有并发安全问题?]
[Spring Bean 如何保证并发安全?]
[@Async 注解的原理]
SpringMVC 面试题
[说说你对 SpringMVC 的理解]
[什么是 MVC 模式?]
[SpringMVC 有哪些优点?]
[Spring MVC 和 Struts 的区别]
[Spring MVC 的工作原理]
[Spring MVC 的主要组件?]
[Spring MVC 的常用注解由有哪些?]
[@Controller 注解有什么用?]
[@RequestMapping 注解有什么用?]
[@RestController 和 @Controller 有什么区别?]
[@RequestMapping 和 @GetMapping 注解有什么不同?]
[@RequestParam 和 @PathVariable 两个注解的区别]
[@RequestBody 和 @RequestParam 的区别]
[Spring MVC 的异常处理]
[SpringMVC 用什么对象从后台向前台传递数据的?]
[SpringMvc 的 Controller 是不是单例模式?]
[介绍下 Spring MVC 拦截器?]
[SpringMvc 怎么配置拦截器?]
[Spring MVC 的拦截器和 Filter 过滤器有什么差别?]
[什么是 REST?]
[使用 REST 有什么优势呢?]
操作系统面试题
[操作系统的四个特性?]
[进程线程]
[并发和并行]
[多线程相较单线程的好处]
[什么是协程?]
[线程和协程有什么区别呢?]
[进程通信]
[什么是死锁?]
[死锁怎么产生?怎么避免?]
[进程调度策略有哪几种?]
[进程有哪些状态?]
[操作系统里的内存碎片怎么理解?]
[虚拟内存]
[什么是分页?]
[什么是分段?]
[分页和分段有什区别?]
[页面置换算法]
[用户态和内核态]
[为什么要有这两种状态?]
[什么时候转换]
[什么是缓冲区溢出?有什么危害?]
[IO 多路复用]
计算机网络面试题
[网络分层结构]
[三次握手]
[两次握手可以吗?]
[四次挥手]
[第四次挥手为什么要等待 2MSL?]
[为什么是四次挥手?]
[TCP 有哪些特点?]
[说说 TCP 报文首部有哪些字段,其作用又分别是什么?]
[TCP 和 UDP 的区别?]
[TCP 和 UDP 分别对应的常见应用层协议有哪些?]
[TCP 的粘包和拆包]
[说说 TCP 是如何确保可靠性的呢?]
[说下 TCP 的滑动窗口机制]
[详细讲一下拥塞控制?]
[HTTP 协议的特点?]
[HTTP 报文格式]
[HTTP 状态码有哪些?]
[HTTP 协议包括哪些请求?]
[HTTP 状态码 301 和 302 的区别?]
[URI 和 URL 的区别]
[POST 和 GET 的区别?]
[如何理解 HTTP 协议是无状态的]
[HTTP 长连接和短连接?]
[HTTP 如何实现长连接?]
[HTTP 长连接在什么时候会超时?]
[HTTP1.1 和 HTTP2.0 的区别?]
[HTTPS 与 HTTP 的区别?]
[什么是数字证书?]
[HTTPS 原理]
[DNS 的解析过程?]
[浏览器中输入 URL 返回页面过程?]
[什么是 cookie 和 session?]
[cookie 和 session 的区别?]
[什么是对称加密和非对称加密?]
[说说 WebSocket 与 socket 的区别]
[ARP 协议的工作过程?]
[ICMP 协议的功能]
[什么是 DoS、DDoS、DRDoS 攻击?]
[什么是 CSRF 攻击,如何避免]
[什么是 XSS 攻击?]
[如何解决 XSS 攻击问题?]
[防盗链]
[说下 ping 的原理]
Mybatis 面试题
[Mybatis 是什么?]
**[ORM 是什么]
[Mybatis 和 Hibernate 的区别?]
[MyBatis 框架的优缺点及其适用的场合]
[Mybatis 的工作原理]
[Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?]
[MyBatis 中接口绑定有几种实现方式?]
[Mybatis 是如何进行分页的?]
[分页插件的基本原理是什么?]
[简述 Mybatis 的插件运行原理]
[.如何编写一个插件?]
[.Mybatis 是否支持延迟加载?]
[延迟加载的基本原理是什么?]
[#{}和 ${}的区别是什么?]
[Mybatis 的预编译]
SpringBoot 面试题
[Springboot 的优点]
[SpringBoot 中的 starter 到底是什么 ?]
[运行 SpringBoot 有哪几种方式?]
[SpringBoot 常用的 Starter 有哪些?]
[Spring Boot 的核心注解是哪个?]
[自动配置原理]
[实现自动配置]
[@Value 注解的原理]
[Spring Boot 需要独立的容器运行吗?]
[Spring Boot 支持哪些日志框架?]
[YAML 配置的优势在哪里 ?]
[什么是 Spring Profiles?]
[SpringBoot 多数据源事务如何管理]
[spring-boot-starter-parent 有什么用 ?]
[Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?]
[SpringBoot 多数据源拆分的思路]
微服务面试题
[什么是微服务?]
[分布式和微服务的区别]
[服务怎么划分?]
[微服务设计原则]
[微服务之间是如何通讯的?]
[熔断器]
[服务网关]
[何为网关?]
[何为 API 网关]
[服务配置统一管理]
[服务链路追踪]
[微服务框架]
[Spring Cloud 基础知识]
最后给大家分享一本谷歌大佬撰写的算法手册,整整 300 道 LeetCode 题目,并且都是最优解,非常强!这本手册帮助不少朋友加入大厂,大家加油!


评论