ArrayList 和 LinkedList 的区别?
数据结构层面:ArrayList 是动态数组的数据结构,LinkedList是链表的数据结构
数据操作层面:
对于随机访问get和set,ArrayList优于LinkedList
对于新增和删除操作add和remove,LinedList比较占优势
HashMap 底层是数组+链表 ,是hash表
hashmap的hash冲突怎么解决?
再哈希法等
Redis数据类型?
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
string 类型的值最大能存储 512MB
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
Redis 的 Set 是 string 类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
Redis 穿透?雪崩?
kafka 相关
kafka 可以脱离zookeeper 单独存在吗?
不能, 因为zookeeper 是管理和 协调 kafka节点
kafka有几种保存策略?
按照过期时间保存,按照数据大小保存
线程池相关
ExecutorService 的参数相关?
springboot 相关
1、在用@Scheduled实现定时执行的时候,发现这个默认是单个运行的,同一时刻只会有一个任务执行。如果你写了多个方法任务,如果其中一个正在执行,则另一个任务会等待,直到另一个执行完!
如果要同时运行多个定时任务只需要在启动类加入
/**
*
*〈简述〉修复同一时间无法执行多个 定时任务问题
*〈详细描述〉
* @author
* @return
*/
@Bean
public TaskScheduler taskScheduler(){
ThreadPoolTaskScheduler taskExecutor = new ThreadPoolTaskScheduler();
taskExecutor.setPoolSize(50);
return taskExecutor;
}
2、springboot 启动之前,怎样执行之前就进行一些数据初始化了?
mysql 相关
1、索引的类型
旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。
不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引
(1)normal 普通索引
表示普通索引,大多数情况下都可以使用
(2)unique唯一索引
使用最多的索引类型
表示唯一的,不允许重复的索引,可设置为unique
唯一索引:加速查询 + 列值唯一(可以有null)
主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
注意: 组合索引有顺序可言,例如索引‘ABC’ 必须从左到右连续,才会全部生效,不然只有第一个A索引生效
(3)full Text 全文索引
表示全文收索,在检索长文本的时候,效果最好,但是在检索的时候数据量比较大的时候,现将数据放入一个没有全局索引的表中,然后在用Create Index创建的Full Text索引,要比先为一张表建立Full Text然后在写入数据要快的很多,FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题
(4)spatial 空间索引
空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建
2.索引的方法
(1)BTREE(B树(可以是多叉树)) {主流使用}
(2)HASH(key,value) 这种方式对范围查询支持得不是很好
3、为什么主键索引比其他索引快?为什么索引快?
4、事务的隔离级别
读未提交 :有脏读
读已提交 : 不可重复读
可重复读:
串行化
5、事务的传播
(1)PROPAGATION_REQUIRED:如果有事务, 那么加入事务, 没有的话新建一个
@Transactional(propagation = Propagation.REQUIRED)(默认)
public void methodA() {
methodB();
// do something
}
@Transactional(propagation = Propagation.REQUIRED)
public void methodB() {
// do something
}
(2)PROPAGATION_SUPPORTS:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
@Transactional(propagation = Propagation.SUPPORTS)
(3)PROPAGATION_MANDATORY:
如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
(4)PROPAGATION_REQUIRES_NEW
需要使用 JtaTransactionManager作为事务管理器。
它会开启一个新的事务。如果一个事务已经存在,则先将这个存在的事务挂起
(5)PROPAGATION_NOT_SUPPORTED 总是非事务地执行,并挂起任何存在的事务。
(6)PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常。
(7)PROPAGATION_NESTED 如果一个活动的事务存在,则运行在一个嵌套的事务中。 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行