王小匠

王小匠 查看完整档案

深圳编辑湖南涉外经济学院  |  电子商务 编辑  |  填写所在公司/组织 artroy.com.cn 编辑
编辑

一个不断成长的小小码农。想要查看更多文章,可以前往个人博客查看:https://www.artroy.com.cn

个人动态

王小匠 回答了问题 · 2019-10-25

解决React怎么绑定scroll事件?

文档地址:https://zh-hans.reactjs.org/d...

constructor(props) {
    super(props);
    this.scroll = React.createRef();     // 创建一个 ref 来存储 scroll 的 DOM 元素

}
componentDidMount() {
    // 通过 "current" 来访问 DOM 节点
    this.scroll.current.addEventListener('scroll',() => {
      console.log('scroll')
    })
 }
 
 render() {
     return(
         <div ref={this.scroll}>
             <div></div>
         </div>
     )
 }

关注 9 回答 5

王小匠 发布了文章 · 2019-08-05

原型链

一、创建对象有几种方法

    // 第一种方式:字面量,默认创建对象     
    var a10 = {name:'a10'};             // {name: "a10"}  
    var a11 = new Object({name:'a11'}); // {name: "a11"}

    // 第二种方式:构造函数     
    var a2 = function(){this.name = 'a20'};  
    var a20 = new a2();                 // a2 {name: "a20"}
    
    // 第三种方式:Object.create()       
    var a3 = {name:'a30'};
    var a30 = Object.create(a3);        // {} 之后输入 a30.name 能得到 "a30"

案例

二、实例、构造函数、原型、原型链

原型链

2.1 实例

  • 对象就是一个实例,就有 _proto_ 属性。
  • 实例通过 _proto_ 原型链找到 prototype 原型对象,prototype 原型对象的属性被所有实例共享。

2.2 构造函数

  • 通过 new 来创建对象实例。
  • 任何函数都可以作为构造函数。
  • 只要被new运算符使用过的函数就是一个构造函数。

2.3 原型

  • 函数都有 prototype 属性,prototype 属性的值就是一个初始化的原型对象。
  • 原型对象有个 constructor_proto_ 属性,constructor 是一个构造函数。
  • Fn.prototype.constructor === Fnconstructor 函数指向构造函数本身。通过 constructor 把原型对象和构造函数关联。)

2.4 原型链

每一个对象都有自己的原型对象,原型对象本身也是对象,原型对象也有自己的原型对象,这样就形成了一个链式结构,叫做原型链

三、instanceof的原理

instanceof的原理
instanceof 主要作用就是判断一个实例是否属于某种类型,实现原理就是只要右边变量的 prototype 在左边变量的原型链上即可。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,如果查找失败,则会返回 false

四、new运算符

// 构造函数
var Fn = function(name) {
  this.name = name;
}
var obj = new Fn('obj');

图片描述

new 运算符的工作原理:

var newTest = function(fn) {
    var initObj = Object.create(fn.prototype);
    var obj = fn.call(initObj);
    if(typeof obj === 'object') {
      return obj;
    } else {
      return initObj;
    }
}
var Fn = function() {
  // this.name = 'obj', 最后newTest(Fn)返回的结果完全等同。
  return {
    name: 'obj';
  }
}
newTest(Fn)

原文地址:https://www.artroy.com.cn/art...
更多文章分享:https://www.artroy.com.cn/

查看原文

赞 12 收藏 7 评论 1

王小匠 发布了文章 · 2019-08-02

JavaScript 中 == 和 === 的区别

两个操作数之间的 " == " 与 " === "

1、 两个不同的基本数据类型: 如果两个基本数据类型(Number、String、Boolean、Null、Undefined)不同,会将它们进行数据类型转化,再进行比较。例如:

0 == ''                                                  // true
0 == '0'                                                 // true
1 == '1'                                                 // true
'0' == ''                                                // false

false == 0                                               // true
false == '0'                                             // true
false == 'false'                                         // false
false == null                                            // false
true == null                                             // false
false == undefined                                       // false
true == undefined                                        // false
null == undefined                                        // true
NaN == NaN                                               // false

0 === ''                                                 // false
0 === '0'                                                // false
1 === '1'                                                // false

false === '0'                                            // false
null === undefined                                       // false

[] == false                                              // true
![] == false                                             // true
![] == []                                                // true
![] === []                                               // false

null === document.getElementById('ABC')                  // true(document.getElementById('ABC') 不存在)

2、 基本数据类型与引用数据类型: 将引用数据类型(function、object,其中object包含array)转化(后台自动调用 Object.prototype.valueOf() )为它的原始值,再进行比较。例如:

[1,2] == '0'                                            // true
function(){return ['1,2']}() == '1,2'                   // true

[1,2] === '0'                                           // false
function(){return ['1,2']}() === '1,2'                  // false

3、 两个引用类型: 判断两者之间的引用路径。例如:

[1,2] == [1,2]                                          // false
[1,2] === [1,2]                                         // false

总结

1、" == " 情况
一般转化规则:(对象 => 字符串 => 数字值) 或 (布尔值 => 数字值)
(1)字符串与数字比较时,字符串转化成数字值,二者再进行比较。
(2)布尔值与数字比较时,布尔值转化成数字值,二者再进行比较。
(3)字符串与布尔值比较时,二者全部转化成数字值再进行比较。
(4)对象与数字比较时,对象先转化成字符串,然后再转化成数字值,与数字值进行比较。
(5)对象与字符串比较时,对象转化成字符串,然后二者再进行比较。
(6)对象和布尔值比较时,对象先转化成字符串,然后再转化成数字值,布尔值直接转化为数字,二者再进行比较。
(7)nullundefined 二者相等,不能把二者转化为其他值,二者与其他值比较返回 false
(8)![] == []。(根据运算符的优先级,! 先执行,直接转化为布尔值(空字符串,NaN,0,null,undefined 都是 fasle,其余都是 true)再取反,故![] 转化为 false。其余依照以上规则转化。最后 0 == 0,故结果为 true。)

2、" === " 情况
(1)两个值类型不同,就返回 fasle
(2)两个值都是数值,并且是同一个值,那么为 true,另外:如果其中至少一个是NaN,那么为 fasle。(判断一个值是否是 NaN,只能使用 isNaN() 来判断);
(3)两个值都是字符串,每个位置的字符都一样,那么 true,否则 fasle
(4)两个值都引用同一个对象或函数,那么为true;否则 fasle
(5)两个值都是 truefasle,那么 true,否则 fasle
(6)两个值都是nullundefined,那么为true;否则 fasle

结论:推荐使用 “===”, 只要类型不一致,直接返回 fasle;“==” 会造成类型转换再进行比较, 不严谨。

查看原文

赞 13 收藏 9 评论 6

王小匠 发布了文章 · 2019-07-19

常见的面试问题:【CSS】CSS盒模型

一、概念

CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:外边距(margin)边框(border)内边距(padding)实际内容(content)四个属性。
CSS盒模型:标准模型 + IE模型

1.1 W3C盒子模型(标准盒模型)

标准盒模型

1.2 IE盒子模型(怪异盒模型)

IE盒子模型

二、知识点

2.1 标准模型和IE模型的区别

计算宽度和高度的不同。
标准盒模型:盒子总宽度/高度 = width/height + padding + border + margin。( 即 width/height 只是内容高度,不包含 padding 和 border 值 )
IE盒子模型:盒子总宽度/高度 = width/height + margin = (内容区宽度/高度 + padding + border) + margin。( 即 width/height 包含了 padding 和 border 值 )

2.2 CSS如何设置这两种模型

标准:box-sizing: content-box; ( 浏览器默认设置 )
IE: box-sizing: border-box;

2.3 JS如何获取盒模型对应的宽和高

(1)dom.style.width/height 只能取到行内样式的宽和高,style 标签中和 link 外链的样式取不到。
(2)dom.currentStyle.width/height (只有IE兼容)取到的是最终渲染后的宽和高
(3)window.getComputedStyle(dom).width/height 同(2)但是多浏览器支持,IE9 以上支持。
(4)dom.getBoundingClientRect().width/height 也是得到渲染后的宽和高,大多浏览器支持。IE9 以上支持,除此外还可以取到相对于视窗的上下左右的距离。
(6)dom.offsetWidth/offsetHeight 包括高度(宽度)、内边距和边框,不包括外边距。最常用,兼容性最好。

2.4 实例题(根据盒模型解释边距重叠)

例:父元素里面嵌套了一个子元素,已知子元素的高度是 100px,子元素与父元素的上边距是 10px,计算父元素的实际高度。
模型
CSS:

.parents {
   width: 100px;
   background: #FF9934;
}
.child {
  width: 100%;
  height: 100px;
  background: #336667;
  margin-top: 10px;
}

Html:

<section class='parents'>
  <div class='child'><div>
</section>

它的父元素实际高度是 100px 或 110px 都可以。主要看怎么父元素的盒模型如何设置。如以上代码:父元素不加 overflow: hidden,则父元素的实际高度为 100px; 如加上 overflow: hidden 父元素高度为 110px,给父元素创建了 BFC,块级格式化上下文。 完整案例: https://jsbin.com/dubimoyahe/...

2.5 BFC(边距重叠解决方案)

2.5.1 BFC基本概念

BFC: 块级格式化上下文
BFC基本概念:BFCCSS 布局的一个概念,是一块独立的渲染区域,是一个环境,里面的元素不会影响到外部的元素 。
父子元素和兄弟元素边距重叠,重叠原则取最大值。空元素的边距重叠是取 margin 与 padding 的最大值。

2.5.2 BFC原理(渲染规则|布局规则):

(1)内部的 Box 会在垂直方向,从顶部开始一个接着一个地放置;
(2)Box 垂直方向的距离由 margin (外边距)决定,属于同一个 BFC 的两个相邻 Boxmargin 会发生重叠;
(3)每个元素的 margin Box 的左边, 与包含块 border Box 的左边相接触,(对于从左到右的格式化,否则相反)。即使存在浮动也是如此;
(4)BFC 在页面上是一个隔离的独立容器,外面的元素不会影响里面的元素,反之亦然。文字环绕效果,设置 float
(5)BFC 的区域不会与 float Box 重叠(清浮动);
(6)计算 BFC 的高度时,浮动元素也参与计算。

2.5.3 CSS在什么情况下会创建出BFC(即脱离文档流)

0、根元素,即 HTML 元素(最大的一个 BFC
1、浮动( float 的值不为 none
2、绝对定位元素( position 的值为 absolute 或 fixed
3、行内块( display 为 inline-block
4、表格单元( display 为 table、table-cell、table-caption、inline-block 等 HTML 表格相关的属性 )
5、弹性盒( display 为 flex 或 inline-flex
6、默认值。内容不会被修剪,会呈现在元素框之外(overflow 不为 visible

2.5.4 BFC作用(使用场景)

1、自适应两(三)栏布局(避免多列布局由于宽度计算四舍五入而自动换行)
2、避免元素被浮动元素覆盖
3、可以让父元素的高度包含子浮动元素,清除内部浮动(原理:触发父 divBFC 属性,使下面的子 div 都处在父 div 的同一个 BFC 区域之内)
4、去除边距重叠现象,分属于不同的 BFC 时,可以阻止 margin 重叠

2.6 IFC

2.6.1 IFC基本概念

IFC: 行内格式化上下文
IFC基本概念:
IFC

2.6.2 IFC原理(渲染规则|布局规则):

(1)内部的 Box 会在水平方向,从含块的顶部开始一个接着一个地放置;
(2)这些 Box 之间的水平方向的 marginborderpadding 都有效;
(3)Box 垂直对齐方式:以它们的底部、顶部对齐,或以它们里面的文本的基线(baseline)对齐(默认,文本与图片对其),例:line-heigthvertical-align

更多文章分享:https://www.artroy.com.cn/

查看原文

赞 22 收藏 16 评论 0

王小匠 发布了文章 · 2019-07-17

Github 生成新的SSH密钥并添加至SSH-Agent

问题:hexo d 时出现错误 Error: ERROR: Permission to

remote: Permission to huweihuang/hexo-theme-huweihuang.git denied to wanghaijuan.
fatal: unable to access 'https://github.com/huweihuang/hexo-theme-huweihuang/': The requested URL returned error: 403
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html

Error: remote: Permission to huweihuang/hexo-theme-huweihuang.git denied to wanghaijuan.
fatal: unable to access 'https://github.com/huweihuang/hexo-theme-huweihuang/': The requested URL returned error: 403

    at ChildProcess.<anonymous> (D:\project\blog\hexo-huweihuang\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:37:17)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at ChildProcess.cp.emit (D:\project\blog\hexo-huweihuang\node_modules\cross-spawn-async\lib\enoent.js:37:29)
    at maybeClose (internal/child_process.js:925:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)

原因:huweihuang/hexo-theme-huweihuang.git 拒绝接受 wanghaijuan。说明当前有两个Github账号,可以更新博客。

在该主题下修改_config.yml中的deploy修改成自己项目地址:

clipboard.png

如果未成功,还有可能是新的Github账号没有配置好。

解决办法:在Github生成新的SSH密钥

配置步骤:

一、生成新的SSH密钥

1、打开Git Bash。

2、 进入.ssh 根目录下。

cd ~/.ssh

3、输入GitHub电子邮件地址,其中your_email@example.com是您关联的GitHub邮箱。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

4、输入保存的密钥文件并接受默认文件地址,按Enter键

// 用提供的电子邮件作为标签创建一个新的ssh密钥。(无需操作)
Generating public/private rsa key pair. 
// 输入名称并按Enter键,其中hexo_rsa可自行设置
Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):hexo_rsa

5、输入安全密码,没有则为空,按Enter键进行下一步

Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]

clipboard.png

此时,应该在默认路径下,生成了两个文件,一个是hexo_rsa,另一个是hexo_rsa.pub;

二、将SSH密钥添加到SSH-Agent

在将新的SSH密钥添加到SSH-Agent管理密钥之前,您应该检查现有的SSH密钥。

ls -al ~/ .ssh

看下返回的结果中是否已经存在了.pub结尾的文件,如果没有需要生成一个新的,如果存在了,直接看将SSH密钥配置到Github账户;

6、启动ssh-agent,执行命令:

eval $(ssh-agent -s)

返回agent的Pid:

clipboard.png

7、将SSH密钥添加到SSH-Agent,其中hexo_rsa是生成SSH设置的名称

ssh-ADD~ /.ssh/hexo_rsa

8、打开hexo_rsa.pub文件,复制其内容,然后打开Github账户,按图片步骤设置,最后将复制内容放置Key内容中,设置title,点击添加即可。

clipboard.png

验证SSH链接是否成功:
输入命令:

ssh -T git@github.com

你将会看到

clipboard.png

输入Yes就可以啦~

clipboard.png

相关链接: https://help.github.com/artic...

更多文章分享https://www.artroy.com.cn/

查看原文

赞 1 收藏 0 评论 0

王小匠 发布了文章 · 2019-07-17

Github 生成新的SSH密钥并添加至SSH-Agent

问题:hexo d 时出现错误 Error: ERROR: Permission to

remote: Permission to huweihuang/hexo-theme-huweihuang.git denied to wanghaijuan.
fatal: unable to access 'https://github.com/huweihuang/hexo-theme-huweihuang/': The requested URL returned error: 403
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html

Error: remote: Permission to huweihuang/hexo-theme-huweihuang.git denied to wanghaijuan.
fatal: unable to access 'https://github.com/huweihuang/hexo-theme-huweihuang/': The requested URL returned error: 403

    at ChildProcess.<anonymous> (D:\project\blog\hexo-huweihuang\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:37:17)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at ChildProcess.cp.emit (D:\project\blog\hexo-huweihuang\node_modules\cross-spawn-async\lib\enoent.js:37:29)
    at maybeClose (internal/child_process.js:925:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)

原因:huweihuang/hexo-theme-huweihuang.git 拒绝接受 wanghaijuan。说明当前有两个Github账号,可以更新博客。

在该主题下修改_config.yml中的deploy修改成自己项目地址:

clipboard.png

如果未成功,还有可能是新的Github账号没有配置好。

解决办法:在Github生成新的SSH密钥

配置步骤:

一、生成新的SSH密钥

1、打开Git Bash。

2、 进入.ssh 根目录下。

cd ~/.ssh

3、输入GitHub电子邮件地址,其中your_email@example.com是您关联的GitHub邮箱。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

4、输入保存的密钥文件并接受默认文件地址,按Enter键

// 用提供的电子邮件作为标签创建一个新的ssh密钥。(无需操作)
Generating public/private rsa key pair. 
// 输入名称并按Enter键,其中hexo_rsa可自行设置
Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):hexo_rsa

5、输入安全密码,没有则为空,按Enter键进行下一步

Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]

clipboard.png

此时,应该在默认路径下,生成了两个文件,一个是hexo_rsa,另一个是hexo_rsa.pub;

二、将SSH密钥添加到SSH-Agent

在将新的SSH密钥添加到SSH-Agent管理密钥之前,您应该检查现有的SSH密钥。

ls -al ~/ .ssh

看下返回的结果中是否已经存在了.pub结尾的文件,如果没有需要生成一个新的,如果存在了,直接看将SSH密钥配置到Github账户;

6、启动ssh-agent,执行命令:

eval $(ssh-agent -s)

返回agent的Pid:

clipboard.png

7、将SSH密钥添加到SSH-Agent,其中hexo_rsa是生成SSH设置的名称

ssh-ADD~ /.ssh/hexo_rsa

8、打开hexo_rsa.pub文件,复制其内容,然后打开Github账户,按图片步骤设置,最后将复制内容放置Key内容中,设置title,点击添加即可。

clipboard.png

验证SSH链接是否成功:
输入命令:

ssh -T git@github.com

你将会看到

clipboard.png

输入Yes就可以啦~

clipboard.png

相关链接: https://help.github.com/artic...

更多文章分享https://www.artroy.com.cn/

查看原文

赞 1 收藏 0 评论 0

王小匠 关注了专栏 · 2019-07-16

前端

前端开发笔记心得,同步到fed123.com

关注 1094

王小匠 发布了文章 · 2019-07-16

Github 生成新的SSH密钥并添加至SSH-Agent

问题:hexo d 时出现错误 Error: ERROR: Permission to

remote: Permission to huweihuang/hexo-theme-huweihuang.git denied to wanghaijuan.
fatal: unable to access 'https://github.com/huweihuang/hexo-theme-huweihuang/': The requested URL returned error: 403
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html

Error: remote: Permission to huweihuang/hexo-theme-huweihuang.git denied to wanghaijuan.
fatal: unable to access 'https://github.com/huweihuang/hexo-theme-huweihuang/': The requested URL returned error: 403

    at ChildProcess.<anonymous> (D:\project\blog\hexo-huweihuang\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:37:17)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at ChildProcess.cp.emit (D:\project\blog\hexo-huweihuang\node_modules\cross-spawn-async\lib\enoent.js:37:29)
    at maybeClose (internal/child_process.js:925:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)

原因:huweihuang/hexo-theme-huweihuang.git 拒绝接受 wanghaijuan。说明当前有两个Github账号,可以更新博客。

在该主题下修改_config.yml中的deploy修改成自己项目地址:

clipboard.png

如果未成功,还有可能是新的Github账号没有配置好。

解决办法:在Github生成新的SSH密钥

配置步骤:

一、生成新的SSH密钥

1、打开Git Bash。

2、 进入.ssh 根目录下。

cd ~/.ssh

3、输入GitHub电子邮件地址,其中your_email@example.com是您关联的GitHub邮箱。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

4、输入保存的密钥文件并接受默认文件地址,按Enter键

// 用提供的电子邮件作为标签创建一个新的ssh密钥。(无需操作)
Generating public/private rsa key pair. 
// 输入名称并按Enter键,其中hexo_rsa可自行设置
Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):hexo_rsa

5、输入安全密码,没有则为空,按Enter键进行下一步

Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]

clipboard.png

此时,应该在默认路径下,生成了两个文件,一个是hexo_rsa,另一个是hexo_rsa.pub;

二、将SSH密钥添加到SSH-Agent

在将新的SSH密钥添加到SSH-Agent管理密钥之前,您应该检查现有的SSH密钥。

ls -al ~/ .ssh

看下返回的结果中是否已经存在了.pub结尾的文件,如果没有需要生成一个新的,如果存在了,直接看将SSH密钥配置到Github账户;

6、启动ssh-agent,执行命令:

eval $(ssh-agent -s)

返回agent的Pid:

clipboard.png

7、将SSH密钥添加到SSH-Agent,其中hexo_rsa是生成SSH设置的名称

ssh-ADD~ /.ssh/hexo_rsa

8、打开hexo_rsa.pub文件,复制其内容,然后打开Github账户,按图片步骤设置,最后将复制内容放置Key内容中,设置title,点击添加即可。

clipboard.png

验证SSH链接是否成功:
输入命令:

ssh -T git@github.com

你将会看到

clipboard.png

输入Yes就可以啦~

clipboard.png

相关链接: https://help.github.com/artic...

更多文章分享https://www.artroy.com.cn/

查看原文

赞 1 收藏 0 评论 0

王小匠 发布了文章 · 2019-07-16

Github 生成新的SSH密钥并添加至SSH-Agent

问题:hexo d 时出现错误 Error: ERROR: Permission to

remote: Permission to huweihuang/hexo-theme-huweihuang.git denied to wanghaijuan.
fatal: unable to access 'https://github.com/huweihuang/hexo-theme-huweihuang/': The requested URL returned error: 403
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html

Error: remote: Permission to huweihuang/hexo-theme-huweihuang.git denied to wanghaijuan.
fatal: unable to access 'https://github.com/huweihuang/hexo-theme-huweihuang/': The requested URL returned error: 403

    at ChildProcess.<anonymous> (D:\project\blog\hexo-huweihuang\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:37:17)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at ChildProcess.cp.emit (D:\project\blog\hexo-huweihuang\node_modules\cross-spawn-async\lib\enoent.js:37:29)
    at maybeClose (internal/child_process.js:925:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)

原因:huweihuang/hexo-theme-huweihuang.git 拒绝接受 wanghaijuan。说明当前有两个Github账号,可以更新博客。

在该主题下修改_config.yml中的deploy修改成自己项目地址:

clipboard.png

如果未成功,还有可能是新的Github账号没有配置好。

解决办法:在Github生成新的SSH密钥

配置步骤:

一、生成新的SSH密钥

1、打开Git Bash。

2、 进入.ssh 根目录下。

cd ~/.ssh

3、输入GitHub电子邮件地址,其中your_email@example.com是您关联的GitHub邮箱。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

4、输入保存的密钥文件并接受默认文件地址,按Enter键

// 用提供的电子邮件作为标签创建一个新的ssh密钥。(无需操作)
Generating public/private rsa key pair. 
// 输入名称并按Enter键,其中hexo_rsa可自行设置
Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):hexo_rsa

5、输入安全密码,没有则为空,按Enter键进行下一步

Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]

clipboard.png

此时,应该在默认路径下,生成了两个文件,一个是hexo_rsa,另一个是hexo_rsa.pub;

二、将SSH密钥添加到SSH-Agent

在将新的SSH密钥添加到SSH-Agent管理密钥之前,您应该检查现有的SSH密钥。

ls -al ~/ .ssh

看下返回的结果中是否已经存在了.pub结尾的文件,如果没有需要生成一个新的,如果存在了,直接看将SSH密钥配置到Github账户;

6、启动ssh-agent,执行命令:

eval $(ssh-agent -s)

返回agent的Pid:

clipboard.png

7、将SSH密钥添加到SSH-Agent,其中hexo_rsa是生成SSH设置的名称

ssh-ADD~ /.ssh/hexo_rsa

8、打开hexo_rsa.pub文件,复制其内容,然后打开Github账户,按图片步骤设置,最后将复制内容放置Key内容中,设置title,点击添加即可。

clipboard.png

验证SSH链接是否成功:
输入命令:

ssh -T git@github.com

你将会看到

clipboard.png

输入Yes就可以啦~

clipboard.png

相关链接: https://help.github.com/artic...

更多文章分享https://www.artroy.com.cn/

查看原文

赞 1 收藏 0 评论 0

王小匠 发布了文章 · 2019-07-16

常见的面试问题:【JavaScript】匹配elective后的数字输出

一、问题

Url 有以下三种情况:

    var url_1 = 'https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=&local_province_id=33';
    var url_2 = 'https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=800&local_province_id=33';
    var url_3 = 'https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=800,700&local_province_id=33';

匹配 elective 后的数字输出(写出你认为的最优解法):

    [] || ['800'] || ['800','700']

二、答案

答题可以考虑下以下几点:

  • 效率高;
  • 可以扩展换 Url,换字段;
  • elective 是跟在一堆空值后面,要效率较高的排除掉前面的匹配;
  • 匹配完 elective 的值之后, & 后面的匹配需要立刻停止,减少性能消耗;
  • 第三个的 Url 中带了 ,,也要考虑其他符号的可能性。

2.1 方案一

function getUrlValue(url){
  if(!url) return;
  // let res = url.match(/(?<=elective=)(\d+(,\d+)*)/);
  // let res = /(?<=elective=)(\d+(.\d)*)/g.exec(url);
  let res = url.match(/(?<=elective=)(\d+(,\d+)*)/);
  return res ? res[0].split(',') : [];
}

其中:这个正则表达式 <=是零宽度断言的写法,断言 elective=有无内容,是匹配elective=的字符的,(?<=elective=) 是指匹配以elective=开头的字符串;
(\d+(.\d)*)指匹配数字开头,可能不定数量逗号分隔后是数字的字符串。

2.2 方案二

function getQueryFromUrl(key, url) {
  const matches = url.match(new RegExp(`(\\?|&)${key}=([^&]*)(&|$)`));
  return !matches || matches.length <= 0 ? [] : (matches[2] ? matches[2].split(',') : []);
}
getQueryFromUrl('elective' , url_1)

2.3 方案三

IE 不支持。

function getParamsUrl(url) {
  var res = new URLSearchParams(url).get('elective');
  return res ? res.split(',') : []; 
}

文章来自:Daily-Interview-Question:第10题 编程题
正则资料可参考:陈水水的个人博客 正则表达式

更多文章分享https://www.artroy.com.cn/

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 68 次点赞
  • 获得 4 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 4 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2016-10-30
个人主页被 441 人浏览