java面试题
1)抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。 2)包含抽象方法的类,一定是抽象类。
3)抽象类只能被继承,一个类只能继承一个抽象类。 接口:
1)全部的方法都是抽象方法,属型都是常量 2)不能实例化,可以定义变量。 3)接口变量可以引用具体实现类的实例
4)接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法
5)接口之间可以多实现
6)一个具体类可以实现多个接口,实现多继承现象
2:列举你所知道的线程同步的方法:
1)wait():让线程等待。将线程存储到一个线程池中。
2)notify():唤醒被等待的线程。通常都唤醒线程池中的第一个。让被唤醒的线程处于临时阻塞状态。 3)notifyAll(): 唤醒所有的等待线程。将线程池中的所有线程都唤醒。
3.equals()方法和“==”操作符的区别是什么?重写equals()方法的时候,我们还需要重写哪些方法?为什么? “==”比较的是一个对象在内存中的地址值,栈中的内容是否相同
3:equals()是针对引用的,比较的是引用类型的内容一样不一样,堆中的内容是否相同
重写equals()方法的时候,需重写hashcode方法,这样比较的时候,比较的是两个对象的hash值,不同对象的hash值不同。
4:写一个函数计算但参数为n(n很大)时的值1-2+3-4+5-6+7……+n。(提示:考虑程序执行效率)
private static void jisuan(int n) {
}
int sum=0; if(n%2==0){ }else{ }
sum=-(n-1)/2+n;
System.out.println(\sum=-(n/2);
System.out.println(\
5:简述String和StringBuffer、ArrayList和LinkedList、HashMap和HashTable的特点及区别。
答:String 对象的长度一旦定义就固定就不可以改变,对于已经存在的String对象的修改都是创建一个新的对象,然后把新的值存进去,String类不能被继承。StringBuffer是一个可变对象,当对它进行修改的时候不会像String那样重新建立对象。它只能通过构造函数来建立对象。另外StringBuffer还是一个线程安全的类。
ArrayList是实现了基于动态数组的数据结构用于,LinkedList基于连表的数据结构,二者都可以存储对象的引用。对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。
6
java面试题
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。就HashMap与HashTable主要从三方面来说。 一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
6:求质数的多种优化方式
答:一般我们求质数时都会去计算小于某一个数N的质数而不会不加限定,现在我们以求小于N的质数来说一说优化方式。在我们求质数的过程中一般会用到两种方法试除法和筛选法两种,现在下来说一下试除法:
①.判断小于N的数X是否是质数,就是从2一直尝试到X-1,这种做法效率最差,并不可取----->②如果X是质数,那么它如果不能被小于X/2的数整除即可,这样算法效率提高一些---->③除了2以外,所有的质数都只能是奇数,所以我们可以将数X先试除2,然后尝试从3一直到X/2的所有奇数----->④其实判断一个数是否是质数,只需判断一个数能不能被除了1之外小于x的数整除即可,----->⑤最后,我们可以利用前面求出来的质数
来判断,我们只需判断X能不能被小于x的质数整除即可,这样效率是不是更高。
再说筛选法:对于使用筛选法的优化主要是从空间上考虑
①定义一个容器,将数据放入容器中,然后遍历其中的数据,将是合数的数据删除,最后剩余的就是质数了------>②我们可以定义一个布尔类型的数组容器,将其中的值都赋值为true,在筛选的过程中将不是质数的数作为数组的下标将对应元素的值改为false,最后取出值为true的元素的下标即可----->③构造定长的byte数组,数组的每个byte存储8个布尔值,这样性能是不是又有了提高呢。
7:简述几种排序方式(至少四种,可以从以下各个方面来比较这几种算法,例如从时间复杂度和空间复杂度)
排序法 冒泡排序 快速排序 选择排序 二叉树排序 插入排序 堆排序 希尔排序 最差时间分析 O(n2) O(n2) O(n2) O(n2) O(n2) O(n*log2n) 平均时间复杂度 O(n2) O(n*log2n) O(n2) O(n*log2n) O(n2) O(n*log2n) O(n1.25) 稳定度 稳定 不稳定 稳定 不一定 稳定 不稳定 不稳定 空间复杂度 O(1) O(log2n)~O(n) O(1) O(n) O(1) O(1) O(1) 冒泡排序:(Bubble Sort)冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。
插入排序(Insertion Sort)插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L和L[i-1],如果L[i-1]≤ L,则L[1..i]已排好序,第i遍处理就结束了;否则交换L与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j] ≤L[j+1]时为止。
选择排序(Selection Sort)选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第 i 遍处理是将[i..n]中最小者与位置 i 交换位置。这样,经过 i 遍处理之后,前 i 个记录的位置已经是正确的了。
7
java面试题
快速排序(Quick Sort)快速排序是对冒泡排序的一种本质改进。它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。
8:简述值类型和引用类型的区别
值类型包括简单 类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等
他们两在内存中存储的方式不同,值类型以栈的方式存储的,引用类型以堆的方式;前者是真实的存储空间,后者只是存储地址的引用!
9:简述类中的静态成员和非静态成员的区别
静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问。不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问。一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。
10:什么是单例?
一个类中只有一个实例并且自行化向整个系统提供这个实例叫单例
11:下面程序段的输出结果是:
Void complicatedex(){
int x=20,y=30;
boolean b; b=x>50&&y>60||x>50&&y<-6||x<-50&&y>60||x<-50&&y<-60; }
结果为:fasle
system.out.println(b);
12:super()和this()的区别
Super()指父类的无参构造方法,this()指当前类的无参构造方法,两者都必须写在构造方法的第一句
13:Java中public,private,protected,和默认的区别
a、private修饰词,表示成员是私有的,只有自身可以访问;
b、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。
c、无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访问,访问权限是包级访问权限;
d、public修饰词,表示成员是公开的,所有其他类都可以访问;
14:描述一下java的事件委托机制和垃圾回收机制
java事件委托机制:一个源产生一个事件时,把他送到一个或多个监听器那里,在这种机制种,监听器只是等待,一旦收到事件,处理事件并返回; Java垃圾回收:是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。当一个对象
8
java面试题
不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用,以免造成内存泄露。 什么是java序列化,如何事件java序列化
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。 public class Cat implements Serializable {} …… Try{
FileOutputStream fos = new FileOutputStream(\ ObjectOutputStream oos = new ObjectOutputStream(fos); System.out.println(\
cat.setName(\ oos.writeObject(cat); oos.close(); }catch(Exception e){ …… } ……
15:overload和overrride的区别。Overloaded的方法和是否可以改变返回值类型
override(重写,覆盖)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。
overload(重载,过载)
1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和子类、同类中。
Overloaded的方法不能改变返回值类型
16:final类有什么特点
该类不能被继承
17:写出下面代码的输出结果
9
java面试题
Package test;
Public class OuterClass{
Private class InterClass{ Public InterClass{
System.out.println(“interClass create”); } }
Public OuterClass(){
InterClass ic= new InterClass(); System.out.println(“outerclass create”); }
Public static void main(String[] args){ OuterClass oc=new OuterClass(); } } 输出:
interClass create Outerclass create
18:如何格式化日期
java日期的格式话主要用的是SimpleDateFormat df = new SimpleDateFormat();
19:ArrayList Vector LinkedList 的存储性能好特性,HashMap和Hashtable的区别
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。
2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
4.HashTable使用Enumeration,HashMap使用Iterator。
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库2016_常规java面试题综合版(2)在线全文阅读。
相关推荐: