Java常见面试题(3)

来源:互联网 发布:linux mysql 安装包 编辑:程序博客网 时间:2024/06/07 09:21

(点击进入Java常见面试题(2))

41、String、StringBuffer、StringBuilder的区别?(好文)

String是一个字符串常量,而StringBuffer和StringBuilder分别是一个字符串缓冲区(类似于字符串变量)。

String是不可变的所以是线程安全的;StringBuffer是线程安全的(源码上加上了synchronized被设计成安全的);StringBuilder是线程不安全的(源码未加synchronized)。

单线程操作时,使用StringBuilder效率高;多线程操作时,使用StringBuffer安全,不使用StringBuilder是因为不安全。

42、谈谈你对泛型的理解?什么时候使用泛型?泛型有什么好处?

理解:泛型就是我们先预定义一种虚拟的类型,等到初始化的时候再指定一个具体的类型。

例如:定义list给定一个泛型list<T>,等到具体使用时再指定具体的类型List<String> l = new ArrayList<String>();

可以在集合的存取要保证数据类型一致时使用。也可以在当操作的引用数据类型不确定时,可以用object进行扩展,也可以使用泛型来表示。好处就是可以避免类型强转的麻烦,而且在编译时就检查类型安全问题,避免了在运行时抛出异常。

43、Java中List<?>和List<Object>之间的区别是什么?

前者是泛型,后者是指定类型是object可能会进行强制类型转换,容易出错。

例如:要声明一个List<Object>的对象;比如List<Object> list=new ArrayList<Student>();会报错。但是要定义了泛型List<T> 那么声明的时候就可以写成List<Student> list=new ArrayList<Student>();灵活性更高,也安全。

44、IO流是什么?都包括哪些?

IO流就是输入输出流。

可以按照处理的数据的类型的不同分为两种:

字节流(InputStream字节输入流、OutputStream字节输出流)和字符流(Reader字符输入流、Writer字符输出流)

字节流主要用于处理二进制数据,是按字节来处理的。一般图片、音频都是通过字节流传输。(不会用到缓冲区(内存),对文件本身进行操作)

但是实际中很多数据都是文本,所以提出了字符流的概念。一般文本是通过字符流传输。(会用到缓冲区。缓冲区是为了提高读写的效率,用字符流时写的数据都在流里需要刷新,字符流缓冲区则是写到缓冲区里,缓冲区可以写一行和读一行,不用每次都读一个写一个)

45、TCP、UDP协议通信的区别?

TCP是面向连接的,UDP是面向非连接的。

TCP是面向连接的是指在发送数据前客户端和服务端必须建立可靠的连接。这就要涉及到所谓的“三次握手了”,比如A给B发,第一次是A向B发送请求:“我要给你发送数据”,第二次是B回复A:“我收到请求了,你可以发送”,第三次是A确认:“收到你的回复,现在发送”。在TCP中数据的发送和接收是同步的。(可靠性强)

UDP是面向非连接的是指发送数据前客户端和服务端不需要建立连接。就是简单的把数据发送出去,并不会保证肯定能完整发送到。

在java中实现这两种通信可以采用socket建立连接,socket是套接字,是为网络服务提供的一种机制,通信的两端都有socket,网络通信其实就是socket间的通信,数据在两个socket间通过io传输。

46、下列哪一种叙述是正确的()

A、abstract修饰符可修饰字段、方法和类

B、抽象方法的body部分必须用一对大括号{}包住

C、声明抽象方法,大括号可有可无

D、声明抽象方法不可写出大括号

答案:D。    

(A) java中定义抽象abstract不可以修饰属性,只可以修饰方法和类。

(B)(C)抽象方法没有具体的方法,是没有实现的,可以理解为没有body体,所以不写大括号。如:abstract void a();这是抽象方法,如果写了大括号就表明这个方法已经实现了(里面有没有代码没关系),抽象方法定义的就是没有体的方法,所以抽象方法不能有方法体{}。

47、下面说法不正确的是()

A、类是对象的抽象,对象是类的实例

B、类是组成java程序的最小单位

C、java语言支持多继承

D、java一个程序中只能有一个public类

答案:C。    

(A)对象是具体的,是一个实例,将其抽象为类(B) java的基本组成单元是类,B正确。(D)java程序是从一个public类的main()函数(其实是main线程)开始执行的,而让每一个程序都只有一个public类,是因为为了让程序在运行时只从一个接口导入,而这个接口是通过public暴露的。

48、以下表达式不正确的是()

(A) String x = “Sky”; int y = 5; x += y;
(B) String x = “Sky”; int y = 5; if(x==y){}
(C) String x = “Sky”; int y=5; x=x+y;
(D) String x = null; int y=(x!=null) && (x.length()>0)?x.length:0

答案:B。   B中类型不同无法直接比较。 A等同于C,y都会自动转换成String,D是三元表达式,&&前面不成立,所以y=0。

49、java程序分为应用程序和小程序两种,其中应用程序必须包含main方法,该方法的格式是public static void main(String args[])。小程序必须从Applet类继承而来。

50、tomcat是什么?它的核心是什么?

Tomcat是一个常用的免费的Web容器(web容器:web组件的运行环境)。server.xml是tomcat的核心配置文件,通过server.xml可以灵活设置虚拟主机。

51、java的类库中提供了Throwable类来描述异常,有errorexception两个直接子类。

java.lang.throwable(throwable:可抛出的。error:错误,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修改。exception:异常,可以有针对性的处理方式)









0 0