Java核心技术36讲 / 前Oracle首席工程师带你修炼Java内功
杨晓峰
前Oracle首席工程师
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 以面试题为切入点,有效提升你的Java内功

    Java是一门历史悠久的编程语言,也是最主流的编程语言之一。大公司的面试,也基本都会以Java为切入点,考评一个面试者的技术能力。

  • 第1讲 | 谈谈你对Java平台的理解?

    从你接触Java开发到现在,你对Java最直观的印象是什么呢?

  • 第2讲 | Exception和Error有什么区别?

    世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。

  • 第3讲 | 谈谈final、finally、 finalize有什么不同?

    Java语言有很多看起来很相似,但是用途却完全不同的语言要素。

  • 第4讲 | 强引用、软引用、弱引用、幻象引用有什么区别?

    在Java语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型。

  • 第5讲 | String、StringBuffer、StringBuilder有什么区别?

    今天我会聊聊日常使用的字符串。

  • 第6讲 | 动态代理是基于什么原理?

    如何分类Java语言呢?通常认为,Java是静态的强类型语言,但是因为提供了类似反射等机制,也具备了部分动态类型语言的能力。

  • 第7讲 | int和Integer有什么区别?

    Java虽然号称是面向对象的语言,但是原始数据类型仍然是重要的组成元素,所以在面试中,经常考察原始数据类型和包装类等Java语言特性。

  • 第8讲 | 对比Vector、ArrayList、LinkedList有何区别?

    针对通用场景的需求,Java提供了强大的集合框架,大大提高了开发者的生产力。

  • 第9讲 | 对比Hashtable、HashMap、TreeMap有什么不同?

    Map是广义Java集合框架中的另外一部分,HashMap作为框架中使用频率最高的类型之一,它本身以及相关类型自然也是面试考察的热点。

  • 第10讲 | 如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?

    我在之前两讲介绍了Java集合框架的典型容器类,它们绝大部分都不是线程安全的,仅有的线程安全实现,比如Vector、Stack,在性能方面也远不尽如人意。

  • 第11讲 | Java提供了哪些IO方式? NIO如何实现多路复用?

    IO一直是软件开发中的核心部分之一,伴随着海量数据增长和分布式系统的发展,IO扩展能力愈发重要。

  • 第12讲 | Java有几种文件拷贝方式?哪一种最高效?

    我在专栏上一讲提到,NIO不止是多路复用,NIO 2也不只是异步IO,今天我们来看看Java IO体系中,其他不可忽略的部分。

  • 第13讲 | 谈谈接口和抽象类有什么区别?

    面向对象提供的基本机制,对于提高开发、沟通等各方面效率至关重要。考察面向对象也是面试中的常见一环,下面我来聊聊面向对象设计基础。

  • 第14讲 | 谈谈你知道的设计模式?

    设计模式是人们为软件开发中相同表征的问题,抽象出的可重复利用的解决方案。

  • 第15讲 | synchronized和ReentrantLock有什么区别呢?

    软件并发已经成为现代软件开发的基础能力,考察并发基本功也成为各个公司面试Java工程师的必选项。

  • 周末福利 | 谈谈我对Java学习和面试的看法

    你好,我是杨晓峰。今天是周末,我们稍微放松一下来聊聊“Java核心技术”之外的内容。

  • 第16讲 | synchronized底层如何实现?什么是锁的升级、降级?

    我在上一讲对比和分析了synchronized和ReentrantLock,今天我们将深入了解synchronize底层机制,分析其他锁实现和应用场景。

  • 第17讲 | 一个线程两次调用start()方法会出现什么情况?

    今天我们来深入聊聊线程,相信大家对于线程这个概念都不陌生,它是Java并发的基础元素,理解、操纵、诊断线程是Java工程师的必修课。

  • 第18讲 | 什么情况下Java程序会产生死锁?如何定位、修复?

    今天,我会介绍一些日常开发中类似线程死锁等问题的排查经验,希望不仅能在面试时,包括在日常工作中也能对你有所帮助。

  • 第19讲 | Java并发包提供了哪些并发工具类?

    我们一起回顾了线程、锁等各种并发编程的基本元素,相信经过前面的热身,我们能够更快地理解Java并发包。

  • 第20讲 | 并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?

    Java标准库提供了非常多的线程安全队列,很容易混淆。

  • 第21讲 | Java并发类库提供的线程池有哪几种? 分别有什么特点?

    利用线程池技术来提高系统资源利用效率,并简化线程管理,已经是非常成熟的选择。

  • 第22讲 | AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?

    在今天这一讲中,我来分析一下并发包内部的组成,一起来看看各种同步结构、线程池等,是基于什么原理来设计和实现的。

  • 第23讲 | 请介绍类加载过程,什么是双亲委派模型?

    Java通过引入字节码和JVM机制,提供了强大的跨平台能力,理解Java的类加载机制是深入Java开发的必要条件,也是个面试考察热点。

  • 第24讲 | 有哪些方法可以在运行时动态生成一个Java类?

    有了上一讲的类加载的学习基础后,我想是时候该进行深入分析动态代理和字节码操作方面的技术了。

  • 第25讲 | 谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?

    懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。

  • 第26讲 | 如何监控和诊断JVM堆内和堆外内存使用?

    今天我将结合JVM参数、工具等方面,进一步分析JVM内存结构,包括外部资料相对较少的堆外部分。

  • 第27讲 | Java常见的垃圾收集器有哪些?

    Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。

  • 第28讲 | 谈谈你的GC调优思路?

    今天我会选取新版JDK中的默认G1 GC作为重点进行详解,并且我会从调优实践的角度,分析典型场景和调优思路。

  • 第29讲 | Java内存模型中的happen-before是什么?

    Java语言在设计之初就引入了线程的概念,这既带来了强大、灵活的多线程机制,也带来了线程安全等令人混淆的问题。

  • 第30讲 | Java程序运行在Docker等容器环境有哪些新问题?

    Java对Docker等容器环境的支持也在不断增强,自然地,Java在容器场景的实践也逐渐在面试中被涉及。

  • 第31讲 | 你了解Java应用开发中的注入攻击吗?

    安全是软件开发领域永远的主题,Java作为软件开发的基础平台之一,可以说是无处不在,自然也就成为安全攻击的首要目标之一。

  • 第32讲 | 如何写出安全的Java代码?

    今天我们将一起探讨更多Java开发中可能影响到安全的场合,这一讲我将侧重于Java开发者的角度谈代码安全,而不是讲广义的安全风险。

  • 第33讲 | 后台服务出现明显“变慢”,谈谈你的诊断思路?

    掌握基本的性能知识和技能,往往是日常工作的需要,能否定位和解决性能问题也是对你知识、技能和能力的检验。

  • 第34讲 | 有人说“Lambda能让Java程序慢30倍”,你怎么看?

    在实际工作中,我们需要定量的、可对比的方法,去评估Java应用性能,来判断其是否能够符合业务支撑目标。

  • 第35讲 | JVM优化Java代码时都做了什么?

    系统地理解Java代码运行过程,有利于在实践中进行更进一步的调优。

  • 周末福利 | 一份Java工程师必读书单

    今天这期周末福利,我整理了几本自己在学习和使用Java时用过的参考书,把它们分享与你。

  • 第36讲 | 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

    做好数据操作,不仅仅需要对Java语言相关框架的掌握,更需要对各种数据库自身体系结构的理解。

  • 第37讲 | 谈谈Spring Bean的生命周期和作用域?

    今天,我将补充个别Spring相关的典型面试问题,并谈谈其部分设计细节。

  • 第38讲 | 对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?

    在基础NIO之上,Netty构建了更加易用、高性能的网络框架,广泛应用于互联网、游戏、电信等各种领域。

  • 第39讲 | 谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?

    严格来说,分布式并不算是Java领域,而是一个单独的大主题,但确实也会在Java技术岗位面试中被涉及。

  • 结束语 | 技术没有终点

    选择Java语言的开发者是幸运的,经历了如此漫长的发展后,我们依然有幸可以见证“廉颇老矣”的Java再次加速成长“焕发青春”。

限时拼团¥79,原价¥99,点「拼团按钮」立即加入。订阅后可戳此进入交流群

特别放送

送你一份加薪跳槽不完全指南

专栏简介

Java的诞生已经超过了20年。一直以来,Java以其语法简单,开发者可以快速上手,适应众多领域,具有跨平台能力等特性,吸引了无数程序员学习和使用。基于Java优秀的特性和庞大的使用基础,各大公司对Java工程师的需求也是源源不断。

但作为面试者,想进入BAT并成长为一名高级Java工程师却没那么容易。虽然面试者具备了一定的工作年限要求,也长期使用Java语言进行开发,但面试时,面对刨根问底的提问,经常感觉get不到面试官的点,自己回答的也是马马虎虎,甚至无法完整描述自己开发过的系统或者使用过的技术,因此也就很难得到满意的面试结果。

那如何才能在Java面试中做到游刃有余呢?本专栏就从大厂面试考察的知识点和能力出发,精选出36道Java面试题,每期针对1道题目,不仅给出面试的典型回答和考点分析,还会剖析知识点,将其讲清讲透,让你彻底领悟题目背后所考察的能力,帮你梳理复习Java知识体系。

杨晓峰,前Oracle北京Java平台部门,首席工程师,OpenJDK Committer,从JDK 8开始参与了JDK的开发和测试工作,曾领导Java核心类库北京团队,主要负责前沿版本的核心类库新特性相关任务。专注于Java以及其他编程语言的新特性,尤其是在云计算等前沿领域的应用和演进。

专栏模块

专栏共36期,分为5大模块。

  • Java基础:将围绕Java语言基本特性和机制,由点带面,帮你构建牢固的Java技术功底。

  • Java进阶:主要将围绕并发编程、Java虚拟机等领域展开,助你攻坚大厂Java面试的核心阵地。

  • Java应用开发扩展:将聚焦数据库编程、主流开源框架、分布式开发等,让你掌握Java开发的十八般兵器。

  • Java安全基础:帮助你理解常见的应用安全问题和处理方法,掌握如何写出符合大厂规范的安全代码。

  • Java性能基础:帮助你掌握相关工具、方法论与基础实践。

专栏详细目录

适宜人群

有面试/晋升需求的Java程序员;希望夯实Java基础的程序员;团队Leader;面试官。

你觉得怎么样?期待您评价: