Clean Code 阅读笔记

  • 初期未记录,待二次阅读。。。
Concurrency
  1. Keep your concurrrency-related code separate from other code.
  2. Take data encapsulation to heart; severely limit the access of any data that may be shared.
  3. Attempt to partition data into independent subsets than can be operated on by independent threads, possibly in different processors.
  4. Review the classes available to you. In the case of Java, become familiar with java.util.concurrent, java.util.concurrent.atomic, java.util.concurrent.locks
  5. Learn these basic algorithms and understand their solutions: Producer-Consumer, Reader-Writer, Dining Philosophers.
  6. Avoiding using more than one method on a shared object.
    • Client-Based Locking
    • Server-Based Locking
    • Adapted Server
  7. Keep your synchronized sections as small as possible.
  8. Think about shut-down early and get it working early. It’s going to take longer than you expect. Review existing algorithms because this is probably harder than you think.
  9. Write tests that have the potential to expose problems and then run them frequently, with different programatic configurations and system configurations and load. If tests ever fail, track down the failure. Don’t ignore a failure just because the tests pass on a subsequent run.
Refactor
  1. no pass a flag as an argument to a function, especially when that flag simply selects the format of the output
Code Smells

Comment

  1. Inappropriate Information
  2. Obsolete Comment
  3. Redundant Comment
  4. Poorly Written Comment
  5. Commented-Out Code

Environment

  1. Build Requires More Than One Step
  2. Test Require More Than One Step

Functions

  1. Too Many Arguments
  2. Output Arguments
  3. Flag Arguments
  4. Dead Function

General

  1. Multiple Languages in One Source File
  2. Obvious Behavior Is Unimplemented
  3. Incorrect Behavior at the Boundaries
  4. Overridden Safeties
  5. Duplication
  6. Code at Wrong Level of Abstraction
  7. Base Classes Depending on Their Derivatives
  8. Too Much Information
  9. Dead Code
  10. Vertical Separation
  11. Inconsistency
  12. Clutter
  13. Artificial Coupling
  14. Feature Envy
  15. Selector Arguments
  16. Obscured Intent
  17. Misplaced Responsibility
  18. Inappropriate Static
  19. Use Explanatory Variables
  20. Function Names Should Say What They Do
  21. Understand the Algorithm
  22. Make Logical Dependencies Physical
  23. Prefer Polymorphism to If/Else or Switch/Case
  24. Follow Standard Conventions
  25. Replace Magic Numbers with Named Constants
  26. Be Precise
  27. Structure over Convention
  28. Encapsulate Conditionals
  29. Avoid Negative Conditionals
  30. Functions Should Do One Thing
  31. Hidden Temporal Couplings
  32. Don’t Be Arbitrary
  33. Encapsulate Boundary Conditions
  34. Functions Should Descend Only One Level of Abstraction
  35. Keep Configurable Data at High Levels
  36. Avoid Transitive Navigation

Java

  1. Avoid Long Import Lists by Using Wildcards
  2. Don’t Inherit Constants
  3. Constants verus Enums

Names

  1. Choose Descriptive Names
  2. Choose Names at the Appropriate Level of Abstraction
  3. Use Standard Nomenclature Where Possible
  4. Unambiguous Names
  5. Use Long Names for Long Scopes
  6. Avoid Encodings
  7. Names Should Describe Side-Effects

Tests

  1. Insufficient Tests
  2. Use a Coverage Tool!
  3. Don’t Skip Trivial Tests
  4. An Ignored Test Is a Question about an Ambiguity
  5. Test Boundary Conditions
  6. Exhaustively Test Near Bugs
  7. Patterns of Failure Are Revealing
  8. Test Coverage Patterns Can Be Revealing
  9. Tests Should Be Fast
Concurrency of Appendix
  1. Focuse all concurrency code into a small number of classes
  2. Understand the memory model enough to know what is and is not safe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 缓存失效策略及其应用场景

Redis,作为一款高性能的键值存储系统,广泛应用于缓存、消息队列、计数器等多种场景中。其高效的数据管理和过期策略是保证系统稳定运行的关键因素之一。本文将深入探讨Redis中缓存失效的几种策略——定时删除、惰性删除、定期删除,以及如何结…

三十岁,不能再需要依靠,因为你是所有人的依靠

在这个世界的某个角落,有一个被岁月轻抚过的门槛,跨过了它,便是三十岁的风景。人们常说,三十而立,仿佛在这一刻,生命被赋予了新的重量,不再是那片随风飘荡的云,而是成为了大地的一部…

视频监控管理平台LntonCVS监控视频汇聚融合云平台主要功能应用场景介绍

随着网络技术的不断发展和万物互联时代的到来,视频融合在一些系统集成项目及综合管理应用中变得日益重要。本文以LntonCVS视频融合云平台为案例,探讨视频融合的对象及其应用场景。 1. 视频监控设备 视频监控摄像设备是各种视频应用项目的基础部分。在视…

【Andoird开发】android获取蓝牙权限,beacon,android-beacon-library

iBeacon 最先是苹果的技术,使用android-beacon-library包可以在android上开发iBeacon 技术。 iBeacon的发明意义重大。它是一种基于蓝牙低功耗(Bluetooth Low Energy, BLE)技术的定位系统,通过向周围发送信号来标识其位置。这项技…

【NumPy】关于numpy.arange()函数,看这一篇文章就够了

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

AI--构建检索增强生成 (RAG) 应用程序

LLM 所实现的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG) 的技术。 典型的 RAG 应用程序有两个主要组件 索引:从源中提取数据并对其进行索引的管道。这通常在线下…

实时3D云渲染与汽车虚拟仿真的联系

汽车虚拟仿真是指利用计算机技术对汽车进行全方位的模拟,包括车身结构、发动机、转向系统、悬挂系统、制动系统等各个方面,以达到实现汽车设计验证、性能分析、安全评估和驾驶模拟等目的的一种技术手段。现如今,越来越多的汽车制造商采用虚拟…

K8s Service 背后是怎么工作的?

kube-proxy 是 Kubernetes 集群中负责服务发现和负载均衡的组件之一。它是一个网络代理,运行在每个节点上, 用于 service 资源的负载均衡。它有两种模式:iptables 和 ipvs。 iptables iptables 是 Linux 系统中的一个用户空间实用程序,用于…

为什么避免 v-if 和 v-for 一起用?

避免在 Vue 中将 v-if 和 v-for 一起使用在同一个元素上,主要是因为它们会导致一些潜在的性能问题和逻辑复杂性。以下是几个主要的原因: 性能问题:当 v-if 和 v-for 同时使用时,Vue 会在每次循环渲染时重新计算 v-if 指令的值。这…

Kroma宣布推出Spectrum:以太坊Layer-2的先进原生质押服务

Kroma宣布推出备受期待的Spectrum,这是一项先进的原生质押服务,旨在彻底改变以太坊 Layer-2格局。Spectrum将于2024年5月14日开始运营,为用户提供利用质押ETH、stETH和eETH的奖励机会,助力用户在去中心化金融(DeFi&…

爆火!开源多模态大模型在手机端进行本地部署!

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型& AIGC 技术趋势、大模型& AIGC 落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了…

二叉树遍历操作详解

目录 一、思路详解 1.1 递归思路 1.2 递归分支图 1.3 递归栈帧图 二、C语言实现 2.1 前序遍历 2.2 中序遍历 2.3 后序遍历 三、查找值为x的结点 3.1 递归思路 3.2 C语言代码 一、思路详解 采用递归的思想解决问题,以高度为3的满二叉树为例。 1.1 递归思…

mqtt flutter web项目websocket

mqtt flutter web项目websocket 在网上找相关的代码学习,太少了,自己借鉴研究了一个 pubspec.yaml添加引用包 dependencies: flutter: sdk: flutter fast_gbk: 1.0.0 mqtt_client: ^10.2.0 mqtt代码: import package:mqtt_client/mqtt…

ClickHouse 几年内数据查询及细节

在 ClickHouse 中,查询三年内的时间数据可以使用以下方法: 1. 使用日期函数 可以使用 ClickHouse 支持的日期函数来筛选出三年内的数据。例如,使用 today() 函数获取当天日期,使用 toDate() 函数将日期转换为指定格式&#xff0…

【C++】学习笔记——map和set

文章目录 十五、map和set1. 关联式容器2. set的介绍3. set的使用4. multiset5. map的介绍6. map的使用7. multimap8. map中重载的operator[] 未完待续 十五、map和set 1. 关联式容器 我们已经接触过STL中的部分容器,比如:vector 、list 、deque 等&…

Golang | Leetcode Golang题解之第99题恢复二叉搜索树

题目: 题解: func recoverTree(root *TreeNode) {var x, y, pred, predecessor *TreeNodefor root ! nil {if root.Left ! nil {// predecessor 节点就是当前 root 节点向左走一步,然后一直向右走至无法走为止predecessor root.Leftfor pr…

《数组逆序输出》

描述 编写程序,输入10个整数n存入,再按逆序重新存放后再输出。 输入描述 输入共10个数。 输出描述 输出共1行,每个数字用空格隔开。 样例输入 1 -5 -4 -3 -2 -1 0 1 2 3 4 样例输出 1 4 3 2 1 0 -1 -2 -3 -4 -5 提示 对于100%的数据…

OpenHarmony开发之MQTT讲解

相信MQTT这个名称大家都不陌生,物联网的开发必然会遇到MQTT相关知识的应用。那么什么是MQTT?它有什么特点?它能解决什么问题?它是如何工作的?OpenAtom OpenHarmony(以下简称“OpenHarmony”)的物…

前端基础入门三大核心之HTML篇:网页基础配置全解密

前端基础入门三大核心之HTML篇:网页基础配置全解密 一、HTML文档的基本结构1.1 文档类型声明1.2 HTML标签结构 二、头部元数据配置2.1 字符集声明2.2 视口设置2.3 标题定义 三、网页结构布局3.1 基本元素段落标题列表 3.2 链接与图像链接图像 3.3 分区与布局使用Div…

简单快捷的图片格式转换工具:认识webp2jpg-online

经常写博客或记笔记的朋友们可能会碰到图床不支持的图片格式或图片太大需要压缩的情况。通常,我们会在浏览器中搜索在线图片格式转换器,但这些转换器往往伴有烦人的广告或要求登录,并且支持的转换格式有限。最近,我在浏览 GitHub …