sfjc面试记录
1、MySQL组件和工作原理
MySQL主要组件:
① Connectors:与客户端工具和其他编程语言中的sql 语句进行交互
② Connection Pool (连接池):管理缓冲用户连接,线程处理等需要缓存的需求
③ Management Serveices & Utilities:处理器/系统管理和控制工具
④ SQL Interface (SQL接口):接受用户的SQL命令,并且返回用户需要查询的结果。
⑤ Parser (解析器):SQL命令传递到解析器的时候会被解析器验证和解析。
主要功能:
a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,后面SQL语句的传递和处理就是基于这个结构的
b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的,语句将不会继续执行下去
⑥ Optimizer (查询优化器,可以利用explain语法查询SQL语句的执行计划)
SQL语句在查询之前会使用查询优化器对查询进行优化(产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果) 他使用的是“选取-投影-联接”策略进行查询。
⑦ Cache和Buffer (查询缓存)
⑧ Engine (存储引擎)、
工作原理:
1)连接器(connector)拿到程序请求,将请求暂时存在连接池(connection pool)中,并有处理器(Management Sercice&Utilities)管理。
2)当该请求从等待队列进入处理队列,管理器(Management Service&Utilities)会将该请求丢给SQL接口(SQL interface)
3)SQL接口(SQL interface)接收到请求后,它会将请求进行hash处理并与缓存(Cache和Buffer)中的结果进行对比,若匹配则返回缓存(Cache和Buffer)中的结果,否则继续完整流程。
4)SQL接口(SQL interface)把请求传递给解析器(Parser),解析器(Parser)判断SQL是否正确,正确则转换为数据结构,进行后续步骤,错误中断执行,返回
5)解析器(Parser)将数据结构传递给优化器(Optimizer),优化器(Optimizer)会产生多种执行计划,选择最优的执行计划执行
6)确定最优的执行计划后,SQL会交给存储引擎(Engine)来处理,存储引擎从存储设备中取得相应数据,原路返回给程序
事务的隔离级别:
数据库默认隔离级别: mysql ---repeatable;oracle、sql server ---read commited
在MySQL标准中定义了四种隔离级别:
READ UNCOMMITTED(读未提交):事务中的修改即使未提交也是对其它事务可见
READ COMMITTED(读提交):事务提交后所做的修改才会被另一个事务看见,可能产生一个事务中两次查询的结果不同。
REPEATABLE READ(可重读):只有当前事务提交才能看见另一个事务的修改结果。解决了一个事务中两次查询的结果不同的问题。
SERIALIZABLE(串行化):只有一个事务提交之后才会执行另一个事务。
附:参考博客:
https://www.cnblogs.com/daijw/p/9250331.html
https://cloud.tencent.com/developer/article/1347090
https://www.cnblogs.com/xiaohaillong/p/6079551.html
2、MySQL有哪些引擎
Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB
常用引擎有:
InnoDB引擎
1)支持事务,实现了标准的4个事务隔离级别
2)支持外键、行级锁等数据库的高级特性
3)支持每个表的数据和索引存放在单独文件中(innodb_file_per_table)
4)当需要使用数据库的事务时,该引擎就是首选。由于锁的粒度小,写操作是不会锁定全表的。所以在并发度较高的场景下使用会提升效率的
5)索引基于聚簇索引建立,对于主键查询有较高性能
6)使用的B+索引
MyISAM引擎
1)不支持事务和行级锁
2)MyISAM对整张表加锁而不是对行,所以不适用写操作比较多的场景
3)性能较InnoDB更好,执行速度更快
4)不支持单表一个文件,会将所有的数据和索引内容分别存在两个文件中
5)如果表的读操作远远多于写操作时,并且不需要事务的支持的。可以将MyIASM作为数据库引擎的首选
6)使用的B+索引
Memory引擎
1)数据存储在内存中,不消耗IO
2)存储数据速度较快但不会被保留,一般作为临时表的存储被使用
3、数据库一般用什么字段作为索引
4、mybatis工作原理
5、引入小公司开发的开源组件,产生了bug怎么办?当初怎么考虑的?
6、Linux,查看进程用了哪些端口号,如何查看建立的连接
7、Linux上可以生成Excel文件么
8、如何在jvm启动时提高某个应用的内存
9、数据库优化
10、kafka原理
11、对springboot有哪些了解?用过哪些注解。
12、springboot和spring的区别
13、springboot集成mybatis,如何开启驼峰命名法
14、了解过哪些新技术
15、long类型的字段,传到前台后面出现00怎么解决
16、将哪些数据缓存到redis里面,用户更改缓存的数据怎么办?
17、你参数与了项目的重构,基于什么考虑重构呢?你们项目重构前端使用了angular,花了多长时间学习呢?