Java 面试题

📚Java 基础

📃面向对象三大特征

📃重载和重写的区别

📃String,StringBuffer,StringBuilder的区别

📃final,finally,finalize的区别

📃==和equals的区别

📃接口和抽象类的区别

📃什么是强引用 、软引用、 弱引用、虚引用

📃字符型常量和字符串常量的区别

📃wait和sleep的区别

📃异常分类以及处理机制

📃自动装箱与拆箱

📃成员变量与局部变量的区别有哪些?

📃构造方法有哪些特性?

📃介绍hashCode 与 equals方法

📃为什么Java中只有值传递

📃Java序列化中如何让某些字段不进行序列化

📃既然有了字节流,为什么还要有字符流

📃BIO,NIO,AIO 的区别

📃深拷贝和浅拷贝

📃cloneable接口实现原理

📃Java反射


📚Java 集合

📃数组在内存中如何分配

📃Arrays.sort 实现原理和 Collection 实现原理

📃List 和 Set 的区别

📃ArrayList 与 Vector 区别

📃ArrayList 的扩容机制

📃HashMap 和 Hashtable 的区别

📃HashMap的底层实现

📃HashMap 是线程安全的吗,为什么不是线程安全的

📃JDK1.8中 HashMap 的扩容过程

📃JDK1.8中 HashMap 做了哪些优化

📃HashMap 的长度为什么是2的幂次方

📃HashMap 多线程操作导致死循环问题

📃HashSet 是如何保证不重复的

📃HashSet 和 HashMap 区别

📃ConcurrentHashMap 和 Hashtable 的区别

📃ConcurrentHashMap线程安全的具体实现方式

📃LinkedHashMap的应用

📃TreeMap的数据结构

📃comparable 和 Comparator的区别


📚Java 并发

📃简述线程和进程的关系,区别和优缺点

📃为什么程序计数器、虚拟机栈和本地方法栈是线程私有的

📃为什么虚拟机栈和本地方法栈是私有

📃解释堆和方法区

📃并发与并行的区别

📃为什么要使用多线程

📃线程的生命周期和状态

📃什么是上下文切换

📃什么是线程死锁

📃如何避免死锁

📃synchronized 关键字的了解

📃synchronized 的底层原理

📃JDK1.6 之后的synchronized 关键字的底层优化

📃synchronized和ReentrantLock 的区别

📃介绍Java内存模型

📃volatile 的实现原理

📃synchronized 关键字和 volatile 关键字的区别

📃ThreadLocal原理,用的时候需要注意什么

📃ThreadLocal的内存泄露问题

📃为什么要用线程池

📃线程池原理分析

📃实现Runnable接口和Callable接口的区别

📃执行execute()方法和submit()方法的区别

📃如何创建线程池

📃ThreadPoolExecutor构造函数的参数分析

📃ThreadPoolExecutor的饱和策略

📃Atomic 原子类

📃JUC 包中的原子类是哪4类

📃AtomicInteger 的使用与原理

📃什么是AQS(AbstractQueuedSynchronizer)

📃AQS 原理

📃AQS 对资源的共享方式

📃ConcurrentHashMap的原理

📃八种阻塞队列以及各个阻塞队列的特性

📃CopyOnWriteArrayList的原理

📃ConcurrentSkipListMap的原理

📃ScheduledThreadPoolExecutor 的介绍

📃乐观锁和悲观锁介绍

📃乐观锁和悲观锁的使用场景

📃乐观锁常见的两种实现方式

📃乐观锁的缺点

📃如何解决ABA问题

📃CAS与synchronized的使用情景

📃什么是Semaphore(信号量)

📃CountDownLatch 和 CyclicBarrier 的用法,以及相互之间的差别

📃ReentrantLock 和 ReentrantReadWriteLock的区别

📃LockSupport工具

📃Condition接口及其实现原理

📃Fork/Join框架的理解

📃分段锁的原理,锁力度减小的思考

📃几种常见的线程池及使用场景

📃线程池都有哪几种工作队列

📃怎么理解无界队列和有界队列

📃线程池如何调优


📚JVM

📃jvm内存模型

📃对象的创建过程

📃什么情况下会出现内存溢出,内存泄漏

📃Java线程栈

📃JVM 年轻代到年老代的晋升过程的判断条件是什么

📃JVM 出现 fullGC 很频繁,怎么去线上排查问题

📃类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式

📃类的加载过程

📃类的实例化顺序

📃JVM垃圾回收机制,何时触发MinorGC等操作

📃JVM 中一次完整的 GC 流程(从 ygc 到 fgc)是怎样的

📃各种回收器,各自优缺点,重点CMS、G1

📃各种回收算法的比较

📃为什么jdk8用metaspace数据结构用来替代perm

📃JVM老年代和新生代的比例

📃为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗

📃为什么不把基本类型放堆中呢

📃在Java中,什么是是栈的起始点,同是也是程序的起始点

📃Java虚拟机中,数据类型可以分为哪几类

📃Java中有没有指针的概念

📃Java中,栈的大小通过什么参数来设置

📃一个空Object对象的占多大空间

📃对象引用类型分为哪几类

📃如何解决内存碎片的问题

📃如何解决同时存在的对象创建和对象回收问题

📃如何选择合适的垃圾收集算法

📃JVM中最大堆大小有没有限制

📃吞吐量优先选择什么垃圾回收器

📃响应时间优先选择什么垃圾回收器

📃如何进行JVM调优


📚MySQL

📃MyISAM和InnoDB区别

📃为什么使用索引

📃索引是如何提高查询速度的

📃使用索引需要注意些什么

📃BTree索引和哈希索引

📃MyISAM和InnoDB实现BTree索引方式的区别

📃什么是覆盖索引

📃选择索引和利用索引查询的3个原则

📃什么是事务

📃事物的四大特性

📃并发事务带来哪些问题

📃不可重复读和幻读区别

📃事务隔离级别有哪些

📃MySQL的默认隔离级别

📃锁机制与InnoDB锁算法

📃表级锁和行级锁对比

📃InnoDB存储引擎的三种锁的算法

📃大表的优化

📃分库分表之后,id 主键如何处理

📃snowflake算法

📃美团的Leaf分布式ID生成系统

📃一条SQL语句在MySQL中如何执行的

📃MySQL高性能优化规范建议

📃一条SQL语句执行得很慢的原因有哪些


📚Spring

📃BeanFactory 和 FactoryBean?

📃Spring IOC 的理解,其初始化过程?

📃Soring 有多少种IoC容器

📃IoC和DI有什么区别

📃BeanFactory 和 ApplicationContext?

📃IoC的好处有哪些

📃Spring框架找那个有哪些不同类型的事件

📃Spring Bean 的生命周期,如何被管理的?

📃Spring Bean 的加载过程是怎样的?

📃Spring 支持哪些Spring Scope

📃什么是Spring的内部Bean

📃什么是Spring装配

📃Spring 框架中单例Bean是线程安全的吗

📃Spring Bean如何解决循环依赖的问题

📃什么是AOP

📃JoinPoint和PointCut的区别

📃AOP有哪些实现方式

📃什么是编织(Weaving)

📃什么是事务

📃事务的特性指的是

📃Spring支持的事务管理类型

📃Spring 事务如何和不同的数据持久化框架做集成

📃为什么在Spring事务中不能切换数据源

📃什么是事务的隔离级别

📃有哪些隔离级别

📃什么是事务的传播级别

📃有哪些传播级别

📃事务的超时属性,只读属性和回滚规则

📃如果要你实现Spring AOP,请问怎么实现

📃如果要你实现Spring IOC,你会注意哪些问题

📃Spring 是如何管理事务的,事务管理机制

📃Spring 的不同事务传播行为有哪些,干什么用的

📃Spring 中用到了那些设计模式

📃Spring 循环注入的原理

📃Spring AOP的理解,各个术语,他们是怎么相互工作的

📃Spring 如何保证 Controller 并发的安全


📚Spring MVC

📃Spring MVC 的工作原理

📃介绍下 Spring MVC 的核心组件

📃描述一下 DispatcherServlet 的工作流程

📃介绍一下 WebApplicationContext

📃Spring MVC 的 Controller 是不是单例

📃Spring MVC 怎样设定重定向和转发

📃Spring MVC 的拦截器可以做哪些事情

📃Spring MVC 的拦截器和 Filter 过滤器有什么差别

📃REST 代表着什么

📃资源是什么

📃什么是安全的 REST 操作

📃什么是幂等操作? 为什么幂等操作如此重要

📃REST 是可扩展的或说是协同的吗

📃REST 用哪种 HTTP 方法呢

📃删除的 HTTP 状态返回码是什么

📃REST API 是无状态的吗

📃REST安全吗? 你能做什么来保护它

📃RestTemplate 的优势是什么

📃HttpMessageConverter 在 Spring REST 中代表什么

📃如何创建 HttpMessageConverter 的自定义实现来支持一种新的请求/响应

📃@PathVariable 注解,在 Spring MVC 做了什么? 为什么 REST 在 Spring 中如此有用


📚SpringBoot

📃 Spring Boot 是什么?

📃 Spring Boot 提供了哪些核心功能

📃 Spring Boot 有什么优缺点

📃 Spring Boot、Spring MVC 和 Spring 有什么区别

📃 Spring Boot 中的 Starter 是什么

📃 Spring Boot 常用的 Starter 有哪些

📃 创建一个 Spring Boot Project 的最简单的方法是什么

📃 如何统一引入 Spring Boot 版本

📃 运行 Spring Boot 有哪几种方式

📃 如何打包 Spring Boot 项目

📃 如果更改内嵌 Tomcat 的端口

📃 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器

📃 Spring Boot 的配置文件有哪几种格式

📃 Spring Boot 默认配置文件是什么

📃 Spring Boot 如何定义多套不同环境配置

📃 Spring Boot 配置加载顺序

📃 Spring Boot 有哪些配置方式

📃 Spring Boot 的核心注解是哪个

📃 什么是 Spring Boot 自动配置

📃 Spring Boot 有哪几种读取配置的方式

📃 使用 Spring Boot 后,项目结构是怎么样的呢

📃 如何在 Spring Boot 启动的时候运行一些特殊的代码

📃 Spring Boot 2.X 有什么新特性


📚SpringCloud

📃什么是 Spring Cloud ?

📃Spring Cloud 核心功能是什么?

📃Spring Cloud 有哪些组件?

📃Spring Cloud 和 Spring Boot 的区别和关系?

📃Spring Cloud 和 Dubbo 的区别?

📃什么是微服务?

📃微服务的优缺点分别是什么?

📃注册中心

📃为什么要使用服务发现?

📃Eureka

📃Eureka 如何实现集群?

📃聊聊 Eureka 缓存机制?

📃什么是 Eureka 自我保护机制?

📃负载均衡

📃为什么要负载均衡?

📃Ribbon

📃Ribbon 有哪些负载均衡算法?

📃聊聊 Ribbon 缓存机制?

📃聊聊 Ribbon 重试机制?

📃Ribbon 是怎么和 Eureka 整合的?

📃声明式调用

📃Feign

📃Feign 实现原理?

📃Feign 和 Ribbon 的区别?

📃Feign 是怎么和 Ribbon、Eureka 整合的?

📃聊聊 Feign 重试机制?

📃服务保障

📃为什么要使用服务保障?

📃Hystrix

📃Hystrix 隔离策略?

📃聊聊 Hystrix 缓存机制?

📃什么是 Hystrix 断路器?

📃什么是 Hystrix 服务降级?

📃网关服务

📃为什么要网关服务?

📃Zuul

📃Spring Cloud Gateway

📃配置中心

📃Spring Cloud Config

📃Apollo

📃链路追踪

📃SkyWalking

📃Spring Cloud Sleuth


📚Dubbo

📃什么是 Dubbo

📃什么是 RPC?RPC原理是什么

📃为什么要用 Dubbo

📃Dubbo 的架构和工作原理

📃什么是SPI机制

📃Dubbo 的负载均衡策略

📃zookeeper宕机与dubbo直连的情况

📃dubbo的健壮性表现


📚Redis

📃Redis 有什么优点

📃Redis 有什么缺点

📃Redis 和 Memcached 的区别有哪些

📃请说说 Redis 的线程模型

📃为什么 Redis 单线程模型也能效率这么高

📃Redis 是单线程的,如何提高多核 CPU 的利用率

📃Redis 有几种持久化方式

📃Redis 有几种数据“过期”策略

📃Redis 有哪几种数据“淘汰”策略

📃如果有大量的 key 需要设置同一时间过期,一般需要注意什么

📃Redis 有哪些数据结构

📃聊聊 Redis 使用场景

📃Redis 支持的 Java 客户端都有哪些

📃如何使用 Redis 实现分布式锁

📃如何使用 Redis 实现分布式限流

📃如何使用 Redis 实现消息队列

📃什么是 Redis Pipelining

📃什么是 Redis 事务

📃Redis 集群都有哪些方案

📃什么是 Redis 主从同步

📃如何使用 Redis Sentinel 实现高可用

📃如果使用 Redis Cluster 实现高可用

📃什么是 Redis 分区

📃Redis 有哪些重要的健康指标

📃怎么优化 Redis 的内存占用

📃Redis 常见的性能问题都有哪些?如何解决

📃修改配置不重启 Redis 会实时生效吗

📃缓存雪崩和缓存穿透问题解决方案

📃如何解决 Redis 的并发竞争 Key 问题

📃如何保证缓存与数据库双写时的数据一致性


📚Netty

📃BIO 是什么

📃NIO 是什么

📃AIO 是什么

📃BIO、NIO 有什么区别

📃什么是 Netty

📃为什么选择 Netty

📃为什么说 Netty 使用简单

📃说说业务中 Netty 的使用场景

📃说说 Netty 如何实现高性能

📃Netty 的高性能如何体现

📃Netty 的高可靠如何体现

📃Netty 的可扩展如何体现

📃简单介绍 Netty 的核心组件

📃说说 Netty 的逻辑架构

📃什么是 Reactor 模型

📃请介绍 Netty 的线程模型

📃什么是业务线程池

📃TCP 粘包 / 拆包的原因?应该这么解决

📃了解哪几种序列化协议

📃Netty 的零拷贝实现

📃原生的 NIO 存在 Epoll Bug 是什么?Netty 是怎么解决的

📃什么是 Netty 空闲检测

📃Netty 如何实现重连

📃Netty 自己实现的 ByteBuf 有什么优点

📃Netty 为什么要实现内存管理

📃Netty 如何实心内存管理

📃什么是 Netty 的内存泄露检测?是如何进行实现的


📚高并发架构

📘消息队列

📃为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?

📃如何保证消息队列的高可用?

📃如何保证消息不被重复消费?(如何保证消息消费的幂等性)

📃如何保证消息的可靠性传输?(如何处理消息丢失的问题)

📃如何保证消息的顺序性?

📃如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?

📃如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。

📘搜索引擎

📃es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)?

📃es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?

📃es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

📃es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?

📘缓存

📃在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果?

📃Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多?

📃Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

📃Redis 的过期策略都有哪些?手写一下 LRU 代码实现?

📃如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么?

📃Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?

📃Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?如何动态增加和删除一个节点?

📃了解什么是 redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?

📃如何保证缓存与数据库的双写一致性?

📃Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?

📃生产环境中的 Redis 是怎么部署的?

📘分库分表

📃为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?

📃现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?

📃如何设计可以动态扩容缩容的分库分表方案?

📃分库分表之后,id 主键如何处理?

📘读写分离

📃如何实现 MySQL 的读写分离?MySQL 主从复制原理是啥?如何解决 MySQL 主从同步的延时问题?

📘高并发系统

📃如何设计一个高并发系统?


📚分布式架构

📘分布式服务框架

📃说一下 Dubbo 的工作原理?注册中心挂了可以继续通信吗?

📃Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?

📃Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?

📃Dubbo 的 spi 思想是什么?

📃如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试?

📃分布式服务接口的幂等性如何设计(比如不能重复扣款)?

📃分布式服务接口请求的顺序性如何保证?

📃如何自己设计一个类似 Dubbo 的 RPC 框架?

📘分布式锁

📃Zookeeper 都有哪些应用场景?

📃使用 Redis 如何设计分布式锁?使用 Zookeeper 来设计分布式锁可以吗?以上两种分布式锁的实现方式哪种效率比较高?

📘分布式事务

📃分布式事务了解吗?你们如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证?

📘分布式会话

📃集群部署时的分布式 Session 如何实现?


📚高可用架构

📃Hystrix 介绍

📃电商网站详情页系统架构

📃Hystrix 线程池技术实现资源隔离

📃Hystrix 信号量机制实现资源隔离

📃Hystrix 隔离策略细粒度控制

📃深入 Hystrix 执行时内部原理

📃基于 request cache 请求缓存技术优化批量商品数据查询接口

📃基于本地缓存的 fallback 降级机制

📃深入 Hystrix 断路器执行原理

📃深入 Hystrix 线程池隔离与接口限流

📃基于 timeout 机制为服务接口调用超时提供安全保护

📃如何设计一个高可用系统?

📃如何限流?在工作中是怎么做的?说一下具体的实现?

📃如何进行熔断?

📃熔断框架都有哪些?具体实现原理知道吗?

📃熔断框架如何做技术选型?选用 Sentinel 还是 Hystrix?

📃如何进行降级?


📚微服务架构

📃关于微服务架构的描述

📃从单体式架构迁移到微服务架构

📃微服务的事件驱动数据管理

📃选择微服务部署策略

📃什么是微服务?微服务之间是如何独立通讯的?

📃Spring Cloud 和 Dubbo 有哪些区别?

📃Spring Boot 和 Spring Cloud,谈谈你对它们的理解?

📃什么是服务熔断?什么是服务降级?

📃微服务的优缺点分别是什么?说一下你在项目开发中碰到的坑?

📃你所知道的微服务技术栈都有哪些?

📃微服务治理策略

📃Eureka 和 Zookeeper 都可以提供服务注册与发现的功能,它们有什么区别?


📚微服务架构

📃如何从大量的 URL 中找出相同的 URL?

📃如何从大量数据中找出高频词?

📃如何找出某一天访问百度网站最多的 IP?

📃如何在大量的数据中找出不重复的整数?

📃如何在大量的数据中判断一个数是否存在?

📃如何查询最热门的查询串?

📃如何统计不同电话号码的个数?

📃如何从 5 亿个数中找出中位数?

📃如何按照 query 的频度排序?

📃如何找出排名前 500 的数?


📚算法


📚计算机网络

📃TCP、UDP 协议的区别

📃在浏览器中输入url地址到显示页面的过程

📃HTTP长连接、短连接

📃TCP 三次握手和四次挥手

📃TCP窗口滑动和流量控制


📚设计模式


📚生产实践

文章作者: Fulin Zhang
文章链接: https://iuin.github.io/2019/JAVA-interview/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 个人博客