《极客时间 - 左耳听风》【文章笔记个人思考】

2024-03-02 01:12

本文主要是介绍《极客时间 - 左耳听风》【文章笔记个人思考】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《极客时间 - 左耳听风》原文链接:https://time.geekbang.org/column/intro/100002201?tab=catalog

  • 10 | 如何成为一个大家愿意追随的Leader?
  • 11 | 程序中的错误处理:错误返回码和异常捕捉

10 | 如何成为一个大家愿意追随的Leader?

这里的Leader是在技术上取得优势,而不是行政上的职位,不是一种职称而是领头羊。

Leader:

  1. 讨论工作细节,关注工作重点,制定工作计划,解决细节难题。
  2. 深入技术细节,从技术上找到治标又治本的技术方案或管理方法。
  3. 注重技术发展。
  4. 沟通协作。

TUTU

如何成为Leader?

  1. 帮人解决问题。
  2. 被人依赖。

技术领导力是成为一个Leader的关键因素。

人总是需要有不同的经历,优秀的人更是如此。

Always Be Coding 终身写代码才会有更多实践经验,才能明白什么是最好的实践,才能明白一个技术方案的优缺点和实现复杂度。很多时候项目经理或产品经理一个自己认为很简单的需求,在技术上实现的时候可能会遇到很多坑。

保持积极、正面、热情的生活方式。

正视错误,正视问题,正视不足,不怕困难,迎难而上,在反思和总结中得到更好的解决方案。

互相学习,互相提高,互相成就。

11 | 程序中的错误处理:错误返回码和异常捕捉

确实,任何一个稳定的系统中,都会用大量代码处理错误。

strtol() 函数使用 返回值 +错误码的形式。
存在两个问题:

  1. 程序员一不小心就会忘记返回值的检查,从而造成代码的 Bug,这经常会遇到。
  2. 函数接口非常不纯洁,正常值和错误值混淆在一起,导致语义有问题。

Windows 的系统调用开始使用 HRESULT:返回值只用来做函数调用的成功或失败,input 和 output 通过函数参数来完成。
存在问题:

  1. 函数接口变的复杂。
  2. 函数返回成功或失败可能被认为忽略。

Go语言很多函数通过多返回值来解决:返回 result, err 两个值。(个人觉得放在同样的返回位置不清晰,不如用返回值只用来做函数调用的成功或失败,input 和 output 通过函数参数来完成。)

  1. 参数都是入参,结果信息和错误信息分离,函数接口语义会更加清晰。
  2. Go 语言中的错误参数如果要忽略,需要显式地忽略,用 _ 这样的变量来忽略;(为什么要忽略,如何忽略,TUCODE)
  3. 返回的 error 是个接口(其中只有一个方法 Error(),返回一个 string ),所以你可以扩展自定义的错误处理。(TUCODE)
  4. 函数会返回多种不同类型的 error 通过 switch case 处理。

资源清理:

  1. 通过C++ 的 RAII 机制实现。
  2. Go语言中的 defer 关键字可以做到同样的效果。
  3. C语言通过 goto 语句实现,代码中间不能 return 否则会导致内存泄漏。

异常捕获处理:try-catch

  1. 正常的代码、错误处理的代码、资源清理的代码分开,提高了代码的可读性。
  2. 函数接口在 input(参数)和 output(返回值)以及错误处理的语义是比较清楚的。
  3. 异常不能被忽略(如果要忽略也需要 catch 住,这是显式忽略)。(TOTHINK)
  4. 在面向对象的语言中(如 Java),异常是个对象,所以,可以实现多态式的 catch。(TOCODE)

致命问题:在异步运行的世界里的问题。try 语句块里的函数运行在另外一个线程中,其中抛出的异常无法在调用者的这个线程中被捕捉。

资源错误(文件资源,内存资源):日志 + 程序退出。 根据系统底层接口处理。
业务逻辑代码错误:日志 + 报警。捕获异常。
用户的错误:向用户端报错。返回错误码。
运行环境错误:日志 + 报警。重试或妥协(降低性能等),保障环境可用。捕获异常。

底层系统的资源错误,提供什么错误处理方式就用什么错误处理方式,尤其是一些系统库没的选择。

其他情况:

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

《代码大全2》里有部分是专门讲这个的,很详细。

这篇关于《极客时间 - 左耳听风》【文章笔记个人思考】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/764461

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库