第一章:Java基础面试题
一、Java概述
1.1 何为编程
1.2 什么是Java
1.3 jdk1.5之后的三大版本
1.4 JVM、JRE和JDK的关系
1.5 什么是跨平台性?原理是什么
1.6 Java语言有哪些特点
1.7 什么是字节码?采用字节码的最大好处是什么
1.8 什么是Java程序的主类?应用程序和小程序的主类有何不同?
1.9 Java应用程序与小程序之间有那些差别?
1.10 Java和C++的区别
1.11 Oracle JDK 和 OpenJDK 的对比
二、基础语法
2.1 Java有哪些数据类型
2.2 switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上
2.3 用最有效率的方法计算 2 乘以 8
2.4 Math.round(11.5) 等于多少?Math.round(-11.5)等于多少
2.5 float f=3.4;是否正确
2.6 short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗
2.7 Java语言采用何种编码方案?有何特点?
2.8 什么Java注释
2.9 访问修饰符 public,private,protected,以及不写(默认)时的区别
2.10 &和&&的区别
2.11 Java 有没有 goto
2.12 final 有什么用?
2.13 final finally finalize区别
2.14 this关键字的用法
2.15 super关键字的用法
2.16 this与super的区别
2.17 static存在的主要意义
2.18 static的独特之处
2.19 static应用场景
2.20 static注意事项
2.21 break ,continue ,return 的区别及作用
2.22 在 Java 中,如何跳出当前的多重嵌套循环
三、面向对象
3.1 面向对象和面向过程的区别
3.2 面向对象的特征有哪些方面
3.3 什么是多态机制?Java语言是如何实现多态的?
3.4 面向对象五大基本原则是什么(可选)
3.5 抽象类和接口的对比
3.6 普通类和抽象类有哪些区别?
3.7 抽象类能使用 final 修饰吗?
3.8 创建一个对象用什么关键字?对象实例与对象引用有何不同?
3.9 成员变量与局部变量的区别有哪些
3.10 在Java中定义一个不做事且没有参数的构造方法的作用
3.11 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
3.12 一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么?
3.13 构造方法有哪些特性?
3.14 静态变量和实例变量区别
3.15 静态变量与普通变量区别
3.16 静态方法和实例方法有何不同?
3.17 在一个静态方法内调用一个非静态成员为什么是非法的?
3.18 什么是方法的返回值?返回值的作用是什么?
3.19 什么是内部类?
3.20 内部类的分类有哪些
静态内部类
成员内部类
局部内部类
匿名内部类
3.21 内部类的优点
3.22 内部类有哪些应用场景
3.23 局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?
3.24 内部类相关,看程序说出运行结果
3.25 构造器(constructor)是否可被重写(override)
3.26 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
3.27 == 和 equals 的区别是什么
3.28 hashCode 与 equals (重要)
3.29 对象的相等与指向他们的引用相等,两者有什么不同?
3.30 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
3.31 为什么 Java 中只有值传递
3.32 值传递和引用传递有什么区别
3.33 JDK 中常用的包有哪些
3.34 import java和javax有什么区别
四、IO流
4.1 java 中 IO 流分为几种?
4.2 BIO,NIO,AIO 有什么区别?
4.3 Files的常用方法都有哪些?
五、反射
5.1 什么是反射机制?
5.2 反射机制优缺点
5.3 反射机制的应用场景有哪些?
5.4 Java获取反射的三种方法
六、常用API
6.1 字符型常量和字符串常量的区别
6.2 什么是字符串常量池?
6.3 String 是最基本的数据类型吗
6.4 String有哪些特性
6.5 String为什么是不可变的吗?
6.6 String真的是不可变的吗?
6.7 是否可以继承 String 类
6.8 String str="i"与 String str=new String(“i”)一样吗?
6.9 String s = new String(“xyz”);创建了几个字符串对象
6.10 如何将字符串反转?
6.11 数组有没有 length()方法?String 有没有 length()方法
6.12 String 类的常用方法都有那些?
6.13 在使用 HashMap 的时候,用 String 做 key 有什么好处?
6.14 String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
6.15 自动装箱与拆箱
6.16 int 和 Integer 有什么区别
6.17 Integer a= 127 与 Integer b = 127相等吗
第二章:Java集合面试题
一、集合容器概述
1.1 什么是集合
1.2 集合的特点
1.3 集合和数组的区别
1.4 使用集合框架的好处
1.5 常用的集合类有哪些?
1.6 List,Set,Map三者的区别?List、Set、Map 是否继承自 Collection 接口?List、Map、Set 三个接口存取元素时,各有什么特点?
1.7 集合框架底层数据结构
1.8 哪些集合类是线程安全的?
1.9 Java集合的快速失败机制 “fail-fast”?
1.10 怎么确保一个集合不能被修改?
二、List接口
2.1 迭代器 Iterator 是什么?
2.2 Iterator 怎么使用?有什么特点?
2.3 如何边遍历边移除 Collection 中的元素?
2.4 Iterator 和 ListIterator 有什么区别?
2.5 遍历一个 List 有哪些不同的方式?每种方法的实现原理是什么?Java 中 List 遍历的最佳实践是什么?
2.6 说一下 ArrayList 的优缺点
2.7 如何实现数组和 List 之间的转换?
2.8 ArrayList 和 LinkedList 的区别是什么?
2.9 ArrayList 和 Vector 的区别是什么?
2.10 插入数据时,ArrayList、LinkedList、Vector谁速度较快?阐述 ArrayList、Vector、LinkedList 的存储性能和特性?
2.11 多线程场景下如何使用 ArrayList?
2.12 为什么 ArrayList 的 elementData 加上 transient 修饰?
2.13 List 和 Set 的区别
三、Set接口
3.1 说一下 HashSet 的实现原理?
3.2 HashSet如何检查重复?HashSet是如何保证数据不可重复的?
3.3 HashSet与HashMap的区别
四、Queue
4.1 BlockingQueue是什么?
4.2 在 Queue 中 poll()和 remove()有什么区别?
五、Map接口
5.1 说一下 HashMap 的实现原理?
5.2 HashMap在JDK1.7和JDK1.8中有哪些不同?HashMap的底层实现
JDK1.8之前
JDK1.8之后
JDK1.7 VS JDK1.8 比较
5.3 HashMap的put方法的具体流程?
5.4 HashMap的扩容操作是怎么实现的?
5.5 HashMap是怎么解决哈希冲突的?
什么是哈希?
什么是哈希冲突?
HashMap的数据结构
hash()函数
JDK1.8新增红黑树
总结
5.6 能否使用任何类作为 Map 的 key?
5.7 为什么HashMap中String、Integer这样的包装类适合作为K?
5.8 如果使用Object作为HashMap的Key,应该怎么办呢?
5.9 HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标?
5.10 HashMap 的长度为什么是2的幂次方
5.11 HashMap 与 HashTable 有什么区别?
5.12 如何决定使用 HashMap 还是 TreeMap?
5.13 HashMap 和 ConcurrentHashMap 的区别
5.14 ConcurrentHashMap 和 Hashtable 的区别?
5.15 ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?
六、辅助工具类
6.1 Array 和 ArrayList 有何区别?
6.2 如何实现 Array 和 List 之间的转换?
6.3 comparable 和 comparator的区别?
6.4 Collection 和 Collections 有什么区别?
6.5 TreeMap 和 TreeSet 在排序时如何比较元素?Collections 工具类中的 sort()方法如何比较元素?
第三章:JVM面试题
一、Java内存区域
1.1 说一下 JVM 的主要组成部分及其作用?
1.2 说一下 JVM 运行时数据区
1.3 深拷贝和浅拷贝
1.4 说一下堆栈的区别?
1.5 队列和栈是什么?有什么区别?
二、HotSpot虚拟机对象探秘
2.1 对象的创建
2.2 为对象分配内存
2.3 处理并发安全问题
2.4 对象的访问定位
句柄访问
直接指针
三、内存溢出异常
3.1 Java会存在内存泄漏吗?请简单描述
四、垃圾收集器
4.1 简述Java垃圾回收机制
4.2 GC是什么?为什么要GC
4.3 垃圾回收的优点和原理。并考虑2种回收机制
4.4 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
4.5 Java 中都有哪些引用类型?
4.6 怎么判断对象是否可以被回收?
4.7 在Java中,对象什么时候可以被垃圾回收
4.8 JVM中的永久代中会发生垃圾回收吗
4.9 说一下 JVM 有哪些垃圾回收算法?
标记-清除算法
复制算法
标记-整理算法
分代收集算法
4.10 说一下 JVM 有哪些垃圾回收器?
4.11 详细介绍一下 CMS 垃圾回收器?
4.12 新生代垃圾回收器和老年代垃圾回收器都有哪些?有什么区别?
4.13 简述分代垃圾回收器是怎么工作的?
五、内存分配策略
5.1 简述java内存分配与回收策率以及Minor GC和Major GC
对象优先在 Eden 区分配
大对象直接进入老年代
长期存活对象将进入老年代
六、虚拟机类加载机制
6.1 简述java类加载机制?
6.2 描述一下JVM加载Class文件的原理机制
6.3 什么是类加载器,类加载器有哪些?
6.4 说一下类装载的执行过程?
6.5 什么是双亲委派模型?
七、JVM调优
7.1 说一下 JVM 调优的工具?
7.2 常用的 JVM 调优的参数都有哪些?
第四章:Spring面试题
一、Spring概述
1.1 什么是spring
1.2 Spring框架的设计目标,设计理念,和核心是什么
1.3 Spring的优缺点是什么?
1.4 Spring有哪些应用场景
1.5 Spring由哪些模块组成?
1.6 Spring 框架中都用到了哪些设计模式?
1.7 详细讲解一下核心容器(spring context应用上下文) 模块
1.8 Spring框架中有哪些不同类型的事件
1.9 Spring 应用程序有哪些不同组件?
1.10 使用 Spring 有哪些方式?
二、Spring控制反转(IOC)
2.1 什么是Spring IOC 容器?
2.2 控制反转(IoC)有什么作用
2.3 IOC的优点是什么?
2.4 Spring IoC 的实现机制
2.5 Spring 的 IoC支持哪些功能
2.6 BeanFactory 和 ApplicationContext有什么区别?
2.7 Spring 如何设计容器的,BeanFactory和ApplicationContext的关系详解
2.8 ApplicationContext通常的实现是什么?
2.9 什么是Spring的依赖注入?
2.10 依赖注入的基本原则
2.11 依赖注入有什么优势
2.12 有哪些不同类型的依赖注入实现方式?
2.13 构造器依赖注入和 Setter方法注入的区别
三、Spring Beans
3.1 什么是Spring beans?
3.2 一个 Spring Bean 定义 包含什么?
3.3 如何给Spring 容器提供配置元数据?Spring有几种配置方式
3.4 Spring配置文件包含了哪些信息
3.5 Spring基于xml注入bean的几种方式
3.6 你怎样定义类的作用域?
3.7 解释Spring支持的几种bean的作用域
3.8 Spring框架中的单例bean是线程安全的吗?
3.9 Spring如何处理线程并发问题?
3.10 解释Spring框架中bean的生命周期
3.11 哪些是重要的bean生命周期方法? 你能重载它们吗?
3.12 什么是Spring的内部bean?什么是Spring inner beans?
3.13 在 Spring中如何注入一个java集合?
3.14 什么是bean装配?
3.15 什么是bean的自动装配?
3.16 解释不同方式的自动装配,spring 自动装配 bean 有哪些方式?
3.17 使用@Autowired注解自动装配的过程是怎样的?
3.18 自动装配有哪些局限性?
四、Spring注解
4.1 什么是基于Java的Spring注解配置? 给一些注解的例子
4.2 怎样开启注解装配?
4.3 @Component, @Controller, @Repository, @Service 有何区别?
4.4 @Required 注解有什么作用
4.5 @Autowired 注解有什么作用
4.6 @Autowired和@Resource之间的区别
4.7 @Qualifier 注解有什么作用
4.8 @RequestMapping 注解有什么用?
五、Spring数据访问
5.1 Spring支持的事务管理类型, spring 事务实现方式有哪些?
5.2 Spring事务的实现方式和实现原理
5.3 说一下Spring的事务传播行为
5.4 说一下 spring 的事务隔离?
5.5 Spring框架的事务管理有哪些优点?
5.6 你更倾向用那种事务管理类型?
六、Spring面向切面编程(AOP)
6.1 什么是AOP
6.2 Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?
6.3 JDK动态代理和CGLIB动态代理的区别
6.4 如何理解 Spring 中的代理?
6.5 解释一下Spring AOP里面的几个名词
6.6 Spring在运行时通知对象
6.7Spring只支持方法级别的连接点
6.8 在Spring AOP 中,关注点和横切关注的区别是什么?在 spring aop 中 concern 和 cross-cutting concern 的不同之处
6.9 Spring通知有哪些类型?
6.10 什么是切面 Aspect?
第五章:Spring Boot面试题
一、概述
1.1 什么是 Spring Boot?
1.2 Spring Boot 有哪些优点?
1.3 Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
二、配置
2.1 什么是 JavaConfig?
2.2 Spring Boot 自动配置原理是什么?
2.3 你如何理解 Spring Boot 配置加载顺序?
2.4 什么是 YAML?
2.5 YAML 配置的优势在哪里 ?
2.6 Spring Boot 是否可以使用 XML 配置 ?
2.7 spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ?
2.8 什么是 Spring Profiles?
2.9 如何在自定义端口上运行 Spring Boot 应用程序?
三、安全
3.1 如何实现 Spring Boot 应用程序的安全性?
3.2 比较一下 Spring Security 和 Shiro 各自的优缺点 ?
3.3 Spring Boot 中如何解决跨域问题 ?
3.4 什么是 CSRF 攻击?
四、监视器
4.1 Spring Boot 中的监视器是什么?
4.2 如何在 Spring Boot 中禁用 Actuator 端点安全性?
4.3 我们如何监视所有 Spring Boot 微服务?
五、其他
5.1 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot项目如何热部署?
5.2 您使用了哪些 starter maven 依赖项?
5.3 Spring Boot 中的 starter 到底是什么 ?
5.4 spring-boot-starter-parent 有什么用 ?
5.5 Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?
5.6 运行 Spring Boot 有哪几种方式?
5.7 Spring Boot 需要独立的容器运行吗?
5.8 开启 Spring Boot 特性有哪几种方式?
5.9 如何使用 Spring Boot 实现异常处理?
5.10 如何使用 Spring Boot 实现分页和排序?
5.11 微服务中如何实现 session 共享 ?
5.12 Spring Boot 中如何实现定时任务 ?
第六章:Spring Cloud面试题
一、概述
1.1 为什么需要学习Spring Cloud
1.2 Spring Cloud优缺点
二、主要项目
2.1 Spring Cloud Config
2.2 Spring Cloud Netflix
2.3 Spring Cloud Bus
2.4 Spring Cloud Consul
2.5 Spring Cloud Security
2.6 Spring Cloud Sleuth
2.7 Spring Cloud Stream
2.8 Spring Cloud Task
2.9 Spring Cloud Zookeeper
2.10 Spring Cloud Gateway
2.11 Spring Cloud OpenFeign
三、其他
3.1 SpringBoot和SpringCloud的区别?
3.2 使用 Spring Boot 开发分布式微服务时,我们面临以下问题
3.3 服务注册和发现是什么意思?Spring Cloud 如何实现?
3.4 Spring Cloud 和dubbo区别?
3.5 负载平衡的意义什么?
3.6 什么是 Hystrix?它如何实现容错?
3.7 什么是 Netflix Feign?它的优点是什么?
3.8 什么是 Spring Cloud Bus?我们需要它吗?
3.9 Spring Cloud断路器的作用
3.10 什么是Spring Cloud Config?
3.11 什么是Spring Cloud Gateway?
第七章:Mysql面试题
一、数据库基础知识
1.1 数据库三大范式是什么
1.2 mysql有关权限的表都有哪几个
1.3 MySQL的binlog有有几种录入格式?分别有什么区别?
二、数据类型
2.1 mysql有哪些数据类型
三、引擎
3.1 MySQL存储引擎MyISAM与InnoDB区别
3.2 MyISAM索引与InnoDB索引的区别?
3.3 InnoDB引擎的4大特性
四、索引
4.1 什么是索引?
4.2 索引有哪些优缺点?
4.3 索引使用场景(重点)
4.4 索引有哪几种类型?
4.5 索引的数据结构(b树,hash)
4.6 索引的基本原理
4.7 索引算法有哪些?
4.8 索引设计的原则?
4.9 创建索引的原则(重中之重)
4.10 创建索引的三种方式,删除索引
4.11 创建索引时需要注意什么?
4.12 使用索引查询一定能提高查询的性能吗?为什么
4.13 百万级别或以上的数据如何删除
4.14 前缀索引
4.15 什么是最左前缀原则?什么是最左匹配原则
4.16 B树和B+树的区别
4.17 使用B树的好处
4.18 使用B+树的好处
4.19 Hash索引和B+树所有有什么区别或者说优劣呢?
4.20 数据库为什么使用B+树而不是B树
4.21 B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据
4.22 什么是聚簇索引?何时使用聚簇索引与非聚簇索引
4.23 非聚簇索引一定会回表查询吗?
4.24 联合索引是什么?为什么需要注意联合索引中的顺序?
五、事务
5.1 什么是数据库事务?
5.2 事物的四大特性(ACID)介绍一下?
5.3 什么是脏读?幻读?不可重复读?
5.4 什么是事务的隔离级别?MySQL的默认隔离级别是什么?
六、锁
6.1 对MySQL的锁了解吗
6.2 隔离级别与锁的关系
6.3 按照锁的粒度分数据库锁有哪些?锁机制与InnoDB锁算法
6.4 从锁的类别上分MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了
6.5 MySQL中InnoDB引擎的行锁是怎么实现的?
6.6 InnoDB存储引擎的锁的算法有三种
6.7 什么是死锁?怎么解决?
6.8 数据库的乐观锁和悲观锁是什么?怎么实现的?
七、视图
7.1 为什么要使用视图?什么是视图?
7.2 视图有哪些特点?
7.3 视图的使用场景有哪些?
7.5 视图的缺点
7.6 什么是游标?
八、常用SQL语句
8.1 SQL语句主要分为哪几类
8.2 超键、候选键、主键、外键分别是什么?
8.3 SQL 约束有哪几种?
8.4 mysql中 in 和 exists 区别
8.5 varchar与char的区别
8.6 varchar(50)中50的涵义
8.7 int(20)中20的涵义
8.8 drop、delete与truncate的区别
8.9 UNION与UNION ALL的区别?
九、SQL优化
9.1 如何定位及优化SQL语句的性能问题?创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
9.2 SQL的生命周期?
9.3 大表数据查询,怎么优化
9.4 超大分页怎么处理?
9.5 mysql 分页
9.6 慢查询日志
9.7 关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?
9.8 为什么要尽量设定一个主键?
9.9 主键使用自增ID还是UUID?
9.10 字段为什么要求定义为not null?
9.11 如果要存储用户的密码散列,应该使用什么字段进行存储?
9.12 优化查询过程中的数据访问
9.13 优化长难的查询语句
9.14 优化特定类型的查询语句
9.15 优化关联查询
9.16 优化子查询
9.17 优化LIMIT分页
9.18 优化UNION查询
9.19 优化WHERE子句
十、数据库优化
10.1 为什么要优化
10.2 数据库结构优化
10.3 MySQL数据库cpu飙升到500%的话他怎么处理?
10.4 大表怎么优化?某个表有近千万数据,CRUD比较慢,如何优化?分库分表了是怎么做的?分表分库了有什么问题?有用到中间件么?他们的原理知道么?
10.5 MySQL的复制原理以及流程
10.6 读写分离有哪些解决方案?
10.7 备份计划,mysqldump以及xtranbackup的实现原理
10.8 数据表损坏的修复方式有哪些?
第八章:Redis面试题
一、概述
1.1 什么是Redis
1.2 Redis有哪些优缺点
1.3 为什么要用 Redis /为什么要用缓存
1.4 为什么要用 Redis 而不用 map/guava 做缓存?
1.5 Redis为什么这么快
二、数据类型
2.1 Redis有哪些数据类型
2.2 Redis的应用场景
三、持久化
3.1 什么是Redis持久化?
3.2 Redis 的持久化机制是什么?各自的优缺点?
3.3 如何选择合适的持久化方式
3.4 Redis持久化数据和缓存怎么做扩容?
四、过期键的删除策略
4.1 Redis的过期键的删除策略
4.2 Redis key的过期时间和永久有效分别怎么设置?
4.3 我们知道通过expire来设置key 的过期时间,那么对过期的数据怎么处理呢?
五、内存相关
5.1 MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据
5.2 Redis的内存淘汰策略有哪些
5.3 Redis主要消耗什么物理资源?
5.4 Redis的内存用完了会发生什么?
5.5 Redis如何做内存优化?
六、线程模型
6.1 Redis线程模型
七、事务
7.1 什么是事务?
7.2 Redis事务的概念
7.3 Redis事务的三个阶段
7.4 Redis事务相关命令
7.5 事务管理(ACID)概述
7.6 Redis事务支持隔离性吗
7.7 Redis事务保证原子性吗,支持回滚吗
7.8 Redis事务其他实现
八、集群方案
8.1 哨兵模式
8.2 官方Redis Cluster 方案(服务端路由查询)
8.3 基于客户端分配
8.4 基于代理服务器分片
8.5 Redis 主从架构
8.6 Redis集群的主从复制模型是怎样的?
8.7 生产环境中的 redis 是怎么部署的?
8.8 说说Redis哈希槽的概念?
8.9 Redis集群会有写操作丢失吗?为什么?
8.10 Redis集群之间是如何复制的?
8.11 Redis集群最大节点个数是多少
8.12 Redis集群如何选择数据库?
九、分区
9.1 Redis是单线程的,如何提高多核CPU的利用率?
9.2 为什么要做Redis分区?
9.3 你知道有哪些Redis分区实现方案?
9.4 Redis分区有什么缺点?
十、分布式问题
10.1 Redis实现分布式锁
10.2 如何解决 Redis 的并发竞争 Key 问题
10.3 分布式Redis是前期做还是后期规模上来了再做好?为什么?
10.4 什么是 RedLock
十一、缓存异常
11.1 缓存雪崩
11.2 缓存穿透
11.3 缓存击穿
11.4 缓存预热
11.5 缓存降级
11.6 热点数据和冷数据
11.7 缓存热点key
十二、常用工具
12.1 Redis支持的Java客户端都有哪些?官方推荐用哪个?
12.2 Redis和Redisson有什么关系?
12.3 Jedis与Redisson对比有什么优缺点?
十三、其他问题
13.1 如何保证缓存与数据库双写时的数据一致性?
13.2 Redis常见性能问题和解决方案?
13.3 Redis如何做大量数据插入?
13.4 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?
13.5 使用Redis做过异步队列吗,是如何实现的
13.6 Redis如何实现延时队列
13.7 Redis回收进程如何工作的?
13.8Redis回收使用的是什么算法?
第九章:RabbitMQ面试题
一、消息队列简述
1.1 为什么使用MQ?MQ的优点
1.2 消息队列有什么优缺点?RabbitMQ有什么优缺点?
1.3 你们公司生产环境用的是什么消息中间件?
1.4 Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
1.5 MQ 有哪些常见问题?如何解决这些问题?
二、什么是RabbitMQ?
2.1 rabbitmq 的使用场景
2.2 RabbitMQ基本概念
2.3 RabbitMQ的工作模式
2.4 如何保证RabbitMQ消息的顺序性?
2.5 消息如何分发?
2.6 消息怎么路由?
2.7 消息基于什么传输?
2.8 如何保证消息不被重复消费?或者说,如何保证消息消费时的幂等性?
2.9 如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
2.10 如何保证RabbitMQ消息的可靠传输?
2.11 为什么不应该对所有的 message 都使用持久化机制?
2.12 如何保证高可用的?RabbitMQ 的集群
2.13 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
2.14 设计MQ思路
第十章:Dubbo面试题
一、基础知识
1.1 为什么要用 Dubbo?
1.2 Dubbo 是什么?
1.3 Dubbo 的使用场景有哪些?
1.4 Dubbo 核心功能有哪些?
二、架构设计
2.1 Dubbo 核心组件有哪些?
2.2 Dubbo 服务器注册与发现的流程?
Dubbo 的整体架构设计有哪些分层?
2.3 Dubbo Monitor 实现原理?
三、分布式框架
3.1 Dubbo 类似的分布式框架还有哪些?
3.2 Dubbo 和 Spring Cloud 有什么关系?
3.3 Dubbo 和 Spring Cloud 有什么哪些区别?
3.4 Dubbo 和 Dubbox 之间的区别?
四、注册中心
4.1 Dubbo 有哪些注册中心?
4.2 Dubbo 的注册中心集群挂掉,发布者和订阅者之间还能通信么?
五、集群
5.1 Dubbo集群提供了哪些负载均衡策略?
5.2 Dubbo的集群容错方案有哪些?
六、配置
6.1 Dubbo 配置文件是如何加载到 Spring 中的?
6.2 说说核心的配置有哪些?
6.3 Dubbo 超时设置有哪些方式?
6.4 服务调用超时会怎么样?
七、通信协议
7.1 Dubbo 使用的是什么通信框架?
7.2 Dubbo 支持哪些协议,它们的优缺点有哪些?
八、设计模式
8.1 Dubbo 用到哪些设计模式?
九、运维管理
9.1 服务上线怎么兼容旧版本?
9.2 Dubbo telnet 命令能做什么?
9.3 Dubbo 支持服务降级吗?
9.4 Dubbo 如何优雅停机?
十、SPI
10.1 Dubbo SPI 和 Java SPI 区别?
十一、其他
11.1 Dubbo 支持分布式事务吗?
11.2 Dubbo 可以对结果进行缓存吗?
11.3 Dubbo 必须依赖的包有哪些?
11.4 Dubbo 支持哪些序列化方式?
11.5 Dubbo 在安全方面有哪些措施?
11.6 服务调用是阻塞的吗?
11.7 服务提供者能实现失效踢出是什么原理?
11.8 同一个服务多个注册的情况下可以直连某一个服务吗?
11.9Dubbo 服务降级,失败重试怎么做?
11.10 Dubbo 使用过程中都遇到了些什么问题?
十二、RPC
12.1 为什么要有RPC
12.2 什么是RPC
12.3 PRC架构组件
12.4 RPC和SOA、SOAP、REST的区别
12.5 RPC框架需要解决的问题?
12.6 RPC的实现基础?
12.7 RPC使用了哪些关键技术?
12.8 主流RPC框架有哪些
12.9 RPC的实现原理架构图
第十一章:Netty面试题
1. Netty 是什么?
2. Netty 的特点是什么?
3. Netty 的优势有哪些?
4. Netty 的应用场景有哪些?
5. Netty 高性能表现在哪些方面?
6. BIO、NIO和AIO的区别?
7. NIO的组成?
8. Netty的线程模型?
9. TCP 粘包/拆包的原因及解决方法?
10. 什么是 Netty 的零拷贝?
11. Netty 中有哪种重要组件?
12. Netty 发送消息有几种方式?
13. 默认情况 Netty 起多少线程?何时启动?
14. 了解哪几种序列化协议?
15. 如何选择序列化协议?
16. Netty 支持哪些心跳类型设置?
17. Netty 和 Tomcat 的区别?
18. NIOEventLoopGroup源码?
第十二章:分布式与架构涉及
一、架构设计
1.1 请列举出在JDK中几个常用的设计模式?
1.2 什么是设计模式?你是否在你的代码里面使用过任何设计模式?
1.3 静态代理、JDK动态代理以及CGLIB动态代理
静态代理
动态代理
cglib代理
1.4 单例模式
1.5 工厂模式
1.6 观察者模式
1.7 装饰器模式
1.8 秒杀系统设计
二、分布式
2.1 分布式
2.2 集群
2.3 微服务
2.4 多线程
2.5 高并发
2.6 分布式系统的目标与要素
2.7 分布式系统设计两大思路:中心化和去中心化
2.8 分布式与集群的区别是什么?
2.9 CAP定理
2.10 CAP定理的证明
2.11 BASE理论
2.12 BASE理论的核心思想
2.13 BASE理论三要素
1. 基本可用
2. 软状态
3. 最终一致性