当前位置: 首页 > news >正文

不愧是疑问解决神器!你强任你强

不愧是疑问解决神器!你强任你强👍👍👍

  • 在过去,我习惯用这种方式来阅读书籍或文章:先快速浏览一遍,然后再进行复读,并最终总结所学的知识点。然而,长期以来,我发现这种方式并不能满足我最初阅读的目的。我相信许多人也有相似的经历,我们阅读某些文章或书籍,要么是为了扩展知识面,要么是为了解决某个问题,或者是对某个话题产生兴趣。然而,事实上,我发现自己在读完某些文章或书籍后,并没有完全理解和真正能够实践的关键要点,只是匆匆地过了一遍。
  • 因此,我开始尝试寻找一种新的阅读模式(Q&A),即带着问题去阅读,带着思考去阅读。我尝试在文章或书籍中寻找我想要的答案,或者更深入地理解我关心的问题。最近,我开始阅读《重构:改善既有的代码的设计(第2版)》,并尝试使用问答模式进行阅读。通过这种方式,我发现我能够更好地理解书中的内容,并能更好的吸收和自我总结。
  • Q&A:
    • Q: Question
    • A: Answer

前言

1. 这本书讲了什么?

  • 解释了重构的原理和最佳实践,并指出何时何 地你应该开始挖掘你的代码以求改善。

2. 这本书的核心是什么?

  • 本书的核心是一系列完整的重构方法,其 中每一项都介绍一种经过实践检验的代码变换手法的动机和技术

3. 重构的关键是什么?

  • 理解,有条不絮的理解是进行重构的关键。
  • 运用本书的重构手法,保证每次只走一步。

4. 什么是重构?

  • 在不改变代码外在行为的前提下,对代码做出修改,以此来改进程序的内部结构。
  • 重构就是在代码写好之后改进它的设计。

5. 这本书的核心部分?

  • 从第5章往后的篇幅就是本书的核心部分——重构名录

6. 如何充分利用好这本书?

  • 如果你想知道重构是什么 ,请阅读第1章,其中的示例会让你弄清楚重构的过 程。
  • 如果你想知道为什么应该重构 ,请阅读前两章,它们会告诉你重构是什么以及 为什么应该重构。
  • 如果你想知道该在什么地方重构 ,请阅读第3章,它会告诉你一些代码特征, 这些特征指出“这里需要重构。
  • 如果你想着手进行重构 ,请完整阅读前四章,然后选择性地阅读重构名录。一 开始只需概略浏览列表,看看其中有些什么,不必理解所有细节。一旦真正需 要实施某个重构手法,再详细阅读它,从中获取帮助。列表部分是供查阅的参 考性内容,你不必一次就把它全部读完。

第1章 重构,第一个示例

1. 如何给别人讲东西?

  • 若按照传统的做法,一开始介绍某种东西时先讲讲它的历史,主要原理等等,那会导致台下的人称为瞌睡虫,思绪开始游荡,眼神开始迷离,直到主讲人拿出示例,台下人才能够提起精神。

2. 重构的第一步?

  • 得确保即将修改的代码 拥有一组可靠的测试

3. 重构过程的精髓?

  • 重构过程的精髓所在:小步修改,每次修改后就运行测试。如果我 改动了太多东西,犯错时就可能陷入麻烦的调试,并为此耗费大把时间。小步修 改,以及它带来的频繁反馈,正是防止混乱的关键
  • 重构技术就是以微小的步伐修改程序

4. 好的代码能够清晰地表明它在做什么?

  • 变量命名是代码清晰的关键
  • 在做任何提炼前,我一般都会先移除局部变量。
  • 把复杂的代码块分解为 更小的单元,与好的命名一样都很重要
  • 编程时,需要遵循营地法则:保证你离开时的代码库一定比来时更健 康。

5. 重构带来的性能问题如何解决?

  • 大多数情况下可以忽略 它。如果重构引入了性能损耗,先完成重构,再做性能优化

6. 如何完整重构过程中的每一步?

  • 编译、测试、提交

7. 第一章重构的重要节点?

  • 将原函数分解成一组嵌套的函 数、应用拆分阶段(154)分离计算逻辑与输出格式化逻辑,以及为计算器引入 多态性来处理计算逻辑。每一步都给代码添加了更多的结构,以便我能更好地表 达代码的意图。

8. 重构早起的动力来源?

  • 重构早期的主要动力是尝试理解代码如何工作。通常你需要先通 读代码,找到一些感觉,然后再通过重构将这些感觉从脑海里搬回到代码中。清 晰的代码更容易理解,使你能够发现更深层次的设计问题,从而形成积极正向的 反馈环。当然,这个示例仍有值得改进的地方,但现在测试仍能全部通过,代码 相比初见时已经有了巨大的改善,所以我已经可以满足了。

  • S:

    • 1.先尝试理解代码逻辑
    • 2.找到一些重构的感觉
    • 3.在重构的过程中发现深层次的设计问题
    • 4.形成积极正向的反馈环

9. 什么样的代码才算是好代码?

  • 没有好坏高低之分,除了个人品味,也是有客观标准的。
  • 我认为,好代码的检验标准就是人们是否能轻而易举地修改它。好代码应该 直截了当:有人需要修改代码时,他们应能轻易找到修改点,应该能快速做出更 改,而不易引入其他错误。
  • 好代码的检验标准就是人们是否能轻而易举地修改它。

10. 重构的注意点?

  1. 不要着急
  2. 先理解代码逻辑
  3. 逐步拆分步骤,一步一步来
  4. 遵循重构规则:编译 -> 测试 -> 提交
  5. 不要嫌拆分的步骤过小而跳过重构规则
  6. 一定不要心急
  7. 不要只记得重构代码,要重构成好的代码时关键的一步
  8. 好的代码更加利于扩展

第2章 重构的原则

1. 何谓重构?

  • 重构的关键在于运用大 量微小且保持软件行为的步骤,一步步达成大规模的修改。每个单独的重构要么 很小,要么由若干小步骤组合而成。

2. 重构过程中,代码可不可以正常工作?

  • 如果在代码重构中,代码有一两天是不可用的状态时,可确保在做的并不是重构,而是 结构调整(restructuring),而结构调整则是进行各种形式的重新组织和清理。

3. 重构与性能优化的相似之处?

  • 重构是为了让代码“更容易理解, 更易于修改。这可能使程序运行得更快,也可能使程序运行得更慢。在性能优 化时,我只关心让程序运行得更快,最终得到的代码有可能更难理解和维护

4. 为何重构?

  1. 重构改进软件的设计
  2. 重构使软件更容易理解
  3. 重构帮助找到 bug
  4. 重构提高编程速度

5. 何时重构

  • 三次法则:第一次做某件事时只管去做;第二次做类似的事时会产生反感,但无论如何还是可以去做;第三次再做类似的事,你就应该去重构。

6. 何时不应该重构?

  1. 如果看到一段凌乱的代码,你并不需要用到或不需要理解时,就不需要重构
  2. 如果重写比重构还容易,那就别重构了。

7. 重构给你带来的东西?

  • 重构的唯一目的就是让我们开发的更快,用更少的工作量创造更大的价值。
  • 重构的意义不是在于把代码库打磨的闪闪发光,而是从纯粹的经济角度出发的考量。

8. 我们为什么会进行重构?

  • 我们之所以重构:因为它能让我们更快添加功能,修复Bug更快。

Q:

  • 你的公司的技术领导会不会重视代码库健康的价值?

9. 遗留代码是好事还是坏事?

  • 大多数人可能会觉得有一大笔遗产是件好事,但从程序员的角度来看会不同。遗留代码往往很复杂,测试又不足,而且最关键的时,是别人写的(瑟瑟发抖)。
  • 若想重构之前的遗留代码,建议你不要一鼓作气的把复杂而混乱的遗留代码重构成漂亮的代码。建议从自己所接受的功能相关的代码重构起。

10. 重构与性能?

  • 在重构中性能也是其中的一个话题,重构代码如果把大半的时间都耗费在一小半的代码中,那其实这些优化工作是白费劲的,因为被你优化的代码很少被执行。
  • 记住,你花时间优化的代码时为了让程序运行的更快,而不是简单的优化一些代码。
  • 好的优化方式时,在性能优化阶段,我们应该用一个度量工具来监控程序的执行,让监控工具来告诉我们那些地方,消耗的时间和空间比较多。这样我们就能找出性能热点所在的一段代码,而我们应该集中关注在这些热点上。

11. 重构的 Web 版网站?

  • [重构](https://refactoring.com/)
系列首发于如上图平台,文章会持续更新,欢迎大家关注~

相关文章:

不愧是疑问解决神器!你强任你强

不愧是疑问解决神器!你强任你强👍👍👍 在过去,我习惯用这种方式来阅读书籍或文章:先快速浏览一遍,然后再进行复读,并最终总结所学的知识点。然而,长期以来,我…...

盛最多水的容器 接雨水【基础算法精讲 02】

盛雨水最多的容器 链接 : 11 盛最多水的容器 思路 : 双指针 : 1.对于两条确定的边界,l和r,取中间的线m与r组成容器,如果m的高度>l的高度,那么整个容器的长度会减小,如果低于l的高度,那么不仅高度可…...

WordPress主题开发( 十二)之—— 主题的functions.php

WordPress主题开发( 十)之—— 主题的functions.php 介绍使用functions.php vs. 插件创建和使用functions.php在functions.php中的常见用途1. 使用WordPress钩子2. 启用WordPress功能3. 定义可重用的函数4. 添加自动Feed链接5. 自定义导航菜单6. 文本域加…...

代码的工厂模式

概念: 代码的工厂模式是一种设计模式,用于创建对象实例而无需直接调用构造函数。它提供了一种更加灵活和可维护的方式来创建对象,尤其是在需要根据不同情况创建不同类型的对象时非常有用。工厂模式隐藏了对象的创建细节,使代码更…...

UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,高效复制多个同样的资产】

目录​​​​​​​ 插件制作 添加新的类:AssetActionUtility 添加新的模块:EditorScriptingUtilities 路径了解 添加debug的头文件 代码【debug.h】内涵注释: 写函数 .h文件 .cpp文件 插件制作 首先第一步是做一个插件&#xff1a…...

mac openssl 版本到底怎么回事 已解决

在mac 安装node多版本的时候,有可能把原有的 openssl1.1 版本 直接要再一次升级了,无奈的 php环境 编译器是 openssl 1.1 还是 3.0 ,今天来个底朝天的找问题。 brew search openssl 有安装 三个版本。 但是错误提示 是第二个版本。 brew …...

AWS】在EC2上创建root用户,并使用root用户登录

最近有项目需要使用AWS的EC2服务器; 在创建服务器实例之后发现,没有root用户,仔细阅读AWS EC2文档,发现默认是ec2-user用户; 那我们需要创建一个root用户 1.创建 root 用户 注意:必须要要在ec2-user用户下…...

9月24日回顾

1.微程序控制器的组成:指令译码器、微地址寄存器(输出和暂存控制信息),时序电路、最核心的部件是控制存储器(只读ROM组成)—用来存储微指令 2.突发读写:比如说突发地址为8,那么只需…...

Spring注册Bean系列--方法1:@Component

原文网址:Spring注册Bean系列--方法1:Component_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法:Component。 注册Bean的方法我写了一个系列,见:Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘…...

防火墙基础之H3C防火墙和三层交换机链路聚合的配置

H3C防火墙和三层交换机链路聚合的配置 原理概述: 防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理​与筛选的软件和硬件​设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保…...

管理类联考——数学——汇总篇——知识点突破——算数——记忆

文章目录 整体利用目录大纲/记忆宫殿目录大纲记忆宫殿 局部用各种方法数字编码法常见整除特点 歌决记忆法谐音记忆法理解记忆法比较记忆法转图像记忆法可视化法 整体利用目录大纲/记忆宫殿 目录大纲 记忆宫殿 局部用各种方法 学习记忆——数学篇——汇总——顺口溜记忆法谐…...

leetCode 455.分发饼干 贪心算法

455. 分发饼干 - 力扣(LeetCode) 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸&…...

vue3简易文字验证码

大神勿喷,简易版本,demo中可以用一下。 需要几个文字自己codelen 赋值 灵活点直接父组件传过去,可以自己改造 首先创建一个生成数字的js **mathcode.js**function MathCode(num){let str "寻寻觅觅冷冷清清凄凄惨惨戚戚乍暖还寒时候…...

Java 23种设计模式分类概括以及应用介绍

话不多说进入正题~ 创建型模式:5种 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供全局访问点,它的主要目的是限制类的实例化并确保所有代码都共享相同的实例。 – 应用:Runtime类、数据库连…...

运筹优化算法常用求解器汇总

运筹学从形成到发展,在此过程中积累的大量理论和方法在国防、能源、制造、交通、金融、通信等各个领域发挥着越来越重要的作用。我们在生产生活中遇到的很多实际问题,都可以通过运筹学所涉及的优化方法对其进行数学建模,表示为数学问题&#…...

字符串函数(一)

✨博客主页:小钱编程成长记 🎈博客专栏:进阶C语言 字符串函数(一) 0.前言1.求字符串长度的函数1.1 strlen(字符串长度) 2.长度不受限制的字符串函数2.1 strcpy(字符串拷贝&#xff0…...

Ubuntu 安装 Docker 的详细步骤

文章目录 简介1.更新2.安装必要的软件包2.1 基于阿里源 3.验证 Docker 安装是否成功4.安装后的一些常规设置及常用的命令4.1 启动 Docker4.2 Docker 在系统启动时自动运行4.3 运行一个 Hello World 镜像4.4 查看docker运行状态 欢迎来到这篇关于在 Ubuntu 上安装 Docker 的教程…...

使用Python进行App用户细分

App用户细分是根据用户与App的互动方式对用户进行分组的任务。它有助于找到保留用户,找到营销活动的用户群,并解决许多其他需要基于相似特征搜索用户的业务问题。这篇文章中,将带你完成使用Python进行机器学习的App用户细分任务。 App用户细…...

博弈论——伯特兰德寡头模型(Bertrand Model)

伯特兰德寡头模型(Bertrand Model) 0 引言 在前面几篇文章中,我们介绍了古诺模型(Cournot duopoly model)和斯塔克尔伯格模型(Stackelberg model) 博弈论——连续产量古诺模型(Cournot duopoly model) 博弈论——斯塔克尔伯格模型(Stackelberg model) 这两个模型…...

第一百六十回 SliverPadding组件

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverAppBar组件相关的内容,本章回中将介绍 SliverPadding组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的SliverPadding组件类似Pading组件,它主要用…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...