redis、mysql、maven必刷

小凯   |     |   面试题   |   11分钟   |   700浏览  

redis篇

1、redis常用数据类型有哪些?使用场景。

redis常用数据类型有5种。分别是:string、hash、list、set、zset。
string:存字符串。万精油。缓存、计数器。
hash:存对象。分组存对象属性、购物车。
list:存有序列表。简单消息队列、新闻、任务管理。
set:去重列表。标签、好友列表。
zset:去重有序列表。排行榜、分数查询数据

2、redis能否替代MySQL?

不能,redis的查询速度很好,但是MySQL作为关系型数据库,能够应对复杂的查询,这是redis不能做到的。

mysql篇

1、什么是mysql锁?有什么用?

mysql锁是为了解决并发事务对相同范围数据造成的负面影响而出现的。

2、mysql锁有哪些?

乐观锁、悲观锁。
悲观锁

  • 按照锁范围:全局锁、表锁、页锁、行锁和间隙锁。其中行锁包括(记录锁+间隙锁=临键锁)
  • 按照锁性质:读锁(共享锁)、写锁(排他锁)
3、如何实现乐观锁?

通过给数据库表添加标识列(version或者时间戳)。修改的时候先查询该修改数据的标识列,在修改语句上面添加标识列为条件,并且标识列发生改变(+1)。标识列数据相同,则更新成功;反之则更新失败,需要回滚或重新执行。

4、mysql索引有什么用?为什么能加快查询速度?

索引相当于一本书的目录,根据索引可以加快查询速度。相当于给表中的某一列添加索引后,根据该列查询能让mysql查的更快,前提是数据量大的时候。
索引底层常用B+树数据结构。B+树是常用于数据库和文件系统一种数据结构,可以高校的存储检索有序数据。

5、什么情况下不适合使用mysql索引?

  1. 表中数据量小的时候不建议使用
  2. 大量写操作的表:频繁操作数据时也会随着索引跟着改变,甚至索引失效,降低整体性能。
  3. 不经常使用的列:索引创建而不常使用,会增加数据库的存储和维护开销。

6、mysql优化思路?

  1. 建表时列字段尽可能小
  2. 字段尽量不能为null:查询操作时mysql处理中会增加null值与索引的比较,增加额外的开销。
  3. 尽量连接查询代替子查询,子查询会在内存中建立临时表,增加内存使用率。
  4. 查询数据时,只查需要的列。
  5. 考虑使用索引

7、InnoDB和MyISAM的区别?

属性 \ 存储引擎 InnoDB MyISAM
事务 支持事务 不支持事务
并发(mysql锁) 全局锁、表锁、页锁、行锁 表锁
外键 支持外键 不支持外键
备份 支持真正热备份 不是真正热备份
崩溃恢复 相对崩溃概率低,恢复快 崩溃概率高,恢复慢
全文搜索 不支持全文搜索 支持全文搜索
空间占用 占用高(事务、行级锁占用磁盘) 相对占用少
插入时是否会锁表 会锁表 不会锁表
其他特性 支持压缩表和空间索引

8、mysql里如果想存入小数应该使用什么类型?根据具体的业务场景说明。

存储金融建议使用decimal,存储百分比建议使用float

9、mysql中char和varchar有什么区别?

char是定长,varchar是不定长。前者在定义字段时划分好了占用空间,后者则根据实际的内容分配占用空间。

  • 如果某列字符串的所有值长度比较固定,建议使用char
  • 如果某列存储内容设计编码UTF8类似的,因为每个字符占用字节不同,所以建议使用可变类型varchar,避免内容漏失。

maven篇

综合篇

1、redis和mysql双写不一致?如何解决?

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧☕
微信
支付宝
  条评论