java面试刷题------数据库

  1. JDBC流程
    1,加载驱动
    2,获取连接
    3, 创建执行对象
    4, 执行sql语句
    5, 处理运行结果
    6, 释放资源

  2. 在进行数据库编程时,连接池有什么作用?
    答:由于创建连接和释放连接都有很大的开销,为了提升系统访问数据库的性能,可以事先创建若干连接置于连接池中,需要时直接从连接池获取,使用结束时归还连接池而不必关闭连接,从而避免频繁创建和释放连接所造成的开销,这是典型的用空间换取时间的策略。池化技术在Java开发中是很常见的,在使用线程时创建线程池的道理与此相同。基于Java的开源数据库连接池主要有:C3P0、Proxool、DBCP、BoneCP、Druid等。

  3. 事务的ACID是指什么?
    答:
    原子性(Atomic):事务中各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败;
    一致性(Consistent):事务结束后系统状态是一致的;
    隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态;
    持久性(Durable):事务完成后所做的改动都会被持久化,即使发生灾难性的失败。通过日志和同步备份可以在故障发生后重建数据。

  4. 数据库的三范式是什么?
    第一范式: 列不能重复(一个列不能多个属性)
    第二范式: 消除部分依赖(非主属性依赖主键全部,不是依赖主键的一部分)
    第三范式: 消除传递依赖(非主属性是直接依赖于主键,还是依赖非主键列)

  5. mysql 的内连接、左连接、右连接有什么区别?
    内连接(inner join): 显示左右两边都有的
    左连接(left join): 左边的为主,右边没有对应的为null
    右连接(right join): 右边为主,左边没有对应的为null(于左连接相反)

  6. 说一下 mysql 常用的引擎?
    InnoDB 和 MyISAM
    区别: InnoDB的数据文件本身就是索引文件 而MyISAM的索引和数据是分开的。
    存储引擎采用的是 表级锁;存储引擎既支持行级锁和事务,也支持表级锁,

  7. 什么是存储过程?有哪些优缺点?
    存储过程是一些预编译的SQL语句。
    存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。
    优点:
    1, 存储过程是一个预编译的代码块,执行效率比较高
    2, 一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率
    3, 可以一定程度上确保数据安全

  8. 索引是什么?有什么作用以及优缺点?
    一种可以加快sql高效获取数据的数据结构,类似书籍的目录.
    索引按排列方式分:
    聚集索引(主键):表记录的排列顺序和索引的排列顺序是一致的
    非聚集索引:表记录的排列顺序和索引的排列顺序不一致
    按类型分:普通索引、唯一索引、主键索引、全文索引
    索引优势和缺点:
    (1) 索引加快数据库的检索速度
    (2)索引降低了插入、删除、修改等维护任务的速度
    (3)索引需要占物理和数据空间
    索引的底层实现: B+树(更矮更宽,查询层次更浅)

  9. mysql 的锁
    表级锁:开销小,加锁快,不会出现死锁,发生锁冲突概率高,并发程度低。
    行级锁:开销大,加锁慢,会出现死锁,发生锁冲突概率低,并发程度高。
    共享锁: 排它锁又叫写锁
    排他锁: 共享锁又叫读锁

  10. 死锁 和避免死锁的方法
    当两个事务都需要获得对方持有的排他锁才能完成事务,这样就导致了循环锁等待,也就是常见的死锁类型。
    myisam是表级锁,要么一次性获取所有的锁,要么就等待.不会出现死锁
    在 innodb 中,除单个 sql 组成的事务外,锁是逐步获得的,这就决定了在 innodb 中发生死锁是可能的。
    几种避免死锁的方法:
    1、(顺序相同)在应用中,如果不同的程序会并发存取多个表,应尽量约定以相同的顺序来访问表,这样可以大大降低产生死锁的机会。
    2、(获取足够级别的锁)在事务中,如果要更新记录,应该申请足够级别的锁,即排他锁,而不应先申请共享锁,更新时再申请排他锁,因为当用户申请排他锁时,其他事务可能又已经获得了相同记录的共享锁,从而造成锁冲突,甚至死锁。
    如果出现死锁,可以用 show innodb status 命令来确定最后一个死锁产生的原因。返回结果中包括死锁相关事务的详细信息,如引发死锁的 sql 语句,事务已经获得的锁,正在等待什么锁,以及被回滚的事务等。可以据此分析产生死锁的原因。

  11. 维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?
    我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

  12. 触发器
    触发器(TRIGGER)是MySQL的数据库对象之一。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行。
    触发事件:有before,after.触发事件:有insert,update,delete三种。触发类型:有行触发、语句触发

  13. 什么叫视图?游标是什么?
    视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。
    游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

  14. 什么是主键?什么是外键?
    主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。
    外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。

  15. 如何做 mysql 的性能优化?
    会放弃使用索引操作(这些都要避免使用)
    1, SELECT * 会放弃使用索引,全局查找
    2, 在 where 子句中使用!=或<>操作符
    3, 避免在 where 子句中使用 or 来连接条件
    其他优化方法:
    1, 减少子查询
    2, 一个表的索引不要超过6个
    3, 索引列种不要有重复数据
    4, 尽量使用数字型字段,
    5, 不要有超过5个以上的表连接(JOIN)

  16. mysql 问题排查都有哪些手段?
    1, 查询事务信息
    select * from information_schema.INNODB_TRX;
    2, 查询数据库锁等待信息
    select * from information_schema.INNODB_LOCK_WAITS;
    3, 手动杀掉某个进程
    kill trx_mysql_thread_id;
    4, 数据库客户端连接ip统计
    SELECT
    substr(host, 1, instr(host, ‘:’) - 1),
    count()
    FROM information_schema.processlist
    WHERE command <> ‘Binlog Dump’
    GROUP BY substr(host, 1, instr(host, ‘:’) - 1)
    ORDER BY count(
    ) DESC;

  17. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 ID 是几?
    插入数据ID为8,自增长不受删除数据的影响
    自增长列可以指定ID,但不能小于自增长的值
    重置自增长列的值可以使用语句:ALTER TABLE tableName AUTO_INCREMENT=defaultValue

  18. char 和 varchar 的区别是什么?
    在实际字符串未达到定义长度时,char会补0到定义长度,varchar不会
    尾部还有空格时,char会将其去掉,varChar则不会

  19. Sql的decimal、float、double类型的区别
    float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)
    double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)
    decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)

  20. 说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)
    索引有B-TREE、BIT、CLUSTER等类型。ORACLE使用了一个复杂的自平衡B-tree结构;通常来说,在表上建立恰当的索引,查询时会改进查询性能。但在进行插入、删除、修改时,同时会进行索引的修改,在性能上有一定的影响。有索引且查询条件能使用索引时,数据库会先度取索引,根据索引内容和查询条件,查询出ROWID,再根据ROWID取出需要的数据。由于索引内容通常比全表内容要少很多,因此通过先读索引,能减少I/O,提高查询性能。

参考:
https://blog.csdn.net/hectorhua/article/details/13767361
https://blog.csdn.net/qq_22222499/article/details/79060495
https://zhuanlan.zhihu.com/p/23713529?refer=passer
https://blog.csdn.net/hectorhua/article/details/13767361
https://blog.csdn.net/xy3233/article/details/86314329
https://blog.csdn.net/wang0112233/article/details/78418698
https://blog.csdn.net/xy3233/article/details/86591489

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值