一天吃透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的区别
  • HashMap
  • 解决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提供的阻塞队列
  • 原理

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~

Github地址:https://github.com/Tyson0314/Java-learning

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基础知识

最后给大家分享一个Github仓库,上面有大彬整理的300多本经典的计算机书籍PDF,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~

一天吃透Java面试题_第1张图片

一天吃透Java面试题_第2张图片

Github地址

如果访问不了Github,可以访问码云地址。

码云地址

你可能感兴趣的:(java,面试,java,开发语言)