常问问题大纲
# 总结
JVM 、mysql、并发、redis、nettry、zookeeper、设计模式、微服务、spring源码、网络基础、项目实战。
JVM、mysql、并发、redis、kafka、spring-boot、微服务、项目、设计模式、网络(nettry)
# JavaSE
# 其他问题
- ==和equals
- ArrayList和LinkedList有哪些区别
- List和Set
- HashMap的扩容机制原理
- HashMap的Put方法
- Jdk1.7到Jdk1.8 HashMap 发生了什么变化(底层)
- HashMap和HashTable的区别及底层实现
- ConcurrentHashMap的扩容机制,ConcurrentHashMap原理简述,jdk7和jdk8的区别
- ConcurrentHashMap 如何保证线程安全,jdk1.8 有什么变化
- CopyOnWriteArrayList的底层原理是怎样的
- final
- hashcode和equals
- java中的异常体系
- JDK、JRE、JVM区别和联系
- String、StringBuffer、StringBuilder的区别
- StringBuffer、StringBuilder区别及使用场景
- Jdk1.7到Jdk1.8 java虚拟机发生了什么变化
- 接口和抽象类
- 泛型中extends和super的区别
- 深拷贝和浅拷贝
- 面向对象
- 重载和重写的区别
# 经典算法
01-链表反转-迭代
02-链表反转-递归
03-统计素数个数-暴力算法
04-统计素数个数-埃氏筛选
05-删除排序数组中的重复项
06-寻找数组的中心下标
07-x的平方根-二分查找
08-x的平方根-牛顿迭代
09-数组中三个数的最大乘积
10-两数之和-无序数组
11-两数之和-有序数组
12-斐波那契数列-三种解法
13-排列硬币-三种解法
14-环形链表
15-合并两个有序数组
16-子数组最大平均数
17-二叉树最小深度-深度优先
18-二叉树最小深度-广度优先
19-最长连续递增序列-贪心算法
20-柠檬水找零-贪心算法
21-三角形的最大周长-贪心算法
22-二叉树遍历
23-二叉树遍历-前序-递归
24-二叉树遍历-中序-递归
25-二叉树遍历-后序-递归
26-二叉树遍历-层序-递归
27-二叉树遍历-前序-迭代
28-二叉树遍历-中序-迭代
29-二叉树遍历-后序-迭代
30-二叉树遍历-层序-迭代
31-二叉树遍历-线索二叉树-morris
32-二叉树遍历-前中序-morris
33-二叉树遍历-后序-morris
34-省份数量
35-省份数量-深度优先
36-省份数量-广度优先
37-省份数量-并查集
38-预测赢家-石子游戏
39-预测赢家-递归
40-预测赢家-动态规划
41-香槟塔
42-井字游戏
43-字符串搜索-BF和RK
44-字符串搜索-BM
45-字符串搜索-KMP算法
46-打家劫舍-动态规划
47-打家劫舍2-动态规划
48-打家劫舍3-动态规划
49-Dota2参议院-贪心
50优势洗牌(田忌赛马)-贪心
# Java并发
# 其他问题
- CountDownLatch和Semaphore的区别和底层原理
- ReentrantLock中tryLock()和lock()方法的区别
- ReentrantLock中的公平锁和非公平锁的底层实现
- sleep、wait、join、yield
- Sychronized的偏向锁、轻量级锁、重量级锁
- sychronized的自旋锁、偏向锁、轻量级锁、重量级锁,分别介绍和联系
- Sychronized和ReentrantLock的区别
- ThreadLocal的底层原理
- ThreadLocal的原理的使用场景
- ThreadLocal内存泄露问题,如何避免
- Thread和Runnable
- 线程的生命周期及状态
- 说说你对守护线程的理解
- 如何查看线程死锁,Java死锁如何避免
- 线程之间如何进行通讯的
- 并发、并行、串行
- 并发三大特性
- 对线程安全的理解
- 并发编程三要素
- 如何理解volatile关键字,他是如何保证可见性,有序性
- 简述线程池原理,FixedThreadPool用的阻塞队列是什么
- 为什么使用线程池,参数解释
- 线程池处理流程
- 如果你提交任务时,线程池队列已满,这时会发生什么
- 线程池的底层工作原理
- 线程池线程复用的原理
- 线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程
# JVM
- JAVA类加载
- java类加载器有哪些
- 类加载器双亲委派模型
- JVM内存模型
- JVM有哪些垃圾回收器
- JVM有哪些垃圾回收算法
- 怎么确定一个对象是不是垃圾 (GC如何判断对象可以被回收)
- JVM中哪些可以作为gc root
- JVM中哪些是线程共享区
- 你们项目如何排查JVM问题
- 如何进行JVM调优
- 说一下JVM中,哪些是共享区,哪些可以作为gc root
- 对象在JVM中经历的过程
- Java的内存结构,堆分为哪几部分,默认年龄多大进入老年代
- 什么是字节码,作用是什么
# Mysql
# 其他问题
- ACID靠什么保证的
- B树和B+树的区别,为什么Mysql使用B+树
- Explain语句结果中各个字段分表表示什么
- Innodb是如何实现事务的
- MySQL的锁有哪些
- MySQL集群如何搭建
- mysql聚簇和非聚簇索引的区别
- Mysql慢查询该如何优化?
- mysql索引结构,各自的优劣
- MySQL有哪几种数据存储引擎
- mysql执行计划怎么看
- mysql主从同步原理
- Mysql数据库中,什么情况下设置了索引但无法使用
- 存储拆分后如何解决唯一主键
- 海量数据下,如何快速查找一条记录
- 简述Myisam和Innodb的区别
- 简述mysql中索引类型及对数据库的性能的影响
- 事务的基本特性和隔离级别
- 如何实现分库分表
- 什么是MVCC
- 什么是脏读、幻读、不可重复读
- 事务的基本特性和隔离级别
- 索引的基本原理
- 索引的设计原则
- 索引覆盖是什么
- 谈谈如何对MySQL进行分库分表
- 最左前缀原则是什么
# Redis
# 其他问题
- 说一下你知道的redis高可用方案
- 如何避免缓存穿透、缓存击穿、缓存雪崩
- 如何保证数据库与缓存的一致性
- 为什么使用缓存
- 简述redis主从同步机制
- 简述redis事务实现
- 简述redis分布式锁实现
- 简述redis九大数据结构,分别有哪些典型的应用场景?
- 缓存过期都有哪些策略,常见的缓存淘汰算法
- 分布式系统中常用的缓存方案有哪些
- 布隆过滤器原理,优缺点
- Redis集群策略,redis集群方案
- redis的持久化机制
- Redis线程模型,单线程为什么快
- Redis如何设置key的过期时间
- RDB和AOF机制
# SSM
# 其他问题
- 什么是Spring,如何实现一个IOC容器,对IOC的理解
- 什么的是bean的自动装配,有哪些方式
- 如何理解springboot的starter,springboot自动配置原理
- SpringBoot中配置文件的加载顺序是怎样的?
- Spring中Bean是线程安全的吗
- 介绍一下Spring,读过源码介绍一下大致流程,简述spring bean的生命周期,Spring中的Bean创建的生命周期有哪些步骤
- Spring中Bean是线程安全的吗
- spring支持的bean作用域
- Spring容器的启动流程是怎样的
- Spring如何处理循环依赖问题
- Spring中后置处理器的作用
- Spring用到了哪些设计模式
- 对Aop的理解,如何实现AOP,项目哪些地方用到了AOP
- 说一下Spring的事务机制,Spring中的事务是如何实现的,Spring如何处理事务,事务的实现方式原理以及隔离级别
- spring的事务传播机制
- 说说常用的SpringBoot注解,及其实现
- 什么时候@Transactional失效
- 还读过哪些框架源码介绍一下你还熟悉的
- springmvc的九大组件
- springmvc工作流程
- SpringMVC中的控制器是不是单例模式
- mybatis和hibernate的对比,mybatis的优缺点
- spring、springmvc、springboot的区别
- SpringBoot是如何启动Tomcat的
- Mybatis中#{}和${}的区别是什么?
- ApplicationContext和BeanFactory有什么区别
- mybatis插件运行原理及开发流程
# 分布式
# 其他问题
- 雪花算法原理
- 为什么Zookeeper可以用来作为注册中心
- 如何设计一个分布式锁,数据库实现分布式锁的问题及解决方案,分布式锁解决方案,分布式锁的使用场景是什么?有哪些实现方案?
- 数据一致性模型有哪些
- 什么是分布式事务?有哪些实现方案?
- 为什么 Dubbo 不用 JDK 的 SPI,而是要自己实现
- 什么是ZAB协议
- 简述paxos算法
- 简述raft算法
- 什么是CAP理论
- 什么是BASE理论
- 什么是RPC
- 如何实现接口幂等性
- 请谈谈ZK对事务性的支持
- 能说下Dubbo的工作流程吗
- 简述你对RPC、RMI的理解
- 讲下Zookeeper watch机制
- 简述zk中的观察者机制
- 简述zk的命名服务、配置管理、集群管理
- 简述zk的典型应用场景
- 简述TCC事务模型
- 简述dubbo服务引入过程
- 简述dubbo服务暴露过程
- 简述dubbo的SPI机制
- 简述dubbo服务调用过程
- 集群、分布式、SOA、微服务的概念及区别
- 简述dubbo的分层设计
- 负载均衡策略有哪些
- 负载均衡算法、类型
- 分布式系统的设计目标
- 分布式事务如何处理,分布式事务解决方案,分布式事务有哪些解决方案
- 分布式缓存寻址算法
- 分布式架构下,Session 共享有什么方案
- 分布式id生成方案,分布式ID是什么?有哪些解决方案?
- 对比两阶段,三阶段有哪些改进
- 定时任务实现原理
- Dubbo是如何做系统交互的
- Dubbo的负载均衡策略
- Zookeeper中的领导者选举的流程是怎样的?
- Zookeeper集群中节点之间数据是如何同步的
- zk中一个客户端修改了某个节点的数据,其他客户端能够马上获取到这个最新数据吗
- zk和eureka的区别
- zk实际如何存储dubbo生产者和消费者信息
- zk分布式锁实现原理
- zk的会话管理机制
- zk的数据模型和节点类型
- zk的数据同步原理
- zk的watch机制实现原理
- zk的初始化选举和崩溃选举过程
- session的分布式方案
Spring Cloud和Dubbo的区别
Quorum、WARO机制
dubbo中Zk集群挂掉,发布者和订阅者还能通信么
Dubbo支持的注册中心有哪些
Dubbo支持哪些负载均衡策略
dubbo支持的协议有哪些
Dubbo是什么?能做什么?
Dubbo 的整体架构设计及分层
Dubbo是如何完成服务导出的?
Dubbo是如何完成服务引入的?
CAP理论,BASE理论
dubbo和springcloud对比
dubbo集群容错策略有哪些
Dubbo的架构设计是怎样的?
# 微服务
怎么拆分微服务P2-DDD
怎么拆分微服务P3-中台
谈谈你对微服务的理解
怎么拆分微服务P1
项目中怎么保证微服务敏捷开发
什么是服务雪崩?什么是服务限流?
什么是服务降级、什么是熔断
springcloud核心组件及其作用
什么是Hystrix?简述实现机制
SpringCloud和SpringCloudAlibaba都有哪些组件
什么是服务熔断?什么是服务降级?区别是什么?
高并发场景下如何实现系统限流
京东一面:SpringCloud各组件功能,与Dubbo的区别
SOA、分布式、微服务之间有什么关系和区别?
Spring Cloud和Dubbo有哪些区别?
Spring Cloud有哪些常用组件,作用是什么?
# 消息中间件
Kafka为什么比RocketMQ的吞吐量要高
Kafka的Pull和Push分别有什么优缺点
Kafka是pull?push?优劣势分析
Kafka、ActiveMQ、RabbitMQ、RocketMQ 对比
Kafka消息高可靠解决方案
kafka高性能高吞吐的原因
Kafka消息丢失的场景及解决方案
Kafka中zk的作用
Kafka中高性能的原因分析
MQ如何保证消费幂等性
MQ如何保证分布式事务的最终一致性
MQ如何进行产品选型
MQ如何保证消息的高效读写
MQ如何保证消息顺序
MQ如何保证消息不丢失P1
MQ如何保证消息不丢失P2
rabbitmq的镜像队列原理
MQ有什么用
rabbitmq的死信队列、延迟队列原理
RabbitMQ如何保证消息的可靠性传输
Rabbitmq事务消息
RabbitMQ如何确保消息发送 ? 消息接收?
rabbitmq可以直连队列么
RocketMQ 如何保证不丢消息
RabbitMQ死信队列、延时队列
RocketMQ的底层实现原理
RocketMQ 事务消息原理
简述kafka的rebalance机制
简述kafka的副本同步机制
RocketMQ 怎么实现顺序消息
简述kafka架构设计
简述rabbitmq的持久化机制
简述RabbitMq的交换机类型
简述rabbitmq的普通集群模式
简述RabbitMQ的架构设计
简述RabbitMQ架构设计
简述RabbitMQ事务消息机制
京东二面:消息队列如何保证消息可靠传输
简述RocketMQ 架构设计
简述RocketMQ 持久化机制
死信队列是什么?延时队列是什么?
如何保证消息不被重复消费
消息队列有哪些作用
消息队列如何保证消息可靠传输
如何设计一个MQ
消息队列的优缺点,使用场景
# 网络与IO
网络4
网路2
网络3
什么是认证和授权
网络1
什么是OAuth2.0协议P2
什么是SSO
什么是嵌入式服务器,为什么使用嵌入式服务器
什么是OAuth2.0协议P1
如何设计一个开放授权平台
什么是CSRF攻击
蚂蚁一面:HTTPS是如何保证安全传输的
浏览器发出一个请求到收到响应经历了哪些步骤?
蚂蚁一面:epoll和poll的区别
Tomcat中为什么要使用自定义类加载器
零拷贝是什么
跨域请求是什么?有什么问题?怎么解决?
京东二面:TCP的三次握手和四次挥手
cookie和session有什么区别-问题2和3
Tomcat如何进行优化?
TCP的三次握手和四次挥手
HTTP和HTTPS的区别
Netty是什么?和Tomcat有什么区别?特点是什么?
Netty的高性能体现在哪些方面
Netty的线程模型是怎么样的
BIO、NIO、AIO分别是什么
# 设计模式
1.设计模式-单例设计模式
2.设计模式-工厂方法模式
3.设计模式-抽象工厂模式
4.设计模式-建造者模式
5.设计模式-原型模式
6.设计模式-享元模式
7.设计模式-门面模式
8.设计模式-适配器模式
9.设计模式-装饰器模式
10.设计模式-策略模式
11.设计模式-模板方法模式
12.设计模式-观察者模式
13.设计模式-责任链模式
# ES
看以下代码回答问题(一)
看以下代码回答问题(三)
如何进行中文分词
什么是倒排索引
蚂蚁一面:强平衡二叉树和弱平衡二叉树有什么区别
蚂蚁一面:二叉搜索树和平衡二叉树有什么关系
蚂蚁二面:设计模式有哪些大类,及熟悉其中哪些设计模式
京东一面:遇到过哪些设计模式
看以下代码回答问题(二)
京东一面:项目及主要负责的模块
京东二面:图的深度遍历和广度遍历
京东一面:Maven中Package和Install的区别
ES写入数据与查询数据的原理
京东一面:说说你常用的Linux基本操作命令
京东二面:画出项目架构图,介绍自己所处的模块
京东二面:快排算法
ES部署时如何优化
ES了解多少
阿里二面:聊聊你最有成就感的项目
阿里二面:自己最有挑战的项目、难点