人手一份的Java面试精选题,你值得拥有!

对Java面试而言,面试前的准备一定要有面试题收集和学习这一项,因为在招聘公司看来,对Java工程师职位的最大关注就是专业知识和技能水平的考察,所以程序员去公司面试,无论怎样都要先做一套面试题。对于不同级别的程序员岗位的应聘,相应的面试题难度肯定是不一样的,今天这篇文章总结了一些中级Java工程师面试题。

Java
为什么使用不同的引用类型呢?
回答:与C语言不同,我们可以控制内存的申请和释放,在java中,有时我们需要控制回收对象的合适时间,因此产生了不同的引用类型,可以说不同的引用类型实则是GC回收时间无法控制的折衷方案,下面2个使用场景可以很好地说明:

使用软引用和弱引用可以解决OOM问题:使用HashMap可以保存图片路径与与对应图片对象相关的软引用之间的映射关系,当内存不足时,JVM可以自动恢复这些缓存图片对象所占的空间,有效避免OOM问题。

第二种方法是通过软引用实现对java对象的高速缓存:例如,我们创建了一个Person类,当每次需要查询某个人的信息时,即使是在几秒内之前就查询了,也要重新构建实例,这会消耗大量的Person对象,而且由于这些对象的生命周期相对较短,会造成很多GC影响性能。现在,通过软引用和HashMap的结合,高速缓存可以被构建,从而提供性能。

final,finalize和finally之间有什么区别呢?
回答:final是一个可以修饰变量,方法和类的修饰符。如果final修饰一个变量,表示这个变量的值在初始化之后不能改变。Finalize方法是在回收对象之前调用的方法,它允许对象自己最后一次复活,但不保证何时调用finalize。finally是用于处理try和catch的一个关键字。不管try块中是否出现异常,都将执行finally块。

深拷贝与浅拷贝有何不同?
浅拷贝:被复制对象的所有变量都包含与原始对象相同的值,并且其他对象的所有引用仍然指向原始对象。换句话说,浅复制只是复制了要考虑的对象,而没有复制它引用的对象。

深度复制:被复制对象的所有变量都包含与原始对象相同的值,而那些引用其他对象的变量会指向新的被复制对象,而不会指向原始对象。换句话说,deepcopy将复制被复制对象所引用的所有对象。

什么是编译器常量呢?这有什么危险呢?
回答:publicstaticfinal是一个公共静态不可变的变量,也就是我们所谓的编译期常量,public在这里是可选的。事实上,在编译时这些变量将被替换,因为编译器知道这些变量的值,而且它们在运行时不能被更改。这样做的一个问题是,您在内部或第三方库中使用了公共编译时间,但此值后来被其他人更改,但您的客户端仍在使用旧的值,甚至您已经部署了新的jar。要避免这一点,请确保在更新依赖JAR文件时重新编译程序。

免费领取Java面试题

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值