- jdk的类加载器:(1)Bootstrap Classloader-启动类加载器 (2)Extension Classloader-扩展类加载器 (3)Application Classloader-应用类加载器
- 双亲委派模型:类加载的顺序是向上委派(查找缓存),向下查找(查找路径),能够避免类的重复加载,系统核心类被篡改,保证安全性
- java中顶级的异常类是Throwable,下面的子类分别是Exception和error(内存溢出,程序不能再运行),其中Exception又分为RunningtimeException(程序运行时的异常)和CheckedException(编译不通过的异常)
- GC标记为垃圾的两种算法:(1)标记计数法(2)可达性分析算法
垃圾清理的三种算法:(1)标记-清除(2)标记-整理(3)复制-清除
- jvm的五大内存模型:(1)方法区-存放对象信息(2)堆-开辟空间存放创建的对象(3)虚拟机栈-存放局部变量(4)本地方法栈-存放本地方法,虚拟机使用的native方法服务(5)程序计数器-用于标记代码执行到的位置
- 线程的5种状态:(1)创建(2)就绪(3)运行(4)阻塞-等待阻塞,同步阻塞,其他阻塞(5)死亡
- 线程的两种池:(1)锁池(2)等待池
wait()方法:线程释放锁,放到等待池中,不会去竞争锁,是Object类中的本地方法
notify():把线程从等待池中放到锁池中
notifyAll():把所有线程从等待池放到锁池中
sleep():是Thread中的静态方法,不会释放线程锁
yeild():线程进入就绪状态,让出cpu资源
join():线程进入阻塞状态,当前线程调用其他线程的join方法会进入阻塞状态
- 线程安全指的是内存安全,因为jvm中的堆可以被多个线程访问,所以存在多个线程访问同一个对象的情况,多个线程访问同一个操作和单个线程访问结果是否一致
- rocketmq同步发送、异步发送、单向发送
顺序消息:消息队列,有全局顺序(不能保证)和分区顺序
事务消息:保证分布式事务的最终一致性,有半事务消息机制,需要二次确认才能消费消息
广播模式:一个消息可以被多个消费者消费
集群模式:一个消息只能被一个消费者消费
- java中只有两种线程,用户线程和守护线程,守护线程相当于用户线程的保姆,相当于一个后台的线程,例如垃圾收集器
- ThreadLocal的原理:通过当前线程获取ThreadLocalMap,然后把当前的ThreadLocal作为ThreadLocalMap的key值进行值的存取,虽然是线程安全,但是存在注意内存泄露问题,使用完需要调用remove()方法清除ThreadLocal的值
- 对象的强引用和弱引用
强引用:强引用是不能被垃圾收集器回收的,除非设置为null
弱引用:一定被垃圾收集器回收,使用weakreference的类,一般在缓存中使用弱引用
- 并发:存在多个任务进行干扰,可以在多个任务之间交替执行
并行:多个任务互不干扰,可以重叠执行
串行:一个一个任务来执行
- 并发的3大特性:原子性、可见性(mesi:缓存一致性协议)、有序性
- 使用线程池的好处
(1)减低资源的消耗,反复的创建和销毁销毁线程需要耗费资源
(2)加快响应速度,线程池有创建好的空闲线程可以快速执行任务
(3)统一管理和维护线程
核心参数:corePoolSize(核心线程数)、maxPoolSize(最大线程数)、keepAliveTime(非核心线程的回收时间)、queueCapacity(队列长度)、rejectedExecutionHandler(任务满了拒绝策略)
- 线程池的阻塞队列,线程池创建线程是需要加全局锁的,会影响性能
(1)放空闲状态的核心线程,如果线下不使用的情况下就放在阻塞队列等待释放cpu
(2)放执行任务
- 线程池复用原理
- spring框架核心是ioc和aop,属于轻量级框架
- ApplicationContext和BeanFactory的区别
- spring中bean的生命周期
(1)扫描解析bean
(2)实例化bean
(3)属性依赖注入
(4)调用初始化前方法
(5)调用初始化方法
(6)调用初始化后方法(进行aop)
(7)使用bean
(8)销毁bean
- sping事务失效
- spring中的bean自动装配的方式
(1)by-name:根据类的名字来装配
(2)by-type:根据类的类型来装配
(3)constructor:根据类的构造器来装配
(4)autodetect:如果有默认的构造器,先根据类的构造器来装配,否则使用by-type来装配
- springboot、springmvc、spring的区别
- springmvc的工作流程
- springmvc的主要主件
(1)HandlerMapping:处理器映射器,维护请求的url对应的处理类
(2)HandlerAdapter:适配器,根据不同的处理类执行不同的处理方法
(3)HandlerExceptionResolver:异常情况处理
(4)ViewResovler:视图解析器,解析处理类生成的视图模型
(5) RequestTovIewNameTranslator:处理没有返回结果的处理器
(6)LocaleResolver:国际区处理
(7)ThemeResolver:解析不同类型的样式文件
(8)MutipartResolver:处理上传请求
(9)FlashMapManger:处理重定向参数
- springboot的自动装配原理
- springboot的starter的使用
- mybatis框架的核心接口:ParameterHandler(参数设置转换)、ResultSetHandler(结果处理)、StatementHandler(参数设置生成sql语句)、Executor(执行sql语句),使用的是jdk的动态代理
- mysql聚簇索引和非聚簇索引的区别,辅助索引叶子节点存的是主键索引,非聚集索引叶子节点存的是数据行地址
- 索引设计的原则
- mysql锁的类型
- mysql的执行计划
- 事务的基本特性和隔离级别
- mysql的ACID的保证机制
- mvcc:多版本并发控制,读取数据通过生成一个类似快照的版本来保存数据,读锁和写锁都不会冲突,不同的事务可以看到不同的版本,只在读已提交(read committed)和可重复读(repeatable read)的事务隔离级别才生效
- mysql主从同步原理
- mysql中的innoDB和MyISAM的区别
- redis的持久化机制RDB和AOF的区别
- redis的过期key的删除策略
- redis线程模型原理
- redis的缓存雪崩、缓存穿透、缓存击穿
- redis集群方案
- redis主从复制的核心原理
- 分布式CAP理论,BASE理论
- 负载均衡算法
- 分布式架构,session共享的方案
- redis的五种数据格式:string(String)、hash(Hashmap)、list(LinkList)、set(HashSet)、zset(TreeSet)
string:最常用的一种数据类型,Redis的string可以包含任何数据,比如jpg图片(生成二进制)或者序列化的对象
hash:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息,hash类型下的value只能存储字符串,不允许存储其他类型数据,hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计不是为了存储大量对象的,切记不可滥用,更不可以将hash作为对象列表使用
List:
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
需要的存储数据:一个存储空间保存多个数据,且通过数据可以体现进入顺序
list类型:保存多个数据,底层使用双向链表存储结构实现
set:
新的存储需求:存储大量的数据,在查询方面提供更高的效率
需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值式不允许重复的。也就是只有键没有值的hash
zset:
新的存储需求:根据排序有利于数据的有效显示,需要提供一种可以根据自身特征进行排序的方式。
需要的存储结构:新的存储模型,可以保存可排序的数据。
sorted_set类型:在set的存储结构基础上添加可排序字段。
- 分布式id生成方案
(1)uuid
(2)数据组自增序列
(3)leaf-sement
(4)基于redis、mongodb、zookeeper等中间件生成
(5)雪花算法
- 分布式锁解决方案
(1)数据库唯一键
(2)zookeeper的新建临时节点,可以解决死锁问题,客服端宕机临时节点会删除,其他客户端可以获取锁
(3)Redis:setNx会有锁的到期时间问题,可通过redisson解决
(4)redLock:解决redis集群不同节点的锁不一致的问题,每个节点都加上锁,获取到一半节点以上的锁信息才算获取到锁
- 分布式事务解决方案
- 如何实现接口的幂等性
- zookeeper的zab协议
- zookeeper的3种节点类型:持久节点、临时节点、有序节点
- zookeeper的watch机制
- zookeeper和eureka的区别
- springcloud和Dubbo的区别
- Hystrix的实现机制
- springcloud核心组件
- Dubbo的整体架构
- kafka的架构设计
- kafka的pull和push
- zk在kafka中的作用
- kafka高性能的原因
- kafka的rebalance机制
- 大数据的几个层级:ODS、DWD、DWM、DWS
ODS:数据运营层。数据经过ETL(抽取、清洗、传输)后存放的层,是最接近源数据的
DWD:数据明细层。保持和ODS层级一样的数据粒度,将一些相同的主题数据聚合到一张表中
DWM:数据中级层。在DWD层的基础上,做一些通用的计算,生成中间表
DWS:数据服务层。安装业务划分数据,生成业务数据表、
- rocketMQ的消费模式:集群消费模式和广播消费模式
setMessageModel(MessageModel.XXX)方法就可以指定是集群还是广播式消费,默认是集群消费模式,即每个Consumer Group中的Consumer均摊所有的消息
广播消费:一个消息会被多个消费者消费
- rocketMQ如何保证消息不丢失以及幂等性
1、rocketMQ不保证消息的幂等性,可能会出现发送重复消息问题,messageId相同(但是无法保证全局是唯一的)
2、需要自己在业务代码实现消息的幂等性,利用唯一标识,例如订单id
- rocketMQ的消息模式:拉(pull)和推(push)两种消息模式
pull其实就是消费者主动从MQ中去拉消息,而push则像rabbit MQ一样,是MQ给消费者推送消息。但是RocketMQ的push其实是基于pull来实现的。
它会先由一个业务代码从MQ中pull消息,然后再由业务代码push给特定的应用/消费者。其实底层就是一个pull模式
- rocketMQ的4大核心组成部分:NameServer、Broker、Producer、Consumer
NameServer:相当于rocketMQ的服务注册中心,RocketMQ 需要先启动 NameServer 再启动 Rocket 中的 Broker
Broker:消息存储节点
Producer:消息生产者
Consumer:消息消费者