# SUMMARY * [简介](./README.md) * [开篇词 | 业务代码真的会有这么多坑?](./docs/209108.md) * [01 | 使用了并发工具类库,线程安全就高枕无忧了吗?](./docs/209494.md) * [02 | 代码加锁:不要让“锁”事成为烦心事](./docs/209520.md) * [03 | 线程池:业务代码最常用也最容易犯错的组件](./docs/210337.md) * [04 | 连接池:别让连接池帮了倒忙](./docs/211388.md) * [05 | HTTP调用:你考虑到超时、重试、并发了吗?](./docs/213273.md) * [06 | 20%的业务代码的Spring声明式事务,可能都没处理正确](./docs/213295.md) * [答疑篇:代码篇思考题集锦(一)](./docs/260695.md) * [07 | 数据库索引:索引并不是万能药](./docs/213342.md) * [08 | 判等问题:程序里如何确定你就是你?](./docs/213604.md) * [09 | 数值计算:注意精度、舍入和溢出问题](./docs/213796.md) * [10 | 集合类:坑满地的List列表操作](./docs/216778.md) * [11 | 空值处理:分不清楚的null和恼人的空指针](./docs/216830.md) * [12 | 异常处理:别让自己在出问题的时候变为瞎子](./docs/220230.md) * [答疑篇:代码篇思考题集锦(二)](./docs/261446.md) * [13 | 日志:日志记录真没你想象的那么简单](./docs/220307.md) * [14 | 文件IO:实现高效正确的文件读写并非易事](./docs/223051.md) * [15 | 序列化:一来一回你还是原来的你吗?](./docs/223111.md) * [16 | 用好Java 8的日期时间类,少踩一些“老三样”的坑](./docs/224240.md) * [17 | 别以为“自动挡”就不可能出现OOM](./docs/224784.md) * [18 | 当反射、注解和泛型遇到OOP时,会有哪些坑?](./docs/225596.md) * [19 | Spring框架:IoC和AOP是扩展的核心](./docs/227917.md) * [20 | Spring框架:框架帮我们做了很多工作也带来了复杂度](./docs/227918.md) * [答疑篇:代码篇思考题集锦(三)](./docs/262560.md) * [21 | 代码重复:搞定代码重复的三个绝招](./docs/228964.md) * [22 | 接口设计:系统间对话的语言,一定要统一](./docs/228968.md) * [23 | 缓存设计:缓存可以锦上添花也可以落井下石](./docs/231501.md) * [24 | 业务代码写完,就意味着生产就绪了?](./docs/231568.md) * [25 | 异步处理好用,但非常容易用错](./docs/234928.md) * [26 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?](./docs/234930.md) * [答疑篇:设计篇思考题答案合集](./docs/263776.md) * [27 | 数据源头:任何客户端的东西都不可信任](./docs/235700.md) * [28 | 安全兜底:涉及钱时,必须考虑防刷、限量和防重](./docs/237060.md) * [29 | 数据和代码:数据就是数据,代码就是代码](./docs/237139.md) * [30 | 如何正确保存和传输敏感数据?](./docs/239150.md) * [答疑篇:安全篇思考题答案合集](./docs/264776.md) * [31 | 加餐1:带你吃透课程中Java 8的那些重要知识点(一)](./docs/212374.md) * [32 | 加餐2:带你吃透课程中Java 8的那些重要知识点(二)](./docs/212398.md) * [33 | 加餐3:定位应用问题,排错套路很重要](./docs/221982.md) * [34 | 加餐4:分析定位Java问题,一定要用好这些工具(一)](./docs/224816.md) * [35 | 加餐5:分析定位Java问题,一定要用好这些工具(二)](./docs/230534.md) * [36 | 加餐6:这15年来,我是如何在工作中学习技术和英语的?](./docs/235013.md) * [答疑篇:加餐篇思考题答案合集](./docs/265484.md) * [37 | 加餐7:程序员成长28计](./docs/266608.md) * [38 | 加餐8:Java程序从虚拟机迁移到Kubernetes的一些坑](./docs/457161.md) * [结束语 | 写代码时,如何才能尽量避免踩坑?](./docs/240276.md) * [结课测试 | 关于Java业务开发的100个常见错误,你都明白其中缘由了吗?](./docs/240255.md) * [结课问卷获奖用户名单](./docs/245985.md)