百度
360搜索
搜狗搜索

阮一峰的网络日志,阮一峰的成就详细介绍

本文目录一览: OAuth 四种获得令牌的流程

通俗易懂的解释什么是OAuth,以及原理
阮一峰的网络日志

第一步,A 网站提供一个链接,用户点击后就会跳转到 B 网站,授权用户数据给 A 网站使用。下面就是 A 网站跳转 B 网站的一个示意链接。

第二步,用户跳转后,B 网站会要求用户登录,然后询问是否同意给予 A 网站授权。用户表示同意,这时 B 网站就会跳回redirect_uri参数指定的网址。跳转时,会传回一个授权码,就像下面这样。

第三步,A 网站拿到授权码以后,就可以在后端,向 B 网站请求令牌。

第四步,B 网站收到请求以后,就会颁发令牌。具体做法是向redirect_uri指定的网址,发送一段 JSON 数据。

上面 JSON 数据中,access_token字段就是令牌,A 网站在后端拿到了。

第一步,A 网站提供一个链接,要求用户跳转到 B 网站,授权用户数据给 A 网站使用。

第二步,用户跳转到 B 网站,登录后同意给予 A 网站授权。这时,B 网站就会跳回redirect_uri参数指定的跳转网址,并且把令牌作为 URL 参数,传给 A 网站。

第一步,A 网站要求用户提供 B 网站的用户名和密码。拿到以后,A 就直接向 B 请求令牌。

第二步,B 网站验证身份通过后,直接给出令牌。注意,这时不需要跳转,而是把令牌放在 JSON 数据里面,作为 HTTP 回应,A 因此拿到令牌。

第一步,A 应用在命令行向 B 发出请求。

第二步,B 网站验证通过以后,直接返回令牌。

返回值

微信怎样找到web前端技术答案

微信找到web前端技术答案的方法有微信搜索公众号、订阅号。1、微信搜索公众号:可通过关键词搜索前端技术、React、Vue等相关关键词,找到一些知名的前端技术公众号进行关注。这些公众号通常会推送最新的前端技术资讯、实用前端技巧、开发思路等内容,并且提供会员或开源项目等特殊资源。2、订阅号:订阅一些前端技术相关的专业网站和博客,如前端开发者手册、阮一峰的网络日志等,这些网站内容丰富、专业,能够及时更新一些高质量的前端技术干货。

makefile教程

基于 Make 命令教程 - 阮一峰的网络日志 (ruanyifeng.com) 总结,可以将make看作一个自顶向下的构建工具
在makefile相同目录下执行 make 可查看效果
makefile文件名默认 Makefile 或 makefile .也可以指定文件: make -f rules.txt 或者 make --file=rules.txt
如果 前置条件 满足,执行 命令 构建 目标
目标可以是文件,也可以是某个操作的名字
运行 make clean 可以执行这个操作:
如果make检测到当前目录中存在clean文件,就不会执行clean操作,因此最好标明clean是个操作
前置条件通常是一组文件名,用空格分割,指定了目标是否重新构建的标准:只要有一个前置文件不存在,或者有过更新(前置文件的修改时间晚于目标文件),目标就需要重新构建
如果当前目录没有source.txt,make会首到makefile的下面去寻找有没有生成source.txt的目标
命令行首默认必须是一个tab键!!!,如果测试过程有报错记得检查下 ,如果想替换,可用.RECIPEPREFIX替换(对整个文件生效 (The .RECIPEPREFIX is only supported since 3.82
每条命令都在单独的shell中执行,这些shell没有关联,也没有继承关系
解决办法就是通过写成一行
或者用反斜杠转义
最后一个办法是加上 .ONESHELL: 命令 (同上
# 表示注释
正常情况下,make会打印每条命令,即使注释也会打印,在命令前面加@可以关闭打印
通配符
用来指定一组符合条件的文件名,与bash类似 * ? [...]
允许对文件名进行模式匹配,匹配符是%
下面的命令将 file1.c 编译为file1.o
允许使用 = 自定义变量
调用shell变量,需要两个$$,因为make命令会使$转义
变量支持引用
为了区分生效时间,分成四类 gnu make - What is the difference between the GNU Makefile variable assignments =, ?=, := and +=? - Stack Overflow
内置变量
$(CC)指向当前编译器
$(MAKE)指向当前make工具
详细如表 https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html
自动变量
https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html
判断和循环 与bash相同
函数格式
内置函数
https://www.gnu.org/software/make/manual/html_node/Functions.html

Linux中的inode到底是什么

要了解 Linux 操作系统上的 inode 前,我们先来说说 Linux操作系统上的文件。对于 Linux 操作系统而言,[一切皆文件]。而文件是无法独立于存储介质(这里指的是物理磁盘或内存、闪存等)存在的,一切操作系统上的文件都无时无刻不在和存储介质打交道。

例如,读取文件时需要将文件从磁盘中加载到内存中,当文件操作结束后,文件又会被存储到磁盘中。那么,既然文件要被存储到磁盘中,而磁盘是有容量限制的,那么也就是说磁盘上能存放的物理文件的数量是有限的。

如果你已经理解了这一个观点,那么恭喜你,你大体上已经知道了 inode 是干什么的。

没错, inode 是用来标识操作系统的文件的一个特征描述,而且操作系统上的 inode 并非无穷无尽,通常在你安装操作系统后,系统上的 inode 数量就已经确定了下来(不过,你可以动态修改 inode 的数量)。

你可以通过 sysctl -a 查询系统上的 inode 数量。

如上, fs.inode-nr 中的 70212 标识当前操作系统已分配的 inode 数量;21785 表示单前操作系统剩余空闲的 inode 数量

刚刚说过, inode 是用来标识文件的一个特征,这是为什么呢?

Linux 系统为每一个文件都分配了一个 inode 编号,这个编号中记录了文件相关的一些元信息,通过这些元信息可以用来唯一标识一个文件。

你可以通过 ls -i 查看任意一个文件的 inode 编号

而要查看文件的元信息,你需要使用 stat {filename}

如上,即为一个文件的 inode 信息。这其中包含:

事实上,刚刚通过 stat logrotate.man 中还包括一个字段 硬链接:1 。

为什么硬链接会出现在 inode 信息中?

一般情况下,操作系统中一个文件对应一个 inode ,但是这种规则却不适用于 硬链接 文件。盖因Linux操作系统上,允许多个文件指向同一个 inode 编号。(参考自: 理解inode - 阮一峰的网络日志 (ruanyifeng.com) )

硬链接场景下,可以使用不同的文件名访问同一个文件的内容,对文件内容、属性等的修改会传递到其他文件。但删除一个链接文件,并不影响其他文件的访问。

例如,建立 logrotate.man 的硬链接文件

建立硬链接后,通过 stat 可以看到 硬链接的数量变为 2 了。

这个时候我们删除原始的链接文件,查看链接后的文件内容

删除硬链接的原始文件后,可以成功读取链接后的文件内容,此时,硬链接数量又变为了 1。

出现这种情况的原因在于,硬链接实际上是对文件增加了一个索引,这个索引指向文件的 inode 编号。当硬链接的数量大于 1 时,说明该文件除去自身外,还有多个硬链接。当硬链接的数量等于 0 时,此时操作系统已经没有任何文件指向该 inode ,也即是操作系统会回收 inode 。

阅读更多 >>>  网站设计平台,banner设计网站有哪些-有哪些好的设计网站

事实上,每删除一个文件,是对该文件硬链接数的「减一」操作。当文件的硬链接数归 0 时,这个文件会被操作系统彻底清除掉。

最后,通常情况下,操作系统分配的 inode 数量是完全够用的,但出于一些程序或人为的意外可能会导致操作系统的 inode 溢出,你可以通过 df -ih 查看系统分区下 inode 的使用情况以便及时作出应对措施。

npm安装及简单使用

包管理器(Package Manager)
npm 最初它只是被称为 Node Package Manager,用来作为Node.js的包管理器。但是随着其它构建工具(webpack、browserify)的发展,npm已经变成了 "the package manager for JavaScript",它用来安装、管理和分享JavaScript包,同时会自动处理多个包之间的依赖。
新版的nodejs已经集成了npm
Node.js:nodejs分为了 长期支持版 和 当前版本 。
Linux中安装nodejs的方法:
对于国内的情形,在使用npm安装JS包之前建议先更改npm的镜像。
配置 npm 的国内镜像站点为: https://registry.npm.taobao.org 。
方法一:在系统的HOME目录新建 .npmrc 文件并添加 registry = https://registry.npm.taobao.org
方法二:你可以使用淘宝定制的 cnpm 命令行工具代替默认的 npm:
npm 的包安装分为本地安装(local)、全局安装(global)两种。
使用下面的命令来查看全局的包安装的位置:
如果你希望具备两者功能(本地安装和全局安装的功能),则需要在两个地方安装它或使用 npm link 。
npm link的功能是在本地包和全局包之间创建符号链接。我们说过使用全局模式安装的包不能直接通过 require 使用,但通过 npm link 命令可以打破这一限制。
比如我们将 express安装到了全局环境,使用下面的命令可以将其链接到本地环境:
使用 npm link命令还可以将本地的包链接到全局。使用方法是在包目录( package.json 所在目录)中运行 npm link 命令。
如果你的项目不再需要该模块,可以在项目目录内使用npm unlink命令,删除符号链接。
安装信息和它们的依赖
package.json配置内容 当你的项目需要依赖多个包时,推荐使用 package.json。其优点为:
文件中必须包含: name 和 version
两种依赖包:
如果其他人也需要这个项目,只需要把这个 package.json 文件给他,然后进行简单的 npm install 即可。
使用 npm set 命令用来设置环境变量。
也可以用它来为 npm init 设置默认值,这些值会保存在 ~/.npmrc 文件中。
使用 npm config 命令可以达到此目的。
或者手动在 ~/.npmrc 文件中进行配置:
更改目录后记得在系统环境变量 PATH 中添加该路径:
Node.js 的社区开发了多版本管理器,用于在一台机器上维护多个版本的 Node.js 实例,方便按需切换。Node 多版本管理器(Node Version Manager,nvm)是一个通用的叫法,推荐使用nvm安装node,
在发布之前,首先需要让我们的包符合 npm 的规范,npm 有一套以 CommonJS 为基础包规范,但与 CommonJS并不完全一致,其主要差别在于必填字段的不同。通过使用 npm init 可以根据交互问答产生一个符合标准的 package.json。
npm init 运行示例:
该文件就是一个符合 npm 规范的 package.json 文件。这里的 index.js 作为包的接口。
创建帐号:
测试是否取得帐号:
进入官网注册 https://www.npmjs.com/
发布
更新包:修改 version字段,再重新发布
取消发布:
npm scripts 使用指南 - 阮一峰的网络日志
package.json 文件有一个 scripts 字段,可以用于指定脚本命令,供 npm 直接调用。
npm run lint 可以运行脚本中的 lint 命令。 npm run test 可以运行脚本中的 test 命令。
npm run 命令会自动在环境变量 $PATH 添加 node_modules/.bin 目录,所以 scripts 字段里面调用命令时不用加上路径,这就避免了全局安装NPM模块。
start 和 test 属于特殊命令,可以省略 run :
如果仅仅使用 npm run 会列出scripts属性下所有的命令:
npm 模块安装机制简介 - 阮一峰的网络日志
NPM 使用介绍 - 菜鸟教程 npm Documentation 如何卸载使用npm链接安装的软件包? package.json文件 -- JavaScript 标准参考教程(alpha) npm模块管理器 -- JavaScript 标准参考教程(alpha)

为什么矩阵乘法的计算规则是这样的?

大多数人在高中,或者大学低年级,都上过一门课《线性代数》。这门课其实是教矩阵。
刚学的时候,还蛮简单的,矩阵加法就是相同位置的数字加一下。
矩阵减法也类似。
矩阵乘以一个常数,就是所有位置都乘以这个数。
但是,等到矩阵乘以矩阵的时候,一切就不一样了。
这个结果是怎么算出来的?
教科书告诉你,计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。
也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。
怎么会有这么奇怪的规则?
我一直没理解这个规则的含义,导致《线性代数》这门课就没学懂。研究生时发现,线性代数是向量计算的基础,很多重要的数学模型都要用到向量计算,所以我做不了复杂模型。这一直让我有点伤心。
前些日子,受到一篇文章的启发,我终于想通了,矩阵乘法到底是什么东西。关键就是一句话,矩阵的本质就是线性方程式,两者是一一对应关系。如果从线性方程式的角度,理解矩阵乘法就毫无难度。
下面是一组线性方程式。
矩阵的最初目的,只是为线性方程组提供一个简写形式。
老实说,从上面这种写法,已经能看出矩阵乘法的规则了:系数矩阵第一行的2和1,各自与 x 和 y 的乘积之和,等于3。不过,这不算严格的证明,只是线性方程式转为矩阵的书写规则。
下面才是严格的证明。有三组未知数 x、y 和 t,其中 x 和 y 的关系如下。
x 和 t 的关系如下。
有了这两组方程式,就可以求 y 和 t 的关系。从矩阵来看,很显然,只要把第二个矩阵代入第一个矩阵即可。
从方程式来看,也可以把第二个方程组代入第一个方程组。
上面的方程组可以整理成下面的形式。
最后那个矩阵等式,与前面的矩阵等式一对照,就会得到下面的关系。
矩阵乘法的计算规则,从而得到证明。
来源:阮一峰的网络日志

HTTPS、SSLTLS以及CA证书如何解决的安全通信问题

https、包括CA证书是为了解决http明文传输不安全的问题,提出http over ssl/tls的方案。
接下来笔者按照自己的理解,讲一下这个方案可能的推理形成的过程。有不当之处欢迎指正,永远怀着谦卑的心。

首先容易想到的是方案一,使用非对称开放公钥密钥体系:
1、客户端向服务端请求正式数据之前,先请求公钥,服务端自己保留私钥。
2、客户端用公钥加密正式数据,传给服务端,服务端用私钥解密。

上面的方案漏洞在于,一旦客户端与服务端之间被安插了一个proxy,这个恶意代理收到客户端的公钥请求,然后代替客户端向服务端拿到了真正的公钥,但却把自己的假公钥返回给了客户端,之后客户端用假公钥加密的数据都将会被代理解密获取!更可怕的是,在这个过程中代理由于获得了服务端公钥,仍然可以当作没事儿一样假扮客户端跟服务端进行通信,客户端和服务端完全意识不到双方的加密通信已经被窃听。这就是传说中的劫持。
而且,除去安全漏洞不说,上述方案一直在用非对称加密方式进行通信,性能也不太好。

回过头来看一下,上面的方案的问题在于:客户端缺少一种能够识别获得的公钥到底是不是服务端真正公钥的手段!
由此,我们引入方案二:CA证书。

1、客户端先安装权威机构也就是CA颁布的根证书(也就是CA的公钥):任何使用本方案的服务端会把自己的公钥事先提供给CA,CA使用自己的私钥对公钥加密后生成所谓的“CA证书”,而CA根证书则可以验证服务器公钥的真实性。
2、客户端向服务端请求CA证书(也就是经过CA私钥加密后的服务端公钥),顺便告诉服务端自己支持那些对称加密算法。
3、客户端收到CA证书之后,先识别一下真实性,然后本地生成一个随机密码、并用已经验证了真实性的服务端公钥对这个随机密码进行加密。
4、服务端对收到的随机密码包进行解密,拿到真正的随机密码。
5、到这里,双方都获得了一个可以用于对称加密验证的随机密码,之后的流程,就是客户端与服务端使用这个随机密码进行对称加密通信的过程了。

阅读更多 >>>  小白建站怎么建电商

兜了这么大圈子,其实一开始使用对称加密通信也是OK,关键在于如何可靠的让双方都知道对称加密算法中的密钥。
当面把密钥定下来、双方都知道了,这肯定可以,但这太扯淡和原始了。
于是发明了非对称开放公钥体系:把公钥让所有人都知道,然后你们尽管密文发来,服务端有办法验证这密文是不是用自己开放出去的公钥加密的。
但是又有上面说的劫持的那种情况,于是问题变成了怎么想办法安全的传递密钥,只要密钥是安全传递了,那之后用对称加密其实也行了。于是引入了CA证书。

更多请参考 SSL/TLS协议运行机制的概述 - 阮一峰的网络日志 (ruanyifeng.com) 阮一峰老师讲解的非常深入浅出

阮一峰的介绍

阮一峰,70后,英文名Frank。他原是上海财经大学世界经济博士研究生。主要研究宏观金融、货币政策与美国经济。于2008年6月获得博士学位。目前在上海一所当地大学(上海金融学院 国际经贸学院)任教。他本人也是一名IT技术人员,主要关注网站制作,并且对免费软件有着坚定不移的信念。除了写博客以外,他还有三个网站:微趣、Italo Calvino in China和读书公园。

阮一峰的成就

他从2003年开始在网络上写日志,文章包含的内容非常广博,涉及读书、版权制度、经济学、英语、历史、IT技术、医学、电影音乐和美术、政治学、科学、创业、互联网等23个大的分类,其中有的分类还包括一些更细的子条目。至2013年9月15日,他一共写了1580篇文章,收到32694条留言。除了理性地书写各种庞杂的知识外,他的文章亦充满了人文关怀,对专制强权更是批判有加,他试图以个人单薄的力量向社会传达一种向善的理想。他多次在文章中提到过,希望通过这些文章来教大家如何做一个独立思考者。阮一峰自学了网站制作,并在学习期间编写了一些互联网小应用,可以在他的博客中看到。译作:《软件随想录》、《黑客与画家》《异常流行幻象与群众疯狂》《下一个大泡泡》

高斯模糊

参考文献:阮一峰的网络日志 通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。
"模糊"的算法有很多种,其中有一种叫做 "高斯模糊" (Gaussian Blur)。它将 正态分布 (又名"高斯分布")用于图像处理。
本文介绍"高斯模糊"的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种 数据平滑技术 (data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。
一、高斯模糊的原理
所谓"模糊",可以理解成每一个像素都取周边像素的平均值。
上图中,2是中间点,周边点都是1。
"中间点"取"周围点"的平均值,就会变成1。在数值上,这是一种"平滑化"。在图形上,就相当于产生"模糊"效果,"中间点"失去细节。
显然,计算平均值时,取值范围越大,"模糊效果"越强烈。
上面分别是原图、模糊半径3像素、模糊半径10像素的效果。模糊半径越大,图像就越模糊。从数值角度看,就是数值越平滑。
接下来的问题就是,既然每个点都要取周边像素的平均值,那么应该如何分配权重呢?
如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。
二、正态分布的权重
正态分布显然是一种可取的权重分配模式。
在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。
计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。
三、高斯函数
上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布。
正态分布的密度函数叫做 "高斯函数" (Gaussian function)。它的一维形式是:
[图片上传失败...(image-930400-1380023)]
其中,μ是x的均值,σ是x的方差。因为计算平均值的时候,中心点就是原点,所以μ等于0。
[图片上传失败...(image-b4ad84-1380023)]
根据一维高斯函数,可以推导得到二维高斯函数:
[图片上传失败...(image-24fac0-1380023)]
有了这个函数 ,就可以计算每个点的权重了。
四、权重矩阵
假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:
更远的点以此类推。
为了计算权重矩阵,需要设定σ的值。假定σ=1.5,则模糊半径为1的权重矩阵如下:
这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵。
五、计算高斯模糊
有了权重矩阵,就可以计算高斯模糊的值了。
假设现有9个像素点,灰度值(0-255)如下:
每个点乘以自己的权重值:
得到
将这9个值加起来,就是中心点的高斯模糊的值。
对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。
六、边界点的处理
如果一个点处于边界,周边没有足够的点,怎么办?
一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。
七、参考文献

网站数据信息

"阮一峰的网络日志,阮一峰的成就"浏览人数已经达到19次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:阮一峰的网络日志,阮一峰的成就的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!