1 Star 0 Fork 31

tankai / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Java面试题及答案整理2021年最新汇总版.md 10.42 KB
一键复制 编辑 原始数据 按行查看 历史

Java面试题及答案整理2021年最新汇总版

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

Java 基础

题1:静态方法和实例方法有什么不同?

静态方法和实例方法的区别主要体现在两个方面:

其一在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式而实例方法只能试用后面这种方式。也就是说,调用静态方法可以无需创建对象进行实例化。

其二静态方法在访问本类的成员时,只允许访问静态成员也就是静态成员变量和静态方法,而不允许访问实例成员变量和实例方法,实例方法是没有这个限制的。

题2:父类中静态方法能否被子类重写?

父类中静态方法不能被子类重写。

重写只适用于实例方法,不能用于静态方法,而且子类当中含有和父类相同签名的静态方法,一般称之为隐藏。

public class A {
	
	public static String a = "这是父类静态属性";
	
	public static String getA() {
		return "这是父类静态方法";
	}
	
}
public class B extends A{
	
	public static String a = "这是子类静态属性";
	
	public static String getA() {
		return "这是子类静态方法";
	}
	
	public static void main(String[] args) {
		A a =  new B();
		System.out.println(a.getA());
	}
}

如上述代码所示,如果能够被重写,则输出的应该是“这是子类静态方法”。与此类似的是,静态变量也不能被重写。如果想要调用父类的静态方法,应该使用类来直接调用。

题3:写出一个正则表达式来判断一个字符串是否是一个数字?

一个数字字符串,只能包含数字,如0到9以及+、-开头,通过这个信息,如下代码,正则表达式来判断给定的字符串是不是数字。

import java.util.regex.Pattern;
java.util.regex.Matcher;
public boolean isNumeric(String str){
    Pattern pattern = Pattern.compile("[0-9]*"); 
    Matcher isNum = pattern.matcher(str); 
    if( !isNum.matches() ){
        return false;
    } 
    return true;
}

题4:什么是 Java 事务?

通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。

事务必须服从ISO/IEC所制定的ACID原则。

原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability)

原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。

一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。

隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。

持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。

题5:Java 中 @XmlTransient 和 @Transient 有什么区别?

1、@XmlTransient

1)@XmlTransient注解解决JavaBean属性名称与字段名称之间的名称冲突,或者用于防止字段/属性的映射。

2)阻止将JavaBean属性映射到XML表示形式。

2、@Transient

1)表示属性不需要映射到数据库表,即使数据库存在该字段也不会映射。

2)通常用来修饰属性,使用时修饰get方法即可。

题6:什么是非对称加密?

所谓非对称加密算法即加密和解密需要两个密钥进行,这两个密钥是公钥和私钥(高等加密算法)。

非对称加密算法两个密钥:公开密钥(publickey)和私有密钥(privatekey)。

公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。一般公钥是公开的,私钥是自己保存。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

安全性相对对称加密来说更高,是一种高级加密方式。

题7:Java 有没有 goto?

goto是Java中的保留字,在目前版本的Java中没有使用。(根据James Gosling(Java之父)编写的《The Java Programming Language》一书的附录中给出了一个Java关键字列表,其中有goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字)。

题8:如何理解 final 关键字?

1)类的final变量和普通变量有什么区别?

当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。

2)被final修饰的引用变量指向的对象内容可变吗?

引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的

3)final参数的问题

在实际应用中,我们除了可以用final修饰成员变量、成员方法、类,还可以修饰参数、若某个参数被final修饰了,则代表了该参数是不可改变的。如果在方法中我们修改了该参数,则编译器会提示你:

The final local variable i cannot be assigned. It must be blank and not using a compound assignment。

java采用的是值传递,对于引用变量,传递的是引用的值,也就是说让实参和形参同时指向了同一个对象,因此让形参重新指向另一个对象对实参并没有任何影响。

题9:Java 中什么是重载(Overload)?

重载(Overload):是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同

重载规则

1、被重载的方法必须改变参数列表(参数个数或类型不一样);

2、被重载的方法可以改变返回类型;

3、被重载的方法可以改变访问修饰符;

4、被重载的方法可以声明新的或更广的检查异常;

5、方法能够在同一个类中或者在一个子类中被重载;

6、无法以返回值类型作为重载函数的区分标准;

实例:

public class OverloadDemo {
	
	// 方法1 无参
	public int test() {
		System.out.println("公众号Java精选,3000+面试题!");
		return 1;
	}

	// 方法2 单一参数
	public void test(int a) {
		System.out.println("公众号Java精选,3000+面试题!!");
	}

	// 方法3 下面两个参数类型顺序不同
	public String test(long a, String s) {
		System.out.println(s);
		return "方法3返回->" + s;
	}

	//方法4
	public String test(String s, int a) {
		System.out.println(s);
		return "方法4返回->" + s;
	}

	public static void main(String[] args) {
		OverloadDemo od = new OverloadDemo();
		System.out.println(od.test());//方法1
		od.test(2);//方法2
		System.err.println(od.test(3l, "公众号Java精选,3000+面试题!"));//方法3
		System.err.println(od.test("公众号Java精选,3000+面试题!!!", 4));//方法4
	}
}

执行结果

公众号Java精选,3000+面试题!
1
公众号Java精选,3000+面试题!!
公众号Java精选,3000+面试题!
方法3返回->公众号Java精选,3000+面试题!
方法4返回->公众号Java精选,3000+面试题!!!
公众号Java精选,3000+面试题!!!

题10:Java 中 Serializable 和 Externalizable 有什么区别?

Serializable接口是一个序列化Java类的接口,以便于它们可以在网络上传输或者可以将它们的状态保存在磁盘上,是JVM内嵌的默认序列化方式,成本高、脆弱而且不安全。

Externalizable允许你控制整个序列化过程,指定特定的二进制格式,增加安全机制。

题11:java-中-dom-和-sax-解析器有什么不同

题12:为什么-string-类型是被-final-修饰的

题13:非对称加密主要有哪些实现方式

题14:java-变量命名规则是什么

题15:java-中-math.-round(-1.5)-等于多少

题16:hashcode()-中可以使用随机数字吗

题17:列举-5-个-jdk1.8-引入的新特性

题18:string-类的常用方法都有哪些

题19:a==b-与-a.equals(b)-有什么区别

题20:jdkjrejvm-之间有什么关系

题21:java-中-使得-rmi-程序正确运行有哪些步骤

题22:java-方法命名规则是什么

题23:java-中常见的-exception-和-error-有哪些对象

题24:java-中-integer-a=-128-与-integer-b-=-128-相等吗

题25:java-常量命名规则是什么

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/tankkai/ebooks.git
git@gitee.com:tankkai/ebooks.git
tankkai
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891