java基础常见面试题系列,73-80

10 篇文章 0 订阅
5 篇文章 0 订阅

73、XML 文档定义有几种形式?它们之间有何本质区别?解析 XML 文档有哪几种方式?

XML 文档定义分为 DTD 和 Schema 两种形式,二者都是对 XML 语法的约束,其 本质区别在于 Schema 本身也是一个 XML 文件,可以被 XML 解析器解析,而且 可以为 XML 承载的数据定义类型,约束能力较之 DTD 更强大。对 XML 的解析主 要有 DOM(文档对象模型,Document Object Model)、SAX(Simple API for XML)和 StAX(Java 6 中引入的新的解析 XML 的方式,Streaming API for XML),其中 DOM 处理大型文件时其性能下降的非常厉害,这个问题是由 DOM 树结构占 用的内存较多造成的,而且 DOM 解析方式必须在解析文件之前把整个文档装入内 存,适合对 XML 的随机访问(典型的用空间换取时间的策略);SAX 是事件驱动 型的 XML 解析方式,它顺序读取 XML 文件,不需要一次全部装载整个文件。当 遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件, 用户通过事件回调代码来处理 XML 文件,适合对 XML 的顺序访问;顾名思义, StAX 把重点放在流上,实际上 StAX 与其他解析方式的本质区别就在于应用程序 能够把 XML 作为一个事件流来处理。将 XML 作为一组事件来处理的想法并不新 颖(SAX 就是这样做的),但不同之处在于 StAX 允许应用程序代码把这些事件逐 个拉出来,而不用提供在解析器方便时从解析器中接收事件的处理程序。

74、你在项目中哪些地方用到了 XML?

XML 的主要作用有两个方面:数据交换和信息配置。在做数据交换时,XML 将数 据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与 解压缩后再从 XML 文件中还原相关信息进行处理,XML 曾经是异构系统间交换数 据的事实标准,但此项功能几乎已经被 JSON(JavaScript Object Notation)取 而代之。当然,目前很多软件仍然使用 XML 来存储配置信息,我们在很多项目中 通常也会将作为配置信息的硬代码写在 XML 文件中,Java 的很多框架也是这么做 的,而且这些框架都选择了 dom4j 作为处理 XML 的工具,因为 Sun 公司的官方 API 实在不怎么好用。

75、阐述 JDBC 操作数据库的步骤。

操作MySql数据库,

第一步:创建数据库,

第二步:创建实体类,导入jar包。

第三步:创建链接数据库工具类

第四部:执行语句

第五步:关闭流

76、Statement 和 PreparedStatement 有什么区别?哪个性 能更好?

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

77、使用 JDBC 操作数据库时,如何提升读取数据的性能?如 何提升更新数据的性能?

要提升读取数据的性能,可以指定通过结果集(ResultSet)对象的 setFetchSize() 方法指定每次抓取的记录数(典型的空间换时间策略);要提升更新数据的性能 可以使用 PreparedStatement 语句构建批处理,将若干 SQL 语句置于一个批处 理中执行。

78、在进行数据库编程时,连接池有什么作用?

由于创建连接和释放连接都有很大的开销(尤其是数据库服务器不在本地时,每 次建立连接都需要进行 TCP 的三次握手,释放连接需要进行 TCP 四次握手,造成 的开销是不可忽视的),为了提升系统访问数据库的性能,可以事先创建若干连 接置于连接池中,需要时直接从连接池获取,使用结束时归还连接池而不必关闭 连接,从而避免频繁创建和释放连接所造成的开销,这是典型的用空间换取时间 的策略(浪费了空间存储连接,但节省了创建和释放连接的时间)。池化技术在 Java 开发中是很常见的,在使用线程时创建线程池的道理与此相同。基于 Java 的 开源数据库连接池主要有:C3P0、Proxool、DBCP、BoneCP、Druid 等。

补充:在计算机系统中时间和空间是不可调和的矛盾,理解这一点对设计满足性 能要求的算法是至关重要的。大型网站性能优化的一个关键就是使用缓存,而缓 存跟上面讲的连接池道理非常类似,也是使用空间换时间的策略。可以将热点数 据置于缓存中,当用户查询这些数据时可以直接从缓存中得到,这无论如何也快 过去数据库中查询。当然,缓存的置换策略等也会对系统性能产生重要影响,对 于这个问题的讨论已经超出了这里要阐述的范围。

79、什么是 DAO 模式?

DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了 抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访 问操作。在实际的开发中,应该将所有对数据源的访问操作进行抽象化后封装在 一个公共 API 中。用程序设计语言来说,就是建立一个接口,接口中定义了此应 用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该 类对应一个特定的数据存储。DAO 模式实际上包含了两个模式,一是 Data Accessor(数据访问器),二是 Data Object(数据对象),前者要解决如何访 问数据的问题,而后者要解决的是如何用对象封装数据。

80、事务的 ACID 是指什么?

1、原子性(Atomicity)

2、隔离性(Isolation)

3、一致性(Consistency)

4、D(Durability)持久性

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值