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

- 在过去,我习惯用这种方式来阅读书籍或文章:先快速浏览一遍,然后再进行复读,并最终总结所学的知识点。然而,长期以来,我发现这种方式并不能满足我最初阅读的目的。我相信许多人也有相似的经历,我们阅读某些文章或书籍,要么是为了扩展知识面,要么是为了解决某个问题,或者是对某个话题产生兴趣。然而,事实上,我发现自己在读完某些文章或书籍后,并没有完全理解和真正能够实践的关键要点,只是匆匆地过了一遍。
- 因此,我开始尝试寻找一种新的阅读模式(
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. 重构的注意点?
- 不要着急
- 先理解代码逻辑
- 逐步拆分步骤,一步一步来
- 遵循重构规则:编译 -> 测试 -> 提交
- 不要嫌拆分的步骤过小而跳过重构规则
- 一定不要心急
- 不要只记得重构代码,要重构成好的代码时关键的一步
- 好的代码更加利于扩展
第2章 重构的原则
1. 何谓重构?
- 重构的关键在于运用大 量微小且保持软件行为的步骤,一步步达成大规模的修改。每个单独的重构要么 很小,要么由若干小步骤组合而成。
2. 重构过程中,代码可不可以正常工作?
- 如果在代码重构中,代码有一两天是不可用的状态时,可确保在做的并不是重构,而是 结构调整(restructuring),而结构调整则是进行各种形式的重新组织和清理。
3. 重构与性能优化的相似之处?
- 重构是为了让代码“更容易理解, 更易于修改。这可能使程序运行得更快,也可能使程序运行得更慢。在性能优 化时,我只关心让程序运行得更快,最终得到的代码有可能更难理解和维护
4. 为何重构?
- 重构改进软件的设计
- 重构使软件更容易理解
- 重构帮助找到 bug
- 重构提高编程速度
5. 何时重构
- 三次法则:第一次做某件事时只管去做;第二次做类似的事时会产生反感,但无论如何还是可以去做;第三次再做类似的事,你就应该去重构。
6. 何时不应该重构?
- 如果看到一段凌乱的代码,你并不需要用到或不需要理解时,就不需要重构
- 如果重写比重构还容易,那就别重构了。
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文件 插件制作 首先第一步是做一个插件:…...

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(字符串拷贝࿰…...

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组件,它主要用…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...