Java业务开发常见错误100例

Java业务开发常见错误100例 / 全面避坑 + 最佳实践=健壮代码

朱晔
贝壳金服资深架构师
  • 课程目录
  • 课程介绍
  • 在线阅读:开篇词 | 业务代码真的会有这么多坑?

    我会按照“知识介绍->还原业务场景->错误实现->正确实现->原理分析->小总结 ”来讲解案例,帮你避坑也帮你分析根因。

  • 01 | 使用了并发工具类库,线程安全就高枕无忧了吗?

    我会分享使用并发工具类库容易踩的四类坑,踩坑原因可以归结为:使用并发工具时我们没有充分理解其可能存在的问题、适用场景等。

  • 02 | 代码加锁:不要让“锁”事成为烦心事

    业务代码涉及复杂的锁操作时,强烈建议Mock相关外部接口或数据库操作后对代码压测,以排除锁误用带来的性能问题和死锁问题。

  • 03 | 线程池:业务代码最常用也最容易犯错的组件

    在今天的学习中,我通过三个和线程池相关的生产事故,和你分享了使用线程池的几个最佳实践。

  • 04 | 连接池:别让连接池帮了倒忙

    我以三种最常用的Redis连接池、HTTP连接池、数据库连接池为例,分享了连接池实现方式、使用姿势和参数配置的三大问题。

  • 05 | HTTP调用:你考虑到超时、重试、并发了吗?

    我们一起看看使用Feign和Apache HttpClient进行HTTP接口调用时,可能会遇到的超时、重试和并发的坑。

  • 06 | 20%的业务代码的Spring声明式事务,可能都没处理正确

    今天,我总结了针对业务代码中最常见的使用数据库事务的方式,即Spring声明式事务,与你总结了使用上可能遇到的三类坑。

  • 答疑篇:代码篇思考题集锦(一)

    我们来分析下前6讲的课后思考题,涉及的知识点有并发工具、代码加锁、线程池、连接池、HTTP调用和Spring声明式事务。

  • 07 | 数据库索引:索引并不是万能药

    遇到查询性能问题,就盲目要求给数据表字段创建大量索引,显然是错误的。今天,我们就以MySQL为例来深入理解下索引。

  • 08 | 判等问题:程序里如何确定你就是你?

    我会围绕equals、compareTo和Java的数值缓存、字符串驻留等展开讨论,希望帮你彻底消除代码中的相关Bug。

  • 09 | 数值计算:注意精度、舍入和溢出问题

    对于金融、科学计算等场景,请尽可能使用BigDecimal和BigInteger,避免由精度和溢出问题引发Bug。

  • 10 | 集合类:坑满地的List列表操作

    今天,我会和你分享若干和List列表相关的错误案例。这其中的坑,基本都是由“想当然”踩的。

  • 11 | 空值处理:分不清楚的null和恼人的空指针

    总结来讲,null的正确处理以及避免空指针异常,绝不是判空这么简单,还要根据业务属性从前到后仔细考虑。

  • 12 | 异常处理:别让自己在出问题的时候变为瞎子

    今天,我就来和你说说,为什么使用AOP来进行“统一异常处理”不可取,以及异常处理相关的坑和最佳实践。

  • 答疑篇:代码篇思考题集锦(二)

    今天,我们继续分析第7~12讲的课后思考题,会涉及数据库索引、判等问题、数值计算、集合类、空值处理和异常处理6大知识点。

  • 13 | 日志:日志记录真没你想象的那么简单

    今天,我将从框架使用配置和记录本身两个方面,来说说日志记录的坑和最佳实践。

  • 14 | 文件IO:实现高效正确的文件读写并非易事

    今天,我会从字符编码、缓冲区和文件句柄释放这3个常见问题出发,和你分享如何解决与文件操作相关的性能问题或者Bug。

  • 15 | 序列化:一来一回你还是原来的你吗?

    通常情况下,序列化问题常见的坑会集中在业务场景中,比如Redis、参数和响应序列化反序列化。今天,我们来详细聊聊这些坑。

  • 16 | 用好Java 8的日期时间类,少踩一些“老三样”的坑

    我们一起看看使用遗留的日期时间类,处理日期时间初始化、格式化、解析、计算可能会遇到的问题,以及如何用新日期时间类来解决。

  • 17 | 别以为“自动挡”就不可能出现OOM

    今天,我会从内存分配意识的角度通过一些案例,展示业务代码中可能导致OOM的一些坑。

  • 18 | 当反射、注解和泛型遇到OOP时,会有哪些坑?

    业务项目中大都是增删改查,用到反射、注解和泛型的机会非常少,但只有学好、用好这些高级特性,才能开发出更简洁易读的代码。

  • 19 | Spring框架:IoC和AOP是扩展的核心

    今天,我会通过2个案例分享Spring IoC和AOP的基本概念,以及三个比较容易出错的点。

  • 20 | Spring框架:框架帮我们做了很多工作也带来了复杂度

    今天,我们通过Feign AOP切不到的诡异案例、程序配置的优先级问题这两个案例,感受一下Spring的复杂度。

  • 答疑篇:代码篇思考题集锦(三)

    我们继续分析第13~20讲的课后思考题,这些题目涉及了日志、文件IO、序列化、OOM和Spring框架等知识点。

  • 21 | 代码重复:搞定代码重复的三个绝招

    我从业务代码中最常见的三个需求出发,分享如何使用Java中的一些高级特性、设计模式和工具消除重复代码,才能既优雅又高端。

  • 22 | 接口设计:系统间对话的语言,一定要统一

    今天,我就通过我遇到的实际案例,和你一起看看因为接口设计思路和调用方理解不一致所导致的问题,以及相关的实践经验。

  • 23 | 缓存设计:缓存可以锦上添花也可以落井下石

    使用Redis做缓存虽然简单好用,但使用和设计缓存并不是set一下这么简单,需要注意缓存的同步、雪崩、并发、穿透等问题。

  • 24 | 业务代码写完,就意味着生产就绪了?

    今天,我介绍了使用Spring Boot Actuaor实现生产就绪的几个关键点,包括健康检测、暴露应用信息和指标监控。

  • 25 | 异步处理好用,但非常容易用错

    异步处理虽然好用,但实现时却容易犯三个错:异步处理流程的可靠性问题、消息发送模式的区分问题、大量死信消息堵塞队列的问题。

  • 26 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?

    今天,我通过三个案例分别对比了缓存数据库Redis、时间序列数据库InfluxDB、搜索数据库ES和MySQL的性能。

  • 答疑篇:设计篇思考题答案合集

    我们继续分析“设计篇”的思考题。这12道题涉及6大知识点:代码重复、接口设计、缓存设计、生产就绪、异步处理和数据存储。

  • 27 | 数据源头:任何客户端的东西都不可信任

    今天,我就“任何客户端的东西都不可信任”这个结论,通过4个案例和你讲解一些有代表性的错误。

  • 28 | 安全兜底:涉及钱时,必须考虑防刷、限量和防重

    任何涉及钱的代码必须要考虑防刷、限量和防重,今天我们就通过三个案例看看如何在代码层面做好安全兜底。

  • 29 | 数据和代码:数据就是数据,代码就是代码

    今天,我通过案例,和你具体分析了SQL注入和XSS攻击这两类注入类安全问题。

  • 30 | 如何正确保存和传输敏感数据?

    今天,我们从安全角度来聊聊用户名、密码、身份证等敏感信息,在Java业务代码中应该怎么实现保存和传输。

  • 答疑篇:安全篇思考题答案合集

    今天,我们一起分析这门课“安全篇”的课后思考题,这些题目涉及的知识点包括数据源头、安全兜底、数据和代码、敏感数据。

  • 31 | 加餐1:带你吃透课程中Java 8的那些重要知识点(一)

    今天,我会介绍Java 8中最重要的几个功能,包括Lambda表达式、Optional可空对象、并行流操作。

  • 32 | 加餐2:带你吃透课程中Java 8的那些重要知识点(二)

    今天,我用了大量的篇幅和案例,和你展开介绍了Stream中很多具体的流式操作方法。

  • 33 | 加餐3:定位应用问题,排错套路很重要

    今天这一讲,我就与你说说我在应急排错方面积累的心得。这都是我多年担任技术负责人和架构师自己总结出来的,希望对你有所帮助。

  • 34 | 加餐4:分析定位Java问题,一定要用好这些工具(一)

    在今天这篇加餐中,我会带你一起学习如何使用JDK自带工具、Wireshark来分析和定位Java程序的问题。

  • 35 | 加餐5:分析定位Java问题,一定要用好这些工具(二)

    我会介绍如何使用JVM堆转储的工具MAT来分析OOM问题,以及如何使用Arthas来分析、定位高CPU问题。

  • 36 | 加餐6:这15年来,我是如何在工作中学习技术和英语的?

    今天,我会通过自己的经历和你分享一下,如何利用有限的环境、有限的时间来学习技术和英语?

  • 答疑篇:加餐篇思考题答案合集

    今天,我们继续分析“不定期加餐”篇的课后思考题。这些题目涉及了Java 8基础知识、定位和分析应用问题相关的几大知识点。

  • 37 | 加餐7:程序员成长28计

    从毕业后入行到现在作为一个高级管理者,我在互联网领域拼搏15年了。我把自己的成长历程、心得体会整理成了程序员成长28计。

  • 38 | 加餐8:Java程序从虚拟机迁移到Kubernetes的一些坑

    今天这一讲,我们来学习Java应用部署到Kubernetes集群会遇到的4类问题。

  • 结束语 | 写代码时,如何才能尽量避免踩坑?

    学习、分析这些坑点并不是我们的最终目的,在写业务代码时如何尽量避免踩坑才是。今天,我再分享下10条避免踩坑的方法。

  • 结课测试 | 关于Java业务开发的100个常见错误,你都明白其中缘由了吗?

    《Java业务开发常见错误100例》课程结课了,来做一个测试吧!

  • 结课问卷获奖用户名单

    每一个声音都值得倾听,感谢你们,我们一起精益求精!

你将获得

  • 130 个代码坑点及其解决方案
  • 100 个场景化案例解读
  • 25 次源码深度解析
  • 使用 10 个工具定位问题根因

讲师介绍


课程介绍

有些细节问题,可能只会在某些特定情况下(比如高并发、多线程)出现,一经出现便会成为重大的生产事故;有些细节问题,可能暂时只会影响程序运行的性能,在量变到质变的瞬间爆发;还有些细节问题,比如所谓的服务器不稳定问题,或许运维同学改改配置、时不时重启下系统也能解决,但没从代码层面解决,就意味着程序里始终有一颗定时炸弹。

其实,我们不是不重视这些细节,更不是不想从根儿上解决问题,只是不知道问题到底出在了哪里。而要做好这些细节、避开这些坑,第一步就得知道它们是什么、在哪里、为什么会出现。

因此,我们邀请了朱晔老师,开设了“Java业务开发常见错误100例”这个课程。他从200多个真实的生产事件和事故中,整理提炼了100个Demo(以Java代码演示),涉及130多个坑点、50多条最佳实践,去讲述业务开发中的常见错误。

这些内容不仅可以帮助你写出更好的代码,同时也有助于你进一步补全自己的知识网增加面试的信心。你甚至可以把这些案例当作代码审核的Checklist,帮助别的项目一起避坑,帮助团队一起成长。

在这个课程中,每节课都是Java业务开发的一个核心关注点,每个知识点对应2~5个案例,并按照“知识介绍->还原业务场景->错误实现->正确实现->原理分析->小总结”来讲解每个案例,不仅帮你避开这个知识点的常见坑,更让你能知道产生坑的根本原因,提升自己的技术能力。

在此,也特别感谢王少泽老师,承担了整个课程的技术审核和录音工作。

常见问题

问:非Java开发者是否可以从本课程受益?

答:编程语言是相通的,Java语言的许多坑点,其他语言也有。本课程不会专注于讲解语言本身的坑点,且涉及的案例贴近业务开发的各方各面,更侧重开发方面的误区和最佳实践。因此,即便你的开发语言不是Java,学习这个课程也能有所收获。

问:《Effective Java》《码出高效:Java 开发手册》和本课程的区别是什么?

答:《Effective Java》注重Java语言、《码出高效:Java 开发手册》注重规范,而本课程覆盖使用Java进行业务开发涉及的各种常用框架和技术,不会局限于Java或者JDK本身,且设计篇、安全篇会从更高的视角去看开发时遇到的各种误区。因此,这个课程的讲授思路和内容,和这两本书有较大区别。

课程模块设计

本课程包括三大模块,分别是代码篇、设计篇、安全篇。

  • 代码篇:包含开发层面近20个方面的坑,涉及多线程、数据访问、池技术、日志异常、日期时间、IO和序列化、Spring框架等。这个模块,不仅会分析一些代码的错误写法,还会涉及对基础知识理解不透导致的踩坑。
  • 设计篇:讨论项目技术设计时的一些坑点或误区,涉及接口、缓存、异步、生产就绪、代码重复、数据存储等六个方面的设计。通过场景化的案例、针对可能实际遇到的问题,给出设计思路和最佳实践。
  • 安全篇:介绍后端开发最容易忽略、却又是从开发层面来防控效果最好的四个安全问题。包括客户端数据可信问题、数据和代码的隔离问题、资源防刷兜底问题,以及敏感数据的处理。

课程目录


适合人群

  1. 适宜人群:1~5年经验的Java开发者,尤其是偏业务型项目的开发人员。
  2. 不适宜人群:零编程基础的开发者。

特别放送

免费领取福利


限时活动推荐


订阅须知

教程推荐

jQuery在线教程

Awk在线教程

MariaDB在线教程

F#在线教程

HTML在线教程

Git在线教程

随机推荐

登路普DUNLOP4粒装网球加亮球TOUR应该注意哪些方面细节!优缺点分...

海韵SEASONIC旗舰白金PRIMEPX850评测哪款值得买,内幕透露。

华硕ASUSROGSTRIX质量好吗,测评结果让你出乎意料!

ARC'TERYX始祖鸟男子真的好吗!评测值得买吗

喜迎门麻将机全自动麻将机家用餐桌两用麻将桌评测质量怎么样!哪...

艾美特家用电风扇智能遥控落地扇节能风扇大风量电风扇白色哪个值...