Java核心技术面试精讲
杨晓峰
前Oracle首席工程师
立即订阅
43250 人已学习
课程目录
已完结 43 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 以面试题为切入点,有效提升你的Java内功
免费
模块一 Java基础 (14讲)
第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讲 | 谈谈你知道的设计模式?
模块二 Java进阶 (16讲)
第15讲 | synchronized和ReentrantLock有什么区别呢?
第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等容器环境有哪些新问题?
模块三 Java安全基础 (2讲)
第31讲 | 你了解Java应用开发中的注入攻击吗?
第32讲 | 如何写出安全的Java代码?
模块四 Java性能基础 (3讲)
第33讲 | 后台服务出现明显“变慢”,谈谈你的诊断思路?
第34讲 | 有人说“Lambda能让Java程序慢30倍”,你怎么看?
第35讲 | JVM优化Java代码时都做了什么?
模块5 Java应用开发扩展 (4讲)
第36讲 | 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
第37讲 | 谈谈Spring Bean的生命周期和作用域?
第38讲 | 对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?
第39讲 | 谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?
周末福利 (2讲)
周末福利 | 谈谈我对Java学习和面试的看法
周末福利 | 一份Java工程师必读书单
结束语 (1讲)
结束语 | 技术没有终点
Java核心技术面试精讲
登录|注册

开篇词 | 以面试题为切入点,有效提升你的Java内功

杨晓峰 2018-04-28
00:00
05:54
讲述:黄洲君 大小:2.71M
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 核心技术面试精讲》专栏,我一开始心里是怀疑其形式和必要性的。经典的书籍一大堆呀,网上也能搜到所谓的“面试宝典”呀,为什么还需要我“指手画脚”?
但随着深入交流,我逐渐被说服了。我发现很多面试者其实是很努力的,只是
很难甑别出各种技术的核心与要点,技术书籍这么庞杂,对于经验有限的同学,找到高效归纳自己知识体系的方法并不容易。
各种“宝典”更专注于问题,解答大多点到即止,甚至有些解答准确性都值得商榷,缺乏系统性的分析与举一反三的讲解。
我在极客时间推出这个专栏,就是为了让更多没有经验或者经验有限的开发者,在准备面试时:
少走弯路,利用有限的精力,能够更加高效地准备和学习
提纲挈领,在知识点讲解的同时,为你梳理一个相对完整的 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 知识体系。
取消
完成
0/1000字
划线
笔记
复制
unpreview
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Java核心技术面试精讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(137)

  • Jerry银银
    虽然我买了课,但是我还是有点担心,担心的是通过一道题真得能说清楚背后的细节吗?因为我深知一道题的挖掘能带出很多知识。比如HashMap这道经典的面试题,通过它不仅能考察对哈希表这种数据结构的掌握,还能考察基本的并发知识,甚至能考察面试者的设计能力。这些问题背后,涉及到的知识点很多,一个篇幅恐怕难以讲清楚,不知道杨晓峰大神将如何描述?

    作者回复: 很有深度的问题,确实在篇幅有限的情况下,可能一些角度只能提纲挈领的分析下,个人觉得避免重复,已经有确定答案或资料的部分,也许一个链接足够了

    2018-05-02
    141
  • kbrx93
    期待两点
    1. 网上的博客一般针对的是点,希望在文章中能串成线,即使是给出一些链接地址也行,至于线拓展成面我觉得就是个人的问题了。
    2. 除了串联性,希望针对每个点能提及的点宽一点,不要求拓展,很多时候不是不想去了解,而是涉及哪些方面都不知道。

    作者回复: 嗯非常好的建议,也是目前的思路之一,很多东西是一本书一个章节的内容,我一定加油,让2、3千字有收获,配合性的扩展阅读也是必须的

    2018-05-03
    66
  • @%初%@
    今年面试过阿里,一道类加载的问题,一个类,在类加载之后,如果对类的内容进行修改,如何在不重新启动虚拟机的情况下,加载已经变化过的类,当时不知道怎么去解决,基础还是不扎实,希望老师的内容可以涉及……

    作者回复: 这不是基础问题,有点难为人,不要妄自菲薄,知识点和能力是两码事。你可以创建个新的class loader,然后用loadClass加载,再newInstance;原来加载的classloader是不能重新加载的;这算是一个典型的容器思路

    2018-05-22
    37
  • Half
    我本人虽然是计算机系的,但是基本靠自学,现在最大的问题就是不知道如何系统的连贯的提升,因为要学的太多了,希望老师能够介绍以下比较系统的学习阶段,能让我少走点弯路。

    作者回复: 我是学通信专业,也是基本自学,多看、多学、多写,有积累了自然就有感觉

    2018-05-02
    37
  • 沈老师
    如果可以结合java语言和您工作经验的话,希望介绍下和legacy code打交道且如何更好的refactor代码。还有就是如何设计具有很好可测行代码的经验,您在开发时如何进行测试,jdk的ut和at怎么设计的,是什么思路,如何进行自动化测试这些。抱歉问题有点多,但因为我的主要工作是开发测试,所以非常想了解这块,谢谢!

    作者回复: 目前没有设计这个主题,如果大家非常需要,我回头补充一篇

    2018-05-07
    24
  • Rex
    老师、JVM讲讲、希望从浅到深。

    作者回复: 必须的

    2018-05-03
    23
  • 猪哥灰
    很有幸和贵司前同事陈纪兵有过合作,对oracle人的严谨务实深有体会,希望能从该专栏中学到不少,提升自己的内功

    作者回复: 自己人,纪兵是我前老板

    2018-05-02
    18
  • Steven⁰⁰⁸
    面试过A,没过,其实后来总结了下,自己的问题,知识面不够系统,不注重细节,会用但不深入 平时你能力在强,面试的时候面试官如何在短时间里了解你,了解你的能力 基础扎实 分析问题条理分明 Java面试很容易问底层实现,为什么这个去实现,我们对知识的学习,不单单是会用,而是要深入,会用大家都会用,深入才是你比他人强得地方,才是能拉开距离的地方,才是不容易替换 开始源码之路 要踩坑了

    作者回复: 加油💪,面试很主观的,提高自己是关键

    2018-05-03
    12
  • George
    期待老师多讲面试常问道的题目

    作者回复: 加油,如果36题不能涵盖,记得反馈,我再补充,谢谢

    2018-05-02
    10
  • 文涛
    最头大就是io和多线程了

    作者回复: 感谢反馈,我会覆盖到的,并穿插在不同场景中

    2018-05-02
    10
  • 地洋一端
    我工作在您的对面,希望跟您一起进步。

    作者回复: 猿粪

    2018-05-05
    8
  • 小川
    杨老师,我7月初就要开始参加校招找工作了,现在大概还有两个月的准备时间,请教一下,阅读博客和阅读书籍,哪种学习方式的效率高呢?

    作者回复: 博客大多是特定问题,我个人喜欢一本好书集中推进,别忘了练习实践,不上手很容易就只是觉得明白,有偏差也没注意

    2018-05-02
    8
  • rola
    老师,好,订购了您的课程,听完课之后,努力复习,还有几本书看,然后面试工资涨30%.二万先就满足了,谢谢老师!

    作者回复: 加油💪,别忘了也要准备项目经历

    2018-05-02
    7
  • 我奋斗去了
    已订阅 期待干货
    2018-05-02
    7
  • 我是一个从药学系转过来的,之前没有计算机基础,不过经过培训,还是无法找到工作,我想,肯定是面试官提问的面试题上出现了问题,我看了后,报了名,参加了杨老师的课程,希望能淘到金

    作者回复: 没事儿,我是焊板子(通信)出身,充分准备,另外建议先拿些不太想去的,练练手,看看实践需求

    2018-05-03
    6
  • 唐唐
    已经购买,希望干货满满,😄
    2018-05-04
    4
  • 沉默王二
    本节课的总结:

    1、Java虽然是编程语言中的“老古董”了,但依然很流行。有无数的大厂、平台都在用。
    2、坦白说,作为一名拥有8年Java编程经验的技术老兵,我是不合格的。因为我对Java一直处于“知其然不知其所以然”的阶段。大多数时候,我是能写出来能“跑”的代码,但质量如何就不得而知了。
    3、就编程经验而言,我一直奉行的准则是“用到的时候再学习”,即所谓的“面向搜索引擎编程”。

    另外,对于绝大多数的编程书籍来说,枯燥乏味是通病;因此,有很多人没有时间和精力去耐着性子的读。那什么样的课程,或者博客,能够做到通俗易懂,就会有一大批量的读者去追随。

    我相信老师的课程一定能够让我学习到很多内容。
    2019-01-02
    3
  • Zoe.Li
    工作断断续续两年多,感觉自己还是一个初级的Java工程师,有时候感觉自己能力不比别人差,该会的都会,功能都能做出来,但是最近想换工作,面试的时候,才发现自己的基础很差,走的时候基础也不是很差,自己知道,但是说不出来,所以陷入了很迷茫的阶段,不知道怎么去学怎么去加强,然后现在一直在怀疑自己否定自己,我的Java生涯就这么结束了吗,我只能放弃了吗,但是我不想放弃啊,请老师指点下明路

    作者回复: 莫因为一时得失失去信心,面试非常主观的,相信自己。我的一些操作建议:
    确定个目标公司列表,选不太想去的练手,涨经验,看一般要求什么,技术能力、项目经验、软技巧;
    针对自己觉得说不清楚的,写出文章,或者找人交流,动手实践,以加深理解;
    想清楚跳槽目标是什么,付诸行动,不要纠结于非核心诉求

    2018-05-11
    3
  • 王亚南
    面试不足的两方面原因总结的挺到位

    作者回复: 一起加油

    2018-05-02
    3
  • HUCX
    期待后面的文章

    作者回复: 加油💪

    2018-05-02
    3
收起评论
99+
99+
返回
顶部