在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
一年一度的秋招即将拉开序幕,又到了大家面试求职的激烈竞争时刻。面试Java开发的求职者要想从众多的优秀者脱颖而出并不容易,因此小编专门汇总了Java秋招面试题并附上答案,希望能让大家在面试前做好更充足的准备。
1、hread类的start()和run()方法的区别。
答案:start()方法会创建新的线程并启动该线程,所以该方法会调用其他native方法,而run()方法就是:正常的Java方法调用,即在原来的线程中执行java代码。
2、Java中Runnable和Callable的区别。
答案:Runnable和Callable都代表要线程中执行的任务。Runnable是JDK1.0加入的,而Callable确实是在JDK1.5加入的。区别:Callable的 call() 方法可以返回值和抛出异常,而Runnable的run()方法不能返回值也不能抛出异常。Callable是需要使用java.util.concurrent.ExecutorService.submit(Callable<T>)方法提交的,这样就可以获得Future对象,该对象可以装载了Callable接口的call()方法的返回结果。
3、简述Java内存模型。
答案:Java内存模型包含了一系列的规则和指导原则。Java语言是跨平台的,Java的内存模型确保了Java在不同的操作系统、CPU、内存架构上有确定的行为,特别是在多线程的情况下,一个线程所做的变动对其他线程是否可见是很重要的,这叫做先行发生关系。
4、态的好处
答案:允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点:
可替换性:多态对已存在代码具有可替换性;
可扩充性:增加新的子类不影响已经存在的类结构;
接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的。
5、否创建一个包含可变对象的不可变对象?
答案:当然可以创建一个包含可变对象的不可变对象的,你只需要谨慎一点,不要共享可变对象的引用就可以了,如果需要变化时,就返回原对象的一个拷贝。最常见的例子就是对象中包含一个日期对象的引用.
6、bject中有哪些公共方法?
答案:
equals()
clone()
getClass()
notify(),notifyAll(),wait()
toString
7、Java当中的四中引用:
答案:强引用,软引用,弱引用,虚引用.不同的引用类型主要体现在GC上。
(1)强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象。
(2)软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收。
(3)弱引用:具有弱引用的对象拥有的生命周期更短暂。因为当 JVM 进行垃圾回收,一旦发现弱引用对象,无论当前内存空间是否充足,都会将弱引用回收。不过由于垃圾回收器是一个优先级较低的线程,所以并不一定能迅速发现弱引用对象。
(4)虚引用:顾名思义,就是形同虚设,如果一个对象仅持有虚引用,那么它相当于没有引用,在任何时候都可能被垃圾回收器回收。
8、什么是编译器常量?使用它有什么风险?
答案:公共静态不可变(public static final )变量也就是我们所说的编译期常量,这里的 public 可选的。实际上这些变量在编译时会被替换掉,因为编译器知道这些变量的值,并且知道这些变量在运行时不能改变。这种方式存在的一个问题是你使用了一个内部的或第三方库中的公有编译时常量,但是这个值后面被其他人改变了,但是你的客户端仍然在使用老的值,甚至你已经部署了一个新的jar。为了避免这种情况,当你在更新依赖 JAR 文件时,确保重新编译你的程序。
9、如何判断一个对象是否应该被回收?
答案:这就是所谓的对象存活性判断,常用的方法有两种:引用计数法和对象可达性分析。由于引用计数法存在互相引用导致无法进行GC的问题,所以目前JVM虚拟机多使用对象可达性分析算法。
10、volatile类型变量提供什么保证?
答案:volatile 主要有两方面的作用:避免指令重排和可见性保证。例如,JVM 或者 JIT为了获得更好的性能会对语句重排序,但是 volatile 类型变量即使在没有同步块的情况下赋值也不会与其他语句重排序。 volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。某些情况下,volatile 还能提供原子性,如读 64 位数据类型,像 long 和 double 都不是原子的(低32位和高32位),但 volatile 类型的 double 和 long 就是原子的。
以上就是Java秋招面试题汇总,大家有没有都梳理一遍呢?如果遇到不确定这些问题的答案,可以再复习一下相关的知识点。最后,祝愿大家都能顺利通过面试。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java开发Overload 和 Override 的区别是什么?
Java开发Overload 和 Override 的区别是什么?Overloaded 的方法是否可以改变返回值的类型?Overload 是重载的意思,Override 是覆盖的意思,也就是重写。重载 Overload 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
8066
2019-05-24 15:22:03
Java基础 能不能自己写个类也叫 java.lang.String?
Java基础知识,能不能自己写个类也叫 java.lang.String?可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载 jre.jar 包中的那个java.lang.String。
7856
2019-06-03 14:33:13
Static局部变量与全局变量的区别?编译后映射文件是否包含此类变量的地址?
全局变量(外部变量)的说明之前再冠以static 就构成了静 态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整 个源程序, 当一个源程序由多个源文件组成时,非静态的 全局变量在各个源文件中都是有效的。
12388
2019-06-04 11:57:17
Java基础学习:面向过程与面向对象
刚开始学编程的时候都会遇到一个思维转变的过程,从原来人类思维模式转变成机器可以接受的思维模式。这个过程是非常难的,这也是为什么互联网人才能够获得高薪的原因。对于Java学习,面向过程可能更接近人的正常思维,而面向对象思维就是一个巨大的挑战了。本文就和大家聊一聊关于面向过程和面向对象的优劣。
6476
2019-06-24 18:35:01
Java基础面试题和答案整理
为了帮助大家可以更好地做好面试前的准备,本文为大家整理了Java基础面试题和答案。这些问题都是比较经典的面试题,大家可以先不看答案做一做,查漏补缺。
4319
2020-07-01 14:33:38