天天看点

Java面试题系列(一)-面试题及解题思路Java面试题系列(一)-面试题及解题思路

Java面试题系列(一)-面试题及解题思路

前言:

不管看了多少知识,最终还是要面试的。刷刷面试题也算是一个好的复习方法

面试题不是我自己面试的,是我网上找的 原文链接

解答思路是我自己想的,也不是标准答案,而且有可能会错。按我自己的理解给出涉及到的点

只是给出我觉得回答中应该涉及到的点,而不是就这么说

21题目前没有回答上来

23,24,26,34,35,36也有必要再更新

1、面向对象的特征有哪些方面?

A:多态,继承,封装 (PS:我挺不喜欢被问这种问题,都不知道咋说)

2、访问修饰符public,private,protected,以及不写(默认)时的区别?

修饰符 访问级别
public 公有成员,所有人可以访问
protected 受保护的成员,子类可见,以及同一包下的其他类可见
default 同一包下的其他类可见
private 仅该类自己可见

3、String 是最基本的数据类型吗?

A:不是基本数据类型,Sring是一个被final修饰的类。String常用的方法, 8种基本数据类型,包装类,自动装箱拆箱

4、float f=3.4;是否正确?

A:不行,3.4是double类型,得float f = 3.4f;这样写。8基本数据类型的所占位数。8种数据类型的转化

5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

A 前者有问题,后者没有问题。1是int型。 +=可以自动转化。

6、Java有没有goto?

A:Java没有goto,但是goto是保留字。流程跳转:if ,else, for, while, do-while, break, continue,代表情的break

7、int和Integer有什么区别?

基本数据类型和包装类,注意常量池 127

8、&和&&的区别?

都是与,前者是短路运算符。

与&或|非~,异或^

9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

A: 虚拟机运行时内存划分:程序计数器;虚拟机栈;本地方法栈; 堆;方法区(静态区应该指的资格) 五个部分。 前三者是线程独享,后面三者是线程共享;

堆:存储Java实例对象 (new 出来的实例)

栈:存储局部变量表(基本数据类型,对象引用)

方法区:类信息,常量,运行时常量池,静态变量,即时编译器编译后的代码数据

最大的一块区域是 堆

引申:垃圾回收 垃圾收集器

10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

A: 这个就相当于+0.5再取整。前者结果12,后者-11

11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

A:switch能够作用在 byte,short,boolean,int上。1.7之后更新。也能够作用在String上

12、用最有效率的方法计算2乘以8?

A: 1<<3向左移三位

13、数组有没有length()方法?String有没有length()方法?

A: String有length()方法; 数组有length属性没有length()方法 {这个问题挺没意思的。完全不知道想考验什么?}

14、在Java中,如何跳出当前的多重嵌套循环?

A:使用break 这个是最常见的。还有带标记的break和continue也可以。但是这种我看用的比较少。而且我个人实际上也没用过

15、构造器(constructor)是否可被重写(override)?

A:构造器用来new一个Java对象。只能被重载(一个类有多个构造函数)。不能被重写

16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

A:不对。两个对象equals,hashcode一定相同。因为equals的基本条件就是hashcode相同。但是hashcode相同 。却不一定equals。例如11%5的结果是1,6%5的结果也是1.但是6和11完全不同

引申:equals的5个特性:自反性,传递性,一致性,对称性,以及对于非空对象X,X.equals(null)的结果是false

17、是否可以继承String类?

A: 不行,String是final修饰的。不能被继承

引申:final,finally,finalize的区别。final在并发编程里的作用

18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

A:Java里面全部都是值传递。没有引用传递。一个对象传递给一个方法后,确实可以改变对应的属性。但是这里值传递指的是这个对象所指向内存地址不会被方法改变

19、String和StringBuilder、StringBuffer的区别?

A:String是final修饰的。每次改变都是新建个String对象

StringBuilder可以用append修改。也有一些好用的方法,例如反正,转大小写等

StringBuffer和StringBuilder一样,不过方法用synchronized修饰,线程安全

20、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

A:重载发生在一个类中,是方法名字相同。但是参数类型。或参数个数不同

重写发生在父子类间。子类重写父类的方法。方法名,返回值类型,参数类型,参数个数相同。重写方法体。子类重写父类的方法。方法访问方位只能比父类的小

重载是编译是多态,重写是运行时多态。

21、描述一下JVM加载class文件的原理机制?

22、char 型变量中能不能存贮一个中文汉字,为什么?

A:char占有两个字节,16位。应该能存的下吧

然后我刚才用idea试过了。原因哈Unicode编码有关。具体的我先在也想不起来。

23、抽象类(abstract class)和接口(interface)有什么异同?

这个问题有必要更新

A:现在接口和抽象类功能越来越接近了。要说不同还真有点不确定

修饰词不同:前者是 abstract 后者是Interface。前者是继承,后者是实现(可以实现多个方法)

内部方法的访问修饰不同:前者可以是大于private的就可以。 ~~ 后者只能是public ~~ (我刚才在IEDA试了下JDK12。发现接口里也能有private方法。但是必须写方法体)

用法上:接口一般是用来定义规范的。抽象类用来占坑

24、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?

25、Java 中会存在内存泄漏吗,请简单描述。

A:内存泄露指的是一个不用的对象一直占有着内存。Java理由垃圾回收机制,理论上是不会有内存泄露的。那就是实际上有咯。eg:HashSet持有一个对象。对象被更改后。HashSet存储的那个对象就不会被回收。

26、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

需要再更新

A:抽象方法需要子类重写。不能是静态的(看27题)。后面两种不太了解。应该是可以吗

27、阐述静态变量和实例变量的区别。

A:静态变量是属于类的。所有实例公有。实例变量是每个对象自己的

引申到JVM中:静态变量是类加载的时候初始化。实例变量是new对象(内存分配)的时候初始化

28、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?

A:不行,同27,静态的方法在类加载时候就初始化了。但是不能直接调用可以间接调用。通过先new一个对象,在通过那个对象调用非静态方法

29、如何实现对象克隆?

A:实现Cloneable接口,重写object的clone方法

引申:如何获取一个对象:①直接new②clone③反序列化④反射

31、String s = new String(“xyz”);创建了几个字符串对象?

A:一个或两个;如果字符串常量池(方法区)有xyz,则生成一个字符串对象。如果没有,想在字符串常量池生成一个,再堆中生成一个,一共两个

32、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?

A:接口可以扩展(extends)接口,抽象类可以实现接口,抽象类可以继承具体的类

可以联想抽象类和接口的具体作用。

33、一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?

A:可以有多个类。但是只有一个public类。文件名就是这个public类

34、Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?

待补充。内部类这一块我虽然用的不算少。但是具体的很少深究

35、内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?

待补充

36、Java 中的final关键字有哪些用法?

A:修饰类,类不能被继承,修饰方法:方法不能被重写。修饰对象,对象贝能修改。简单说就是 绝后。只要被final修饰了。就不能对齐做其他操作了

在并发中的作用有待补充

38、数据类型之间的转换:

小的可以装换成大的。

boolean 和编译器有关。我觉得1字节就够了

byte 1字节

short 2字节

char 2字节

int 4字节

float 4字节

long 8

double 8

39、如何实现字符串的反转及替换?

A:StringBuilder有reserve方法。应该也有类似的方法{这个问题其实挺没意思的。这种接口用的时候可以通过IEDA看有哪些方法。这哪记得方法名}