当前使用的技术栈
- springBoot
- spring-cloud
- Eureka-服务注册和发现
- Feign(数据通讯)
- Hystrix
- Gateway(网关) 路由 断言 过滤器
- spring-oauth2
服务鉴权
- mybatis
- mysql
- redis 缓存
- kafka 消息队列
熔断的默认处理机制以及熔断和降级之间的关系
服务异常导致服务不可用,进行熔断,降级缓解压力
一定请求进行熔断判定,判定超过则进行熔断,隔一段时间后,进行熔断判定
int所占用的字节
类型 |
字节占用 |
位 |
byte |
1 |
8 |
char |
2 |
16 |
int |
4 |
32 |
short |
2 |
16 |
long |
8 |
64 |
double |
8 |
64 |
float |
4 |
32 |
对象中hashCode和equals的关系
线程
- 数据交换用Exchanger
- 线程执行顺序用join
- 共享数据
- 通过现场之间交换数据
- wait/notify/notifyAll await/signal/signalAll 唤起等待
- sleep 和 wait sleep睡眠时保持对象锁,其他对象无法访问,wait 睡眠时释放对象锁
- volatile
- 保证内存可见性
- 保证内科的有序性
- synchronized
- 修饰代码块 当线程访问时其他线程访问会被阻塞 作用对象是使用调用代码块的对象
- 修饰方法
- 修饰静态方法
- 修饰一个类
- 接口定义时不可以使用synchronized
- 线程池
- 降低系统资源的消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗
- 提高响应速度,
- 方便线程并发的管控
- 提供更强大的功能,延时定时线程池
- 线程池种类
- CachedTreadPool: 无限扩大的线程池,适用于负载较轻的场景,执行短期异步任务
- FixedTreadPool: 固定大小的线程池,适用于负载较中的场景,执行任务时不会因为需要维持大量的线程导致负载加重
- SingleTreadPool: 单线程的线程池,适用于保持顺序执行业务的场景
- ScheduledTreadPool: 执行延时任务和周期性任务
- 主要参数:
corePoolSize 基本线程池大小
maxmumPoolSize 线程池的最大线程数
keepAliveTime 线程存活保持时间
timeUint 线程存活的时间单位
workQueue 任务队列: 用于传输和保存等待执行任务的阻塞队列
threadFactory 线程工厂: 用于创建新线程
handler 线程饱和策略
reactiveStreams
- 反应式流: 用于处理异步编程时的困难
- 超时 异常处理困难
- 难以重构
- 多个异步任务协同处理
- 主要目标
- 管理跨异步边界的流数据交换
- 确保接收方不会轻质缓冲任意数量的数据
mysql
- 索引结构
- 普通索引:无限制
- 唯一索引:索引值必须唯一,不能有空值
- 主键索引:特殊的唯一索引
- 组合索引:
- 和redis的区别
- mysql 关系型数据库 redis 非关系行数据库
- mysql 持久化存储到数据到硬盘上, 速度慢 redis 将使用频繁的数据存储到缓存中,
- mysql 作为持久化的数据库,每次请求数据库的时候都会产生I/O操作,会在反复连接数据库时候花费大量时间,另外反复访问数据库会导致负载太高
- msyql的引擎
InnoDB(主要引擎,支持事务,支持行锁定,外键
redis
-
非关系型数据库
-
为啥快
- 完全基于内存,绝大部分请求都是纯粹的内存操作.数据存储在内存中,都是类型hashMap,优势就是查找和操作的时间复杂度都是O(1)
- 数据机构简单,数据操作也简单
- 采用单线程,不会担心上下切换和竞争,也不会存在多线程或者多线程导致的消耗,不用担心各种锁的问题.不存在加锁和释放的问题
-
持久化
- RDB
- 将数据以快照的方式保存到磁盘上
- 优势:
- 文件紧凑,全量备份
- 恢复大数据的时候比AOF快
- 不需要I/O操作,主线程会fork()一个子线程来处理保存工作
- 劣势: 一次全量备份,备份期间的新数据不会保存
- AOF
- 将redis每个收到的写命令都write函数追加到文件中
- 优势:
- 可以很好的保护数据不丢失
- 写入性能高,文件不容易被破坏
- 文件过大时,后台重写,不会影响客户端读取
- 适合灾备,
- 劣势: 同等数据AOF比RDB 大,
-
redis的使用场景
- 热点数据的缓存
- 限时任务的应用(手机短信验证码)
- 计数器相关的业务(接口访问频次)
-
redis和mysql之间怎么保证数据一致性
- 实时更新:写入db的时候删除缓存数据,直到访问redis时候再刷新
- canal对binlog的解析,在通过发布--订阅模式消费canal服务的数据
- TTL 设置过期策略
-
存储结构:
- 默认16个库(redisDB)
- 每个DB内部存储这dict数据结构 包含着存储数据和过期事件
- 每个dict内部又包含着2个dictht的数组,主要用户hash的扩展
- dictht内部又包含着和dictEntry数组,就是hash的桶,如果冲突,使用挂链法解决
-
数据结构
- list
- string
- set
- hash
- zset
记录一些面试准备的资料
原文:https://www.cnblogs.com/yuitstyle/p/14477521.html