手记

JDBC

1。请你讲解一下数据连接池的工作机制?

  • J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并标记为忙。如果当前没有空闲的连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接标记为空闲,其他调用就可以使用这个连接。

2.继承映射?

继承关系的映射的策略有三种

  • 每个继承结构一张表,不管多少个子类都用一张表

  • 每个子类一张表,公共信息放一张表,特有信息放单独的表

  • 每个具体类一张表,有多少个子类就有多少张表

    第一种方式属于单表策略,其优点在于查询子类镀锡的时候无需表连接,查询速度快,适合多态查询;缺点是可能导致表很大。后两种方式属于多表策略,其优点在于数据存储紧凑,其缺点是需要进行连接查询,不适合多态查询

3.请你介绍一些你了解的数据库优化方法

  • 选择最合适的字段属性,但一般来说,数据库的表越小,在它上面执行的查询也就会越快。对于某些文本字段,例如省份或者性别,我们可以将他们定义为ENUM类型,因为在MYSQL,ENUM类型被当做数值型数据来处理,而数值型数据被处理起来的速度比文本类型快得多。

  • 使用JOIN来代替子查询

  • 使用联合来代理手动创建的临时表

  • 事务

4.请你说明一下left join和right join的区别

  • left join(左联接)返回包括左表中的所有记录和右表中联接相等的记录

  • right join(右联接)返回包括右表中的所有记录和左表中联结字段相等的记录

5.MySQL的主复制

主从复制是指一台服务器充当主数据库服务器,另一台或者多台充当从数据库服务器,主服务器中的数据自动复制到从服务器中。对于多级复制,数据库服务器即可充当主机,也可充当从机。Mysql主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新

MySQL主从复制的两种情况:同步复制和异步复制,实际复制架构中大部分为异步复制

6.数据库的ACID的特性:

A 原子性:是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

C一致性:一致性指事务前后数据的完整性必须保持一致

I 隔离性:多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离

D持久性:一个事务一旦提交,它对数据库中的数据的改变就是永久性的,即便数据库发生故障也不应该对其有任何影响。

7.三范式:

  • 第一范式(1NF)

    强调的是列的原子性,即列不能够再分成其他几列

  • 第二范式(2NF)

    一个表必有一个主键,而是非主属性必须完全依赖于主键,而不能依赖于主键的一部分

  • 第三范式(3NF)

  • 不存在非主关键字依赖于某个非主关键字的情况

8.数据库乐观锁和悲观锁:

  • 悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿这个数据的时候都会上锁。JAVA synchronize的

  • 乐观锁:每次去拿数据的时候都认为别人不糊修改,所以不会上锁,但是在提交更新的时候回判断一下在此期间别人有没有更新这个数据。

9.数据库隔离级别:

  • 未提交读(Read uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据

  • 提交读:只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别

  • 可重复重复读:InnoB的默认级别,读事务将会禁止写事务看,但允许读事务,写事务则禁止任何其他事务。即事物需要对某些数据进行修改必须对这些数据加 X 锁,读数据时需要加上 S 锁,当数据读取完成并不立刻释放 S 锁,而是等到事物结束后再释放。

  • 串行读:完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。

10.索引:一种提高查找效率的数据结构。B+树实现

11.mysql数据库的两种引擎区别:

  • InnoDB是聚集索引,支持事务,支持行级锁;

  • MyISAM是非聚集索引,不支持事务,只支持表级锁

13.JDBC中如何进行事务处理?

  • Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务。当事务完成之后commit显示提交事务;如果在事务处理过程中发生异常则通过rollback进行事务回滚。初次之外,JDBC3.0还引入了Savepoint保存点的概念,允许通过代设置保存点并让事务回滚到指定的保存点

14、statement和preparestatement

与Statement相比,①PreparedStatement接口代表预编译的语句,它主要的优势在于可以减少SQL的编译错误并增加SQL的安全性(减少SQL注射攻击的可能性);②PreparedStatement中的SQL语句是可以带参数的,避免了用字符串连接拼接SQL语句的麻烦和不安全;③当批量处理SQL或频繁执行相同的查询时,PreparedStatement有明显的性能上的优势,由于数据库可以将编译优化后的SQL语句缓存起来,下次执行相同结构的语句时就会很快(不用再次编译和生成执行计划)。JDBC还提供了CallableStatement接口。存储过程是数据库中一组为了完成特定功能的SQL语句的集合,经编译后存储在数据库中,用户通过指定存储过程的名字给出参数来执行他

15、TCP三次握手,四次挥手、超时重传、滑动窗口、拥塞控制

16、请解释一下,http请求中的304状态码的含义:

  • 304自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。服务器可以告诉浏览器没有变更,进而节省带宽和开销

17、请将一下浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程。

DNS解析、TCP连接、发送HTTP请求、服务器处理请求并返回HTTP报文, 浏览器解析渲染页面





0人推荐
随时随地看视频
慕课网APP