转载自  99%的面试官都会问到的Java面试题

最近是招聘季,所谓金九银十,正是跳槽的好几节。今天,给大家整理了一些Java面试常考的经典题目,我们一道一道来分析一下。

经典面试题

1、谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗?

考点分析:对于这类笼统的问题,你需要尽量表现出自己的思维深入并系统化,Java 知识理解得也比较全面,一定要避免让面试官觉得你是个“知其然不知其所以然”的人。毕竟明白基本组成和机制,是日常工作中进行问题诊断或者性能调优等很多事情的基础,相信没有招聘方会不喜欢“热爱学习和思考”的面试者。

回归正题,对于 Java 平台的理解,可以从很多方面简明扼要地谈一下,例如:Java 语言特性,包括泛型、Lambda 等语言特性;基础类库,包括集合、IO/NIO、网络、并发、安全等基础类库。对于我们日常工作应用较多的类库,面试前可以系统化总结一下,有助于临场发挥。

下图是我总结的一个相对宽泛的蓝图供你参考。

2、对比Hashtable、HashMap、TreeMap有什么不同?

考点分析:上面的回答,只是对一些基本特征的简单总结,针对Map相关可以扩展的问题很多,从各种数据结构、典型应用场景,到程序设计实现的技术考量,尤其是在Java 8里,HashMap本身发生了非常大的变化,这些都是经常考察的方面。

很多朋友向我反馈,面试官似乎钟爱考察HashMap的设计和实现细节,所以今天我会增加相应的源码解读,主要专注于下面几个方面:

  • 理解Map相关类似整体结构,尤其是有序数据结构的一些要点。

  • 从源码去分析HashMap的设计和实现要点,理解容量、负载因子等,为什么需要这些参数,如何影响Map的性能,实践中如何取舍等。

  • 理解树化改造的相关原理和改进原因。

除了典型的代码分析,还有一些有意思的并发相关问题也经常会被提到,如HashMap在并发环境可能出现无限循环占用CPU、size不准确等诡异的问题。

我认为这是一种典型的使用错误,因为HashMap明确声明不是线程安全的数据结构,如果忽略这一点,简单用在多线程场景里,难免会出现问题。

理解导致这种错误的原因,也是深入理解并发程序运行的好办法。对于具体发生了什么,你可以参考这篇很久以前的分析,里面甚至提供了示意图,我就不再重复别人写好的内容了。

3、Java 提供了哪些 IO 方式? NIO 如何实现多路复用?

考点分析:在实际面试中,从传统 IO 到 NIO、NIO 2,其中有很多地方可以扩展开来,考察点涉及方方面面,比如:

  • 基础 API 功能与设计, InputStream/OutputStream 和 Reader/Writer 的关系和区别。

  • NIO、NIO 2 的基本组成。

  • 给定场景,分别用不同模型实现,分析 BIO、NIO 等模式的设计和实现原理。

  • NIO 提供的高性能数据操作方式是基于什么原理,如何使用?

  • 或者,从开发者的角度来看,你觉得 NIO 自身实现存在哪些问题?有什么改进的想法吗?

IO 的内容比较多,专栏一讲很难能够说清楚。IO 不仅仅是多路复用,NIO 2 也不仅仅是异步 IO,尤其是数据操作部分,会在专栏下一讲详细分析。

4、后台服务出现明显“变慢”,谈谈你的诊断思路?

考点分析:今天我选择的是一个常见的并且比较贴近实际应用的的性能相关问题,我提供的回答包括两部分。

  • 在正面回答之前,先探讨更加精确的问题定义是什么。有时候面试官并没有表达清楚,有必要确认自己的理解正确,然后再深入回答。

  • 从系统、应用的不同角度、不同层次,逐步将问题域尽量缩小,隔离出真实原因。具体步骤未必千篇一律,在处理过较多这种问题之后,经验会令你的直觉分外敏感。

大多数工程师也许并没有全面的性能问题诊断机会,如果被问到也不必过于紧张,你可以向面试官展示诊断问题的思考方式,展现自己的知识和综合运用的能力。接触到一个陌生的问题,通过沟通,能够条理清晰地将排查方案逐步确定下来,也是能力的体现。

面试官可能会针对某个角度的诊断深入询问,兼顾工作和面试的需求,我会针对下面一些方面进行介绍。目的是让你对性能分析有个整体的印象,在遇到特定领域问题时,即使不知道具体细节的工具和手段,至少也可以找到探索、查询的方向。

  • 我将介绍业界常见的性能分析方法论。

  • 从系统分析到JVM、应用性能分析,把握整体思路和主要工具。对于线程状态、JVM内存使用等很多方面,我在专栏前面已经陆陆续续介绍了很多,今天这一讲也可以看作是聚焦性能角度的一个小结。

5、谈谈你的GC调优思路?

考点分析:今天考察的GC调优问题是JVM调优的一个基础方面,很多JVM调优需求,最终都会落实在GC调优上或者与其相关,我提供的是一个常见的思路。

真正快速定位和解决具体问题,还是需要对JVM和GC知识的掌握,以及实际调优经验的总结,有的时候甚至是源自经验积累的直觉判断。面试官可能会继续问项目中遇到的真实问题,如果你能清楚、简要地介绍其上下文,然后将诊断思路和调优实践过程表述出来,会是个很好的加分项。

专栏虽然无法提供具体的项目经验,但是可以帮助你掌握常见的调优思路和手段,这不管是面试还是在实际工作中都是很有帮助的。另外,我会还会从下面不同角度进行补充:

  • 涉及具体的GC类型,JVM的实际表现要更加复杂。目前,G1已经成为新版JDK的默认选择,所以值得你去深入理解。

  • 因为G1 GC一直处在快速发展之中,我会侧重它的演进变化,尤其是行为和配置相关的变化。并且,同样是因为JVM的快速发展,即使是收集GC日志等方面也发生了较大改进。

  • 从GC调优实践的角度,理解通用问题的调优思路和手段。

面试者常犯错误

我在面试候选人中经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因:

1、“知其然不知其所以然”。做了多年技术,开发了很多业务应用,但似乎并未思考过种种技术选择背后的逻辑。坦白说,我并不放心把具有一定深度的任务交给他。

2、知识碎片化,不成系统。在面试中,面试者似乎无法完整、清晰地描述自己所开发的系统,或者使用的相关技术。平时可能埋头苦干,或者过于死磕某个实现细节,并没有抬头审视这些技术。

面试准备资料

关于面试准备,尤其是Java类的面试内容,给大家推荐一些我觉得不错的资料。

书籍类

《深入理解Java虚拟机》

《Effective Java》

《程序员面试宝典(第五版)》

《可伸缩服务架构:框架与中间件》

课程类

《Java核心技术36讲》

《深入拆解Java虚拟机》

《从0开始学微服务》

《从0开始学架构》

99%的面试官都会问到的Java面试题相关推荐

  1. 99%的面试官都会问的一个问题,这样答就能轻松过关

    上周面试一个姑娘,本来聊得挺好. 她曾在一家单位做过两年文职,开朗.落落大方,我看见离职原因一栏写着"个人原因",就问,能说说你为什么从上家单位离开么? 她立刻吧嗒吧嗒说了一大堆. ...

  2. 面试官都会问的Mybatis面试题,你会这样回答吗?

    一.概述 面试,难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:"面试 ...

  3. 初入职场-面试官都会问些什么?(结尾附视频)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  4. 为什么大部分企业面试官都会问GMV,GMV是什么?

    原创 Jalenxr 数据运营与数据分析https://mp.weixin.qq.com/s?__biz=MzI1NTEyODAxOA==&mid=2247484602&idx=1&a ...

  5. 大多数面试官都会问的一个问题,这样答就能轻松过关

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 作者 焱公子 如需转载,请联系原作者. 上周面试一个姑娘,本来聊得挺好. 她曾在一 ...

  6. 经典网工面试题,90%的面试官都会问你这些

    哈喽,大家好,我是网工学姐~ 今天给大家整理的面试题,是关于企业网构架.传输介质.冲突域和广播域方面的,如果你是第一次看到我的文章,可以进主页往前翻翻哦,有更多面试题~         面试官:你知道 ...

  7. 月薪30k的程序员应聘时面试官都会问什么问题

    写在前面 CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:前端面试宝典 话 ...

  8. java中sql语句怎么把开始和结束时间作为参数写sql查询_java程序员跳槽的一道坎,大公司面试官都会问的Mybatis...

    一.什么是Mybatis? 1. Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement ...

  9. 90%的面试官都会问到交换网络里面冗余和破环的STP协议

    个人名片:

最新文章

  1. JDK+TOMCAT在LINUX下简单的配置
  2. html鼠标点击切换图片,js鼠标点击图片切换效果代码分享
  3. 用android LinearLayout和RelativeLayout实现精确布局(转)
  4. flink实时同步mysql_基于Canal与Flink实现数据实时增量同步(一)
  5. nodejs,python,sublime和Eclipse的包管理器
  6. mysql_sed_使用sed提取mysql备份的一行部分
  7. 后端技术:mybatis中resultMap用法示例笔记
  8. 跟踪异常–第5部分–使用Spring进行计划
  9. (计算机组成原理题目题型总结)第四章:指令系统
  10. openssl构建CA认证
  11. hadoop学习笔记01
  12. 2020-8-6 Codeforces摸鱼报告
  13. RuntimeError :excepted object of type torch.floatTensor but found type torch.DoubleTensor
  14. RS485通讯四路模拟量隔离采样模块的功能特点及应用
  15. 【Google Play】创建和管理内部测试版本 ( 创建内部测试版本 | 检查并发布内部测试版本 )
  16. 【大学物理·光学】薄膜干涉
  17. ZigBee技术简介,以及ZigBee的未来展望
  18. WIN 10 微信
  19. php 获得本机ip,php获取ip_php获取本机ip
  20. 软件测试用例白盒测试,软件测试白盒测试测试用例与代码.doc

热门文章

  1. [JavaWeb-Bootstrap]CSS样式和JS插件
  2. [C++STL]set容器用法介绍
  3. 《C++ Primer》7.5.2节练习
  4. [蓝桥杯2017初赛]方格分割-dfs+思维
  5. Redis存储优化--小对象压缩
  6. 二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。
  7. android中的shape资源,Android Drawable资源讲解之shape篇
  8. 怎么创建dllwenjian_如何创建和使用dll及lib文件
  9. Eclipse下Tomcat服务器配置和使用
  10. 2019-02-22-算法-进化