JAVA面试题学习笔记(四)

  1. 在Java语言中,可以使用省略号…来实现可变参数,可变参数通常有如下几个特点:
    1)只能作为最后一个参数出现。如果参数个数不定,当其后边还有相同类型参数时,Java语言无法区分传入的参数属于前一个可变参数还是后面的参数,所以,只能让可变参数位于最后一项。
    2)只能位于变量的类型和变量名之间。
    3)编译器为可变参数隐含创建一个数组,在调用的时候,可以用数组的形式来访问可变参数

  2. 会话跟踪技术主要有如下四种:
    1)page代表与一个页面相关的对象和属性。一个页面由一个编译好的Java Servlet类可以带有任何的include指令,但是没有include动作)表示。这既包括Servlet又包括被编译成Servlet的JSP页面。
    2)request代表与Web客户端发送的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件。
    3)session代表与用于某个Web客户端的一个用户体验相关的对象和属性,一个Web会话经常会跨越多个客户端请求。
    4)application代表与整个Web应用程序相关的对象和属性,实质上是跨越多个Web应用程序,包括多个页面、请求和会话的一个全局作用域。

  3. 列出一些在多线程编程情况下的指导原则:
    1)如果能用volatile代替synchronized,尽可能用volatile。因为被synchronized修饰的方法或代码块在同一时间值允许一个线程访问,而volatile却没有这个限制,因此使用synchronized会降低并发量。由于volatile无法保证原子操作,因此在多线程的情况下,只有对变量的操作为原子操作的情况下才可以使用volatile。
    2)尽可能减少synchronized块内的代码,只把临界区的代码放到synchronized块中,尽量避免用synchronized来修饰整个方法。
    3)尽可能给每个线程都定义一个线程的名字,不要使用匿名线程,这样有利于调试。
    4)尽可能用concurrent容器(ConcurrentHashMap)来代替synchronized容器(HashTable)因为synchronized容器使用synchronized关键字通过对整个容器加锁来实现多线程安全的,性能比较低。而Concurrent容器采用了更加细粒度的锁,因此可以支持更高的并发量。
    5)使用线程池来控制多线程的执行。

  4. 出现在Java程序中的finally代码块是否一定会执行?
    下面给出两个finally代码块不会执行的例子。
    1)当程序在进入try语句块之前就出现异常时,会直接结束,不会执行finally块中的代码。
    2)当程序在try块中强制退出时,也不会去执行finally块中的代码。

  5. Java程序初始化工作可以在许多不同的代码块中完成(例如静态代码块、构造函数等),它们执行的顺序如下:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块以及子类构造函数。

  6. 继承指的是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。在Java语言中,继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以使用父类的功能,但不能选择性地继承父类类只允许单继承,但是为了实现类似于C++语言中多继承的特性,Java语言引入了接口的概念。虽然Java语言只允许继承一个类,但是却可以同时实现多个接口,因此,也就间接地实现了多继承。一个类只能继承一个类,在继承的同时,还可以实现多个接口。

  7. 具体而言,序列化有如下几个特点:
    1)如果一个类能被序列化,那么它的子类也能够被序列化。
    2)由于static(静态)代表类的成员,transient(Java语言关键字,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持)代表对象的临时数据,因此,被声明为这两种类型的数据成员是不能够被序列化的。
    3)子类实现了Serializable接口,父类没有,父类中的属性不能序列化,但是子类中的属性仍能正确序列化。

  8. 数字签名使用发送方的密钥对,发送方使用自己的私有密钥进行加密,而接收方只需要发送方的公开密钥就可以解密,是一种一对多的关系,只要持有发送方公开密钥的人都可以验证数字签名的正确性。
    加密是一种以密码方式发送信息的方法,指的是如下这样一个过程:发送方利用接收方的公钥对要发送的明文进行加密,接收方利用自己的私钥进行解密,其中公钥和私钥是相对的,任何一个作为公钥,则另一个就为私钥。所以,加密使用的是接收方的密钥对,这是一种多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。
    另外,数字签名采用的是非对称密钥加密算法,它能保证发送信息的完整性、身份认证和不可否认性,而数字加密采用的是对称密钥加密算法和非对称密钥加密算法相结合的方法。

  9. 事务是数据库中一个单独的执行单元(unit),它通常由高级数据库操作语言(例如SQL)或编程语言(例如C++、Java等)编写的用户程序的执行所引起。当在数据库中更改数据成功时,在事务中更改的数据便会提交,不再改变。否则,事务就取消或者回滚,更改无效。事务必须满足四个属性,即原子性(atomicity)、一致性(consistency)、隔离性(isolation和持久性(durability),即ACID四种属性。以下将分别对这四种特性进行介绍。
    (1)原子性
    事务是一个不可分割的整体,为了保证事务的总体目标,事务必须具有原子性,即当数据修改时,要么全都执行,要么全都不执行,即不允许事务部分地完成,避免了只执行这些操作的一部分而带来的错误。
    (2)一致性
    一个事务在执行之前和执行之后,数据库数据必须保持一致性状态。数据库的一致性状态应该满足模式锁指定的约束,那么在完整执行该事务后,数据库仍然处于一致性状态。为了维护所有数据的完整性,在关系型数据库中,所有的规则必须应用到事务的修改上。数据库的一致性状态由用户来负责,由并发控制机制实现,例如银行转账,转账前后两个账户金额之和应保持不变。由于并发操作带来的数据不一致性通常包括以下几种类型:丢失数据修改、读“脏”数据、不可重复读和产生幽灵数据。
    (3)隔离性
    隔离性也被称为独立性,当两个或多个事务并发执行时,为了保证数据的安全性,将一个事务内部的操作隔离起来,不被其他的正在进行的事务看到。例如对任何一对事务T1和T2,对T1而言,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行。数据库有四种类型的事务隔离级别:不提交的读、提交的读、可重复的读和串行化。因为隔离性使得每个事务的更新在它被提交之前,对其他事务都是不可见的,所以,实施隔离性是解决临时更新与消除级联回滚问题的一种方式。
    (4)持久性
    持久性也被称为永久性,事务完成以后,DBMS保证它对数据库中的数据的修改是永久性的,当系统或介质发生故障时,该修改也永久保持。持久性一般通过数据库备份与恢复来保证。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值