写这个专栏的缘起
之前我写过一篇博客:《朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑》,引起的关注还是挺多的。后来和极客时间的编辑一拍即合决定以这个为题写一个专栏。其实所谓坑就是容易忽略但是不容易发现的问题,大部分生产事故都是发布、运维相关的配置引起,真正代码中的问题上线后产生问题的坑并不多,虽然我接触过很多生产事故,但是能提炼出写代码的坑的点不多。所以在内容整理方面我花了很多时间,最终我总结出100+的点,形成了这样一个30+文章的专栏。
专栏名字叫《Java业务开发常见错误100例》,点击这里可以进入专栏。不仅仅涉及代码,还涉及设计方面的思考以及安全方面的误区。在这个课程中,每节课都是Java业务开发的一个核心关注点,每个知识点对应2~5个案例,并按照“知识介绍->还原业务场景->错误实现->正确实现->原理分析->小总结”来讲解每个案例,不仅帮你避开这个知识点的常见坑,更让你能知道产生坑的根本原因,提升自己的技术能力。这些内容不仅可以帮助你写出更好的代码,同时也有助于你进一步补全你的知识网增加面试的信心。你甚至可以把这些案例当作代码审核的Checklist,帮助别的项目一起避坑,帮助团队一起成长。
专栏的内容
目录
开篇词
开篇词 | 业务代码真的会有这么多坑?
代码篇
01 | 使用了并发工具类库,线程安全就高枕无忧了吗?
02 | 代码加锁:不要让“锁”事成为烦心事
03 | 线程池:业务代码最常用也最容易犯错的组件
04 | 连接池:别让连接池帮了倒忙
05 | HTTP调用:你考虑到超时、重试、并发了吗?
06 | 20%的业务代码的Spring声明式事务,可能都没处理正确
07 | 数据库索引:索引不是万能药
08 | 判等问题:程序里如何确定你就是你?
09 | 数值计算:注意精度、舍入和溢出问题
10 | 集合类:坑满地的List列表操作
11 | 空值处理:分不清楚的null和恼人的空指针
12 | 异常处理:别让自己在出问题的时候变为瞎子
13 | 日志:日志记录真没你想象的那么简单
14 | 文件IO:实现高效正确的文件读写并非易事
15 | 序列化:一来一回,你还是原来的你吗?
16 | 用好Java 8的日期时间类,少踩一些“老三样”的坑
17 | 别以为“自动挡”就不可能出现OOM
18 | 当反射、注解和泛型遇到OOP时,会有哪些坑?
19 | Spring框架:IoC和AOP是扩展的核心
20 | Spring框架:帮我们做了很多工作也带来了复杂度
设计篇
21 | 代码重复:搞定代码重复的三个绝招
22 | 接口设计:系统间对话的语言,一定要统一
23 | 缓存设计:缓存可以锦上添花也可以落井下石
24 | 业务代码写完,就意味着生产就绪了?
25 | 异步处理好用,但非常容易用错
26 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?
安全篇
27 | 数据源头:任何客户端的东西都不可信任
28 | 安全兜底:涉及钱时,必须考虑防刷、限量和防重
29 | 数据和代码:数据就是数据,代码就是代码
30 | 敏感数据:如何正确保存和传输敏感数据?
不定期加餐
加餐1:带你吃透课程中Java 8的那些重要知识点
加餐2:定位应用问题,排错套路很重要
加餐3:分析定位Java问题,一定要用好这些工具(一)
加餐4:分析定位Java问题,一定要用好这些工具(二)
加餐5:这15年来,我是如何在工作中学习技术和英语的?
结束语
结束语 | 写代码时,如何才能尽量避免踩坑?
知识点脑图
你将获得
- 130 个代码坑点及其解决方案
- 100 个场景化案例解读
- 25 次源码深度解析
- 使用 10 个工具定位问题根因
专栏有下面的六个特点
- 全面性:我们经常可以在一些公众号中看到有关Java代码踩坑的一些文章,这些内容比较零散,看过之后不会留下深刻印象,本专栏中的100个案例可谓是Java代码避坑的大全,内容完整且连续,并且有因有果,这些内容不仅仅可以帮助你写出更好的代码,同时也有助于你进一步补全你的知识网增加面试的信心。你甚至还可以把二级目录当作代码审核的Checklist,帮助别的项目一起成长和避坑。
- 不仅仅是代码层面的坑:《Effective Java》和《码出高效:Java 开发手册》是两本非常不错的主要介绍Java代码坑的书。但前者注重Java语言、后者更注重规范,而本课程覆盖使用Java进行业务开发涉及的各种常用框架和技术,不会局限于Java或者JDK本身,且设计篇、安全篇会从更高的视角去看开发时遇到的各种误区。因此,这个课程的讲授思路和内容,和这两本书有较大区别。
- 深入浅出:专栏中有一部分案例涉及到一些比较复杂的场景,或是一些高级Java特性,对于这些案例,我会尝试使用通俗的语言配合一些示意图帮助你理解。
- 知所以然也知其所以然:对于代码中的坑,我不仅仅会给出一个甚至多个解决方案,并且我还会分析其根本原因,只要篇幅允许大部分案例我都会进行相关源码剖析,让你不仅仅知道怎么避坑,更知道其中的原理。
- 授人以鱼也授人以渔:有许多坑来自实际生产案例的总结,在遇到问题的时候,我们一定是先通过经验加上使用工具来定位分析问题,然后才定位到坑,并不是一开始就知道为什么的。在专栏中,我会尽可能把分析问题的过程完整呈现给你,而不是直接告诉你为什么,这样以后遇到问题你也有解决问题的思路。专栏中,我们会涉及到jclasslib、jvisuamlvm、jconsole、MAT、阿里Arthas、wireshark等工具。
- 贴近实际有场景:不同于一般教科书式的编程书籍,只是在讲述语法。专栏的大多数案例来自实际真实的案例,并且在专栏中我还会经常分享一些最佳实践,体现的是我多年工作经验的总结和思考。
赶紧点击这里进入专栏吧