记录Java面试题51~91

JAVA面试题

51.在Java语言,怎么理解goto。

java语言中,goto这个词只是作为了 保留字

52.请描述一7 下Java 5有哪些新特性?

  1. 泛型.
  2. For-Each 循环。
  3. 自动装包/拆包.
  4. 枚举。
  5. 静态导入。
  6. Annotation(框架配置,代码生成的里程.
  7. 可变参数.
  8. 字符串格式化器(java.util.Formatter) 。
  9. 新的线程模型和并发库Thread Frameword

53. Java 6新特性有哪些。

  1. 引入了一个支持脚本引擎的新框架.
  2. UI的增强
  3. 对WebService支持的增强(JAX-WS2.0和JAXB2.0)
  4. 一系列新的安全相关的增强.
  5. JDBC4.0.
  6. Compiler API
  7. 通用的Annotations支持。\

54. Java 7新特性有哪些。

  1. switch中可以使用字串了。
  2. 运用List tempI ,ist = new ArrayList<>O);即泛型实例化类型自动推断.
  3. 语法_上支持集合,而不一-定是数组
  4. 新增一-些读取环境信息的工具方法
  5. Boolean类型反转,空指针安全,参与位运算
  6. 两个char间的equals.
  7. 安全的加减乘除
  8. map集合支持并发请求,且可以写成Map map = {name:“xxx” ,age:18}i;.

55. Java 8新特性有哪些。

  1. Lambda表达式- Lambda允许把函数作为-一个方法的参数( 函数作为参数传递进方法中。。
  2. 方法引用一方法引用提供了非常有用的语法,可以直接引用已有Java 类或对象(实例)的方法或构造器。与
  3. lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。。
  4. .默认方法一默认方法就是一个在接口里面有了一个实现的方法。.
  5. 新工具一新的编译工具,如: Nashom 引擎jjs、 类依赖分 析器jdeps。.
  6. Stream API -新添加的Stream API (java.util.stream) 把真 正的函数式编程风格引入到Java中。.
  7. Date Time API-加强对日期与时间的处理。。
  8. Optional类- Optional类已经成为Java8 类库的一部分, 用来解决空指针异常。
  9. Nashorm, JavaScript 引擎- Java 8提供了- - 个新的Nashorm javascript 引擎,它允许我们在JVM上运行特定的javascript应用。

56.描述Java动态代理。

代理模式是常用的java 设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理
消息、过滤消息、把消息转发给委托类,以及事后处理消息等
。代理类与委托类之间通常会存在关联关系,一个
代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相
关方法,来提供特定的服务。简单的说就是,我们在访问实际对象时,是通过代理对象来访问的,代理模式就是
在访问实际对象时引入–定程度的间接性,因为这种间接性,可以附加多种用途。

57. Java NIO和BIO,AIO的区别

BIO:同步并阻塞,服务器实现模式为-一个连接一个线程,即客户端有连接请求时服务器端就需要启动–个线程进
行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。BIO方式适用于
连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一-选
择,但程序直观简单易理解。.
NIO:同步非阻塞,服务器实现模式为一一个请求- -个线程,即客户端发送的连接请求都会注册到多路复用器上,多
路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO方式适用于连接数目多且连接比较短(轻操
作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4 开始支持。↓
AIO:异步非阻塞,服务器实现模式为一一个有效请求一一个线程,客户端的IO请求都是由OS先完成了再通知服务器
应用去启动线程进行处理.AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调
用OS参与并发操作,编程比较复杂,JDK7开始支持。。
IO和NIO的区别.
_ .I0是面向流的,NIO是面向缓冲区的。.
.I0的各种流是阻塞的,NIO是非阻塞模式。。
三Java NIO的选择器允许-一个单独的线程来监视多个输入通道,你可以注册多个通道使用一一个选择器,然后使用
一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机
制,使得一个单独的线程很容易来管理多个通道。

58.为什么要使用单例模式?.

  1. 避免在开发程序的时候,创建出一一个类的多个实例(占用空间,性能问题),所以使用单例模式,保证该类只
    创建一“个对象;
    • -般单例模式通常有两种形式:它的构造函数为private的,必须有-一个静态方法,静态方法返回自己的实例;
      实行形式有两种,懒汉式和饿汉式;所谓的饿汉式就是在声明实例的时候直接初始化对象,而懒汉式是先声明一
      个空对象,在静态方法中实例化该对象并返回。。

59.使用Java实现冒泡排序。

在这里插入图片描述

60. Java中垃圾回收有什么目的?什么时候进行垃圾回收?.

Java语言中一一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使
得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用
域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。。
简单的理解,就是当对象失去引用后,系统会在调度的时间对它所占用的内存进行回收。

61.如何实现对象克隆。

实现对象克隆有两种方式:

  1. 实现Cloneable接口并重写Object类中的clone0方法;
  2. 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。

62. Java 设计模式有哪些?

  1. 单例设计模式
  2. 工厂设计模式
  3. 代理设计模式
  4. 观察者设计模式
  5. 适配器模式
  6. 原型模式

63. GC是什么?为什么要有GC ?

GC是垃圾回收的意思( gabage collection) ,内存处理器是编程人员容易出现问题的地方,忘记或者错误的内存回
收导致程序或者系统的不稳定甚至崩溃,java的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存
的目的,java语言没有提供释放已分配内存的俄显示操作方法。

64. Java 中是如何支持正则表达式。

Java中的String 类提供了支持正则表达式操作的方法,包括: matches(、 replaceAll(、 replaceFirst()、 split()。 此
外,Java中可以用Patterm类表示正则表达式对象,它提供了丰富的API进行各种正则表达式操作。

65.比较-下Java和JavaSciprt.

JavaScript与Java是两个公司开发的不同的两个产品。Java 是SUN公司推.出的新- -代面向对象的程序设计语言,特别适合于Internet应用程序开发;而。
JavaScript是Netscape公司的产品,其目的是为了扩展Netscape Navigator.功能,而开发的一种可以嵌入Web页面中的基于对象和事件驱动的解释性语言,它的前,自县TiweScrint.而Java的前白县0ak五言\

66. Math.round(11.5) 等于多少? Math.round(-11.5)等于多少?.

11.5+0.5后是12再向下取整是12;-11.5+0.5 后是-11再向下取整-11.

67. JDBC连接数据库的步骤?。

  1. 加载JDBC驱动程序;
  2. 创建数据库的连接;
  3. 创建一个Statement对象;
  4. 执行SQL语句;
  5. 返回并处理结果;
  6. 关闭连接;

68. Class.forName()方法有什么作用?

返回与给定的字符串名称相关联类或接口的Class对象。

69. JDBC中如何进行事务处理

I
在JDBC的数据库操作中,一项事务是由一-条或是多条表达式所组成的一个不可分割的工作单元。我们通过提交
commit()或是回退rollback)来结束事务的操作。关于事务操作的方法都位于接口java.sql.Conction中。。
首先我们要注意,在JDBC中,事务操作默认是自动提交。也就是说,一条对数据库的更新表达式代表- -项事务
操作。操作成功后,系统将自动调用commit(来提交,否则将调用rollback0来回退。.
其次,在JDBC中,可以通过调用setAutoCommit(false)来 禁止自动提交。之后就可以把多个数据库操作的表达式
作为一个事务,在操作完成后调用commit(0来进行 整体提交。倘若其中一一个表达式操作失败,都不会执行到
commit(,并且将产生响应的异常。此时就可以在异常捕获时调用rollback()进 行回退。这样做可以保持多次更新
操作后,相关数据的一-致性。

70. JDBC能否处理Blob和Clob.

Blob是指二进制大对象(Binary Large Object), 而Clob是指大字符对象(Character Large Objec),因此其中Blob是为
存储大的二进制数据而设计的,而Clob是为存储大的文本数据而设计的。JDBC 的PreparedStatement 和ResultSet
都提供了相应的方法来支持Blob和Clob操作。I

71. JDBC中的PreparedStatement相比Statement的好处

  1. PreparedStatement 是Statement的子接口;。
  2. PreparedStatement 有绑定参数的功能,避免SQL注入,安全性更好;
  3. PreparedStatement 对SQL语句有预编译的功能,所以性能更好;

72.解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。。

通常我们定义一个基本数据类型的变量,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键
字和构造器创建的对象放在堆空间;程序中的字面量(literal) 如直接书写的100、 ”hello”和常量都是放在静态
区中。栈空间操作起来最快但是找很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用
的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。。
String str = new String(“hello”);"
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而”hello”这个字面量放在静态区。。
补充:较新版本的Java (从Java 6的某个更新开始)中使用了一项叫”逃逸分析”的技术,可以将一些局部对象放
在栈上以提升对象的操作性能。

73.怎样将GB2312编码的字符串转换为IS0-8859-1编码的字符串?。

代码如下所示:。
Stringsl = “你好”,
String s2 = new String(s1 .getBytes(“GB2312”), “ISO-8859-1”);

74.运行时异常与受检异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虛拟机的通常操作中可能遇到的异常,是一种
常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设
计无误,仍然可能因使用的问题而引发。Java 编译器要求方法必须声明抛出可能发生的受检异常,但是并不要求
必须声明抛出未被捕获的运行时异常。异常和继承一样,是面向对象程序设计中经常被滥用的东西,在Effective
Java中对异常的使用给出了以下指导原则:。
-不要将异常处理用于正常的控制流(设计良好的API不应该强迫它的调用者为了正常的控制流而使用异常)。
对可以恢复的情况使用受检异常,对编程错误使用运行时异常.
-避免不必要的使用受检异常(可以通过一-些状态检测手段来避免异常的发生).
-优先使用标准的异常。
-每个方法抛出的异常都要有文档
保持异常的原子性
-不要在catch中忽略掉捕获到的异常

75.列出- -些你常见的运行时异常? .

  1. ClassCastException (类转换异常)。
  2. IllegalArgumentException ( 非法参数异常)
  3. IndexOutOfBoundsException ( 下标越界异常)。
  4. NullPointerException ( 空指针异常)
  5. SecurityException (安全异常)。
  6. NumberFormatException String s= "abc”;
  7. ClassNotFoundExcepti.
  8. ArithmeticException (算术异常)

76. List、 Set、 Map是否继承自Collection接口?

List、 Set是,Map不是。Map是键值对映射容器,与List 和Set有明显的区别,而Set存储的零散的元素且不允
许有重复元素(数学中的集合也是如此),List 是线性结构的容器,适用于按数值索引访问元素的情形。

77. Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?

sleepO方法(休眠) 是线程类(Thread) 的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会
(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪状态,请参考
第66题中的线程状态转换图)。
wait() 是 Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线
程暂停执行),进入对象的等待池(wait pool),只有调用对象的notify0方法(或notifyAllO方法)时才能唤醒等
待池中的线程进入等锁池(lock pool),如果线程重新获得对象的锁就可以进入就绪状态。

78.线程的sleep()方法和yield()方法有什么区别?.

  1. sleep(方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield0方法
    只会给相同优先级或更高优先级的线程以运行的机会;
  2. 线程执行sleep(方法后转入阻塞( blocked) 状态,而执行yield(方法后转入就绪(ready) 状态;
  3. sleep(方法声明抛出InterruptedException, 而yield()方法没有声明任何异常;。
  4. sleep0方法比yield0方法(跟操作系统CPU调度相关)具有更好的可移植性。

79.请说出与线程同步以及线程调度相关的方法。

  • wait(): 使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;
  • sleep(): 使一个正在运行的线程处于睡眠状态, 是-一个静态方法,调用此方法要处理InterruptedException 异常;
  • notify):唤醒-一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某–个等待状态的线程,
    而是由JVM确定唤醒哪个线程,而且与优先级无关;。
    notityAll):唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让它们竞争,只有获得
    锁的线程才能进入就绪状态;

80.举例说明同步和异步。

如果系统中存在临界资源(资源数量少于竞争资源的线程数量的资源),例如正在写的数据以后可能被另一个线
程读到,或者正在读的数据可能已经被另一一个线程写过了,那么这些数据就必须进行同步存取(数据库操作中的
排他锁就是最好的例子)。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序
等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。事实上,所谓的同步就是
指阻塞式操作,而异步就是非阻塞式操作。

81. Java 中如何实现序列化,有什么意义?.

序列化就是一-种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读
写操作,也可将流化后的对象传输于网络之间。序列化是为了解决对象流读写操作时可能引发的问题(如果不进
行序列化可能会存在数据乱序的问题)。。
要实现序列化,需要让一个类实现Serializable 接口,该接口是一个标识性接口,标注该类对象是可被序列化的,
然后使用一个输出流来构造–个对象输出流并通过writeObject(Object)方法就可以将实现对象写出(即保存其状
态) ;如果需要反序列化则可以用一个输入流建立对象输入流,然后通过readObject 方法从流中读取对象。序列
化除了能够实现对象的持久化之外,还能够用于对象的深度克隆。

82.获得一个类的类对象有哪些方式?.

  • 方法1:类型.class,例如: String.class
  • 方法2:对象.getClass(),例如:hello”.getClassQ.
  • 方法3: Class. forName(), 例如: Class.forName( “java.lang.String" ).

83.如何通过反射创建对象?

  • 方法1:通过类对象调用newInstance(方法, 例如: String.class.newInstanceO.
  • 方法2:通过类对象的getConstructor(或 getDeclaredConstructor0方法获得构造器(Constructor) 对象并调用其
    newInstance(方法创建对象,例如: String class getConstructor(String .class).newInstance(“Hello” );

84. Enumeration 接口和Ilterator 接口的区别有哪些?

Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator 远远比Enumeration安全,因为其他线程
不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对
Enumeration来说是不可能的。

85.串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?

吞吐:量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。.
而串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存)就足够了。

86. Applet 和普通的Java应用程序有什么区别?

applet是运行在启用了java 的浏览器中,Java应用程序是可以在浏览器之外运行的独立的Java程序。但是,它们
都需要有Java虚拟机。。
进一步来说,Java应用程序需要–个有特定方法签名的main函数来开始执行。Javaapplet不需要这样的函数来开
始执行。。
最后,Javaapplet一般会使用很严格的安全策略,Java应用–般使用比较宽松的安全策略。

87. Java applet有哪些限制条件?

主要是由于安全的原因,给applet施加了以下的限制:
applet不能够载入类库或者定义本地方法。。
applet不能在宿主机上读写文件。
applet不能读取特定的系统属性。
applet不能发起网络连接,除非是跟宿主机。
applet不能够开启宿主机上其他任何的程序。

88.什么是不受信任的applet ?

不受信任的applet是不能访问或是执行本地系统文件的Javaapplet,默认情况下,所有下载的applet都是不受信任
的。

89.从网络上加载的applet和从本地文件系统加载的applet有什么区别?

当applet是从网络.上加载的时候,applet是由applet类加载器载入的,它受applet安全管理器的限制。
当applet是从客户端的本地磁盘载入的时候,applet 是由文件系统加载器载入的。
从文件系统载入的applet 允许在客户端读文件,写文件,加载类库,并且也允许执行其他程序,但是,却通不过
字节码校验。

90. applet 类加载器是什么?它会做哪些工作?。

当applet 是从网络.上加载的时候,它是由applet 类加载器载入的。类加载器有自己的java名称空间等级结构。类
加载器会保证来自文件系统的类有唯一的名称空间,来自网络资源的类有唯一的名称空间。。
当浏览器通过网络载入applet的时候,lapplet的类被放置于和applet的源相关联的私有的名称空间中。然后,那些
被类加载器载入进来的类都是通过了验证器验证的。验证器会检查类文件格式是否遵守Java语言规范,确保不会.
出现堆栈溢出(stack overflow)或者下溢(underflow),传递给字节码指令的参数是正确的。

91. applet 安全管理器是什么?它会做哪些工作?.

applet安全管理器是给applet施加限制条件的一种机制。浏览器可以只有一-个安全管理器。安全管理器在启动的时
候被创建,之后不能被替换覆盖或者是扩展。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值