Java面试题总结一

来源:互联网 发布:网络规划设计师通过率 编辑:程序博客网 时间:2024/05/22 12:03
说明:这些面试题都比较基础的,通过学习能够对自己以及以后的工作有帮助。

基础题

1.一个Java源文件可以有多个类吗?有什么限制?
可以的。源文件当有多个类时,只能有一个类是public类型,并且类名与文件名保持一致。
2. Java中封装性的好处?
封装是Java面向对象的特征之一,将类或方法实现的具体细节隐藏起来对外提供访问的接口,有利于代码的复用,使用起来方便,安全。
3.Java中如何实现多继承?
有两个方法:一是通过接口实现多继承,二是通过内部类间接实现多继承,即使用内部类实现继承所需要的功能进而间接实现。
4 .String、StringBuffer、StringBuilder的区别?
第一:String类的对象一旦产生是不可改变的,StringBuffer和StringBuilder对象的内容可以改变的,在进行字符串处理上性能优于String类。
第二:StringBuffer可以预先分配特定长度的内存块建立字符串缓冲区,追加字符串时append方法比String的+效率更高,使用+添加多个字符串会多次重新分配内存来容纳追加的字符串的空间,二使用append可以避免这种现象。
第三:StringBuffer是一个多线程安全的字符串类型,StringBuilder的线程不安全。在进行多线程操作字符串缓冲区时:JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。
因此数据量操作较小时使用String,单线程操作字符串缓冲区下操作大量数据使用StringBuilder,多线程操作字符串缓冲区下操作大量数据使用StringBuffer。
5 .如何解决Java中的异常淹没?
异常淹没的理解:捕获到异常但是在catch块中没有找到具体的异常。例如try-catch块抛出了null pointer exception,但是在catch里找不到。
try  {    Class.method();//throws null pointer exception   ....................  }  catch(Exception e)  {    e.printStackTrace();  }
解决异常淹没思路:将可能抛出的异常都要写到catch块里。
6 .什么是JVM?为什么说Java被称为:“与平台无关的编程语言”?
Java虚拟机是一个运行Java字节码的进程,它是抽象的计算机,有自己的指令集和内存。
java源程序先经过javac编译器编译成二进制的.class字节码文件(java的跨平台指的就是.class字节码文件的跨平台,.class字节码文件是与平台无关的),.class文件再运行在jvm上,java解释器(jvm的一部分)会将其解释成对应平台的机器码执行,所以java所谓的跨平台就是在不同平台上安装了不同的jvm,而在不同平台上生成的.class文件都是一样的,而.class文件再由对应平台的jvm解释成对应平台的机器码执行。
7.如何解决单例在多线程下线程不安全的问题?
通常情况下多线程下线程不安全的问题:多线程共享线程实例变量。通常有以下方法解决单例在多线程下线程不安全的问题:使用同步方法,使用双检锁,使用内置静态类,使用枚举方式,使用静态块等等。
8.servlet线程不安全,体现在什么地方?
当web容器(如tomcat)接收客户端的http请求时,web容器会从线程池中取一个线程并初始化servlet对象之后调用service方法。重要的是Servlet对象是单例模式即web容器中只有一个servlet实例对象。如果多个http请求(request)请求同一个servlet 就会形成多个线程同时并发调用同一个service方法 如果此时servlet中定义了实例变量或静态变量,那么可能会发生线程安全问题。解决方法有实现单线程model接口、使用同步锁、避免使用实例变量,推荐使用最后一种方法。

servlet线程池

9.servlet生命周期的初始化阶段,servlet容器加载servlet的时机有几种?
有以下三种:当servlet容器启动时会装载某些servlet;servlet容器启动后客户首次向servlet发送http请求;servlet的类文件被更新时。
特别注意:当servlet容器装载servlet后,容器会创建servlet实例并调用servlet的init方法进行初始化,在整个servlet的生命周期中,init方法只被调用一次。
10.页面没有关闭,但是网络失去链接,session中存放的数据还在吗
在,session会话是服务器端的技术,一般情况下当超过最大不活动时间(setMaxInactiveInterval(秒),默认30分钟)或者安全退出(Invalidate())或者关闭浏览器,session才失效。
11.字节流与字符流区别?实际开发中使用哪个更好?
字节流 - - -操作八位二进制或byte类型数据,输出数据主要是使用OutputStream完成,输入使的是InputStream。
字符流 - - -使用的是16位的Unicode编码来处理字符或字符串,使用Reader和 Writer进行输入输出。
字节流是以字节形式传输文件,不会用到缓冲区;而字符流会使用缓冲区。在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。
12.Java中对象流的作用,怎么去实现?
作用:写入和读取对象的信息(或者序列化和反序列化对象),使对象持久化。
实现:第一步将对象所属的类进行序列化,实现Serializable 接口。第二步搭建对象输出流ObjectOutputStream以及使用writeObject方法将对象信息写入到磁盘文件中,即对象的序列化(将对象的状态转化为二进制字节码保存文件中)。第三步搭建对象输入流ObjectInputStream以及使用readObject方法将对象信息从文件读取出来,即对象的反序列化。