当前位置:   article > 正文

面试题熟记

面试题熟记

            面试

  1. overload  和override区别 ?overload的方法是否可以改变返回值的类型?

Overload:重载       Override:重写

重载:同一个类中,方法名相同,参数列表不同。与返回值类型无关。

重写:存在于子父类中,或者子父接口中,方法名相同,参数列表相同。

     遵循”两同两小一大“规则:

两同: 

方法名相同,参数类型相同

两小:

类型:

基本类型:子类返回类型必须等于父类方法返回的类型

引用类型:子类返回类型小于等于父类方法返回类型,

异常:

子类抛出异常小于等于父类方法抛出异常,

一大:

子类访问权限大于等于父类方法访问权限。

Overload的方法可以改变返回值的类型,因为它与返回值类型无关。

  1. switch是否能作用于byte上,是否作用于long上能作用于String上?

答案:

可以作用在byte上,不能作用于long上,

switch中可以是字符串类型,String(jdk1.7之后才可以作用在string上)

扩展:

switch可作用于char byte short int

   switch可作用于char byte short int对应的包装类

   switch不可作用于long double float boolean,包括他们的包装类

  1. 简述static和final的用法?

static:修饰属性,方法,代码块

(1)静态属性:也可叫类变量  类名.属性名  来访问

       (共有的类变量与对象无关,只和类有关)

   注意:类中的实例变量是在创建对象时被初始化的,被static修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,类加载的过程是进行一次。也就是类变量只会被创建一次。

(2)静态方法:类名.方法名  直接访问   

   注意:static修饰的方法,不能直接访问本类中的非静态(static)成员(包括方法和属性)

本类的非静态方法可以访问本类的静态成员(包括方法和属性),可以调用静态方法。

修饰变量,方法,类

final:修饰变量,类,方法 

(1)修饰变量

   被fianl修饰的成员变量就是常量(常量名大写),一旦赋值不能改变   

   修饰局部变量:修饰基本数据类型 -> 变量的值不能改变

                 修饰引用 -> 引用只能指向固定的对象

   修饰实例变量:默认值不生效,可以再赋值

(2)修饰方法 :不能被子类覆盖  

(3)修饰类:不能被继承  

    在一个final类中的所有方法,默认都是final的

  注意:final,不能用来修饰构造方法。

  1. JAVA 源文件中是否可以包括多个类,有什么限制?

一个.java文件里可以写多个类,但是只有一个public修饰的类.

  1. 出冒泡排序的算法

for(int i=0;i<arr.length-1;i++){ //控制轮数

  for(int j=0;j<arr.length-1-i;j++){ //控制每一轮的次数

    if(arr[j]>arr[j+1]){ //每次都是和它下一个元素比

  int t=arr[j];

  arr[j]=arr[j+1];

  arr[j+1]=t;

}

  }

}

java中有几种数据类型?基本类型有哪种?以各占的字节数?

两种数据类型:基本类型和引用类型

基本类型:

数据类型

占的字节数

byte

1

boolean

1

short

2

char

2

int

4

float

4

long

8

double

8

6、abstract class 和 interface 有什么区别?

abstract class

interface

实例化

不能

不能

一种继承关系,一个类只能使用一次继承关系。可以通过实现多个接口

一个类可以实现多个interface

数据成员

可有自己的

静态的不能被修改即必须是static final,一般不在此定义

方法

可以私有的,非abstract方法,必须实现

不能有私有的,默认是public,abstract 类型

变量

可有私有的,变量有默认的类型,其值可以在子类中重新定义,也可以重新赋值

不可有私有的,默认是public static final 型,且必须给其初值,实现类中不能重新定义,不能改变其值。

设计理念

表示的是“is-a”关系

表示的是“like-a”关系

实现

需要继承,要用extends

要用implements

1.相同点

  A. 两者都是抽象类,都不能实例化。

  B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2. 不同点

  A. interface需要实现,要用implements,而abstract class需要继承,要用extends。

  B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。

  C. interface强调特定功能的实现,而abstract class强调所属关系。

  D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。

7、类有哪三个基本特性?各特性的优点?

类具有封装性、继承性和多态性。

封装性:类的封装性为类的成员提供公有、缺省、保护和私有等访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。

继承性:允许通过继承原有类的某些特性或全部特性而产生全新的类,原有的累称为父类,产生的新类称为子类。子类不仅可以直接继承父类的共性,而且也可以创建它特有的个性。

多态性:是指在基类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同行为,多态性有两种表现形式:重载和覆盖。

8.Error和Exception有什么区别? 列出你见过的Exception并简要说明

答:error表示系统级的错误和程序不必处理的异常,

是恢复不是不可能但很困难的情况下的一种严重问题;

比如内存溢出,不可能指望程序能处理这样的情况;

exception表示需要捕捉或者需要程序进行处理的异常,

是一种设计或实现问题;也就是说,它表示如果程序运行正常,

从不会发生的情况。 常见异常有: NullPointerException:

当操作一个空引用时会出现此错误。 NumberFormatException:

数据格式转换出现问题时出现此异常。 ClassCastException:

强制类型转换类型不匹配时出现此异常。 ArrayIndexOutOfBoundsException:

数组下标越界,当使用一个不存在的数组下标时出现此异常。

9.java中会存在内存泄露吗?请简单描述。

答:内存泄露是指系统中存在无法回收的内存,

有时候会造成内存不足或系统崩溃。Java存在内存泄露。

Java中的内存泄露当然是指:存在无用但是垃圾回收器无法回收的对象。

而且即使有内存泄露问题存在,也不一定会表现出来。

自己实现堆栈的数据结构时有可能会出现内存泄露。

10.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

答:多线程有两种实现方法:继承Thread类或者实现Runnable接口。

实现同步也有两种方法:一种是同步方法,另一种是同步代码块。

同步方法是在方法返回类型前面加上synchronized关键字

同步代码块是synchronized (这里写需要同步的对象){...}

11.sleep()和wait()有什么区别?

答案:

(2)不同点:

1. Thread类的方法:sleep(),yield()等

Object的方法:wait()和notify()等

2.每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。

sleep方法没有释放锁,

wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用

4.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

12.请说出集合类中List、Map、Set的区别

答:List和Set继承了Collection接口,而map不是;

List中存放元素有顺序并且可以重复;

set中存放的元素是无序并且是不可能重复的;

Map中存放是键值对。

13.Collection 和 Collections的区别?

答:Collection是java.util下的接口,它是各种集合的父接口,

继承于它的接口主要有Set 和List;Collections是个java.util下的类,

是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

14.谈谈java跟你所知道的其它的语言相比,有什么优点??

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。
java是纯面向对象开发,功能强大,分支众多,没有java不能做的软件。C/S也好B/S也好。从功能上讲,没有语言可以和java相比。

C是面向过程编程的,这样往往会导致所谓的单一程序,既所有的功能只能包含在几个(通常是一个)代码模块中。当然,C语言也有自身的不足,比如:C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数族下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。

15. 谈谈你对面向对象的理解??

  所谓的面向对象就是将我们的程序模块化,对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放到一个类里面,这就是封装。封装是我们所说的面相对象编程的特征之一。除此之外还有继承和多态。继承有点类似与我们生物学上的遗传,就是子类的一些特征是来源于父类的,儿子遗传了父亲或母亲的一些性格,或者相貌,又或者是运动天赋。有点种瓜得瓜种豆得豆的意思。面向对象里的继承也就是父类的相关的属性,可以被子类重复使用,子类不必再在自己的类里面重新定义一回,父类里有点我们只要拿过来用就好了。而对于自己类里面需要用到的新的属性和方法,子类就可以自己来扩展了。当然,会出现一些特殊情况,就是我们在有一些方法在父类已经定义好了,但是子类我们自己再用的时候,发现,其实,我们的虽然都是计算工资的,但是普通员工的工资计算方法跟经理的计算方法是不一样的,所以这个时候,我们就不能直接调用父类的这个计算工资的方法了。这个时候我们就需要用到面向对象的另一个特性,多态。对,就是多态,我们要在子类里面把父类里面定义计算工资的方法在子类里面重新实现一遍。多态包含了重载和重写。重写很简单就是把子类从父亲类里继承下来的方法重新写一遍,这样,父类里相同的方法就被覆盖了,当然啦,你还是可以通过super.CaculSalary方法来调用父类的工资计算方法。而重载就是类里面相同方法名,不同形参的情况,可以是形参类型不同或者形参个数不同,或者形参顺序不同,但是不能使返回值类型不同。

16. 简单讲一下java的跨平台原理

  java源程序(.java文件)通过编译器编译成为Class文件(字节码文件),而它的class文件是基于字节码(以byte为单位存储的文件)的,而字节码文件是描述程序要运行的的虚指令的集合,这些虚指令的集合与任何的平台无关,Java虚拟机认识它(只要在不同的平台下部署相应的jre,运行jvm!就可以了

17. 有了基本数据类型,为什么还需要包装类型?

我们知道Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。

18. 说一下"=="和equals方法究竟有什么区别?

 ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。

19.讲一下java中的集合?

    set(集)、list(列表)和map(映射)。
区别嘛 HASHMAP只有KEY和value值对应的。。set是可以自动清楚相同的元素
list是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。
列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。

20. String、StringBuffer和StringBuilder的区别?

  1. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

2. 再来说线程安全

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

21. ArrayList和LinkedList的区别?

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

22. 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/123178
推荐阅读
相关标签
  

闽ICP备14008679号