java面试题

来源:互联网 发布:江西省网络诈骗 编辑:程序博客网 时间:2024/06/09 21:18

面试题

java部分面试题

1.Switch能否用string做参数?

 Java 7  之前, switch 只能支持byte,short,char,int 或者其对应的封装类以及 Enum 类型。在JAVA 7,String 支持被加上了。

2.Java的四种引用,强弱软虚,用到的场景

强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象

软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收。

弱引用:具有弱引用的对象拥有的生命周期更短暂。因为当 JVM 进行垃圾回收,一旦发现弱引用对象,无论当前内存空间是否充足,都会将弱引用回收。不过由于垃圾回收器是一个优先级较低的线程,所以并不一定能迅速发现弱引用对象

虚引用:顾名思义,就是形同虚设,如果一个对象仅持有虚引用,那么它相当于没有引用,在任何时候都可能被垃圾回收器回收。

使用场景:

利用软引用和弱引用解决OOM问题:用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效地避免了OOM的问题

通过软可及对象重获方法实现Java对象的高速缓存:比如我们创建了一Employee的类,如果每次需要查询一个雇员的信息。哪怕是几秒中之前刚刚查询过的,都要重新构建一个实例,这是需要消耗很多时间的。我们可以通过软引用和HashMap 的结合,先是保存引用方面:以软引用的方式对一个Employee对象的实例进行引用并保存该引用到HashMap上,key为此雇员的 idvalue为这个对象的软引用,另一方面是取出引用,缓存中是否有该Employee实例的软引用,如果有,从软引用中取得。如果没有软引用,或者从软引用中得到的实例是null,重新构建一个实例,并保存对这个新建实例的软引用

3.抽象类和接口的区别

一个类只能继承单个类,但是可以实现多个接口

接口强调特定功能的实现,而抽象类强调所属关系

抽象类中的所有方法并不一定要是抽象的,你可以选择在抽象类中实现一些基本的方法。而接口要求所有的方法都必须是抽象的

4.创建线程有几种不同的方式?

有三种方式可以用来创建线程: 

继承Thread

实现Runnable接口

应用程序可以使用Executor框架来创建线程池

实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。

5.OverrideOverload的含义去区别

Overload顾名思义是重新加载,它可以表现类的多态性,可以是函数里面可以有相同的函数名但是参数名、返回值、类型不能相同;或者说可以改变参数、类型、返回值但是函数名字依然不变。

就是ride(重写)的意思,在子类继承父类的时候子类中可以定义某方法与其父类有相同的名称和参数,当子类在调用这一函数时自动调用子类的方法,而父类相当于被覆盖(重写)了。

6.JAVA多态的实现原理 

抽象的来讲,多态的意思就是同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

实现的原理是动态绑定,程序调用的方法在运行期才动态绑定,追溯源码可以发现,JVM 通过参数的自动转型来找到合适的办法。

7.String类能否被继承?

不能,因为String类被final修饰

8.Java集合类框架的基本接口有哪些?

ava集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最基本的接口有:

Collection:代表一组对象,每一个对象都是它的子元素。

Set:不包含重复元素的Collection

List:有顺序的collection,并且可以包含重复元素。

Map:可以把键(key)映射到值(value)的对象,键不能重复。

9.equals与==的区别:

==是判断两个变量或实例是不是指向同一个内存空间 
equals是判断两个变量或实例所指向的内存空间的值是不是相同

10.Java中常用的类有哪些?

System 可得到系统信息
StringBuilder 字符串工具类
Thread 线程类
Math 与数学有关的工具类
ArrayList 底层用数组实现的集合
LinkedList 底层用链表实现的集合
HashMap 接口Map的一个实现类
HashSet 接口Set的一个实现类
Scanner 简单文本扫描器
Calendar 日期类
Date 日期类
File 目录或文件操作类
FileInputStream 输入流
FileOutputStream 输出流
PrintWriter 
BufferedInputStream 具有缓冲的输入流
BufferedOutputStream 具有缓冲的输出流
BufferedReader 从字符输入流中读取文本,缓冲各个字符

11.java常用的设计模式

1.单例模式(有的书上说叫单态模式其实都一样)


该模式主要目的是使内存中保持1个对象。看下面的例子:


package org.sp.singleton;


//方法一
public class Singleton {
//将自身的实例对象设置为一个属性,并加上Static和final修饰符
private static final Singleton instance = new Singleton();
//将构造方法设置成私有形式
private Singleton() {
}
//通过一个静态方法向外界提供这个类的实例
public static Singleton getInstance() {
   return instance;
}


}


//方法二
class Singleton2 {


private static Singleton2 instance2 = null;


public static synchronized Singleton2 getInstance() {


   if (instance2 == null)
    instance2 = new Singleton2();
   return instance2;
}
}


注:这二个方法实现了一样的功能,但个人推荐采用第一种方法。


2.工厂模式


该模式主要功能是统一提供实例对象的引用。看下面的例子:


public class Factory{
public ClassesDao getClassesDao(){
   ClassesDao cd = new ClassesDaoImpl();
   return cd;
}
}


interface ClassesDao{
public String getClassesName();


}


class ClassesDaoImpl implements ClassesDao {
public String getClassesName(){
   System.out.println("A班");
}
}


class test
{
public static void main(String[] args){
   Factory f = new Factory();
   f.getClassesDao().getClassesName();
}
}


这个是最简单的例子了,就是通过工厂方法通过接口获取对象的引用


3.建造模式


该模式其实就是说,一个对象的组成可能有很多其他的对象一起组成的,比如说,一个对象的实现非常复杂,有很多的属性,而这些属性又是其他对象的引用,可能这些对象的引用又包括很多的对象引用。封装这些复杂性,就可以使用建造模式。

0 0
原创粉丝点击