22、编程知识与规范综合解析

编程知识与规范综合解析

1. 编程基础操作回顾与展望

在编程的学习与实践中,我们从简单的列出目录内容开始,逐步掌握了更多复杂的操作。例如将文件保存到版本控制系统,确保代码符合风格规则,调试代码以及打包代码等,这些都是程序员日常工作的重要部分。理解这些操作的原理和机制,将有助于我们更高效地完成编程任务。

我们鼓励大家积极参与到相关项目中,如果你有意愿添加新内容或者将其翻译成其他编程语言或自然语言,我们非常欢迎你的加入。

2. 许可协议说明

2.1 书面材料许可

书面材料遵循知识共享 - 署名 - 非商业性使用 4.0 国际许可协议(CC - BY - NC - 4.0)。在该许可协议下,你可以:
- 共享:以任何媒介或格式复制和重新分发材料。
- 改编:重新混合、转换和构建材料。

但需遵循以下条件:
- 署名:必须给予适当的署名,提供许可协议的链接,并表明是否进行了修改。但不能以暗示许可方认可你或你的使用方式的方式进行署名。
- 非商业性使用:不得将材料用于商业目的。
- 无额外限制:不得应用法律条款或技术措施,对他人按照许可协议允许的行为进行法律限制。

2.2 软件许可

软件遵循希波克拉底许可协议。许可方授予任何获得软件副本及相关文档文件的个人或实体(“被许可方”)免费使用该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许将软件提供给他人使用,但需满足以下条件:
- 版权声明:在软件的所有副本或实质部分中包含上述版权声明和本许可协议,或希波克拉底许可协议网站上发布的后续版本。被许可方可以选择遵循上述编号版本的许可协议,或希波克拉底许可协议网站上发布的任何后续版本的条款和条件。
- 遵守人权法律和人权原则:
- 人权法律:软件不得被任何人或实体用于违反任何适用的保护人类、公民、劳动、隐私、政治、环境、安全、经济、正当程序或类似权利的法律、法规或规则(“人权法律”)。当多个司法管辖区的人权法律适用于软件的使用时,应适用对受损害的个人或群体最具保护力的人权法律。
- 人权原则:建议被许可方参考《联合国世界人权宣言》和《联合国全球契约》中定义的公认国际人权原则(“人权原则”)。许可方明确意图是,软件的所有使用都应符合人权原则。如果许可方收到关于被许可方使用软件涉嫌违反任何人权原则的通知或得知此类情况,许可方可以自行决定(无义务):
- (i)(a)将此类指控通知被许可方;(b)允许被许可方在(i)(a)项通知后的 90 天内进行调查并向许可方回应指控。
- (ii)(a)在(i)(a)项通知后的 90 天或被许可方在(i)(b)项的回应之后(以较早者为准),通知被许可方终止许可协议;(b)允许被许可方在(ii)(a)项通知后的额外 90 天内停止使用软件。
- 赔偿:被许可方应使许可方免受因被许可方不遵守本许可协议或使用软件违反人权法律或人权原则而产生的所有损失、损害、责任、不足之处、索赔、诉讼、判决、和解、利息、裁决、罚款、费用或开支,包括许可方的合理律师费。
- 可执行性:如果本许可协议的任何部分或条款被有管辖权的法院认定为无效、非法或不可执行,则该无效性、非法性或不可执行性不应影响本许可协议的任何其他条款或规定,也不应使该条款或规定在任何其他司法管辖区无效或不可执行。在确定任何条款或规定无效、非法或不可执行时,在适用法律允许的范围内,法院可以修改本许可协议,以尽可能接近双方的原始意图。

3. 行为准则

3.1 目标与承诺

为了营造一个开放和包容的环境,我们作为贡献者和维护者承诺,让每个人无论年龄、体型、残疾、种族、性别认同和表达、经验水平、教育程度、社会经济地位、国籍、个人外貌、种族、宗教或性取向如何,都能在我们的项目和社区中获得无骚扰的参与体验。

3.2 正面行为示例

有助于营造积极环境的行为示例包括:
- 使用欢迎和包容的语言。
- 尊重不同的观点和经验。
- 优雅地接受建设性批评。
- 关注社区的最佳利益。
- 对其他社区成员表示同情。

3.3 不可接受的行为示例

参与者不可接受的行为包括:
- 使用性暗示语言或图像,以及不受欢迎的性关注或追求。
- 挑衅、侮辱/贬损性评论以及个人或政治攻击。
- 公开或私下骚扰。
- 在未经明确许可的情况下发布他人的私人信息,如物理或电子地址。
- 其他在专业环境中被合理认为不适当的行为。

3.4 项目维护者的责任

项目维护者有责任明确可接受行为的标准,并在出现不可接受行为时采取适当和公平的纠正措施。维护者有权删除、编辑或拒绝不符合本行为准则的评论、提交、代码、维基编辑、问题和其他贡献,或暂时或永久禁止任何他们认为不适当、威胁性、冒犯性或有害的贡献者。

3.5 适用范围与执行

本行为准则适用于项目空间内以及个人代表项目或其社区的公共空间。代表项目或社区的示例包括使用官方项目电子邮件地址、通过官方社交媒体账户发布内容,或在在线或离线活动中担任指定代表。

如果出现滥用、骚扰或其他不可接受的行为,可以通过电子邮件向项目团队报告。所有投诉都将进行审查和调查,并根据情况做出必要和适当的回应。项目团队有义务对事件报告者保密。

项目维护者若不真诚遵守或执行本行为准则,可能会面临由项目领导层其他成员决定的临时或永久后果。

4. 贡献指南

4.1 贡献方式

我们非常欢迎大家的贡献,你可以通过电子邮件或在相关网站上提交问题的方式与我们联系。所有贡献者都必须遵守我们的行为准则。

4.2 决策制定

本项目使用玛莎规则进行共识决策,具体步骤如下:
1. 提案提交 :在每次会议前,任何希望发起提案的人可以在 GitHub 仓库中提交一个标记为“提案”的问题。提案必须在会议前至少 24 小时提交,并且应包括:
- 一句话摘要(问题的主题行)。
- 提案的全文。
- 任何必要的背景信息。
- 利弊分析。
- 可能的替代方案。
2. 法定人数 :会议中若有一半或以上的投票成员出席,则确立法定人数。
3. 提案责任 :一旦有人发起提案,他们就对该提案负责。除非提案发起者或其代表出席,否则小组不得讨论或对该问题进行投票。提案发起者还负责向小组介绍提案内容。
4. 意向投票 :提案发起者介绍提案后,在进行任何讨论之前,对提案进行“意向”投票:
- 谁喜欢该提案?
- 谁可以接受该提案?
- 谁对该提案感到不舒服?
5. 提案通过 :如果每个人都喜欢或可以接受该提案,则提案立即通过。
6. 提案推迟 :如果小组中大多数人对该提案感到不舒服,则提案将被推迟,由提案发起者进行进一步修改。
7. 异议讨论与最终投票 :否则,对提案感到不舒服的成员可以简要陈述他们的异议。然后设置一个计时器,由主持人主持进行简短讨论。10 分钟后或无人再有补充意见时(以先到者为准),主持人将对“我们是否应该不顾所述异议实施该决策?”这一问题进行是或否的投票。如果多数人投票“是”,则提案将被实施;否则,提案将返回给提案发起者进行进一步修改。

4.3 格式说明

相关材料使用 Ivy 并带有一些自定义扩展。在根目录下运行 make 命令可以获取可用命令的列表。部分命令依赖于 ./bin/ 目录中的脚本。具体最新说明请参考我们的 Git 仓库。

下面是决策流程的 mermaid 流程图:

graph LR
    A[提交提案] --> B{是否达到法定人数}
    B -- 是 --> C[提案发起者介绍提案]
    B -- 否 --> A
    C --> D[意向投票]
    D --> E{是否所有人喜欢或接受}
    E -- 是 --> F[提案通过]
    E -- 否 --> G{是否多数人不舒服}
    G -- 是 --> H[提案推迟修改]
    G -- 否 --> I[异议成员陈述异议]
    I --> J[主持人主持讨论]
    J --> K[最终投票]
    K --> L{多数人投票是}
    L -- 是 --> F
    L -- 否 --> H

5. 部分重要术语解释

术语 解释
绝对误差 观测值与正确值之间差值的绝对值。通常相对误差比绝对误差更有用。
绝对路径 无论在何处进行评估,都指向文件系统中相同位置的路径,类似于地理中的经纬度。
抽象方法 在面向对象编程中,定义但未实现的方法。通常在父类中定义,用于指定子类必须提供的操作。
抽象语法树(AST) 一种深度嵌套的数据结构或树,用于表示程序的结构。例如,AST 可能有一个节点表示 while 循环,其中一个子节点表示循环条件,另一个子节点表示循环体。
意外复杂度 由于糟糕的设计选择引入的额外(可避免)复杂度,与固有复杂度相对。
累加器 用于收集和/或组合多个值的变量。例如,在程序中对数组中的值求和时,将所有值累加到一个名为 result 的变量中,result 就是累加器。
测试实际结果 在测试中运行代码所生成的值。如果该值与预期结果匹配,则测试通过;否则,测试失败。
适配器模式 一种设计模式,用于重新排列参数、提供额外值或进行其他操作,以使一个函数能够被另一个函数调用。
别名 对同一对象的第二个或后续引用。别名虽然有用,但会增加读者的认知负担,因为他们需要记住这些名称都指向同一个对象。
匿名函数 未被分配名称的函数。匿名函数通常很短,并且通常在使用的地方定义,例如作为回调函数。在 Python 中,这些被称为 lambda 函数,通过使用 lambda 保留字创建。
应用二进制接口(ABI) 软件在特定类型的机器上运行所需的底层布局。
应用程序编程接口(API) 软件库或 Web 服务提供的一组函数,其他软件可以调用这些函数。

6. 更多术语解释

术语 解释
参数 函数调用时传递给函数的值。
ASCII 一种将西欧语言中常用字符表示为 7 位或 8 位整数的标准,现在大多已被 Unicode 取代。
汇编器 将汇编代码编写的软件翻译成机器指令的编译器。
汇编代码 一种低级编程语言,其语句与特定类型处理器的实际指令集密切对应。
断言 在程序的某个特定点必须为真的布尔表达式。断言可以是语言内置的(如 Python 的 assert 语句),也可以作为函数提供(如 Node 的 assert 库)。
关联数组 参见字典。
异步 不同时发生。在编程中,异步操作是指独立于另一个操作运行的操作,或者在一个时间开始并在另一个时间结束的操作。
属性 与对象关联的名值对,用于存储对象的元数据,如数组的维度。
自动变量 在构建规则中自动赋予值的变量。例如,Make 会自动将规则的目标名称分配给自动变量 $@。自动变量在编写模式规则时经常使用。
向后兼容 系统的一种属性,使其能够与旧的遗留系统或为该系统设计的输入进行互操作。
裸对象 不是任何特定类的实例的对象。
基类 在面向对象编程中,其他类从中派生的类。
二进制 一种可以有两种可能状态的系统,通常表示为 0 和 1 或 true 和 false。
单个二进制数字(0 或 1)。
按位操作 对内存中的单个位进行操作的操作。常见的按位操作包括与、或、非和异或。
块注释 跨越多行的注释。块注释可以用特殊的开始和结束符号标记,如 C 及其派生语言中的 / /,或者每行可以用标记(如 #)作为前缀。
布尔 与可以具有逻辑值 true 或 false 的变量或数据类型相关。以 19 世纪数学家乔治·布尔的名字命名。
广度优先 通过探索嵌套数据结构(如树)的一层,然后继续下一层,以此类推,或者通过检查每个可能解决方案的第一步,然后尝试每个解决方案的下一步来探索问题。
断点 调试器的一条指令,告诉它在程序到达特定点(如特定行)时暂停执行。
错误 软件中缺失或不期望的功能。
构建管理器 一种程序,用于跟踪文件之间的依赖关系,并运行命令来更新任何过时的文件。构建管理器最初是为了仅编译程序中已更改的部分而发明的,但现在通常用于实现工作流,其中绘图依赖于结果文件,而结果文件又依赖于原始数据文件或配置文件。
构建配方 构建规则中描述如何更新过时内容的部分。
构建规则 构建管理器的规范,描述某些文件如何依赖于其他文件,以及如果这些文件过时应该怎么做。
构建目标 如果与依赖项相比过时,构建规则将更新的文件。
字节码 一种设计用于由解释器高效执行的指令集。
缓存 存储数据副本的东西,以便将来对其的请求可以更快地得到满足。计算机中的 CPU 使用硬件缓存来保存最近访问的值;许多程序依赖于软件缓存来减少网络流量和延迟。确定缓存中的某些内容何时过时并应替换是计算机科学中的两个难题之一。
缓存 将某些数据的副本保存在本地缓存中,以便将来访问更快。
调用栈 一种数据结构,用于存储有关已执行的活动子例程的信息。
回调函数 传递给另一个函数 B 的函数 A,以便 B 可以在稍后的某个时间调用它。回调函数可以同步使用,如在通用函数(如 map)中,对集合中的每个元素调用一次回调函数;也可以异步使用,如在客户端接收到请求的响应时运行回调函数。
级联样式表(CSS) 一种控制 HTML 外观的方法。CSS 通常用于指定字体、颜色和布局。
捕获(异常) 处理由异常表示的错误或其他意外事件。
责任链模式 一种设计模式,其中每个对象要么处理请求,要么将其传递给另一个对象。
字符编码 指定字符如何存储为字节的规范。当今最常用的编码是 UTF - 8。
子节点(树中) 树中位于另一个节点(称为父节点)下方的节点。
子类 在面向对象编程中,从另一个类(称为父类)派生的类。
循环依赖 X 依赖于 Y 且 Y 依赖于 X 的情况,无论是直接还是间接。如果存在循环依赖,则依赖图不是无环的。
在面向对象编程中,将数据和操作(称为方法)组合在一起的结构。然后,程序使用构造函数创建具有这些属性和方法的对象。程序员通常将通用或可重用的行为放在父类中,将更详细或特定的行为放在子类中。
客户端 从服务器获取数据并将其显示给用户或与用户交互的程序,如 Web 浏览器。该术语更广泛地用于指任何向另一个程序 B 发出请求的程序 A。单个程序可以既是客户端又是服务器。
闭包 在同一作用域中定义的一组变量,其存在在该作用域结束后仍然保留。
代码覆盖率(测试中) 测试运行时执行的库或程序的比例。通常以代码行数的百分比报告。
认知负荷 完成一组同时进行的任务所需的工作记忆量。
冲突 程序试图将两个项目存储在内存中的同一位置的情况。例如,当哈希函数为两个不同的项目生成相同的哈希码时,就会发生冲突。
列主序存储 将二维数组的每一列作为一个内存块存储,使得同一行中的元素相距较远。
组合爆炸 当必须搜索一组项目的所有可能组合时,问题的规模或解决问题所需的时间呈指数增长。
逗号分隔值(CSV) 一种用于表格数据的文本格式,其中每个记录是一行,字段由逗号分隔。有许多细微的变化,特别是在字符串的引用方面。
命令行参数 命令行程序运行时提供的文件名或控制标志。
命令行界面(CLI) 仅依赖文本进行命令和输出的用户界面,通常在 shell 中运行。
注释 脚本中不被视为要运行的代码,而是用于描述代码功能的文本。通常是简短的注释,在许多编程语言中通常以 # 开头。
编译 将文本源代码转换为另一种形式。编译型语言的程序被转换为计算机可以运行的机器指令,而 Markdown 通常被转换为 HTML 进行显示。
编译型语言 最初是指像 C 或 Fortran 这样的语言,它们被转换为机器指令以执行。像 Java 这样的语言在执行之前也会被编译,但转换为字节码而不是机器指令,而像 JavaScript 这样的解释型语言则会在运行时编译为字节码。
编译器 将某些语言编写的程序转换为机器指令或字节码的应用程序。
确认偏差 某人倾向于寻找证明自己正确的证据,而不是寻找自己可能错误的原因。
控制台 用户可以输入命令的计算机终端,或模拟此类设备的程序,如 shell。
构造函数 创建特定类的对象的函数。
协调世界时(UTC) 所有其他时间都以此为标准定义的时间。UTC 是经度为 0° 的时间,不进行夏令时调整。时间戳通常以 UTC 报告,以便无论计算机所在的时区如何,时间戳都是相同的。
边界情况 另一个表示边缘情况的名称。
耦合 两个类、模块或其他软件组件之间的交互程度。如果系统的组件是松散耦合的,对一个组件的更改不太可能影响其他组件。如果它们是紧密耦合的,则任何更改都需要在其他地方进行更改,这会使维护和演进变得复杂。
加密哈希函数 为任何输入生成看似随机的值的哈希函数。
当前工作目录 程序运行所在的文件夹或目录位置。程序执行的任何操作都相对于此目录进行。
循环(图中) 图中一组链接,从一个节点回到该节点本身。
数据框 一种二维数据结构,用于在内存中存储表格数据。行表示记录,列表示字段。
数据迁移 将数据从一个位置或格式移动到另一个位置或格式。该术语指的是将数据从旧格式转换为新格式。
装饰器模式 一种设计模式,其中一个函数在另一个函数或类的初始定义之后为其添加额外的功能。装饰器是 Python 的一个特性,也可以在大多数其他语言中实现。
防御性编程 一组编程实践,假设会发生错误,并报告或纠正这些错误,例如插入断言以报告不应该发生的情况。
依赖项 参见先决条件。
依赖图 一种有向图,显示事物之间的依赖关系,如构建管理器要更新的文件。如果依赖图不是无环的,则无法解决依赖关系。
弃用 表示虽然某个函数、方法或类存在,但不再建议使用(例如,因为它将在未来版本中逐步淘汰)。
深度优先 一种搜索算法,在继续下一个可能性之前,一直探索一个可能性直到其结论。
派生类 在面向对象编程中,直接或间接扩展基类的类。
契约式设计 一种软件设计风格,其中函数指定运行所需的前置条件以及返回时保证为真的后置条件。然后,可以用具有较弱前置条件(即接受更广泛的输入)和/或较强后置条件(即产生更小范围的输出)的函数替换一个函数,而不会破坏其他任何东西。
设计模式 软件设计中反复出现的模式,具体到值得命名,但又不至于具体到可以由库提供单一最佳实现。
解构赋值 从数据结构中解包值并将其分配给多个变量的单个语句。
字典 一种数据结构,允许通过值查找项,有时也称为关联数组。字典通常使用哈希表实现。
有向无环图(DAG) 不包含任何循环的有向图(即,不可能通过跟随边从一个节点回到该节点本身)。
有向图 边有方向的图。
目录 文件系统中的一种结构,包含对其他结构(如文件和其他目录)的引用。
反汇编器 将机器指令转换为汇编代码或其他更高级语言的程序。
文档注释 一种特殊格式的注释,包含嵌入在代码本身中的关于一段代码的文档。
文档对象模型(DOM) HTML 和 XML 的标准内存表示。每个元素作为树中的一个节点存储,具有一组命名属性;包含的元素是子节点。
驱动程序 运行其他程序的程序,或驱动程序中所有其他函数的函数。
动态加载 在程序已经运行时将模块导入到程序的内存中。大多数解释型语言使用动态加载,并提供工具,以便程序可以动态查找和加载模块以进行自我配置。
动态查找 在程序运行时通过名称查找函数或对象的属性。例如,程序可以使用 obj[someVariable] 而不是使用 obj.name 获取对象的特定属性,其中 someVariable 可以保存 “name” 或其他属性名称。
动态作用域 通过查看查找时调用栈上的内容来查找变量的值。几乎所有编程语言都使用词法作用域,因为它更可预测。
贪婪匹配 尽可能早地匹配尽可能多的内容。
简单模式 从游戏中借用的术语,意味着以简化或消除障碍或困难的方式做某事,通常用于练习目的。
图中两个节点之间的连接。边可能与数据相关联,如名称或距离。
边缘情况 仅在不寻常的情况下或系统达到其极限时才出现的问题;有时也称为边界情况。旨在广泛使用的程序必须处理边缘情况,但这样做会使它们变得更加复杂。
元素 HTML 或 XML 文档中的命名组件。元素通常写成 … ,其中 “…” 表示元素的内容。元素通常具有属性。
封装 将数据存储在某种结构中,以便只能通过该结构访问它。
入口点 程序开始执行的地方。
环境 存储一组变量名称及其引用的值的结构。
错误(测试中) 当单元测试本身出现问题而不是被测试的系统出现问题时发出信号。在这种情况下,我们对系统的正确性一无所知。
错误处理 程序检测和纠正错误的操作。示例包括打印消息和在找不到用户指定的配置时使用默认配置。
事件循环 一种管理程序中并发活动的机制。任务表示为队列中的项;事件循环反复从队列的前端取出一个项并运行它,将它生成的任何其他任务添加到队列的后端以便稍后运行。
异常 表示程序中的错误或其他不寻常事件的对象。程序的一部分将创建并抛出异常以表示发生了意外情况;另一部分将捕获它。
异常处理程序 在捕获异常后处理异常的一段代码,例如记录消息、重试失败的操作或执行替代操作。
预期结果(测试) 软件在以某种方式测试时应该产生的值,或它应该使系统处于的状态。
探索性编程 一种软件开发方法,其中需求在软件编写过程中出现或改变,通常是对早期运行结果的响应。
导出 使模块外部可见的东西,以便程序的其他部分可以导入它。在大多数语言中,模块必须显式导出东西,以避免名称冲突。
失败(测试) 如果实际结果与预期结果不匹配,则测试失败。
特性(软件中) 软件中有意设计或构建的某些方面。错误是不期望的特性。
字段 记录中包含单个值的组件。数据库表中的每个记录都有相同的字段。
文件名扩展名 文件名的最后一部分,通常跟随在 ‘.’ 符号之后。文件名扩展名通常用于指示文件中的内容类型,但不能保证这是正确的。
文件系统 操作系统中管理文件存储和检索的部分。也用于指所有这些文件和目录或它们的特定存储方式(如 “Unix 文件系统”)。
过滤器 作为动词,根据记录(即表的行)包含的值选择一组记录。作为名词,是一种命令行程序,从文件或标准输入读取文本行,对它们执行某些操作(如过滤),并写入文件或标准输出。
有限状态机(FSM) 一种计算的理论模型,由有向图组成,其节点表示计算的状态,其弧表示如何从一个状态转移到另一个状态。每个正则表达式都对应一个有限状态机。
固定宽度(字符串) 一组具有相同长度的字符串。数据库通常使用固定宽度的字符串来提高存储和访问效率;短字符串会填充到所需长度,长字符串会截断。
测试夹具 进行测试的对象,如被测试函数的参数或正在处理的文件。
流畅接口 一种面向对象编程风格,其中方法返回对象,以便可以立即调用其他方法。
文件夹 目录的另一个术语。
垃圾回收 识别已分配但不再使用的内存并回收以重新使用的过程。
生成器函数 一种函数,其状态在返回值时会自动保存,以便下次调用时可以从该点继续执行。生成器函数的一个示例用途是生成可以由 for 循环处理的值流。
通用函数 一组具有相似目的的函数,每个函数处理不同类别的数据。
全局变量 在任何特定函数或包命名空间之外定义的变量,因此对所有函数可见。
通配符匹配 使用简化形式的正则表达式指定一组文件名,如 *.dat 表示 “所有文件名以.dat 结尾的文件”。该名称源自 “全局”。
显示数据的绘图或图表,或节点通过边相互连接的数据结构。
贪心算法 一种尽可能早地消耗尽可能多输入的算法。
处理程序 负责处理特定事件(如用户点击按钮或从文件接收新数据)的回调函数。
哈希码 由哈希函数生成的值。好的哈希码具有与随机数相同的属性,以减少冲突的频率。
哈希函数 将任意数据转换为固定大小的位数组或键的函数。哈希函数用于确定数据应存储在哈希表中的位置。
哈希表 一种数据结构,为传递给它的每个值计算一个伪随机键(位置),并将值存储在该位置。哈希表可以快速查找任意数据。这是以额外的内存为代价的,因为哈希表必须始终大于它们需要存储的信息量,以避免数据冲突的可能性,即哈希函数为两个不同的值返回相同的键。
头文件 在 C 和 C++ 中,定义常量和函数签名但不包含可运行代码的文件。头文件告诉包含文件其他文件中定义了什么,以便编译器可以生成正确的代码。
异构 包含混合数据类型。例如,Javascript 中的数组可以包含数字、字符串和其他类型的值的混合。
启发式 不一定能产生预期结果,但通常能产生预期结果的规则或指南。
同构 包含单一数据类型。例如,向量必须是同构的:其值必须都是数字、逻辑值等。
HTTP 请求 客户端使用 HTTP 协议向服务器发送的请求数据的消息。请求通常请求网页、图像或其他数据。
HTTP 响应 服务器使用 HTTP 协议响应客户端请求而发送的回复。响应通常包含网页、图像或数据。
超文本标记语言(HTML) 用于网页的标准标记语言。HTML 在内存中使用 DOM(数字对象模型)表示。
超文本传输协议(HTTP) 万维网上数据传输的标准协议。HTTP 定义了请求和响应的格式、标准错误代码的含义以及其他功能。
惯用的 以与流利或母语使用者相同的方式使用语言。如果程序以熟练程序员使用语言的方式使用语言,则称为惯用的。
立即调用的函数表达式(IIFE) 在定义点立即调用一次的函数。IIFE 通常用于创建一个作用域来隐藏某些函数或变量定义。
不可变 创建后不能更改的数据。不可变数据更容易思考,特别是如果数据结构在多个任务之间共享,但可能导致更高的内存需求。
导入 将模块中的东西引入程序中使用。在大多数语言中,程序只能导入模块显式导出的东西。
索引(数据库中) 数据库中用于加速查找某些条目的辅助数据结构。索引会增加内存和磁盘需求,但会减少搜索时间。
内部函数 在另一个(外部)函数内部定义的函数。创建和返回内部函数是创建闭包的一种方式。
实例 特定类的对象。
指令指针 处理器中的特殊寄存器,存储要执行的下一条指令的地址。
指令集 特定处理器可以直接执行的基本操作。
解释型语言 一种高级语言,不是由计算机直接执行,而是由解释器在运行时将程序指令转换为机器命令。
解释器 运行用高级解释型语言编写的程序的程序。解释器可以交互式运行,也可以执行保存在文件中的命令。
固有复杂度 问题中固有的不可避免的复杂度,任何解决方案都必须处理。该术语与意外复杂度相对。
内省 程序在运行时检查自己;常见的例子是确定通用对象的特定类或在事先不知道对象的字段时获取对象的字段。
ISO 日期格式 一种国际标准的日期格式。虽然完整的标准很复杂,但最常见的形式是 YYYY - MM - DD,即四位年份、两位月份和两位日期,用连字符分隔。
迭代器模式 一种设计模式,其中临时对象或生成器函数依次从集合中生成每个值进行处理。这种模式隐藏了不同类型数据结构之间的差异,以便可以使用循环处理所有内容。
JavaScript 对象表示法(JSON) 一种通过在列表和键/值结构中组合基本值(如数字和字符串)来表示数据的方式。该首字母缩写词代表 “JavaScript 对象表示法”;与 XML 等定义更明确的标准不同,它没有用于注释的语法或定义模式的方法。
连接 一种操作,通常通过将一个表的键与另一个表的键匹配来组合两个表。
一个字段或字段组合,其值唯一标识表或数据集中的一条记录。键通常用于选择特定记录和进行连接操作。
标签(内存地址) 在编写汇编代码时给内存中特定位置的人类可读名称。
布局引擎 决定文本、图像和其他元素在页面上放置位置的软件。
惰性匹配 在仍然找到有效匹配的情况下尽可能少地匹配。
最近最少使用缓存(LRU 缓存) 一种缓存,为了限制内存需求而丢弃最近未使用的项目。
词法作用域 根据程序的文本结构查找与名称关联的值。大多数编程语言使用词法作用域而不是动态作用域,因为后者不太可预测。
可安装的软件集合,通常也称为模块或包。
生命周期 某物允许或必须经历的步骤。对象的生命周期从其构造开始,经过它可以或必须执行的操作,直到它被销毁。
行注释 程序中跨越一行一部分的注释,与可能跨越多行的块注释相对。
链接(程序) 将单独编译的模块组合成一个可运行的程序。
代码检查器 检查软件中常见问题的程序,如违反缩进规则或变量命名约定。该名称来自同类的第一个工具,称为 lint。
里氏替换原则 一种设计规则,指出在程序中应该可以用派生类的对象替换对象而不破坏程序。契约式设计旨在强制执行此规则。
列表 可以包含许多不同(异构)类型值的向量。
字面量 程序中固定值的表示,如数字 123 的数字 123 或包含三个字母的字符串的字符 “abc”。
文学编程 一种编程范式,将散文和代码混合在一起,以便解释和指令并排显示。
加载器 负责将包含可运行代码的文件读入内存并使该代码可供调用程序使用的函数。
局部变量 在函数内部定义的变量,仅在该函数内部可见。
日志消息 程序运行时写入文件的状态报告或错误消息。
循环体 循环执行的语句或语句组。
松散耦合 软件系统中的组件被认为是松散耦合的,如果它们彼此相对独立,即其中任何一个可以更改或替换而无需更改其他组件。
最初是 “宏指令” 的缩写,是一种在使用程序中的某些文本之前将其转换为其他文本的指令。
Makefile 原始构建管理器的配置文件。
清单 指定完整的库或其他软件组件集的确切版本的列表。
Markdown 一种具有简单语法的标记语言,旨在替代 HTML。
标记语言 一组用于注释文本以定义其含义或如何显示的规则。标记通常不显示,而是控制如何解释或显示底层文本。Markdown 和 HTML 是网页广泛使用的标记语言。
方法 处理特定类对象的通用函数的实现。
方法链 一种面向对象编程风格,其中对象的方法返回该对象作为结果,以便可以立即调用另一个方法,如 obj.a().b().c()。
模拟对象 程序中一部分的简化替代品,其行为易于控制和预测。模拟对象用于单元测试中模拟数据库、Web 服务和其他复杂系统。
模块 可重用的软件包,通常也称为库。
模块打包器 查找一组源文件的所有依赖项并将它们组合成一个可加载文件的程序。
多线程 能够同时执行多个操作。多线程程序通常比单线程程序更高效,但也更难理解和调试。
名称冲突 当程序中两个或多个具有相同名称的东西同时活动时产生的歧义。大多数语言使用命名空间来防止此类冲突。
命名空间 程序中与其他命名空间隔离存在的一组名称。程序中的每个函数、对象、类或模块通常都有自己的命名空间,以便程序的一部分中对 “X” 的引用不会意外地引用另一部分中称为 “X” 的东西。作用域是一个不同但相关的概念。
嵌套函数 在另一个函数内部定义的函数。
节点 图中通过边与其他节点连接的元素。节点通常与数据相关联,如名称或权重。
非阻塞执行 允许程序在操作进行时继续运行。例如,许多系统支持文件 I/O 的非阻塞执行,以便程序可以在等待数据从文件系统读取或写入文件系统(通常比 CPU 慢得多)时继续工作。
对象 在面向对象编程中,包含特定类实例数据的结构。对象能够执行的操作由类的方法定义。
面向对象编程(OOP) 一种编程风格,其中函数和数据绑定在对象中,这些对象仅通过定义良好的接口相互交互。
差一错误 编程中常见的错误,程序引用结构的第 i 个元素时应该引用第 i - 1 或 i + 1 个元素,或者处理 N 个元素时应该处理 N - 1 或 N + 1 个元素。
操作码 处理器可以执行的特定指令的数字代码。
开闭原则 一种设计规则,指出软件应该对扩展开放但对修改关闭,即应该可以在不重写现有代码的情况下扩展功能。
操作系统 为其运行的任何硬件提供标准接口的程序。理论上,任何仅与操作系统交互的程序都应该可以在该操作系统运行的任何计算机上运行。
可以分发和重用的代码、数据和文档的集合。在某些语言中也称为库或模块。
填充(字符串) 向字符串添加额外字符以使其达到所需长度。
参数 函数定义中指定的变量,在函数调用时被赋值。
父节点(树中) 树中位于另一个节点(称为子节点)上方的节点。树中除根节点外的每个节点都有一个父节点。
父类 在面向对象编程中,子类(称为子类)从中派生的类。
解析器 将某物的文本表示转换为数据结构的软件。例如,YAML 解析器读取缩进文本并生成嵌套列表和对象。
通过(测试) 如果实际结果与预期结果匹配,则测试通过。
补丁 包含对一组文件的一组更改的单个文件,由标记分隔,指示每个单独更改应应用的位置。
路径(文件系统中) 指定文件系统中位置的字符串。在 Unix 中,路径中的目录用 / 连接。
模式规则 一种通用的构建规则,描述如何更新名称匹配模式的任何文件。模式规则通常使用自动变量来表示实际文件名。
管道 将一个计算的输出用作下一个计算的输入,或负责数据传输的两个计算之间的连接。管道由 Unix 外壳普及,现在在许多不同的编程语言和系统中使用。
管道(Unix 外壳中) 用于使一个命令的输出成为下一个命令的输入的
插件架构 一种应用程序设计风格,其中主程序加载并运行完成大部分工作的小独立模块。
多态性 同一接口有许多不同的实现。如果一组函数或对象是多态的,则可以互换调用它们。
后置条件 函数成功运行后保证为真的东西。后置条件通常表示为对函数结果保证为真的断言。
前置条件 函数运行以正常工作必须为真的东西。前置条件通常表示为对函数输入必须为真的断言,以便函数成功运行。
优先级 操作的优先级。例如,乘法的优先级高于加法,所以 a + b * c 被解释为 “a 与 b 和 c 的乘积的和”。
先决条件 构建目标依赖的东西。
进程 操作系统对正在运行的程序的表示。进程通常有一些内存、运行它的用户的身份以及一组与打开文件的连接。
承诺 表示延迟或异步计算结果的一种方式。承诺是一个占位符,代表最终将计算出的值;在值可用之前尝试读取该值会阻塞,而在计算完成后进行的任何此类尝试都像正常读取一样。
承诺化 在 JavaScript 中,将回调函数包装在承诺中以实现统一的异步执行的行为。
协议 任何指定两个软件如何交互的标准。网络协议(如 HTTP)定义了客户端和服务器在万维网上交换的消息;面向对象程序通常为不同类的对象之间的交互定义协议。
修剪 从树中移除分支和节点,或在搜索整体解决方案时排除部分完成的解决方案以减少工作量。
伪随机数 以可重复的方式生成的值,其随机性足以欺骗观察者。
伪随机数生成器(PRNG) 可以生成伪随机数的函数。
查询选择器 指定一组 DOM 节点的模式。查询选择器用于 CSS 中指定规则应用的元素,或由 JavaScript 程序用于操作网页。
查询字符串 URL 中问号 ? 之后的部分,以名值对的形式指定 HTTP 请求的额外参数。
竞态条件 结果取决于两个或多个并发操作执行顺序的情况。
抛出(异常) 通过创建异常并将其交给错误处理系统来表示程序中发生了意外或不寻常的事情,然后错误处理系统尝试在程序中找到将捕获它的点。
读取 - 求值 - 打印循环(REPL) 一种交互式程序,读取用户输入的命令,执行它,打印结果,然后耐心等待下一个命令。REPL 通常用于探索新想法或调试。
记录 存储在一起的一组相关值。记录可以表示为元组或表中的一行;在后一种情况下,表中的每个记录都有相同的字段。
寄存器 处理器中内置的一小块内存(通常为一个字长),操作可以直接引用。
正则表达式 用于匹配文本的模式,本身以文本形式编写。正则表达式有时称为 “regexp”、“regex” 或 “RE”,是处理文本的强大工具。
关系数据库 将信息组织成表的数据库,每个表都有一组固定的命名字段(显示为列)和可变数量的记录(显示为行)。
相对误差 实际值与正确值之间差值的绝对值除以正确值。例如,如果实际值是 9,正确值是 10,则相对误差是 0.1。相对误差通常比绝对误差更有用。
相对路径 相对于其他位置(如当前工作目录)解释的路径。相对路径类似于使用 “直走” 和 “左转” 等术语给出的方向。
根(树中) 树中所有其他节点都是其直接或间接子节点的节点,或者等效地,树中唯一没有父节点的节点。
行主序存储 将二维数组的每一行作为一个内存块存储,使得同一列中的元素相距较远。
可运行文档 可以执行以检查其正确性的关于代码的语句,如断言或类型声明。
沙箱 与生产系统分开的测试环境,或出于安全原因只允许执行受限操作的环境。
SAT 求解器 确定是否存在一组布尔变量的赋值使得表达式为真(即满足表达式)的库或应用程序。
模式 数据集格式的规范,包括每个表的名称、格式和内容。
作用域 程序中定义可以被看到和使用的部分。
范围蔓延 项目开始后项目目标的缓慢但持续的增加。
评分函数 衡量或估计问题解决方案好坏的函数。
搜索路径 程序搜索以查找某物的目录列表。例如,Unix 外壳在尝试查找给定名称的程序时使用存储在 PATH 变量中的搜索路径。
种子 用于初始化伪随机数生成器的值。
语义版本控制 用于标识软件版本的标准。在版本标识符 major.minor.patch 中,当软件的新版本与旧版本不兼容时 major 更改,当向现有版本添加新功能时 minor 更改,当修复小错误时 patch 更改。
服务器 通常是指像数据库管理器或 Web 服务器这样的程序,根据请求向客户端提供数据。
SHA - 1 哈希 产生 160 位输出的加密哈希函数。
外壳 允许用户与操作系统交互的命令行界面,如 Unix 和 MacOS 的 Bash 或 Windows 的 PowerShell。
外壳变量 在 Unix 外壳中设置和使用的变量。常用的外壳变量包括 HOME(用户的主目录)和 PATH(他们的搜索路径)。
副作用 函数在运行时进行的更改,在函数完成后仍然可见,如修改全局变量或写入文件。副作用使程序更难理解,因为这些影响在程序中调用函数的点不一定清晰。
签名 表征函数或一组函数调用接口的参数集(带有类型或含义)。具有相同签名的两个函数可以互换调用。
单线程 一种程序执行模型,其中一次只能发生一件事。单线程执行更容易理解,但比多线程执行效率低。
单例 只有一个元素的集合,或只有一个实例的类。
单例模式 一种设计模式,创建单例对象来管理某些资源或服务,如数据库或缓存。在面向对象编程中,该模式通常通过以某种方式隐藏类的构造函数来实现,以便它只能被调用一次。
页面 URL 的缩写部分,唯一标识该页面。在示例 https://www.mysite.com/category/post - name 中,段是 post - name。
源映射 用于将一段代码转换回原始源文件行的表。
稀疏矩阵 大多数值为零(或其他值)的矩阵。程序通常使用特殊的数据结构来仅存储 “有趣” 的值,而不是存储许多相同值的副本。
SQL 用于编写关系数据库查询的语言。该术语最初是 “结构化查询语言” 的缩写。
栈帧 调用栈中记录对特定函数的单个调用详细信息的部分。
陈旧(构建中) 与先决条件相比过时。构建管理器的工作是查找并更新陈旧的东西。
标准错误 进程的预定义通信通道,通常用于报告错误。
标准输入 进程的预定义通信通道,通常用于从键盘或管道中的上一个进程读取输入。
标准输出 进程的预定义通信通道,通常用于将输出发送到屏幕或管道中的下一个进程。
静态网站生成器 从模板和内容创建 HTML 页面的软件工具。
顺序数据流,如通过网络连接到达的位或从文件读取的字节。
流式 API 以块的方式处理数据而不需要将所有数据同时放在内存中的 API。流式 API 通常需要处理 “数据开始”、“下一个块” 和 “数据结束” 等事件的处理程序。
字符串 程序中的一段文本。该术语是 “字符字符串” 的缩写。
字符串插值 将与指定值对应的文本插入到字符串中的过程,通常用于使输出更易读。
同步 同时发生。在编程中,同步操作是必须同时运行或同时完成的操作。
制表符补全 大多数 REPL、外壳和编程编辑器实现的一种技术,当按下 TAB 键时完成命令、变量名、文件名或其他文本。
关系数据库或数据框中的一组记录。
带标签的数据 一种将数据存储在两部分结构中的技术,其中一部分标识类型,另一部分存储构成值的位。
模板方法模式 一种设计模式,其中父类通过调用子类必须实现的抽象方法来定义操作的总体顺序。每个子类然后以相同的一般方式运行,但以不同的方式实现步骤。
测试框架 为测试其他程序或一组函数而编写的程序,通常用于测量它们的性能。
测试运行器 查找并运行软件测试并报告其结果的程序。
测试对象 被测试的东西,有时也称为被测系统(SUT)。
测试驱动开发(TDD) 一种编程实践,在添加新功能或修复错误之前编写测试,以明确目标。
抛出(异常) 另一个表示抛出异常的术语。
紧密耦合 软件系统中的组件如果依赖于彼此的内部结构,则被认为是紧密耦合的,因此如果一个组件被更改,则其他组件也必须更改。
检查时间/使用时间(ToCToU) 一种竞态条件,其中一个进程检查某物的状态,然后对其进行操作,但在检查和操作之间可能有其他进程更改该状态。
时间戳 显示某物创建或访问时间的数字标识符。时间戳应使用 ISO 日期格式以实现可移植性。
标记 解析器的不可分割的文本单元,如变量名或数字。具体构成标记的内容取决于语言。
拓扑顺序 图中节点的任何排序,尊重其边的方向,即如果有一条从节点 A 到节点 B 的边,则 A 在排序中位于 B 之前。特定图可能有许多拓扑排序。
传递闭包 图中从起始节点直接或间接可达的所有节点的集合。
一种图,其中除根节点外的每个节点都有且仅有一个父节点。
元组 具有固定数量部分的值,如红 - 绿 - 蓝颜色规范的三个颜色分量。
图灵机 一种理论计算模型,根据固定规则表在无限磁带上操作符号。任何可以表示为算法的计算都可以由图灵机完成。
计算机科学中的两个难题 指 Phil Karlton 的一句话:“计算机科学中只有两个难题——缓存失效和命名事物。” 许多变体开玩笑地添加了第三个问题,如差一错误。
类型声明 程序中声明变量或值具有特定数据类型的语句。像 Java 这样的语言要求所有变量都进行类型声明;在 TypeScript 和 Python 中它们是可选的,在纯 JavaScript 中不允许。
Unicode 为数千个字符和符号定义数字代码的标准。Unicode 不定义这些数字如何存储;这由像 UTF - 8 这样的标准完成。
统一资源定位符(URL) 万维网上的唯一地址。URL 最初用于标识网页,但也可以表示数据集或数据库查询,特别是如果它们包含查询字符串。
单元测试 测试软件的一个函数或功能并产生通过、失败或错误结果的测试。
UTF - 8 一种将表示 Unicode 字符的数字代码存储在内存中的方式,与较旧的 ASCII 标准向后兼容。
向量 通常是具有同质类型的值的序列。
版本控制系统 管理软件开发过程中对软件所做更改的系统。
虚拟机 假装是计算机的程序。这可能看起来有点多余,但虚拟机创建和启动速度快,并且在虚拟机内部所做的更改仅限于该虚拟机,因此我们可以安装新软件包或运行完全不同的操作系统而不影响底层计算机。
访问者模式 一种设计模式,其中要执行的操作依次应用于数据结构的每个元素。通常通过有一个 “访问者” 生成器来实现,该生成器知道如何访问结构的元素,并为每个元素提供一个要调用的函数或方法,以执行特定操作。
遍历(树) 以某种顺序访问树中的每个节点,通常是深度优先或广度优先。
观察点 调试器的一条指令,告诉它在变量(或更一般地,表达式)的值更改时暂停执行。
格式良好 遵循形式语法规则的一段文本被称为格式良好。
字(内存) 特定处理器最自然处理的内存单位。虽然字节的大小是固定的(8 位),但字的长度可能是 16、32 或 64 位,具体取决于处理器。
XML 一组用于定义类似 HTML 的标签并使用它们格式化文档(通常是数据)的规则。XML 在 2000 年代初很流行,但由于其复杂性,许多程序员转而采用 JSON。
YAML “YAML 不是标记语言” 的缩写,一种使用缩进而不是 JSON 的括号和逗号来表示嵌套数据的方式。YAML 通常用于配置文件和定义各种 Markdown 文档的参数。
Z 缓冲 一种绘图方法,跟踪每个像素 “下方” 内容的深度,以便显示最接近观察者的内容。

这些术语涵盖了编程领域的多个方面,从基础概念到高级设计模式,从内存管理到网络协议,对理解和实践编程都有着重要的意义。掌握这些术语,能够帮助我们更准确地交流和更高效地进行编程工作。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值