更新时间:2023-01-10 13:47:49 来源:极悦 浏览1912次
2023年已经开始了,接近我们的是大家常说的金三银四,时间晃眼就过去,不少同学开始为新的工作早早做出准备,不管是临阵磨枪还是势在必得,想必看文章的你也正期待着升值涨薪吧,大家不妨来看看小编为大家盘点整理出的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、简述动态代理和静态代理
静态代理:
动态代理:
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官网。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习