本文笔记全部来自《极客时间-左耳听风》

2018-09-21

弹力设计篇之“幂等性设计”

2018-07-26

分布式系统关键技术:全栈监控

分布式系统的技术栈

2018-06-27

从亚马逊的实践,谈分布式系统的难点

2018-06-23

程序中的错误处理(上):错误返回码和异常捕捉

仅在同步编程世界中适用

  • 异常捕捉只能在同步的情况下使用,在异步模式下,抛异常这事就不行了,需要通过检查子进程退出码或是回调函数来解决;
  • 在分布式的情况下,调用远程服务只能看错误返回码,比如 HTTP 的返回码。

程序中的错误处理(下):异步编程和最佳实践

  • 统一分类的错误字典。无论你是使用错误码还是异常捕捉,都需要认真并统一地做好错误的分类。最好是在一个地方定义相关的错误。比如,HTTP 的 4XX 表示客户端有问题,5XX 则表示服务端有问题。也就是说,你要建立一个错误字典。

  • 同类错误的定义最好是可以扩展的。这一点非常重要,而对于这一点,通过面向对象的继承或是像 Go 语言那样的接口多态可以很好地做到。这样可以方便地重用已有的代码。

  • 定义错误的严重程度。比如,Fatal 表示重大错误,Error 表示资源或需求得不到满足,Warning 表示并不一定是个错误但还是需要引起注意,Info 表示不是错误只是一个信息,Debug 表示这是给内部开发人员用于调试程序的。

  • 错误日志的输出最好使用错误码,而不是错误信息。打印错误日志的时候,除了要用统一的格式,最好不要用错误信息,而使用相应的错误码,错误码不一定是数字,也可以是一个能从错误字典里找到的一个唯一的可以让人读懂的关键字。这样,会非常有利于日志分析软件进行自动化监控,而不是要从错误信息中做语义分析。比如:HTTP 的日志中就会有 HTTP 的返回码,如:404。但我更推荐使用像PageNotFound这样的标识,这样人和机器都很容易处理。

  • 忽略错误最好有日志。不然会给维护带来很大的麻烦。

  • 对于同一个地方不停的报错,最好不要都打到日志里。不然这样会导致其它日志被淹没了,也会导致日志文件太大,最好的实践是,打出一个错误以及出现的次数。

  • 不要用错误处理逻辑来处理业务逻辑。也就是说,不要使用异常捕捉这样的方式来处理业务逻辑,而是应该用条件判断。如果一个逻辑控制可以用 if - else 清楚地表达,非常不建议使用异常方式处理。异常捕捉是用来处理不期望发生的事的,而错误码则用来处理可能会发生的事。

  • 对于同类的错误处理,用一样的模式。比如,对于null对象的错误,要么都用返回 null,加上条件检查的模式,要么都用抛 NullPointerException 的方式处理。不要混用,这样有助于代码规范。

  • 尽可能在错误发生的地方处理错误。因为这样会让调用者变得更简单。

  • 向上尽可能地返回原始的错误。如果一定要把错误返回到更高层去处理,那么,应该返回原始的错误,而不是重新发明一个错误。

  • 处理错误时,总是要清理已分配的资源。这点非常关键,使用 RAII 技术,或是 try-catch-finally,或是 Go 的 defer 都可以容易地做到。

  • 不推荐在循环体里处理错误。这里说的更多的情况是对于 try-catch 这种情况,对于绝大多数的情况你不需要这样做。最好把整个循环体外放在 try 语句块内,而在外面做 catch。

  • 不要把大量的代码都放在一个 try 语句块内。一个 try 语句块内的语句应该是完成一个简单单一的事情。

  • 为你的错误定义提供清楚的文档以及每种错误的代码示例。如果你是做 RESTful API 方面的,使用 Swagger 会帮你很容易搞定这个事。

  • 对于异步的方式,推荐使用 Promise 模式处理错误。对于这一点,JavaScript 中有很好的实践。

  • 对于分布式的系统,推荐使用 APM 相关的软件。尤其是使用 Zipkin 这样的服务调用跟踪的分析来关联错误。

时间管理:同扭曲时间的事儿抗争

你明明做不到,还不能说不,这应该怎么办呢?这里面的诀窍如下。

  • 当你面对做不到的需求时,你不要说这个需求做不到。尤其是,你不要马上说做不到,你要先想一下,这样让别人觉得你是想做的,但是,在认真思考过后,你觉得做不到,并且给出一个你觉得做得到的方案。这里的诀窍是——给出另一个你可以做到的方案,而不是把对方的方案直接回绝掉。

  • 当你面对过于复杂的需求时,你不要说不。你要反问一下,为什么要这样做?这样做的目的是什么?当了解完目的以后,你可以给出一个自己的方案,或是和对方讨论一个性价比更好的方案。你可以回复说,这个需求好复杂,我们能不能先干这个,再做那个,这样会更经济一些。这里的诀窍是——我不说我不能完全满足你,但我说我可以部分满足你。

  • 当你面对时间完全不够的需求时,你也不要说不。既然对方把压力给你,你要想办法把这个压力还回去,或是让对方来和你一同分担这个压力。

  • 这个时候,我惯用的方式是给回三个选择:a. 我可以加班加点完成,但是我不保证好的质量,有 bug 你得认,而且事后你要给我 1 个月的时间还债。b. 我可以加班加点,还能保证质量,但我没办法完成这么多需求,能不能减少一些?c. 我可以保质保量地完成所有的需求,但是,能不能多给我 2 周时间?

  • 这里的诀窍是——我不能说不,但是我要有条件地说是。而且,我要把你给我的压力再反过来还给你,看似我给了需求方选择,实际上,我掌握了主动。

  • 这就是学会说“不”的方法。说白了,你要学会在“积极主动的态度下对于不合理的事讨价还价”。只有学会了说“不”,你才能够控制好你的时间。

极客时间学习笔记-左耳听风相关推荐

  1. 高效学习-笔记-左耳听风

    文章目录 高效学习:端正学习态度 高效学习:源头.原理和知识地图 信息源 你要的是 "渔",而不是 "鱼". 高效学习:深度,归纳和坚持实践 举一反三 写博客 ...

  2. 极客时间学习笔记:03芯片分类

    芯片与集成电路的区别? 芯片肯定不全是集成电路.芯片里面,大约只有 80% 属于集成电路,其余的都是光电器件.传感器和分立器件,行业内把这些器件称为 O-S-D(Optoelectronic, Sen ...

  3. 极客时间学习笔记☞《苏杰的产品创新课》(二)

    竞品生态: 用不同方案解决相似问题的产品,往往会成为行业里颠覆巨头的下一代产品.竞品不是你死我活,也可以是互相成就. 明确竞争对手,找寻真正值得分析的竞争对手. 点子过滤器: 过滤掉不靠谱的点子,做值 ...

  4. 《零基础学Python》——极客时间——学习笔记

    第二章 Python基础语法 Python程序的书写规则 基础数据类型 类型判断 type() 强制类型转换 目标类型(要转换的数据) 变量的定义和常用操作 习题 题目: 练习一 变量的定义和使用 定 ...

  5. 极客时间学习笔记☞《苏杰的产品创新课》(一)

    项目经理与产品经理的差异: 目标的差异:项目经理更强调执行,是接到一个任务,正确地做事,产品经理更强调创新,是设定一个目标,做正确的事.这两种能力很难兼备,甚至有些互相冲突. 产品经理后续发展趋势: ...

  6. 极客时间学习笔记☞《苏杰的产品创新课》(三)

    产品的生命中心: 想清楚.做出来.推出去.产品生命周期分为四个典型阶段,分别叫做:验证期.爆发期.平台期.衰退期. 围绕既定的核心用户,把重要的需求场景满足得越来越好.拥有"回头客" ...

  7. 极客时间课程笔记:业务安全

    业务安全 业务安全体系:对比基础安全,业务安全有哪些不同? 业务安全和基础安全在本质上就有很大的不同:在基础安全中,黑客将技术作为核心竞争力:在业务安全中,黑产将资源作为核心竞争力.谁能够以更低的成本 ...

  8. 《左耳听风》完结感受

    前言 陈皓开设的极客时间的<左耳听风>专栏在上周完结了,追了近一年的时间,感触颇多.<左耳听风>专栏内容庞杂,不但包括软件技术的宏观体系,还有脚踏实地的基础知识,而且包括了技术 ...

  9. 极客时间左耳听风-高效学习

    左耳听风--高效学习篇 P95 | 高效学习:端正学习态度 本人真实⬇️⬇️⬇️⬇️ " 大部分人都认为自己爱学习,但是: 他们都是只有意识没有行动,他们是动力不足的人. 他们都不知道自己该 ...

最新文章

  1. 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )
  2. 利用solr6.5,tomcat9.0和centos7.0的搭建
  3. 【Python】8000字:Python时间系列之datetime模块
  4. 日志分析工具ELK(一)
  5. OpenCV3.4.5带GPU编译error: #error This file requires compiler and library support for the ISO C++ 2011
  6. java亮剑_黄金矿工3-太空版
  7. mysql + keepalived高可用
  8. python写csv文件按升序排列_用python给csv里的数据排序的具体代码
  9. 【题解】守望者的逃离
  10. 像中文的罗马音字体复制_罗马音大全可复制汉字下载
  11. 财经大数据可视化Vdc平台_为何要使用大数据可视化平台
  12. 二元函数matlab画图_matlab心形图大全,几个经典的函数图像,有趣的函数图像,matlab画图...
  13. 让你两分钟明白什么是ERP
  14. 梳理STM32F429之通信传输部分---NO.8 硬件SPI
  15. 稳压二极管串联电阻计算
  16. 美团校招实习生面试一面
  17. Excel 数据解析异常
  18. KLOOK客路旅行获2亿美元D轮融资,将投入全球拓展
  19. PEAR modules 环境检测安装软件始终 NOK
  20. 书读百遍,其意自现 --- 意境与语境的融合

热门文章

  1. Z-stack 协议栈基础知识
  2. 深度长文|详解现象级ChatGPT发展历程、原理、技术架构详解和产业未来
  3. [读论文]CAAD-2018 Targeted Attack方向季军技术报告
  4. 回顾2011年被捕的八大黑客
  5. c语言 已知自然对数的底数e用级数表示 忽略绝对值小于,自然对数的底数e大于零 介绍一下自然对数的底e的情况?...
  6. containerd(containerd)
  7. 连通分量(quick-union)
  8. 央视315让AI主播预热,人类主播会失业吗?
  9. 内网电脑服务器时间修改,局域网内,用C#实现本地电脑获取服务器系统时间,并更新到本地电脑...
  10. fopen等文件读写函数