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面试总的来说面试无非要做到两点:

1.别人答不上的,你得知道。

2.别人答得上的,你得知道的更多!包括但不限于Java多线程,锁,SSM源码,并发包,各类集合框架,MySQL索引调优,事务,MVCC,Redis相关内容,JVM垃圾回收,内存模型,类加载机制。

【文章福利】

现在是跳槽招聘季,为了解决小伙伴们的燃眉之急

小编也准备了一些JAVA程序员面试题,小伙伴可以试试。

需要的可以加小编QQ群937053620,获取!(内附答案详解)

原文地址:https://blog.51cto.com/14169218/2353900

时间: 2024-10-10 22:17:22

Java面试学问多,看看高级程序员面试题是什么样的的相关文章

Java高级程序员面试题

1.你认为项目中最重要的过程是那些? 分析.设计阶段  尽量找出进度的优先级 2.如果给你一个4-6人的team,怎么分配? 挑选一技术过硬的人作为我的替补.其它人平均分配任务,每周进行全面的任务分配,每个人领取一周的工作量 ,每天汇报进度. 3.简述软件开发文档? 需求分析.概要设计.详细设计.操作手册.测试计划 4.你认为一个项目如何才正确? 是企业利益最大化. 5.你经常读那些书? Java编程思想 Java模式  人月神话 6.springmvc的工作原理? 客户端请求提交到Dispac

java 面试,java 后端面试,数据库方面对初级和高级程序员的要求

本内容摘自 java web轻量级开发面试教程 对于合格的程序员,需要有基本的数据库操作技能,具体体现在以下三个方面. l  第一,针对一类数据库(比如MySQL.Oracle.SQL Server等),会基本的增删改查操作,会用一些基本的函数,会编写存储过程触发器索引等工具. l  第二,知道一些基本的对项目开发有帮助的概念,比如范式.索引.分区等. l  第三,能编写一些相对复杂的SQL语句,比如带连接.带子查询.嵌套查询等. 对于高级程序员,用过的数据库种类当然是越多越好,此外,还要掌握如

java程序员面试题大全含答案(2018--2019)

java程序员面试题大全含答案(2018--2019) 1.10道经典java面试题_实习生必问! 2.15个Java线程并发面试题和答案 3.15个高级Java多线程面试题及回答 4.2018年java分布式相关最新面试题 5.2018最新java技术面试题与答案 6.4个Spring常见面试题及答案解析 7.css面试题及答案 8.HR常问面试题总结(上) 9.HR常问面试题总结(下) 10.html面试题及答案 11.java中String类的面试题大全含答案 12.java二叉树算法面试

Java程序员面试题集(1-50)

下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最新版本,去掉了EJB 2.x等无用内容,补充了数据结构和算法相关的题目.经典面试编程题.大型网站技术架构.操作系统.数据库.软件测试.设计模式.UML等内容,同时还对很多知识点进行了深入的剖析,例如hashCode方法的设计.垃圾收集的堆和代.Java新的并发编程.NIO.2等,相信对准备入职的Ja

Java程序员面试题集(71-85)

Java程序员面试题集(71-85) 摘要:这一部分主要包括了UML(统一建模语言).面向对象的设计原则(六原则一法则).GoF设计模式.企业级设计模式.JDBC(Java数据库连接).XML(可扩展标记语言)等知识. 71.UML是什么?UML中有哪些图? 答:UML是统一建模语言(Unified Modeling Language)的缩写,它发表于1997年,综合了当时已经存在的面向对象的建模语言.方法和过程,是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化

如何成为一个C++高级程序员

C++这门语言从诞生到今天已经经历了将近30个年头.不可否认,它的学习难度都比其它语言较高.而它的学习难度,主要来自于它的复杂性.现在 C++ 的使用范围比以前已经少了很多,java.C#.python 等语言在很多方面已经可以代替C++.但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏.高效的服务器. 现在学习 java.C#等语言的人数远远高于C++,主要是 C++ 的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃. 我想

高级程序员和低级程序员的区别

低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样, 低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西, 你都可以大胆的忽略. 所以, 我们来听听高级程序认为自己与低级程序员的区别是什么. 高级程序员之所以高级, 在于他们认识到代码 bug 是不可避免的, 有千万种理由可以导致 bug, 但他们可以在设计和逻辑上保证(追求)滴水不漏, 并用逻辑的

大家在寻找的高级程序员到底是什么样子的?

如果第二次看到我的文章,欢迎右侧扫码订阅我哟~  ?? 每周五11:45 按时送达.当然了,也会时不时加个餐- ?我的第「110」篇原创敬上 你好,我是Z哥. 这篇文章主题很简单,就是一个很常见的话题“什么是高级程序员?”. 文章稍微长了些,但是很容易阅读. 我们的中国文化,对“面子”看的特别重,所以你会发现身边到处都是高级XXX,听着倍儿有面子,程序员也不例外. 但是你真要问每个人,你认为的高级XXX是什么样子的.估计每个人都有不同的回答. 我还记得在我刚开始从事编程工作的时候,对坐在边上不远

作为高级程序员应具有的基本素质

那么作为高级程序员,以至于系统分析员,也就是对于一个程序项目的设计者而言,除了应该具备上述全部素质之外,还需要具备以下素质: 第一,需求分析能力 对于程序员而言,理解需求就可以完成合格的代码,但是对于研发项目的组织和管理者,他们不但要理解客户需求,更多时候还要自行制定一些需求,为什么这么说呢? 一般而言,进行研发任务,也许是客户提出需求,也许是市场和营销部门提出的需求,这时候对于研发部门,他们看到的不是一个完整的需求,通常而言,该需求仅仅是一些功能上的要求,或者更正规些,可能获得一个完整的用户视