- 简介
- 开篇词 | 以面试题为切入点,有效提升你的 Java 内功
- 第 1 讲 | 谈谈你对 Java 平台的理解?
- 第 2 讲 | Exception 和 Error 有什么区别?
- 第 3 讲 | 谈谈 final、finally、finalize 有什么不同?
- 第 4 讲 | 强引用、软引用、弱引用、幻象引用有什么区别?
- 第 5 讲 | String、StringBuffer、StringBuilder 有什么区别?
- 第 6 讲 | 动态代理是基于什么原理?
- 第 7 讲 | int 和 Integer 有什么区别?
- 第 8 讲 | 对比 Vector、ArrayList、LinkedList 有何区别?
- 第 9 讲 | 对比 Hashtable、HashMap、TreeMap 有什么不同?
- 第 10 讲 | 如何保证集合是线程安全的?ConcurrentHashMap 如何实现高效地线程安全?
- 第 11 讲 | Java 提供了哪些 IO 方式?NIO 如何实现多路复用?
- 第 12 讲 | Java 有几种文件拷贝方式?哪一种最高效?
- 第 13 讲 | 谈谈接口和抽象类有什么区别?
- 第 14 讲 | 谈谈你知道的设计模式?
- 第 15 讲 | synchronized 和 ReentrantLock 有什么区别呢?
- 周末福利|谈谈我对 Java 学习和面试的看法
- 第 16 讲 | synchronized 底层如何实现?什么是锁的升级、降级?
- 第 17 讲 | 一个线程两次调用 start() 方法会出现什么情况?
- 第 18 讲 | 什么情况下 Java 程序会产生死锁?如何定位、修复?
- 第 19 讲 | Java 并发包提供了哪些并发工具类?
- 第 20 讲 | 并发包中的 ConcurrentLinkedQueue 和 LinkedBlockingQueue 有什么区别?
- 第 21 讲 | Java 并发类库提供的线程池有哪几种?分别有什么特点?
- 第 22 讲 | AtomicInteger 底层实现原理是什么?如何在自己的产品代码中应用 CAS 操作?
- 第 23 讲 | 请介绍类加载过程,什么是双亲委派模型?
- 第 24 讲 | 有哪些方法可以在运行时动态生成一个 Java 类?
- 第 25 讲 | 谈谈 JVM 内存区域的划分,哪些区域可能发生 OutOfMemoryError?
- 第 26 讲 | 如何监控和诊断 JVM 堆内和堆外内存使用?
- 第 27 讲 | Java 常见的垃圾收集器有哪些?
- 第 28 讲 | 谈谈你的 GC 调优思路?
- 第 29 讲 | Java 内存模型中的 happen-before 是什么?
- 第 30 讲 | Java 程序运行在 Docker 等容器环境有哪些新问题?
- 第 31 讲 | 你了解 Java 应用开发中的注入攻击吗?
- 第 32 讲 | 如何写出安全的 Java 代码?
- 第 33 讲 | 后台服务出现明显“变慢”,谈谈你的诊断思路?
- 第 34 讲 | 有人说“Lambda 能让 Java 程序慢 30 倍”,你怎么看?
- 第 35 讲 | JVM 优化 Java 代码时都做了什么?
- 周末福利|一份 Java 工程师必读书单
- 第 36 讲 | 谈谈 MySQL 支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
- 第 37 讲 | 谈谈 SpringBean 的生命周期和作用域?
- 第 38 讲 | 对比 Java 标准 NIO 类库,你知道 Netty 是如何实现更高性能的吗?
- 第 39 讲 | 谈谈常用的分布式 ID 的设计方案?Snowflake 是否受冬令时切换影响?
- 结束语 | 技术没有终点
开篇词 | 以面试题为切入点,有效提升你的 Java 内功
Java 是一门历史悠久的编程语言,可以毫无争议地说,Java 是最主流的编程语言之一。全球有 1200 万以上 Java 程序员以及海量的设备,还有无所不能的 Java 生态圈。
我所知道的诸如阿里巴巴、京东、百度、腾讯、美团、去哪儿等互联网公司,基本都是以 Java 为首要编程语言的。即使在最新的云计算领域,Java 仍然是 AWS、Google App Engine 等平台上,使用最多的编程语言;甚至是微软 Azure 云上,Java 也以微弱劣势排在前三位。所以,在这些大公司的面试中,基本都会以 Java 为切入点,考评一个面试者的技术能力。
应聘初级、中级 Java 工程师,通常只要求扎实的 Java 和计算机科学基础,掌握主流开源框架的使用;Java 高级工程师或者技术专家,则往往全面考察 Java IO/NIO、并发、虚拟机等,不仅仅是了解, 更要求对底层源代码层面的掌握,并对分布式、安全、性能等领域能力有进一步的要求 。
我在 Oracle 已经工作了近 7 年,负责过北京 Java 核心类库、国际化、分发服务等技术团队的组建,面试过从初级到非常资深的 Java 开发工程师。由于 Java 组工作任务的特点,我非常注重面试者的计算机科学基础和编程语言的理解深度,我甚至不要求面试者非要精通 Java,如果对 C/C++等其他语言能够掌握得非常系统和深入,也是符合需求的。
工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作, 但坦白说表现出的能力水平却不足以通过面试 ,通常是两方面原因:
- “知其然不知其所以然”。做了多年技术,开发了很多业务应用,但似乎并未思考过种种 技术选择背后的逻辑 。坦白说,我并不放心把具有一定深度的任务交给他。更重要的是,我并不确定他未来技术能力的成长潜力有多大。团队所从事的是公司核心产品,工作于基础技术领域, 我们不需要那些“差不多”或“还行”的代码,而是需要达到一定水准的高质量设计与实现 。我相信很多其他技术团队的要求会更多、更高。
- 知识碎片化,不成系统。在面试中,面试者似乎无法完整、清晰地描述自己所开发的系统,或者使用的相关技术。平时可能埋头苦干,或者过于死磕某个实现细节,并没有抬头审视这些技术。比如,有的面试者,有一些并发编程经验,但对基本的并发类库掌握却并不扎实,似乎觉得在用的时候进行“面向搜索引擎的编程”就足够了。这种情况下,我没有信心这个面试者有高效解决复杂问题、设计复杂系统的能力。
前人已经掉过的坑,后来的同学就别再“前仆后继”了!
起初,极客时间邀请我写《Java 核心技术 36 讲》专栏,我一开始心里是怀疑其形式和必要性的。经典的书籍一大堆呀,网上也能搜到所谓的“面试宝典”呀,为什么还需要我“指手画脚”?
但随着深入交流,我逐渐被说服了。我发现很多面试者其实是很努力的,只是
- 很难甑别出各种技术的核心与要点,技术书籍这么庞杂,对于经验有限的同学,找到高效归纳自己知识体系的方法并不容易。
- 各种“宝典”更专注于问题,解答大多点到即止,甚至有些解答准确性都值得商榷,缺乏系统性的分析与举一反三的讲解。
我在极客时间推出这个专栏,就是为了让更多没有经验或者经验有限的开发者,在准备面试时:
- 少走弯路,利用有限的精力,能够更加高效地准备和学习 。
- 提纲挈领,在知识点讲解的同时,为你梳理一个相对完整的 Java 开发技术能力图谱,将基础夯实 。
Java 面试题目千奇百怪,有的面试官甚至会以黑魔法一样的态度,刨根问底 JVM 底层,似乎不深挖 JVM 源代码、不谈谈计算机指令,就是不爱学习,这是仁者见仁智者见智的事儿。我会根据自己的经验,围绕 Java 开发技术的方方面面,精选出 5 大模块,共 36 道题目,给出典型的回答,并层层深入剖析。
5 大模块分为:
- Java 基础 :我会围绕 Java 语言基本特性和机制,由点带面,让你构建牢固的 Java 技术工底。
- Java 进阶 :将围绕并发编程、Java 虚拟机等领域展开,助你攻坚大厂 Java 面试的核心阵地。
- Java 应用开发扩展 :从数据库编程、主流开源框架、分布式开发等,帮你掌握 Java 开发的十八般兵器。
- Java 安全基础 :让你理解常见的应用安全问题和处理方法,掌握如何写出符合大厂规范的安全代码。
- Java 性能基础 :你将掌握相关工具、方法论与基础实践。
这几年我从业务系统或产品开发,切换到 Java 平台自身,接触了更多 Java 领域的核心技术,我相信我的分享能够提供一些独到的内容,而不是简单的人云亦云。
时移世易,很多大家耳熟能知的问题,其实在现代 Java 里已经发生了根本性的改变。在技术领域,即使你打算或已经转为技术管理等,扎实的技术功底也是必须的。希望通过我的专栏,不仅可以让你面试成功,还能帮助你未来职业发展更进一步。
万丈高楼平地起,愿我这个 Java 老兵,能与你一道,逐个击破大厂 Java 面试考点,直击 Java 技术核心要点,构建你的 Java 知识体系。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论