概念辨析/科普
文章平均质量分 66
暗诺星刻
用心写好每一篇博客
展开
-
回调、钩子、句柄的区别
可以看出,虽然“钩子程序”是依赖“圆环程序”的,但“圆环程序”的设计时间与“钩子程序”相对独立,是可以晚于“钩子程序”的。在编程中,这里的钩子相当于一个第三方的黑盒,圆环相当于一个对方指定的要实现的接口,只要自己编写的程序遵守了对方的规范并实现了这个接口,就可以在不需要知道和改动黑盒内部结构的情况下让该黑盒使用自己。因此,广义的钩子不仅包括上面介绍的钩子,还包括一些类中预设的布尔函数,比方说,可以对某一系列的类中都设置一个布尔函数,然后用该布尔函数的返回值来决定程序走向,则该布尔函数就是一个广义的钩子。原创 2023-06-04 03:44:12 · 1165 阅读 · 0 评论 -
代理、委托、打桩的区别
在上面的代码中,传递给方法 increment 的闭包就是一个委托,而方法 increment 就是一个被委托的方法,负责调用传入的委托。代理类低耦合依赖被代理类,但被代理类自身完全不需要代理类,它不在乎以后是否被代理。代理在被使用时,使用方无法区分代理类与被代理类,原因是它们的接口相同。代理(proxy):被代理类写好一套 API 的实现对外开放使用,代理类在被代理类的 API 的基础上再封装一层,形成一套与被代理类。委托与代理非常相似,它们相似之处在于,委托类类似于被代理类,代理类类似委托调用方。原创 2023-05-15 19:32:22 · 852 阅读 · 0 评论 -
对于 Git 每一次提交的时间信息,什么是作者日期和提交者日期
对于 Git 的每一次提交,在 TortoiseGit 和 IntelliJ IDEA 都可以看到这次提交的时间。但很多人不知道的是,Git 实际上对每一个提交的时间分为两个:作者日期和提交者日期。作者日期(author date):这指的是最开始提交时,所产生的提交文件上的日期提交者日期(committer date):这指的是对这个提交最后一次操作的日期这有点类似于操作系统中文件的创建时间与修改时间。当使用 Git 进行一次提交时,这次提交的时间就会变成作者日期。原创 2023-05-09 01:39:55 · 3792 阅读 · 0 评论 -
Gradle 模块依赖中,使用 implementation 与 api 的区别
声明的依赖项表示该模块将向其依赖的其他模块公开此依赖项的 API。这意味着其他模块可以使用该依赖项提供的所有公共类和方法,以及该依赖项的传递依赖项提供的所有公共类和方法。声明的依赖项表示该模块将不向其依赖的其他模块公开此依赖项的 API。这意味着该依赖项只对该模块本身可见,并且不会被传递到依赖该模块的其他模块。换句话说**,如果想令本模块能传递性地获得依赖模块的依赖,那么应该在依赖模块的相应依赖中使用关键字。如果项目中有模块 A、B、C、D,且 A 依赖 B、B 依赖 C、C 依赖 D。原创 2023-05-05 01:05:28 · 3890 阅读 · 0 评论 -
在安卓中,为什么定义一个内部类 Handler 可能导致内存泄露?
在安卓开发中,如果将Handler作为Activity的成员内部类,那么连思维方式单调的 IDE 都能看出有内存泄露的风险。那么为什么这样做就会有内存泄露的风险呢?为了便于说明,先约定如下图箭头的指向代表 B 是 A 的一个字段。原创 2023-04-02 18:55:18 · 878 阅读 · 1 评论 -
Java NIO 中的非阻塞究竟体现在哪里?
Java NIO 中的非阻塞究竟体现在哪里?Reactor 模式异步非阻塞可以基于 Java BIO 实现吗?Java NIO 中的非阻塞究竟体现在哪里? 很多人应该对“Java NIO 是非阻塞的 I/O”这一信条熟记于心,但其中的有些人可能经过实践之后却产生这样的疑惑:Java NIO 明明是非阻塞的 I/O,但 Java NIO 中无论是 Channel 还是 Selector 的方法却是阻塞的,其中的一个被称为设置 Channel 为非阻塞的方法 XXXChannel.configureBloc原创 2022-05-17 19:33:15 · 2089 阅读 · 1 评论 -
为什么 MyBatis 里,Mapper 中的方法不能被重载
为什么 MyBatis 里,Mapper 中的方法不能被重载 很多人还没意识到,在 MyBatis 里,Mapper 中的方法是不能被重载的,这与形参个数无关。为什么会这样呢? MyBatis 对 Mapper 进行动态代理的时候,使用了一种 ID 值来标识每个 SQL 语句,而这种 ID 值是只是由 Mapper 的类名和方法名来共同标识的,这不包括方法形参。具体源码分析如下: 如下图所示。MyBatis 首先是用 Mapper 的类名和方法名生成了一个 mappedStatementId,然原创 2022-05-09 22:00:50 · 2188 阅读 · 0 评论 -
什么是 Reactor 模式?
什么是 Reactor 模式? Reactor 模式并不是什么很神秘的东西。一般来说,通信有以下两个关键步骤:一是建立连接,二是进行数据的传输。一般对通信过程进行优化,也就是基于这两个关键点进行优化。 建立连接通常就是 握手 的过程。在向对方传输数据之前,必须要经对方同意,这就是握手。如果建立连接就不成功,后面的数据传输也不能进行。对于服务端来讲,它需要与众多客户端通信,建立连接的成功数将影响它的吞吐量。对于服务端,当然是希望它的吞吐量越高越好。我们知道数据传输通常相对更耗时,为了避免对建立连接造成原创 2022-05-05 00:15:35 · 4721 阅读 · 3 评论 -
Git 开发模式
Git 开发模式Git 小技巧创建 Git 分支文件夹Git 单体开发模式引导改进运行环境:Git 2.29.2.windows.2IntelliJ IDEA 2021.3 (Ultimate Edition)Git 小技巧创建 Git 分支文件夹 当 Git 项目中的分支达到一定数量时,有时候就希望可以像操作系统中的文件系统一样,可以将某个文件放入文件夹中。在 Git 中同样可以创建分支文件夹,并将某个分支置于某个分支文件夹中。 实际上,在 Git 中这样做很简单,只需要原创 2022-04-06 23:24:23 · 1380 阅读 · 0 评论 -
为什么一级封锁协议不能保证不读取到脏数据
为什么一级封锁协议不能保证不读取到脏数据?为什么一级封锁协议不能保证不读取到脏数据 一级封锁协议可以保证某事务在修改数据之前必须先加直到事务结束才会释放的排他锁,这看起来就已经阻止了脏读,那为什么各个书中都表示一级封锁协议不能保证不读取到脏数据呢? 这还是要归咎于各个书籍编写者对于概念定义的疏忽大意。在弄清这个问题之前,需要澄清被很多人误解的概念。比如什么是脏读、一级封锁协议等。笔者已经将这部分的内容独立成了另一篇博客,可见:剖析数据库中重要而又常被曲解的概念:https://blog.csdn.原创 2022-02-05 03:09:03 · 4810 阅读 · 6 评论 -
剖析数据库中重要而又常被曲解的概念
剖析数据库中重要而又常被曲解的概念排他锁共享锁意向锁粒度树意向锁两段锁协议一级封锁协议二级封锁协议三级封锁协议脏读不可重复读幻影行可串行化排他锁排他锁(exclusive locks):指的满足此条件的锁:当某事务对某数据加上排他锁之后,直到该事务释放这个锁之前,其它事务不能再对这个数据再加排他锁和共享锁。共享锁共享锁(share locks):指的满足此条件的锁:当某事务对某数据加上共享锁之后,直到所有事务都释放了对该数据加上的共享锁之前,任何事务都不能对该数据加上排他锁,但可以对其加共享锁原创 2022-02-04 01:31:30 · 1773 阅读 · 0 评论 -
什么叫无状态
什么叫无状态 无状态指的是对于请求方的每个请求,接收方都当这次请求是第一次请求。为什么叫做无状态呢?因为对于请求方而言,每次请求时,接收方就像是失忆了一样,并不会依赖请求方以往的请求所生成的数据作回应。也就是说,就像是接收方没有保存请求方的状态(数据)一样,所以叫无状态。 无状态并不代表接收方不会保存请求方的任何数据,它只是不保存与接收方可能的下次请求相关的数据。所以无状态要求请求方每次请求时,一次性提供与请求相关的全部数据,而不能因为某些数据在以前的请求中提供了,这次请求就不提供了。那么,接收方为原创 2022-01-18 23:11:48 · 6475 阅读 · 0 评论 -
log4j2.xml 的标签 loggers 中 root 的属性 level 指的是什么
log4j2.xml 的标签 loggers 中 root 的属性 level 指的是什么 log4j2.xml 是 log4j2 中的其中一种配置文件。log4j2.xml 中往往有如下配置:<configuration ...> <appenders/...> <loggers> <root level="DEBUG"> <appender-ref ref="Console"/>原创 2022-01-05 02:44:12 · 7463 阅读 · 0 评论 -
WebSocket 的通信机制
WebSocket 的通信机制建立连接数据传输关闭连接 这里假设通信的发送方名叫 client,接收方名叫 server,且接收方已事先开启端口号。建立连接首先进行 TCP 三报文握手。这个过程如果不成功,后面的通信将不会进行。具体来讲,流程如下:client 向 server 发送请求建立连接的报文。server 向 client 发送确认报文。client 向 server 发送确认报文。client 向 server 发送 HTTP 报文,报文的内容是请求将报原创 2021-12-09 00:18:55 · 1996 阅读 · 0 评论 -
JavaFX 中的像素、分辨率与缩放比
JavaFX 中的像素、分辨率与缩放比总结与补充 JavaFX 中,一般需要对每个组件设置一个尺寸值,这个值实际上就是像素值(pixel,px)。像素值是什么呢?在 Windows 上,一般使用任何截图软件进行截图选定区域后,在左上角就会显示该区域的长(width)和宽(height),这个长和宽的单位就是像素。 不过要注意的问题是,像素有相对值与绝对值之分。这个问题有点复杂,这里详细解释一下。绝对像素,指的是像素的最终实际值,也就是上面所说的截图软件中显示的值。关于这个值,在 Windows原创 2021-11-11 00:15:29 · 3431 阅读 · 0 评论 -
JavaFX 中 FX 一词的由来
JavaFX 中 FX 一词的由来 JavaFX 已经慢慢开始流行了,一些书籍已经开始专门介绍它。不过由于它的目前流行程度,很少人知道这个名称是怎么来的。 有人认为 JavaFX 中 FX,指的是 framework(框架)的缩写,所以 JavaFX 指的是 Java 的一个原生框架。也有人认为 FX 指 for XML。他们认为,这指的是 Java 为了体现这个领域使用了更先进的、使用一种文本标记语言 XML 来绘制部分界面的设计而命名。但实际上,FX 的来历是这样的。 JavaFX 源自一家原创 2021-10-11 02:51:50 · 952 阅读 · 0 评论 -
深入理解 CAP 定理
深入理解 CAP 定理什么是 CAP 定理结点、系统、集群一致性、可用性、分区容错性为什么不能同时满足 CAP总结什么是 CAP 定理 CAP 定理是分布式系统、NoSQL 中必定要知道的内容。它指的是,对于一个分布式系统,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)最多只能同时满足其中两个。具体来讲,最多只能同时满足的那两个可以为 CP 或 AP,但不能同时满足 CA。 什么是一致性、可用性、分区容错性呢?在介绍这几个原创 2021-09-15 04:15:34 · 2157 阅读 · 0 评论 -
在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象
为什么需要创建内部类对象之前需要先创建外部类对象 我们知道,创建一个内部类对象之前,需要它的一个外部类对象。这是因为内部类可能使用外部类的数据。 在内部类中,有一个隐式字段指向其外部类的对象,而这个字段是内部类在被创建时,隐式初始化的。具体来说,内部类所有的构造器都自动被插入了一个匿名隐式形参,这个匿名隐式形参就是外部类对象引用,它被作为所有构造器的第一个形参,且自动用于完成对外部类对象引用的初始化。 当使用外部类对象来创建内部类对象时,这个隐式形参不需要额外作为实参提供给内部构造器。创建内部类原创 2021-07-20 02:43:44 · 1136 阅读 · 0 评论 -
人们对 Java 中的 protected 与继承有什么误解?
人们对 Java 中的 protected 与继承有什么误解?调用方取决于调用方法所属对象还是调用方法所处位置Java 的访问控制修饰符平常所说的 protected 的子类可见实际指的是什么 在 Java 中,访问控制修饰符 protected 给许多人带来了混淆,因为它不仅涉及继承,还涉及包。不过,protected 也有自身在设计上的问题,向来为世人所诟病。在详解这个关键字之前,首先来理清什么是调用。调用方取决于调用方法所属对象还是调用方法所处位置 调用,这是一个很基础的词汇,很多人都以为自原创 2021-07-12 01:53:42 · 1026 阅读 · 2 评论 -
计算机领域中,增量是什么意思?
计算机领域中,增量是什么意思? 增量一词在计算机行业中的很多领域都有使用。在不同的领域中,增量一词的具体含义需要结合那个领域的相关知识来解释,抽象出来的增量一词的含义可以概括如下。 增量是相对全量来说的。在一个项目中,一次性完成整个项目称为全量。对于大型项目来说,这往往不现实。当使用增量的方式来完成,这可以指如下几种方式。先完成这个项目的大体轮廓,然后依次完成更具体的各部分内容。将这个项目分解为各个模块,先完成其中的一个模块,然后依次完成其它模块。先利用有限的资源,完成这个项目目前能完成的部原创 2021-07-09 01:27:59 · 3565 阅读 · 0 评论 -
lambda 表达式中的 this 与普通情况下的 this 指向
lambda 表达式中 this 与普通情况下的 this 指向JavaJavaScript总结与提醒 很多编程语言都支持 lambda 表达式,不过对于不同编程语言,其 lambda 表达式中 this 指向差异很大,有些甚至相反。下面举例如下。Java 对于 Java 语言,很普通情况下的 this 很好理解,这里不在详述。值得一提的是 Java 中的内部类。 Java 的内部类有:成员内部类、局部内部类、匿名内部类、静态内部类。这里只讲述匿名内部类,因为其它的内部类中的 this 指向都原创 2021-06-07 05:52:22 · 3492 阅读 · 1 评论 -
Bean 在 Spring 中代表什么含义,为什么这样命名?
但问题是,“元素”(element)、“单元”(unit)、“原子”(atom)、“组件”(component)等词在计算机相关领域已经或日后可能成为该领域的专有名词,如果使用这种命名,有可能发生“二义性”的冲突,如对初学者来说的概念的冲突、在代码中变量名的冲突等等。Bean在Spring框架中代表一种基本单元,在Spring框架中的几乎所有的预置对象都是一种“Bean”,对数据的各种处理也是以Bean为单位来进行的,用户自定义数据也需要构建成Bean之后才能处理。...原创 2021-06-04 01:11:02 · 3563 阅读 · 0 评论 -
bit 一词的来历
bit 一词的来历 很多人都知道计算机中的 bit 是比特的意思,也是计算机中每一位的单位,但几乎无人知道这个词的来历。实际上,这个词源自英语中的另一个词 bite。说到这里,就要提到笔者经常说的,西方人喜欢以与饮食有关的事物进行命名。bite 的愿意是咬的意思,引申为"一口的分量",而计算机在处理信息时常常涉及吞吐量,因此 bit 作为一个与吞吐量相关的单位而被确立出来。...原创 2021-06-03 03:08:56 · 839 阅读 · 0 评论 -
后缀与扩展名的区别
后缀与扩展名的区别 同很多概念一样,一个文件名的后缀(suffix)与扩展名(extension)被很多人认为是相同的概念。也许是少一个字的缘故,多数人喜欢使用前者。但实际上,他们口中的“文件后缀”其实是文件的扩展名。 文件后缀由句点和扩展名组成,如下图所示:...原创 2021-06-02 01:12:25 · 3412 阅读 · 0 评论 -
心跳与轮询的区别
心跳与轮询的区别轮询心跳 主机在检查与从机之间的连接(判断与从机之间的连接是否断开)时,一般有心跳与轮询这两种方式。这两个方式都需要主机定时逐个查询从机的状态,但它们查询的策略有所不同。轮询 在轮询方式中,主机逐个查询的方式是主动向从机发送一条查询信息,然后根据从机的应答情况来判断从机的状态。比方说,主机要求从机返回一个状态码来代表当前从机所处的状态,但如果从机没有应答,就认为与从机之间的连接已经断开。心跳 在心跳方式中,主机逐个查询的方式是直接从一种状态信息表中查询,此状态信息表上记录了所原创 2021-06-01 01:33:34 · 749 阅读 · 0 评论 -
网址最后面不带斜杠与带斜杠有什么区别
网址最后面带斜杠与不带有什么区别文件与文件夹解析 URL 关于网址中最后面的那个斜杠/,很多人习惯性的不输入,原因是他们认为有或者没有没有区别。但这要归功于服务器那端的程序员的努力。实际上,从概念上来讲,URL 的后缀带斜杠与不带是有区别的。解释这个原因之前,首先需要知道文件与文件夹的区别。文件与文件夹 文件代表用户存放的数据,而文件夹代表了文件之间的、由用户自定义的逻辑位置分布。从概念上讲,文件会占用一定的大小,而文件夹不会,因为文件夹不是数据本身。 文件夹也可称为目录(有人认为文件夹(di原创 2021-05-31 05:22:23 · 5354 阅读 · 1 评论 -
端口号属于协议还是进程
端口号属于协议还是进程 我们知道,在操作系统中,端口号用于标记本机中的一个进程;在计算机网络中,运输层使用一种协议端口号(protocol port number)。问题是,协议端口号与进程的端口号是同一个事物。那么,端口号究竟是与进程对应,还是与协议相对应呢? 实际上,端口号是来标记一个进程的,端口号与协议本质上没有必然联系。在解释这个问题之前,让我们先回顾端口号的用途。无论是操作系统还是计算机网络中的端口号,都是用于解决进程之间通信的问题。端口号就好比手机号,它的好处在于可以以数字化的方式唯一标原创 2021-05-28 03:58:11 · 1598 阅读 · 2 评论 -
深入理解同步阻塞、同步非阻塞、异步阻塞、异步非阻塞
同步阻塞、同步非阻塞、异步阻塞、异步非阻塞之间的区别先验知识此处的异步指的是什么同步、异步、阻塞、非阻塞同步阻塞、同步非阻塞、异步阻塞、异步非阻塞一个生动的例子总结与补充先验知识 在解释这几个概念之前,需要注意的是:首先需要知道操作系统层面的同步、异步、阻塞这几个概念的含义。关于这方面的内容,可见笔者的另一篇博客:同步与异步、并行与并发、阻塞与挂起:https://blog.csdn.net/wangpaiblog/article/details/116114098 本文解释的概念至少适原创 2021-05-25 01:44:08 · 24588 阅读 · 8 评论 -
为什么人们默认 x86 代表 32 位处理器
为什么 x86 代表 32 位处理器 在安装某些软件时,常常有 x86、x64 这两个选项,这给用户带来的误解是,x86 代表 32 位的。但实际上,x86 在最开始并不是代表处理器的位数(字长),而是代表 Intel 一系列处理器的型号。具体来讲,它代表的是处理器型号 8086、80286、80386、80486 等等。而 官方对 32 位处理器的称呼其实是IA-32。但由于 86 系列在 32 位以后就没有推出更高位数的处理器,所以导致现在 x86 成了 32 位处理器的代称。...原创 2021-05-27 00:59:08 · 3732 阅读 · 0 评论 -
在操作系统理论中,什么是饿死
在操作系统理论中,什么是饿死饥饿饿死饥饿 在操作系统理论中,饥饿指的是一个进程长期得不到运行,而处于长期等待的状态。饿死 在操作系统理论中,饿死指的是一个进程一直及以后也不会得到运行,处于永久性等待的状态。...原创 2021-05-26 02:39:06 · 2486 阅读 · 0 评论 -
同步与异步、并行与并发、阻塞与挂起
同步与异步、并发与并行同步与异步并发与并行同步与异步 同步是指多个有相互之间一定联系的并发执行的进程,通过一定的机制,使之有序执行,从而使其总的运行结果符合预期。 异步是指多个有相互之间一定联系的并发执行的进程,执行时相互之间没有约定一定的次序。并发与并行 并行是指两个及以上个进程在同一时刻(时间点)同时执行,而并发指两个及以上个进程在同一时间间隔(时间段)内同时执行。在宏观上,多个同时执行的进程,如果位于单处理机中执行,在微观上,它们只能分时交替地执行。只有它们位于多处理机中执行,才可能存原创 2021-04-25 01:22:26 · 3726 阅读 · 0 评论 -
fork 与 branch、clone 的区别
对于没有使用Git进行企业级的多人协作的Git使用者来说,往往认为使用Git进行代码仓的操作的过程中,fork得到的结果就相当于一个新的branch,但实际上,这是完全不同的概念。另外,也有人分不清fork与clone的区别,笔者也在此一并解释一下。......原创 2021-04-20 00:58:44 · 3142 阅读 · 1 评论 -
正向代理与反向代理的区别
正向代理与反向代理的区别代理正向代理反向代理 在架构模式 C/S 中,可以分别对 C(Client)和 S(Server)进行代理,分别称之为正向代理和反向代理。代理 无论是正向代理,还是反向代理,都属于代理。它们都有代理的共用特性。主机对外界的通信,在使用了代理服务器之后,就变成了代理服务器对外界的通信。这样可以做到扩大主机的通信范围或者阻止外界的某些连接,同时隐藏真实的主机。正向代理 对客户端的代理称为正向代理。正向代理的目的是控制客户端对外的访问。在一个公司中,直接控制所有人的主机的对原创 2021-04-06 05:58:53 · 2007 阅读 · 1 评论 -
什么是卫语句
什么是卫语句 卫语句是一种改善嵌套代码的一种代码。将经过多级嵌套的代码使用卫语句优化之后的代码嵌套层数降低,因此改使用卫语句能降低代码的复杂程序。 卫语句往往用于对 if 条件嵌套代码的优化。比如,下面的 Java 代码的嵌套层数是 3(方法本身也算一层)。 public int fun(boolean isTrue, int aPara, int bPara) { if (isTrue) { // TODO if (aPara > 0) { return aPara原创 2021-03-17 00:48:05 · 26377 阅读 · 0 评论 -
Java EE 为什么要改名为 Jakarta EE?Jakarta 不是印度尼西亚的首都吗?
为什么选择 Java 作为名称呢?这就要提及笔者经常提到的,西方人很喜欢使用与饮食相关的内容来命名。除此之外,当时这些个程序员的脑回路非常的清奇: Java 这一名称这是通过办公室中的热咖啡来联想到的。历史上,在 1696 年,当荷兰殖民印度尼西亚时,在印度尼西亚现在的首都 Jakarta 开始传播咖啡苗。之后,人们在印度尼西亚疯狂种植咖啡苗,并向欧洲供应。后来,印度尼西亚的一个名叫 Java 的岛屿上盛产咖啡。由于在该岛屿生产的咖啡声名远扬,人们很容易从咖啡联想到 Java 一词。于是,编程语言 Java原创 2021-03-08 01:14:34 · 5495 阅读 · 2 评论 -
什么是绝对路径与相对路径
很多人知道下面的这个路径是绝对路径,但这是 Windows 误导的结果。Windows 非常奇葩,Windows 下的绝对路径是是从盘符开始的路径。比方说下面这个路径,很多人就认为这也是一个相对路径,但实际上这是一个绝对路径,只是说这不是 Windows 下的绝对路径。当然,考虑到兼容性,Windows 也支持国际通用的斜杠来作为多级目录分隔符。这就是 Windows 误导的结果,好像没有以盘符开始的路径都是相对路径。实际上,更严谨的说法是,相对路径是以当前目录开头的路径,也就是以。原创 2021-03-07 04:15:03 · 3721 阅读 · 0 评论 -
为什么说 Java 是按值传递的?
为什么说Java是按值传递的?按值传递与按引用传递Java的按值传递Java的“传引用”C++中的引用与指针总结 很多人认为Java是按引用传递的。一方面,Java有引用(reference)的概念。另一方面,可以通过函数形参修改函数外的某对象的字段,而这确实是引用的特性。但实际上,Java是按值传递的。这一点可以在官方及很多的权威书籍上得到印证,而且,Java只有按值传递。 如果对Java已经使用得非常熟练,对此理解不透彻也无伤大雅。不过很多行业最终都会要求专业性,对基本的概念分不清楚会降低威信力原创 2021-03-01 01:27:24 · 458 阅读 · 3 评论 -
编程中的脚手架是什么意思?
编程中的脚手架是什么意思? 脚手架指的是创建项目时,自动完成的创建初始文件等初始化工作。这些工作往往是每次新建工程都要进行的重复性工作。原创 2021-02-26 01:08:07 · 4064 阅读 · 0 评论 -
什么是纯函数?
什么是纯函数?纯函数是一个遵循如下规则的函数:至少接收一个参数返回一个值或者其它函数返回结果只依赖于输入参数不会产生副作用。即:将输入的实参当作不可变数据不修改全局变量纯函数的优点为:可移植性:纯函数的返回结果仅依赖于传入的参数,这意味着该函数耦合性小,因此可以很方便地将其移植。可测试性纯函数不会改变运行环境中的任何东西,因此不需要装配或者卸载复杂的测试环境。纯函数需要访问的任意数据都是通过参数进行传递的。当测试一个纯函数时,用户控制着参数,也可以预估执行结果。可并发性原创 2021-02-24 00:05:43 · 3336 阅读 · 0 评论 -
路径中斜杠/、点斜杠./、点点斜杠../的区别
路径中斜杠 / 、点斜杠 ./ 、点点斜杠 ../ 的区别斜杠 / 表示根目录点斜杠 ./ 表示当前目录,且连续的点斜杠 ./ (如 ././././././ )与单个的点斜杠 ./ 含义相同,都指当前目录。注意:对于文件与文件夹来说,当前目录的意义不同。对于文件夹,当前目录就指的是本目录。但对于文件来说,当前目录指的是包含本文件的目录如:若文件夹A中有文件夹B和文件C,则对文件夹B来说,当前目录指文件夹B的路径,但对文件C来说,当前目录指文件夹A的路径。点点斜杠 ../ 表示当原创 2021-02-23 00:06:55 · 4460 阅读 · 0 评论