java面试题

    xiaoxiao2021-04-15  210

    1.java面向对象的三大特性 封装、继承、多态

    2.Object有那几个公共方法 (1)clone() (2)getClass() (3)toString() (4)finalize() (5)equals() (6)hashCode() (7)wait() (8)notify() (9)notifyAll()

    3.java中创建对象的几种方式 (1)使用new关键字 (2)运用反射手段,调用Java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法 (4)使用Clone的方法 (5)运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法.

    4.java支持多继承么? java不支持多继承,只支持单继承( 即一个类只能有一个父类)。但是java接口支持多继承,即一个子接口可以有多个父接口。(多实现) 一个关键字是extends/一个关键字是implements extends只带一个父类/implements可实现多个父接口

    5.接口和抽象类的区别是什么?阐述什么时候使用接口,什么时候采用抽象类? 区别: (1)接口里只能定义静态常量,不能定义普通成员变量,抽象类里则既可以定义普通成员变量,也可以定义静态常量。 (2)接口不能包含构造器,抽象类可以包含构造器。 (3)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract方法;抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的; (4)接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供实现,抽象类则完全可以包含普通方法。也就说抽象类里既可以有抽象方法,也可以没有,但是接口里的方法必须全部是抽象方法。 (5)接口中不能包含静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;接口里不能包含初始化块,但抽象类里完全可以包含初始化块。 (6)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    6.什么是值传递和引用传递? (1)值传递:指的是在方法调用时,传递的参数是按值的拷贝传递。 特点 :传递的是值的拷贝,也就是说传递后就互不相关了。 (2)引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的 引用的地址,也就是变量所对应的内存空间的地址。 特点: 传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。 如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。 int num=1;基本类型 String str=“hi”;引用类型

    7.进程和线程的区别是什么? (1)定义 进程:具有一定独立能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程:进程的一个实体,是cpu调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本不拥有系统资源,只拥有一点在运行必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。 (2)区别 进程和线程的只要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

    8.创建线程有几种不同的方式?你喜欢哪一种?为什么? (1)继承Thread类(真正意义上的线程类),是Runnable接口的实现。 (2)实现Runnable接口,并重写里面的run方法。 (3)使用Executor框架创建线程池。 选择第二种: Runnable接口好处如下: 1).避免点继承的局限,一个类可以继承多个接口。 2).适合于资源的共享。

    9.概况的解释下线程的几种可用状态。 (1)新建 new (2)可运行 runnable (3)运行 running (4)阻塞 block (5)死亡 dead

    10.java集合类框架的基本接口有哪些? (1)Collection:单例集合的根接口 (2)List:元素有序 可重复 (3)ArrayList:类似一个长度可变的数组。适合查询,不合适增删。 (4)LinkedList:底层是双向循环链表。适合增删,不适合查询。 (5)Set:元素无序,不可重复。 (6)HashSet:根据对象的哈希值确定元素在集合中的位置 (7)TreeSet:以二叉树的方式存储元素,实现了对集合的元素排序。 (8)Map:双列集合的根接口,用于存储具有键(key)、值(value)映射关系的元素 (9)HashMap:用于存储键值映射关系,不能出现重复的键key (10)TreeMap:用来存储键值映射关系,不能出现重复的键key,所有的键按照二叉树的方式排列

    11.hashCode()和equals()方法的重要性体现在什么地方?

    12.javaSE中线程安全的集合有哪些? (1)vector (2)statck (3)hashtable (4)enumeration

    13.Comparable和Comparator接口是干什么的?列出它们的区别。 用来实现集合中元素比较、排序的。 区别: 只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。 Comparator位于包java.util下,而Comparable位于包 java.lang下 Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接口) 自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序, 这里的自然顺序就是实现Comparable接口设定的排序方式。 而 Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。 可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。 用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。 比如:你想对整数采用绝对值大小来排序,Integer 是不符合要求的,你不需要去修改 Integer 类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了 Comparator 接口的对象来实现控制它的排序就行了。

    14.阐述Serlvet与Jsp的区别?以实际工作的经验讲解它们所担任的web工程中的职责。

    15.Jsp的内置对象有几个?分别是哪些? 九个对象 (1)request对象 (2)response对象 (3)session对象 (4)application对象 (5)out对象 (6)pageContext对象 (7)config对象 (8)page对象 (9)exception对象


    最新回复(0)