缺什么补什么:别让“会用”掩盖了“不懂原理”

很多做终端研发的同学,写业务代码时各种容器用得飞起,但真遇到性能卡顿或者内存泄漏,却连底层是用数组还是链表实现的都说不清。这门课就是用来填这个坑的。它不扯宏大架构,直接聚焦于日常高频使用的容器组件与新特性,把平时当成黑盒调用的类逐一拆开看源码。如果你当前的状态是“能熟练写增删改查,但一被问到底层机制就卡壳”,或者准备向更高阶的岗位转移却总觉得基础不牢,这正好是对症的。它要求你放下“反正能跑就行”的心态,老老实实去补齐数据结构实现与函数式编程的底层逻辑。

建议先啃透这几块:从源码到流式处理

看这份资料时,不要像看小说一样从头翻到尾,建议按逻辑断层来逐个击破。第一块死磕底层实现,重点看动态数组与双向链表的源码剖析,搞懂它们在扩容、插入和随机访问时的性能差异,以及为什么判定对象重复要依赖特定方法而不是直接用等号。第二块主攻新版本的流式编程与函数式接口,这是很多老代码库里严重缺失的技能。看的时候别光听讲解,必须同步打开本地环境,对着源码打断点跟一遍数据流转过程。尤其是四大核心函数式接口和流的链式调用部分,自己写几个集合过滤的例子,对比传统写法和流式写法的性能与代码量差异,才能真正把知识嚼碎咽下去。

看完能干什么:独立解决性能与重构问题

把这套东西补全之后,你的工程能力会有一个明显的质变。首先,在选型时你不再是抓到哪个用哪个,而是能根据具体的高频读写场景,独立做出最优选择,并能给出量化的性能依据。其次,面对屎山业务代码,你能独立运用流式接口和函数式编程进行重构,把几十行嵌套循环干掉,换成几行清晰且不易出错的链式调用。在配合资料练习时,建议采用“先盲写再核对”的模式:看完一节后,先合上资料,自己尝试把核心的扩容逻辑或迭代器实现手写一遍,跑通了再去和资料里的标准源码比对差异。查漏补缺不是看懂了就算数,能脱稿手写出来,才算真正把基础夯实了。

课程目录

1-1 [集合] 集合框架概述与ArrayList基本使用 (29:41)
1-2 [集合] ArrayList与Vector源码分析及比较 (26:49)
1-3 [集合] LinkedList实现类与源码分析 (14:00)
1-4 [集合] HashSet的特点及使用 (19:26)
1-5 [集合] HashSet判断重复值的原理 (29:30)
1-6 [集合] TreeSet与LinkedHashSet (22:49)
1-7 [集合] 集合迭代器 (17:20)
1-8 [集合] jdk8的foreach与Consumer接口 (10:41)
1-9 [集合] jdk8的四大核心函数式接口 (26:58)
1-10 [集合] jdk8之Stream接口(1) (28:14)
1-11 [集合] jdk8之Stream接口(2) (18:27)
1-12 [集合] Map接口与HashMap基本使用 (20:48)
1-13 [集合] HashMap源码分析与哈希表实现原理(1) (30:47)
1-14 [集合] HashMap源码分析与哈希表实现原理(2) (10:31)
1-15 [集合] Hashtable与LinkedHashMap (16:22)
1-16 [集合] TreeMap (15:02)
1-17 [集合] jdk8Map新特性介绍 (28:41)
1-18 [集合] Collections工具类的使用 (23:46)
1-19 [集合] jdk8之Optional类的使用 (21:45)
1-20 [集合] 队列与栈 (21:08)
1-21 [集合] 对象的一对多与多对多 (14:20)
1-22 [集合] 迭代器设计模式 (13:46)
1-23 [集合] Guava开源组件使用(1) (19:04)
1-24 [集合] Guava开源组件使用(2) (18:24)
1-25 [集合] Guava开源组件使用(3) (23:19)
1-26 [集合] Guava开源组件使用(4) (11:08)
2-1 [多线程与并发] IntellijIDEA开发工具介绍 (17:50)
2-2 [多线程与并发] 进程与线程的基本概念 (18:53)
2-3 [多线程与并发] 线程的两种实现方式 (14:13)
2-4 [多线程与并发] 线程的休眠 (14:52)
2-5 [多线程与并发] join与中断线程 (27:40)
2-6 [多线程与并发] 守护线程 优先级与其它方法 (17:26)
2-7 [多线程与并发] 线程同步(1) (25:09)
2-8 [多线程与并发] 线程同步(2) (21:23)
2-9 [多线程与并发] 线程死锁 (09:54)
2-10 [多线程与并发] 生产者与消费者案例(1) (23:59)
2-11 [多线程与并发] 生产者与消费者案例(2) (13:28)
2-12 [多线程与并发] 线程生命周期与线程池 小结 (31:55)
3-1 [网络编程] 网络编程基本概念介绍 (29:05)
3-2 [网络编程] TCP协议的原理分析与示例 (27:53)
3-3 [网络编程] 服务器同时处理多个客户端示例 (17:27)
3-4 [网络编程] 即时聊天案例简易版(1) (28:17)
3-5 [网络编程] 即时聊天案例简易版(2) (29:16)
3-6 [网络编程] UDP通讯协议示例 (16:49)
3-7 [网络编程] URL下载示例 (11:09)
3-8 [网络编程] MINA框架介绍与服务器端程序 (30:09)
3-9 [网络编程] MINA客户端程序与发送对象数据 小结 (27:00)
4-1 [反射与内省] 基本概念与三种获取Class对象的方式 (17:30)
4-2 [反射与内省] 获取构造器实例化对象与属性信息 (21:10)
4-3 [反射与内省] 包信息和方法 (17:58)
4-4 [反射与内省] 动态代理模式 (28:03)
4-5 [反射与内省] 动态代理模式补充和加载器分析 (12:42)
4-6 [反射与内省] JavaBean的概念与BeanUtils工具 (20:47)
4-7 [反射与内省] 内省(1) (26:27)
4-8 [反射与内省] 内省(2) (15:14)
4-9 [反射与内省] 理解可配置的AOP框架(1) (27:40)
4-10 [反射与内省] 理解可配置的AOP框架(2) (29:28)
4-11 [反射与内省] 单例设计模式优化与小结 (17:11)
5-1 [泛型] 泛型的作用与定义 (21:55)
5-2 [泛型] 通配符泛型方法和嵌套 (21:06)
6-1 [正则表达式] 正则介绍 (21:09)
6-2 [正则表达式] 正则示例 (09:43)
7-1 [枚举] 枚举的基本使用 (22:14)
7-2 [枚举] 构造器接口抽象类单例的使用 (14:17)
8-1 [注解] 什么是Annotation及系统定义的三个注解 (18:56)
8-2 [注解] 自定义Annotation (16:31)
8-3 [注解] 反射读取注解信息与定义注解的注解 (17:19)
9-1 [XML与JSON] XML介绍与SAX解析 (28:05)
9-2 [XML与JSON] SAX解析续 (26:20)
9-3 [XML与JSON] SAX解析小结 (09:35)
9-4 [XML与JSON] DOM解析 (25:20)
9-5 [XML与JSON] JDOM解析 (16:14)
9-6 [XML与JSON] DOM4J解析与四种解析的比较 (16:48)
9-7 [XML与JSON] XMLEncoder与XMLDecoder以及xStream (17:48)
9-8 [XML与JSON] JsonReader解析json数组 (24:14)
9-9 [XML与JSON] JsonReader解析复杂json (27:19)
9-10 [XML与JSON] 生成JSON数据与GSON工具的使用以及小结 (31:49)
10-1 [GUI事件处理] GUI介绍与简单示例 (18:00)
10-2 [GUI事件处理] 补充乱码显示问题与事件处理的接口回调 (28:46)
10-3 [GUI事件处理] 观察者设计模式 (31:27)
11-1 [项目实战] 准备工作 (23:15)
11-2 [项目实战] 资源文件配置_baseclass与welcomeclass (27:30)
11-3 [项目实战] 用户注册功能实现 (28:13)
11-4 [项目实战] 用户登录功能实现 (19:09)
11-5 [项目实战] uml时序图与git建立代码仓库 (29:25)
11-6 [项目实战] 产品列表功能显示实现 (25:39)
11-7 [项目实战] 用户功能显示与代码打包测试 (16:29)
11-8 [项目实战] 打包补充与产品列表uml时序图 (08:17)
11-9 [项目实战] 订单模块工具类与业务接口实现 (25:21)
11-10 [项目实战] 购买商品实现(1) (29:24)
11-11 [项目实战] 购买商品实现(2) (19:37)
11-12 [项目实战] 购买商品实现uml时序图 (07:08)
11-13 [项目实战] 查询订单实现及uml时序图 (15:32)
11-14 [项目实战] 视图层与业务层代码优化 (16:21)
11-15 [项目实战] 项目总结 (14:18)