Java Mysql数据库面试题(一)


前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

1、CHAR 和 VARCHAR 的区别?

  • 1.char 表示是固定长度的,varchar表示是长度可变的;
  • 2.char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,就按实际长度存储;
  • 3.char最多能存放255(2的8次方)个字符,和编码无关,varchar最多能存放65532(2的16次方)个字符。

2、Mysql锁有哪些,如何理解 ?

在数据库中如果有多个事务同时操作同一数据,如果不加锁就可能导致数据不一致。

按锁粒度分类:

  • 1.⾏锁:锁某⾏数据,锁粒度最⼩,并发度⾼,但可能会出现死锁,是基于索引实现的;
  • 2.表锁:锁整张表,锁粒度最⼤,并发度低,但不会出现死锁;
  • 3.间隙锁:锁的是⼀个区间,锁粒度和并发都介于二者之间。

按读写分类:

  • 1.共享锁(读锁):是一个事务并发读取某一行记录所需要持有的锁,比如select … in share mode;
  • 2.排他锁(写锁):是一个事务并发更新或删除某一行记录所需要持有的锁,比如select … for update
  • 3.自增锁:是一种特殊的表级锁,主要用于事务中自增主键id;

3、什么是MVCC多版本并发控制?

通俗的讲,MVCC指的是维持一个数据的多个版本,使得读写操作没有冲突,从而提高数据库的读写性能;
它是通过乐观锁来实现的,主要依赖3个模块:隐藏字段、undo log、Read View;对于使用 InnoDB 存储引擎的表来说,它都包含两个必要的隐藏字段:事务id(trx_id)和回滚指针(roll_pointer);
底层原理是这样的:

  • 1.在事务A中修改某条数据,数据库会先对它加排它锁;
  • 2.然后把该条数据拷贝到undo log中,作为副本,用于回滚;
  • 3.拷贝完成后,就修改该条数据,并且修改事务id为当前事务的id,回滚指针指向副本的记录;
  • 4.然后提交事务,释放锁。

4、简述InnoDB和MyISAM的区别:

  • 1.InnoDB⽀持事务,MyISAM不支持事务;
  • 2.InnoDB⽀持表锁和行锁,MyISAM只⽀持表锁(每次操作都是对整个表加锁);
  • 3.InnoDB的叶子节点存储是行数据,MyISAM存储的是磁盘地址(相当于回表);
  • 4.InnoDB的索引和数据是在1个文件中(xxx.ibd),MyISAM的索引和数据是分开的2个文件(xxx.myi和xxx.myd),索引存储的是数据文件的磁盘地址。
    相同点:都是在mysql安装目录下的data目录,为每个数据库都建了同名的文件夹,里面保存了每张表的结构和数据,表结构是存储在xxx.frm文件。

5、MySQL 索引类型:

1、按照功能分类,索引主要有四种:

  • 1.普通索引:可以包含多个字段(联合/复合索引),可以同时存在多个普通索引;
  • 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值