JDBC面试题(二)

1、什么是sql注入,如何防止sql注入

SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。

如何防止sql注入:

使用ORM框架

使用正则表达式^[a-zA-Z0-9]+$对输入进行验证,只能是数字和字母

使用占位符?进行站位,使注入失效

2、什么是模糊查询

是指搜索系统自动按照用户输入关键词的同义词进行模糊检索,从而得出较多的检索结果。

select * from student where sname like '%张%'

3、delete与truncate的区别

1、条件删除

delete是带where的可以按条件删除,但truncate是删除整张表

2、事务回滚

delete是数据库操作语言,操作时会放到rollback segment中,可以被回滚,而truncate是数据定义语言,操作时不会进行存储,不能进行回滚

3、清理速度

少量数据下速度差距不大

大量数据下

delete要回滚,还要记录日志,所以速度较慢,但也相对安全

truncate不需要支持回滚,所以速度较快

4、高水位重置

随着不断地进行表记录的DML操作,会不断提高表的高水位线(HWM),delete操作之后虽然表的数据删除了,但是并没有降低表的高水位,随着DML操作数据库容量也只会上升,不会下降。所以如果使用delete,就算将表中的数据减少了很多,在查询时还是很和delete操作前速度一样。

而truncate操作会重置高水位线,数据库容量也会被重置,之后再进行DML操作速度也会有提升。

4、表级锁和行级锁

表级锁:MySQL中锁定力度最大的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也少,加锁速度快,不会出现死锁,出发锁冲突的概率最高,并发度最低,MyISAM和InnoDB引擎都支持

行级锁:MySQL中锁定力度最小的一种锁,并发度最小,但加锁开销也大,加锁慢,会出现死锁

5、内联查询和外联查询的区别

内联查询:

也成为内连接,它仅返回两个表中匹配成功的记录,换句话说,只有在表A中的行与表B中的行在指定的连接列上匹配时,这条记录才会出现在结果集中。内联查询不包含任何一个表中不匹配的行。例如,假设有两个表:员工表(Employees)和部门表(Departments)。员工表中有员工ID和姓名,部门表中有部门ID和部门名称。当执行“SELECT * FROM Employees INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID”这样的内联查询时,结果集将包含所有在两个表中都存在的员工及其部门信息。

外联查询:

外联查询包括左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。

左外连接(Left Outer Join):

左外连接返回左表(A)的所有记录,即使右表(B)中没有匹配的记录。如果右表中有匹配的记录,则结果集中会显示左表的记录以及右表中匹配到的记录。例如,执行“SELECT * FROM Employees LEFT OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID”时,即使某些员工没有分配部门,他们也会出现在查询结果中,其部门信息为NULL。

右外连接(Right Outer Join):

右外连接与左外连接相反,它返回右表(B)的所有记录,即使左表(A)中没有匹配的记录。如果左表中有匹配的记录,则结果集中会显示右表的记录以及左表中匹配到的记录。例如,“SELECT * FROM Employees RIGHT OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID”将返回所有部门,即使某些部门没有员工。

全外连接(Full Outer Join): 全外连接结合了左外连接和右外连接的特点,返回两个表中所有的记录。如果一方有匹配的记录,则结果集中会显示匹配的记录;如果没有匹配,则显示NULL。例如,“SELECT * FROM Employees FULL OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID”将返回所有员工及其部门信息,以及所有部门,即使某些部门没有员工或者某些员工没有分配部门。

6、左联查和右联查的区别

left join:以左表为标准,查询输出左表中没有的字段信息

select (*|指定字段) from 左表 left join 从表 on 匹配条件;

可以配合where语句、order by语句、逻辑语句等一起使用

right join:以右表为标准,查询输出右表中没有的字段信息

7、MyISAM 和 InnoDB 的区别

MySQL 5.5 版本之前,MyISAM 引擎是 MySQL 的默认存储引擎,但是,MyISAM 不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复;

MySQL 5.5 版本之后,MySQL 引入了 InnoDB(事务型数据库引擎),MySQL 5.5 版本后默认的存储引擎为 InnoDB;

事务:MyISAM不支持事务;InnoDB是事务型引擎,可以使用Commit和Rollback

并发:MyISAM只支持表级锁,而InnoDB支持行级锁,和表级锁,默认为行级锁。

外键:MyISAM不允许创建外键,而InnoDB支持外键

备份:InnoDB支持在线热备份

崩溃恢复:MyISAM崩溃后发生损坏的概率比InnoDB高很多,而且恢复的速度也慢很多。

8、B树和B+树的区别

1、关键字不同

b树每一个关键字有且只出现一次,且所有关键字按照从小到大的顺序进行排列。

而b+树有n棵子树的非叶节点,有n个关键字,关键字会存储重复。非叶节点只保存关键字,仅包含子树的最大或者最小的关键字,只用来索引,关键字从小到大排列。

2、存储内容不同

b树每个节点除了存储关键字,还存储数据。

b+树所有叶子节点存储内容包含全部的关键字信息,以及指向关键字记录的指针。

3、查找不同

b树查找相当于二分查找,可以在非叶节点结束,且若经常访问的元素离根节点较近,则访问更加迅速。

而b+树的查找路径是由根到叶子节点,每次查找路径长度比较稳定。

9、${}和#{}的区别

#{}:是占位符
可以防止sql注入

动态获取id的时候获取的是"?"

默认值为arg0,arg1或param1,param2

${}:是拼接符

不能防止sql注入

动态获取id的时候获取的是1

默认值为param1,param2

10、MVC

JDBC面试题(二)_第1张图片

你可能感兴趣的:(mysql,java)