思途Tech|Java开发师面试时必备的5个问题
Java开发师在面试的时候总会遇到各种各样的问题,虽然都不怎么难,但是因为太突然而手足无措的情况时有发生。为了帮助大家能够避免在这个地方踩坑,小编特意整理了企业在面试Java开发师时经常会提到的5个问题,快来看看吧!
在使用多线程时,上下文切换指的是什么?
上下文切换是存储和恢复CPU状态的过程,它可以让线程执行可以在中断点的位置继续恢复执行。上下文切换非基本特征是多任务操作系统和多线程环境。
多线程编程的优势在哪?
在开发多线程的程序中,提高程序效率的方式就是多线程执行并发,CPU不会因为某个线程需要等待资源而进入空闲状态。多个线程共享堆内存(heap memory),因此创建多个线程去执行一些任务会比创建多个进程更好。举个例子,Servlets比CGI更好,是因为Servlets支持多线程而CGI不支持。
为什么Thread类的sleep()和yield()方法是静态的?
Thread类的sleep()和yield()方法将在当前正在执行的线程上运行。处于等待状态的线程被调用这种行为是毫无意义的。避免程序员错误的认为可以在其他非运行线程调用这些方法的最好方式就是在当前正在执行的线程中工作。
什么是Java线程转储,如何得到它?
线程转储是一个JVM活动线程的列表,它对于分析系统瓶颈和死锁非常有用。有很多方法可以获取线程转储——使用Profiler,Kill -3命令,jstack工具等等。我更喜欢jstack工具,因为它容易使用并且是JDK自带的。由于它是一个基于终端的工具,所以我们可以编写一些脚本去定时的产生线程转储以待分析。
volatile在Java中有什么作用?
当volatile修饰变量时,全部的线程都会直接进行读取该变量并且不会触发缓存行为。这就确保了线程读取到的变量是同内存中是一致的。