Redis
1.速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
2.序列化两种:RDB,AOF
3.怎么防止redis击穿
4.redis的优势是什么
5.redis有什么需要注意的地方,master不要备份,主从最好在局域网中,slave做备份
6.Redis Sentinel着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。
7.redis支持spring,list,set,sort,hash
8.支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
9.丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
10.主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3…
11.相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:
Springboot
1.springboot实现及原理
2.spring 入口在哪里 怎么启动
3.Spring 注册bean之后打印信息 — BeanPostProcessor 有方法获取bean执行完后调用 ,beanName
mybaits
mysql
1.使用过索引吗,索引有那些,有什么不同
InnoDB MyISAM,
1.1)innodb支持事务,外键等高级数据库功能
1.2)在执行更新索要锁机制的时候,innodb主观上是行级锁,myisam是表级锁(但也不是绝对,innodb在使用like时候也可能出现表级锁)
1.3)myisam插入数据的效率远高于innodb,但是在innodb不断优化之后,删改查的差距越来越小
1.4)InnoDB必须导出SQL来备份,LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。备注:而且MyISAM应对错误编码导致的数据恢复速度快。MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。InnoDB是拷贝数据文件、备份 binlog,或者用 mysqldump,支持灾难恢复(仅需几分钟),MyISAM不支持,遇到数据崩溃,基本上很难恢复,所以要经常进行数据备份。
2.索引的原理是什么,数据结构是什么,为什么使用这种数据结构,使用索引与不适用索引磁盘IO的次数有区别的吗
2.1)索引是采用数据结构B+树作为底层支撑,如果不适用索引,查询将会扫描所有表数据,每次IO查询出一条记录。
2.2)使用索引之后,每次IO查询出的是一个索引页大小的数据,这是因为IO读取相邻磁盘单元,不需要磁臂移动,就能将相邻单元的数据读出。一个1000万级的数据,如果不使用索引每次查询最糟糕请款下会发生1000万次IO,而使用索引只需要在b+树扫描大概3次就OK,这个该索引树深度有关系,
2.3)b+树深度计算可见
3.一般从什么角度去优化sql
3.1)使用三范式
3.2)建立适当的索引,并合理使用索引
3.3)优化慢查询sql
3.4)实现主从分离
3.5)大数据量实行分库分区分表
3.6)添加缓存层
4.什么是mysql的mvcc
5.谈谈对数据库锁的认识
5.1)乐观锁,悲观锁
5.2)间隙锁
a. 聚簇索引是一种索引方式,InnoDB引擎要求必须有聚簇索引。索引采用B + Tree索引结构实现。聚簇索引是按照表主键顺序构建一个B+Tree结构。其叶子节点存储了是行数据(包含主键值)。
b. 叶子节点中行数据和主键值紧凑的存储在一起,按照主键顺序存储整张表的数据,占用的空间就是整张表的大小。
c. 聚簇索引是通过主键聚集数据,若定义了主键,则主键索引就为聚簇索引。若没定义主键,则表中第一个非空唯一的列作为聚簇索引。都不满足时,InnoDB会建一个隐藏列row-id作为聚簇索引。所以InnoDB引擎的表要求必须有聚簇索引(主键索引)。
d. 二级索引(辅助索引或非主键索引)是在聚簇索引之上创建。是根据索引列 构建的 B+Tree结构,在其叶子节点只存储索引列对应的数据值和主键值。二级索引占用的空间比聚簇索引小很多,通常创建二级索引就是为了提高查询效率。一个InnoDB表只能创建一个聚簇索引,可以创建多个二级索引。当索引覆盖扫描时可以直接从B+Tree中获取这些值,不会通过主键查询主键索引(回表查询)获取数据。
分布式、微服务
1.使用的什么分布式框架
2.springcloud源码
3.分布式事务需要强一致性怎么处理,tcc事务概念
MQ
1.确保消息发送成功 Confirm模式(不同于事务,效率高于事务)
2.消息推积怎么办? 修改消费者数量 和 去消息队列取消息个数
多线程
1、线程的核心参数,队列的策略
核心线程数,最大线程数,线程空闲等待时间,workQueue工作队列,handler 拒绝策略
1)ArrayBlockingQueue:基于数组的有界阻塞队列,新任务进来后,按FIFO排序(先进先出的存储结构),
当队列满了之后,会创建新的线程,如果继续添加任务直到maxPoolSize,则会执行拒绝策略。
2)LinkedBlockingQuene:最大容量Integer.MAX,当线程达到核心线程数后,任务一直在队列中,同样也是FIFO顺序排序。该配置下maxPoolSize配置无效
3)SynchronousQuene,无缓存队列,如果新来任务,如果核心线程不够就新建线程,如果达到最大线程数量则执行拒绝策略。
4)PriorityBlockingQueue
具有优先级的无界阻塞队列,优先级通过参数Comparator实现。
handler 拒绝策略:直接拒绝,拒绝抛出异常,丢弃什么都不做,抛弃最早任务将现任务放入队列
2、有一个新的线程池,不停进来线程,线程池内部线程数量怎么变化
1). 当线程数小于核心线程数时,创建线程。
2). 当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。
3). 当线程数大于等于核心线程数,且任务队列已满
- 若线程数小于最大线程数,创建线程
- 若线程数等于最大线程数,抛出异常,拒绝任务
3、为什么核心线程不会回收
4、核心线程和CPU的数量关系
https://blog.csdn.net/qq_39010254/article/details/107248501
ng 权重怎么实现
访问量异常处理方法