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看有哪些方法。这哪记得方法名}