专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 90%会被面试官问到的Java反射面试题

90%会被面试官问到的Java反射面试题

更新时间:2023-01-10 13:47:49 来源:动力节点 浏览1515次

2023年已经开始了,接近我们的是大家常说的金三银四,时间晃眼就过去,不少同学开始为新的工作早早做出准备,不管是临阵磨枪还是势在必得,想必看文章的你也正期待着升值涨薪吧,大家不妨来看看小编为大家盘点整理出的java反射面试题。

java反射面试题

1、实现单例设计模式(懒汉、饿汉)

//懒汉,顾名思义比较懒,在用的时候才实例化
public class Singleton {
	//创建实例,注意,此时没有new
	private static Singleton instance = null;
	//构造方法私有化
	private Singleton() {}
	//公有的静态方法,返回实例对象
	public static Singleton getInstance() {
		if (instance == null) {
			//这里才new
			instance = new Singleton();
		}
		return instance;
	}
}

//饿汉,顾名思义很饥饿,创建对象的时候就直接new
public class Singleton {
	//创建实例的时候就new
	private static Singleton instance = new Singleton();
	// 私有化构造方法,外部不能new
	private Singleton() {}
	public static Singleton getInstance() {
		return instance;
	}
}

2、简述Java的反射机制和使用场景

反射是Java的一种机制,可以让我们在运行时获取类的信息

通过反射我们可以获取到类的所有信息,比如它的属性、构造器、方法、注解等

适用于需要动态创建对象的场景

关于反射能说的太多,已单独出一篇博客来记录,请出门右转至信不信十分钟让你彻底搞懂java反射

3、什么是内存泄漏,怎么确定内存泄漏?

概念:内存泄漏就是指jvm内存没有及时释放,用人话说就是使用完的对象没有被回收,一般造成原因都是编码不规范,new了很多值为null的对象,然后又不调用

怎么确认:linux有个工具叫valgrind,一两句话说不清楚,单独拎出来讲,移步使用valgrind来检查内存泄漏

4、简述动态代理和静态代理

静态代理:

  • 由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了
  • 静态代理通常只代理一个类
  • 静态代理事先知道要代理的是什么

动态代理:

  • 在程序运行时,运用反射机制动态创建而成
  • 动态代理是代理一个接口下的多个实现类
  • 动态代理不知道要代理什么东西,只有在运行时才知道

5、Java中接口和抽象类的异同?

先单独说一点,让你可以在朋友面前装逼:接口也能被继承,只不过是被接口继承

1、都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,不提供具体的实现(jdk1.8允许接口有一个default的实现方法)

2、接口是对事物行为的抽象,而抽象类是对事务本质的抽象;

3、接口中的变量必须给出初始值,抽象类可以不给;

4、一个类只能继承一个抽象类,但可以实现多个接口;

5、抽象类中可以写非抽象的方法,从而避免在子类中重复书写它们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法;

针对第二点和第四点举个例帮助理解:

对于抽象类:比方说有公鸡、母鸡、公狗、母狗,我们可以抽象出两个更高级的类,鸡类和狗类,因为你不能又是鸡又是狗,所以你只能继承其中一个,这就是为什么抽象类只能单继承;

对于接口:众所周知,鸡都会唱、跳、rap,这时候就可以把鸡的基本操作抽象成一个接口,而有的鸡通过后天练习可能会学会打篮球,那么就存在一种高端鸡,又会唱跳rap又会打篮球,这就是为什么接口可以多实现;

6、Java中sleep和wait的区别?

1、sleep是Thread的方法,wait是Object的方法

2、sleep方法没有释放锁,而wait方法释放了锁

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

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

7、Java如何进行高效的数组拷贝?

Arrays.copyOf或 System.arraycopy,是自己new数组, 然后for循环复制效率的两倍左右

为什么快,因为它们是native方法;

8、http中get和post的区别?

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

然而实际上,它们的本质都是 TCP 连接,并无区别。上面的答案纯粹是为了应付面试官。真正导致产生区别的原因是 HTTP 的规定以及浏览器/服务器的限制,这才导致它们在应用过程中可能会有所不同。

以上就是“90%会被面试官问到的Java反射面试题”,你能回答上来吗?如果想要了解更多的Java面试题相关内容,可以关注动力节点Java官网。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>