Java面试居然有这么多学问,看看高级程序员面试题是什么样的

Posted Java编程精选

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面试居然有这么多学问,看看高级程序员面试题是什么样的相关的知识,希望对你有一定的参考价值。

关键时刻,第一时间送达!

java 面试跟着时刻的改动而改动。在曩昔的日子里,当你知道 String 和 StringBuilder 的差异就能让你直接进入第二轮面试,可是如今疑问变得越来越高档,面试官问的疑问也更深入。 在我初入职场的时分,类似于 Vector 与 Array 的差异、HashMap 与 Hashtable 的差异是最盛行的疑问,只需求记住它们,就能在面试中取得更好的时机,但这种景象已经不复存在。如今,你将会被问到许多 Java 程序员都没有看过的范畴,如 NIO,规划形式,老练的单元测验,或许那些很难掌握的知识,如并发、算法、数据结构及编码。


伪同享疑问很难被发现,由于线程也许拜访完全不同的全局变量,内存中却碰巧在很附近的位置上。如别的诸多的并发疑问,防止伪同享的最基本办法是细心检查代码,根据缓存行来调整你的数据结构。


1)啥是 Busy spin?咱们为啥要运用它?


Busy spin 是一种在不开释 CPU 的基础上等候事情的技术。它常常用于防止丢掉 CPU 缓存中的数据(假如线程先暂停,以后在别的CPU上运转就会丢掉)。所以,假如你的作业要求低推迟,而且你的线程现在没有任何次序,这么你就能够经过循环检查行列中的新消息来替代调用 sleep() 或 wait() 办法。它唯一的优点即是你只需等候很短的时刻,如几微秒或几纳秒。LMAX 分布式框架是一个高性能线程间通讯的库,该库有一个 BusySpinWaitStrategy 类即是根据这个概念完成的,运用 busy spin 循环 EventProcessors 等候屏障。


2)Java 中怎样获取一份线程 dump 文件?


在 Linux 下,你能够经过指令 kill -3 PID (Java 进程的进程 ID)来获取 Java 运用的 dump 文件。在 Windows 下,你能够按下 Ctrl + Break 来获取。这么 JVM 就会将线程的 dump 文件打印到规范输出或过错文件中,它也许打印在控制台或许日志文件中,具体位置依靠运用的装备。假如你运用Tomcat。


3)Swing 是线程安全的?


不是,Swing 不是线程安全的。你不能经过任何线程来更新 Swing 组件,如 JTable、JList 或 JPanel,事实上,它们只能经过 GUI 或 AWT 线程来更新。这即是为啥 Swing 供给 invokeAndWait() 和 invokeLater() 办法来获取别的线程的 GUI 更新恳求。这些办法将更新恳求放入 AWT 的线程行列中,能够一向等候,也能够经过异步更新直接回来成果。你也能够在参考答案中检查和学习到更具体的内容。


4)啥是线程局部变量?


线程局部变量是局限于线程内部的变量,属于线程自身一切,不在多个线程间同享。Java 供给 ThreadLocal 类来支撑线程局部变量,是一种完成线程安全的办法。可是在办理环境下(如 web 服务器)运用线程局部变量的时分要格外当心,在这种情况下,作业线程的生命周期比任何运用变量的生命周期都要长。任何线程局部变量一旦在作业完成后没有开释,Java 运用就存在内存泄露的危险。


5)用 wait-notify 写一段代码来解决生产者-消费者疑问?


请参考答案中的示例代码。只需记住在同步块中调用 wait() 和 notify()办法,假如堵塞,经过循环来测验等候条件。


6) 用 Java 写一个线程安全的单例形式(Singleton)?


请参考答案中的示例代码,这里面一步一步教你创立一个线程安全的 Java 单例类。当咱们说线程安全时,意思是即使初始化是在多线程环境中,依然能保证单个实例。Java 中,运用枚举作为单例类是最简略的办法来创立线程安全单例形式的办法。


7)Java 中 sleep 办法和 wait 办法的差异?


尽管两者都是用来暂停当前运转的线程,可是sleep() 实际上仅仅短暂中止,由于它不会开释锁,而 wait() 意味着条件等候,这即是为啥该办法要开释锁,由于只要这么,别的等候的线程才能在满足条件时获取到该锁。


8)啥是不可变目标(immutable object)?Java 中怎样创立一个不可变目标?


不可变目标指目标一旦被创立,状况就不能再改动。任何修正都会创立一个新的目标,如 String、Integer及其它包装类。概况拜见答案,一步一步指导你在 Java 中创立一个不可变的类。


9)咱们能创立一个包括可变目标的不可变目标吗?


是的,咱们是能够创立一个包括可变目标的不可变目标的,你只需求慎重一点,不要同享可变目标的引证就能够了,假如需求变化时,就回来原目标的一个复制。最常见的比如即是目标中包括一个日期目标的引证。


  • 来自:今日头条

  • Java编程精选整理发布,转载请联系作者获得授权

以上是关于Java面试居然有这么多学问,看看高级程序员面试题是什么样的的主要内容,如果未能解决你的问题,请参考以下文章

整理的70道阿里高级Java面试题,都来挑战一下,看看自己有多厉害

高级面试题总结—线程池还能这么玩?

Java自学资料!靠着这份面试题跟答案

MySQL面试题(无答案版) 中高级必看

面试JAVA程序员最基本的面试题都有哪些?

最强Java多线程面试题TOP50,不管工作几年都可以看看