本文首发于 cartoon的博客
转载请注明出处: https://cartoonyu.github.io/c...
抽象类与接口的区别
类
变量
方法
作用
线程不同步集合转换成线程同步集合以及区别
使用Collections的synchronizedXxx方法进行集合的转换
使用java.util包中的ConCurrent方法进行包装
java常见异常以及发生场景(最少5个exception)
OutOfMemoryError
ClassCastException
NullPointerException
SQLException
InterruptedException
IndexOutOfBoundException
为什么要用线程池,线程池有什么参数可以对线程池进行配置
使用线程池原因
参数
corePoolSize
BlockingQueue
List,Set,Map的区别
存储元素
元素有序性
元素可重复性
继承接口
Iterator与ListIterator的区别
继承性
遍历集合
遍历方向
迭代时修改元素
迭代时移除元素
垃圾回收算法
标记-清理
复制
标记-整理
char与varchar的区别
数据插入方面
当插入元素小于定义长度
空格问题
数据最后出现空格
检索速度
数据库的事务特性
数据库中select语句执行流程(客户端到存储引擎)
查询缓存中是否有执行的记录
分析器进行词法分析,语法分析
词法分析
语法分析
sql语句经过优化器选择最佳执行策略
sql语句交由执行器进行存储引擎的操作并返回结果
数据库中数据更新语句执行流程(客户端到存储引擎)
1. 客户端通过TCP三次握手与服务端进行连接
2. 连接器判断账号信息是否有效
1. 有效,则进入第三步
2. 无效,连接器返回Access denied的错误
3. 查询缓存中是否有执行的记录
1. 不建议使用,可以通过query_cache_type关闭,MySQL 8.0去除了查询缓存的功能
2. 有执行记录,则返回上次执行结果
3. 没有执行记录,进入第四步
4. 分析器进行词法分析,语法分析
1. 词法分析
1. 判断输入的SQL语句中的关键词的含义
2. 语法分析
1. 判断SQL是否合法
2. 若合法,进入第五步
3. 若不合法,返回 You have an error in your SQL syntax错误到客户端
5. sql语句经过优化器选择最佳执行策略
6. sql语句交由执行器进行存储引擎的操作并返回结果
7. 两段式提交
1. 检查并读入相关数据页到内存
2. 将更新语句的操作行写入内存
1. 写入操作记录到readlog中,处于prepare状态
2. 写入操作记录到binlog中
3. 事务提交,处于commit状态
redis的数据类型以及底层实现数据结构
1. string
1. 动态字符串
2. hash
1. 数据量小,压缩链表
2. 数据量大,哈希表
3. list
1. 数据量小,压缩列表
2. 数据量大,双循环链表
4. 有序集合
1. 数据量小,压缩链表
2. 数据量大,跳表
5. set
1. 数据量小,有序数组
2. 数据量大,哈希表