Java业务开发常见错误100例
朱晔
贝壳金服资深架构师
立即订阅
6988 人已学习
课程目录
已完结 41 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 业务代码真的会有这么多坑?
免费
代码篇 (20讲)
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框架:框架帮我们做了很多工作也带来了复杂度
设计篇 (6讲)
21 | 代码重复:搞定代码重复的三个绝招
22 | 接口设计:系统间对话的语言,一定要统一
23 | 缓存设计:缓存可以锦上添花也可以落井下石
24 | 业务代码写完,就意味着生产就绪了?
25 | 异步处理好用,但非常容易用错
26 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?
安全篇 (4讲)
27 | 数据源头:任何客户端的东西都不可信任
28 | 安全兜底:涉及钱时,必须考虑防刷、限量和防重
29 | 数据和代码:数据就是数据,代码就是代码
30 | 如何正确保存和传输敏感数据?
不定期加餐 (6讲)
加餐1 | 带你吃透课程中Java 8的那些重要知识点(一)
加餐2 | 带你吃透课程中Java 8的那些重要知识点(二)
加餐3 | 定位应用问题,排错套路很重要
加餐4 | 分析定位Java问题,一定要用好这些工具(一)
加餐5 | 分析定位Java问题,一定要用好这些工具(二)
加餐6 | 这15年来,我是如何在工作中学习技术和英语的?
答疑篇 (1讲)
答疑篇:代码篇思考题集锦(一)
结束语 (3讲)
结束语 | 写代码时,如何才能尽量避免踩坑?
结课测试 | 关于Java业务开发的100个常见错误,你都明白其中缘由了吗?
结课问卷获奖用户名单
Java业务开发常见错误100例
15
15
1.0x
00:00/00:00
登录|注册

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

朱晔 2020-05-09
你好,我是朱晔。今天,我们来聊聊业务代码写完,是不是就意味着生产就绪,可以直接投产了。
所谓生产就绪(Production-ready),是指应用开发完成要投入生产环境,开发层面需要额外做的一些工作。在我看来,如果应用只是开发完成了功能代码,然后就直接投产,那意味着应用其实在裸奔。在这种情况下,遇到问题因为缺乏有效的监控导致无法排查定位问题,同时很可能遇到问题我们自己都不知道,需要依靠用户反馈才知道应用出了问题。
那么,生产就绪需要做哪些工作呢?我认为,以下三方面的工作最重要。
第一,提供健康检测接口。传统采用 ping 的方式对应用进行探活检测并不准确。有的时候,应用的关键内部或外部依赖已经离线,导致其根本无法正常工作,但其对外的 Web 端口或管理端口是可以 ping 通的。我们应该提供一个专有的监控检测接口,并尽可能触达一些内部组件。
第二,暴露应用内部信息。应用内部诸如线程池、内存队列等组件,往往在应用内部扮演了重要的角色,如果应用或应用框架可以对外暴露这些重要信息,并加以监控,那么就有可能在诸如 OOM 等重大问题暴露之前发现蛛丝马迹,避免出现更大的问题。
第三,建立应用指标 Metrics 监控。Metrics 可以翻译为度量或者指标,指的是对于一些关键信息以可聚合的、数值的形式做定期统计,并绘制出各种趋势图表。这里的指标监控,包括两个方面:一是,应用内部重要组件的指标监控,比如 JVM 的一些指标、接口的 QPS 等;二是,应用的业务数据的监控,比如电商订单量、游戏在线人数等。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Java业务开发常见错误100例》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • winner_0715
    我是贝壳找房的,所以看到老师的课程感觉很亲切,有个问题就是,在向第三方提供接口的时候,是提供RPC(如Dubbo),还是HTTP呢,需要考虑哪些因素呢

    作者回复: 一般给三方接口都是通用协议 http更好,内部使用追求极致性能才考虑rpc over tcp

    2020-05-10
    1
    8
  • Seven.Lin澤耿
    终于越来越明白Spring Cloud为啥叫Cloud了,强大
    2020-05-12
    2
  • Darren
    第一个问题:
    端点与@RestController:
    @Endpoint相当于@WebEndpoint和@JmxEndpoint的整合。web和jmx方式都支持
    @WebEndpoint 就相当于声明成一个@RestController的控制类

    请求方法分别被下面注解代替:
    @ReadOperation等同于GET
    @WriteOperation等同于 POST
    @DeleteOperation等同于DELETE

    第二个问题就不回答了,Prometheus+Grafana暂时还未入门

    作者回复: 不错

    2020-05-11
    2
  • hellojd
    投产前也要容量评估,做好流量确认,加上限流模块。

    作者回复: 是

    2020-05-09
    2
  • 终结者999号
    另外请问老师,下单的metric现在是同步到InfluxDb的,应该也可以同步到Prometheus吧

    作者回复: 完全可以,我们因为比较喜欢推而不是拉选择了InfluxDb,这2个产品都不错

    2020-05-17
    1
  • Michael
    老师,你好!
    OrderController 中的业务代码中涉及大量的指标注入代码会不会侵入性太强了,若是需要监控的业务指标很多,代码中涉及大量的这种Metrics.timer("deliverOrder.success").record(Duration.between(begin, Instant.now()));采集代码,觉得有点不太好,还有其他的方法嘛?

    作者回复: 这些是有业务属性的埋点,只能写代码(或者就是通过大数据从数据库层面来做业务监控)
    或者可以默认把所有Controller和Service方法的执行全部自定埋点,然后用这个来配置业务监控,缺点是粒度会比较细,埋点数据量会很大

    2020-06-24
  • 终结者999号
    我是作为一个央企关键部门的开发人员,对老师的这节课程感觉受益匪浅,每次出现问题都是客户报给我们故障,我们的zabbix不能完成metric的工作,所以也想引入Prometheus.

    作者回复: 可以的

    2020-05-17
  • jiarupc
    看来要想想办法,多接触些技术性更强的项目了。这几节课的内容都没接触过,读起来很吃力。
    2020-05-12
收起评论
8
返回
顶部