2019年Java开发实 用的面试题及参考答案




  Java开发实 用的面试题及参考答案分享,Java程序员 面试过程中少不了专业上的考试,那么面 试过程中面试官会问些什么问题呢?接下来 小编带你一起来进入面试环节:


timg (11).jpg


  1、进程,线程,协程之 间的区别是什么?


  简而言之,进程是 程序运行和资源分配的基本单位,一个程 序至少有一个进程,一个进 程至少有一个线程。进程在 执行过程中拥有独立的内存单元,而多个 线程共享内存资源,减少切换次数,从而效率更高。线程是 进程的一个实体,是cpu调度和 分派的基本单位,是比程 序更小的能独立运行的基本单位。同一进 程中的多个线程之间可以并发执行。


  2、你了解守护线程吗?它和非 守护线程有什么区别


  程序运行完毕,jvm会等待 非守护线程完成后关闭,但是jvm不会等待守护线程。守护线 程最典型的例子就是GC线程。


  3、什么是 多线程上下文切换


  多线程 的上下文切换是指CPU控制权 由一个已经正在运行的线程切换到另外一个就绪并等待获取CPU执行权的线程的过程。


  4、创建两种线程的方式?他们有什么区别?


  通过实现java.lang.Runnable或者通过扩展java.lang.Thread类。相比扩展Thread,实现Runnable接口可能更优.原因有二:


  Java不支持多继承。因此扩展Thread类就代 表这个子类不能扩展其他类。而实现Runnable接口的 类还可能扩展另一个类。


  类可能 只要求可执行即可,因此继承整个Thread类的开销过大。


  5、Thread类中的start()和run()方法有什么区别?


  start()方法被 用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是 在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。


  6、怎么检 测一个线程是否持有对象监视器?


  Thread类提供了一个holdsLock(Objectobj)方法,当且仅当对象obj的监视 器被某条线程持有的时候才会返回true,注意这是一个static方法,这意味着”某条线程”指的是当前线程。


  7、Runnable和Callable的区别是什么?


  Runnable接口中的run()方法的返回值是void,它做的 事情只是纯粹地去执行run()方法中的代码而已;Callable接口中的call()方法是有返回值的,是一个泛型,和Future、FutureTask配合可 以用来获取异步执行的结果。


  这其实 是很有用的一个特性,因为多 线程相比单线程更难、更复杂 的一个重要原因就是因为多线程充满着未知性,某条线程是否执行了?某条线程执行了多久?某条线 程执行的时候我们期望的数据是否已经赋值完毕?无法得知,我们能 做的只是等待这条多线程的任务执行完毕而已。而Callable+Future/FutureTask却可以 方便获取多线程运行的结果,可以在 等待时间太长没获取到需要的数据的情况下取消该线程的任务。


  8、你知道 哪些垃圾回收算法?


  垃圾回 收从理论上非常容易理解,具体的 方法有以下几种:


  1.标记-清除


  2.标记-复制


  3.标记-整理


  4.分代回收


  9、如何判 断一个对象是否应该被回收


  这就是 所谓的对象存活性判断,常用的方法有两种:1.引用计数法;2.对象可达性分析。由于引 用计数法存在互相引用导致无法进行GC的问题,所以目前JVM虚拟机 多使用对象可达性分析算法。


  10、简单的 解释一下垃圾回收


  Java垃圾回 收机制最基本的做法是分代回收。内存中 的区域被划分成不同的世代,对象根 据其存活的时间被保存在对应世代的区域中。一般的实现是划分成3个世代:年轻、年老和永久。内存的 分配是发生在年轻世代中的。当一个 对象存活时间足够长的时候,它就会 被复制到年老世代中。对于不 同的世代可以使用不同的垃圾回收算法。进行世 代划分的出发点是对应用中对象存活时间进行研究之后得出的统计规律。一般来说,一个应 用中的大部分对象的存活时间都很短。比如局 部变量的存活时间就只在方法的执行过程中。基于这一点,对于年 轻世代的垃圾回收算法就可以很有针对性。


  11、调用System.gc()会发生什么?


  通知GC开始工作,但是GC真正开 始的时间不确定。


  12、64位的JVM当中,int的长度是多少?


  Java中,int类型变 量的长度是一个固定值,与平台无关,都是32位。意思就是说,在32位和64位的Java虚拟机中,int类型的长度是相同的。


  13、int和Integer的区别


  Integer是int的包装类型,在拆箱和装箱中,二者自动转换。int是基本类型,直接存数值,而integer是对象,用一个 引用指向这个对象。


  14、int和Integer谁占用的内存更多?


  Integer对象会 占用更多的内存。Integer是一个对象,需要存 储对象的元数据。但是int是一个 原始类型的数据,所以占用的空间更少。


  15、String,StringBuffer和StringBuilder区别


  String是字符串常量,final修饰:StringBuffer字符串变量(线程安全);


  StringBuilder字符串变量(线程不安全)。


  16、String和StringBuffer


  String和StringBuffer主要区别是性能:String是不可变对象,每次对String类型进 行操作都等同于产生了一个新的String对象,然后指向新的String对象。所以尽量不在对String进行大量的拼接操作,否则会 产生很多临时对象,导致GC开始工作,影响系统性能。


  StringBuffer是对对象本身操作,而不是产生新的对象,因此在 有大量拼接的情况下,我们建议使用StringBuffer。


  但是需要注意现在JVM会对String拼接做一定的优化:


  Strings=“Thisisonly”+”simple”+”test”会被虚 拟机直接优化成Strings=“Thisisonlysimpletest”,此时就 不存在拼接过程。


  17、StringBuffer和StringBuilder


  StringBuffer是线程 安全的可变字符串,其内部 实现是可变数组。StringBuilder是jdk1.5新增的,其功能和StringBuffer类似,但是非线程安全。因此,在没有 多线程问题的前提下,使用StringBuilder会取得更好的性能。


  18、什么是编译器常量?使用它有什么风险?


  公共静态不可变(publicstaticfinal)变量也 就是我们所说的编译期常量,这里的public可选的。实际上 这些变量在编译时会被替换掉,因为编 译器知道这些变量的值,并且知 道这些变量在运行时不能改变。这种方 式存在的一个问题是你使用了一个内部的或第三方库中的公有编译时常量,但是这 个值后面被其他人改变了,但是你 的客户端仍然在使用老的值,甚至你 已经部署了一个新的jar。为了避免这种情况,当你在更新依赖JAR文件时,确保重 新编译你的程序。


  19、java当中使 用什么类型表示价格比较好?


  如果不 是特别关心内存和性能的话,使用BigDecimal,否则使 用预定义精度的double类型。


  20、如何将byte转为String


  可以使用String接收byte[]参数的 构造器来进行转换,需要注 意的点是要使用的正确的编码,否则会 使用平台默认编码,这个编 码可能跟原来的编码相同,也可能不同。


以上就是动力节点java学院小编分享的“ 2019年Java开发实 用的面试题及参考答案”的内容,希望能够帮助到大家,更多java最新面 试题请继续关注动力节点java学院官网,每天会 有精彩内容分享与你。


相关面试题推荐


最新最全java面试题及答案(从初级到高级)


Java程序员必备,中级面 试总结建议收藏


史上最全的中高级JAVA工程师 面试题及答案汇总


10道中高级Java面试题详解,弄懂offer拿到手软


java程序员 常见面试题及答案


上一篇:中级java程序员面试题及答案
下一篇:为什么 越来越多的人选择参加Java培训班
0

开班信息

  • 抢座中
  • 已开班
  • 已开班
  • 已开班
  • 已开班

友情链接:    V8彩票app网址   中大奖彩票   九州彩票客服热线   时时彩官网投注站   v8快投是真的吗