第1章 Java 8中常用的重要知识点
1.1 在项目中使用Lambda表达式和流操作
1.2 Lambda表达式
1.3 使用Java 8简化代码
1.3.1 使用流操作简化集合操作
1.3.2 使用可空类型简化判空逻辑
1.3.3 使用Java 8的一些新类、新方法获得函数式编程体验
1.4 并行流
1.5 流操作详解
1.5.1 创建流
1.5.2 filter
1.5.3 map
1.5.4 flatMap
1.5.5 sorted
1.5.6 distinct
1.5.7 skip和limit
1.5.8 collect
1.5.9 groupingBy
1.5.10 partitioningBy
1.6 小结
1.7 思考与讨论
第2章 代码篇
2.1 使用了并发工具类库,并不等于就没有线程安全问题了
2.1.1 没有意识到线程重用导致用户信息错乱的bug
2.1.2 使用了线程安全的并发工具,并不代表解决了所有线程安全问题
2.1.3 没有充分了解并发工具的特性,从而无法发挥其威力
2.1.4 没有认清并发工具的使用场景,因而导致性能问题
2.1.5 小结
2.1.6 思考与讨论
2.2 代码加锁:不要让锁成为烦心事
2.2.1 加锁前要清楚锁和被保护的对象是不是一个层面的
2.2.2 加锁要考虑锁的粒度和场景问题
2.2.3 多把锁要小心死锁问题
2.2.4 小结
2.2.5 思考与讨论
2.3 线程池:业务代码中最常用也最容易犯错的组件
2.3.1 线程池的声明需要手动进行
2.3.2 线程池线程管理策略详解
2.3.3 务必确认清楚线程池本身是不是复用的
2.3.4 需要仔细斟酌线程池的混用策略
2.3.5 小结
2.3.6 思考与讨论
2.3.7 扩展阅读
2.4 连接池:别让连接池帮了倒忙
2.4.1 注意鉴别客户端SDK是否基于连接池
2.4.2 使用连接池务必确保复用
2.4.3 连接池的配置不是一成不变的
2.4.4 小结
2.4.5 思考与讨论
2.5 HTTP调用:你考虑超时、重试、并发了吗
2.5.1 配置连接超时和读取超时参数的学问
2.5.2 Feign和Ribbon配合使用,你知道怎么配置超时吗
2.5.3 你知道Ribbon会自动重试请求吗
2.5.4 并发限制了爬虫的抓取能力
2.5.5 小结
2.5.6 思考与讨论
2.5.7 扩展阅读
2.6 20%的业务代码的Spring声明式事务可能都没处理正确
2.6.1 小心Spring的事务可能没有生效
2.6.2 事务即便生效也不一定能回滚
2.6.3 请确认事务传播配置是否符合自己的业务逻辑
2.6.4 小结
2.6.5 思考与讨论
2.6.6 扩展阅读
2.7 数据库索引:索引不是万能药
2.7.1 InnoDB是如何存储数据的
2.7.2 聚簇索引和二级索引
2.7.3 考虑额外创建二级索引的代价
2.7.4 不是所有针对索引列的查询都能用上索引
2.7.5 数据库基于成本决定是否走索引
2.7.6 小结
2.7.7 思考与讨论
2.8 判等问题:程序里如何确定你就是你
2.8.1 注意equals和==的区别
2.8.2 实现一个equals没有这么简单
2.8.3 hashCode和equals要配对实现
2.8.4 注意compareTo和equals的逻辑一致性
2.8.5 小心Lombok生成代码的坑
2.8.6 小结
2.8.7 思考与讨论
2.8.8 扩展阅读
2.9 数值计算:注意精度、舍入和溢出问题
2.9.1 “危险”的Double
2.9.2 考虑浮点数舍入和格式化的方式
2.9.3 用equals做判等,就一定是对的吗
2.9.4 小心数值溢出问题
2.9.5 小结
2.9.6 思考与讨论
2.9.7 扩展阅读
2.10 集合类:坑满地的List列表操作
2.10.1 使用Arrays.asList把数据转换为List的3个坑
2.10.2 使用List.subList进行切片操作居然会导致OOM
2.10.3 一定要让合适的数据结构做合适的事情
2.10.4 小结
2.10.5 思考与讨论
2.11 空值处理:分不清楚的null和恼人的空指针
2.11.1 修复和定位恼人的空指针问题
2.11.2 POJO中属性的null到底代表了什么
2.11.3 小心MySQL中有关NULL的3个坑
2.11.4 小结
2.11.5 思考与讨论
2.12 异常处理:别让自己在出问题的时候变为盲人
2.12.1 捕获和处理异常容易犯的错
2.12.2 小心finally中的异常
2.12.3 需要注意JVM针对异常性能优化导致栈信息丢失的坑
2.12.4 千万别把异常定义为静态变量
2.12.5 提交线程池的任务出了异常会怎样
2.12.6 小结
2.12.7 思考与讨论
2.12.8 扩展阅读
2.13 日志:日志记录真没你想象得那么简单
2.13.1 为什么我的日志会重复记录
2.13.2 使用异步日志改善性能的坑
2.13.3 使用日志占位符就不需要进行日志级别判断了吗
2.13.4 小结
2.13.5 思考与讨论
2.13.6 扩展阅读
2.14 文件I/O:实现高效正确的文件读写并非易事
2.14.1 文件读写需要确保字符编码
展开