校园招聘进去的,先是投递了简历,然后通知现场面试,HR电话通知就约好时间就去了,面了两面,问的问题比较多主要是项目经验的匹配度,面试感受还可以吧
面试官问的面试题: 三:数据库(这里主要看mysql innoDB)
1.mysql引擎类别
MyISAM:不支持事务,表锁,不支持外键,非聚集索引,数据文件是分离的,适合大量读应用
InnoDB:支持事务,支持外键,表锁和行锁、聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。
其他:NDB和Memory(表中的数据存放在内存中)、Maria(新开发的引擎,设计目标主要是用来取代原有的MyISAM存储引擎)
2.InnoDB表锁和行列锁的区别
表锁:略
行锁:
大体两种:共享锁和排它锁
共享锁:允许事务读取一行数据。
排它锁:允许事务删除或者更新一条数据。
行锁是通过给索引上的索引项加锁来实现的
使用:由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。
3.mysql索引
对于innodb来说
使用上:主键索引、唯一索引、普通索引、全文索引(高版本开始支持)、组合索引
原理上:b+树,自适应hash索引,聚集索引(主键默认为辅助索引,如果没有主键,自动选取一个合适的列建立,存储索引和行数据)、辅助索引(存储所在列数据和对应聚合索引位置)
使用1:组合索引左匹配原则
使用2:
mysql EXPLAIN 命令
id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.
select_type: SELECT 查询的类型.
table: 查询的是哪个表
partitions: 匹配的分区
type: join 类型
possible_keys: 此次查询中可能选用的索引
key: 此次查询中确切使用到的索引.
ref: 哪个字段或常数与 key 一起被使用
rows: 显示此查询一共扫描了多少行. 这个是一个估计值.
filtered: 表示此查询条件所过滤的数据的百分比
extra: 额外的信息
4.索引失效常见情况
使用函数、左匹配、like,or(必须所有的or条件都必须是独立索引),is null,等