记录学弟的最近几次面试经验
面试公司性质:多个
TItle:不定
背景:计算机专业19届毕业生,实习+工作实际2年以上
薪资要求:13K+
Q1:说下mysql中having
A:引入having的原因:where无法与聚合函数一起使用,通常与group by 一起使用,用于再次过滤结果集;where 用于过滤原始数据,而having可以过滤经where、group by 筛选后的结果;where 不支持聚合函数,having支持。
Q2:说下 mysql的循环
A:mysql 的循环与一般的java循环类似,声明变量、游标等,以begin-end标识开始和结束,也支持使用continue、break关键字。
Q3:说下mysql中的分页
A:分页一般需要两个传入值(页码 & 每页条数),使用limit关键字,在结果中查询(页码-1)*每页条数~页码*每页条数的数据,返回给前端。
Q4:说下 mysql中的关键字以及函数
A:关键字 略
常用的函数
count(*) | 返回结果集的行数 |
sum() | 返回结果的算术和 |
max()/min() | 返回最大/最小值 |
substr() | 截取字符串 |
decode() | 类似三目运算符,为空则A、非空则B(oracle才有) |
nvl() | 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。 |
Q5:说下mysql中多表联查
A:一般使用left join、right join、join、union进行多表联查,具体情况略;
Q6:说下mysql查看执行效率
A:一般可以使用 explain 进行查看,结果集中:
id | 这是SELECT的查询序列号 |
select_type | select_type就是select的类型 |
table | 显示这一行的数据是关于哪张表的 |
type | 这列最重要,显示了连接使用了哪种类别,有无使用索引,是使用Explain命令分析性能瓶颈的关键项之一 |
possible_keys | 列指出MySQL能使用哪个索引在该表中找到行 |
key | 显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL |
key_len | 显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好 |
ref | 显示使用哪个列或常数与key一起从表中选择行 |
rows | 显示MySQL认为它执行查询时必须检查的行数 |
Extra | 包含MySQL解决查询的详细信息,也是关键参考项之一 |
Q7:说下mysql中的索引原理
A:实现是通过b+树去实现的,本质是通过缩小搜索范围,并将无序的事件变为有序事件,来提高查询效率。建立索引比较慢,索引建立完成后则查询效率极大地提升。一言蔽之:索引是牺牲硬盘空间,建立一定的数据结构,使查询的范围减小,从而提升查询的效率。
Q8:说下mysql中的优化
A:常用语句级优化手段:mysql的最左匹配、oralce的最右;使用limit关键字;使用join代替in;
表级优化手段:建立索引;大数据量表分表并使用union合并;多列表拆分并使用join关联;
库级优化手段:建立主从库;热/冷数据分库;历史数据分库;缓存库(redis);
Q9:说下mysql中的事务
A:事务是必须满足4个条件(ACID)::原子性(Atomicity&#