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

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

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit