dream

一个菜鸟程序员的成长历程

0%

你不知道的 javascript

作用域

作用域了解了 lhs 和 rhs 两种查找方式

  • lhs, 赋值左侧查找,需要找到变量,然后进行赋值,如果没找到,在非严格模式下会创建变量,严格模式会抛出 ReferenceError 异常
  • rhs,非赋值左侧查找,在引用的时候使用这种查找,在作用域里面如果没有查到,会直接抛出 ReferenceError 异常,而如果你查到了,但是操作不合法,比如试图对一个非函数类型的值进行函数调用,或者引用 null 或 undefined 类型的值中的属性,那么会抛出 TypeError 异常

ReferenceError和作用域的判别失败有关,而TypeError则是代表作用域里面找到了,但是对结果的操作是非法或者不合理的

阅读全文 »

竞选流程

etcd内部采用raft协议来实现,所以在etcd里面,节点有3个状态,一开始都是follower节点,然后接收leader的心跳信息,如果接收不到,就进入candidate进入下一轮term发起竞选,等到收到集群多数节点的投票时,该节点就会转变成新的leader节点。leader节点有可能出现故障,导致follower接收不到心跳,这时候就会发生上面的竞选,新的leader产生以后,旧的leader就会变成follower。其实就是有新的leader之后,所有其他节点都会变成follower。

成为leader也是有条件的,比如你的数据完整性,在竞选投票的时候,如果其他节点发现你的数据不完整,是不会给你投票的。

节点损坏

节点可能会因为各种原因损坏,导致无法正常工作。如果是leader节点那么就会导致follower收不到心跳而触发竞选机制,如果是follower节点,那么我们可以将这个节点删除以后在创建新的节点。因为损坏的节点依然会被计算在etcd总节点之中。

etcd采用基于仲裁模型的分布式共识,即(n + 1) / 2成员(多数)必须就提案一致才能提交给集群。因此当有follower损坏的时候,我们需要先删除在创建,而不能先创建在删除。

比如:如果有一个3个成员的集群,有一个成员损坏,那么这个集群仍然可以正常工作,这个时候删除损坏成员,该集群依然可以正常工作,然后添加新节点,这个行为是存在风险的,因为他可能会导致配置错误或无法加入集群,这种情况下,集群依然可以正常工作。而如果正确加入,依然可以正常工作。那我们想一下先增加新成员,如果增加失败,那么该集群总成员数量变成4个,而其中有1个早已损坏,还有一个刚添加的同样算是损坏,这将会使仲裁失效,所以默认情况下,etcd会拒绝这种成员的添加。

阅读全文 »

安装

可以参考etcd的github

https://github.com/etcd-io/etcd

如果是mac的话,简单的方式应该是运行如下命令

brew install etcd

介绍

etcd是一个分布式键值存储,旨在可靠,快速地保存和提供对关键数据的访问。它通过分布式锁定,领导者选举和写入障碍实现可靠的分布式协调。etcd集群旨在实现高可用性和永久数据存储和检索。

启动

可以使用goreman来在本地启动多个节点

阅读全文 »

素数对猜想

题目

“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。

输入例子

20

输出例子

4

解题思路

这个比较简单,看题目,能确定一点,一个素数对,有两个相差 2 的素数组成。那么接下来就可以用 n除以2根号n之中的任意一个数,如果能被整除,那么就不是素数,如果不能被整除,那么就是一个素数。如果发现了一个素数,那么就用这个素数相差2的数再去判断,如果还是素数,那么就有了一个素数对。

阅读全文 »

打印沙漏

题目

顾名思义,就是要输出一个沙漏,那么什么是沙漏呢,就是下面的样子了

1
2
3
4
5
*****
***
*
***
*****

也就是要给我们n个*,这个沙漏每一行的 符号 数量都是奇数,因此是有规律的。

阅读全文 »

导出excel

关于excel,相信这玩意大家都用过,我们这边,主要运营那边,对这些数据导出很有需要,之前拿php做过,因为现在改用node了,所以这边要用node来搞。

export-xlsx

excel-export 这个库你们也可以用用,简单实用,我一开始用的这个,只不过后来不满足我的需求了,所以改用了node-xlsx

https://github.com/functionscope/Node-Excel-Export

node-xlsx

来说说node-xlsx这个东西吧,非常简单上手,我这种node新人也可以用明白,不容易啊,哈哈。

阅读全文 »

常用的 git 命令不多,反正我就是那几个

1
2
3
4
5
git status
git branch
git checkout
git commit
git diff

虽然看起来也不长,但是我还是喜欢简写,哈哈,说一下怎么配置

阅读全文 »

全新的gitment 评论上线啦!

小伙伴们可以评论啦,开不开心,惊不惊喜,本来看网上说用 多说 的,结果发现 多说 没了? 没了? 没了? excuse me?
然后,苦逼的我只能继续找,就发现了这个 gitment ,感觉不错,来用一用,瞬间高大上啊,这个 next 主题 好像已经集成好 gitment 了,
我们只用简单设置一下就能用了,舒服。

注册OAuth Application

https://github.com/settings/applications/new

上面的连接,点击注册,会让你输入4个东西

Application name
Homepage URL
Application description
Authorization callback URL

最后 这个东西 要填你 博客的 url ,点进去之后 都会有说明。弄完之后 会出现两个东西

Client ID
Client Secret

这两个东西 大家 要记住了。接下来配置的时候会用到。

配置 next

打开我们的站点配置文件 _config.yml 然后找到 gitment。

enable: true
mint: true # RECOMMEND, A mint on Gitment, to support count, language and proxy_gateway
count: true # Show comments count in post meta area
lazy: false # Comments lazy loading with a button
cleanly: false # Hide 'Powered by ...' on footer, and more
language: 语言
github_user: 你的 github 名
github_repo: 你的仓库名
client_id: 刚刚的 Client ID
client_secret: 刚刚的 Client Secret

配置完之后 就可以 看一下效果了。

后记

来看一下 这玩意有哪些坑吧
在配置的时候 blog/themes/next/layout/_third-party/comments/gitment.swig 这个文件的时候,下面这些取得都是配置里面设置的,一定要一一对应哦

{% set owner = theme.gitment.github_user %}
{% set repo = theme.gitment.github_repo %}
{% set cid = theme.gitment.client_id %}
{% set cs = theme.gitment.client_secret %}

错误

error:not found

这个错误的话,你就要仔细检查上面的参数啦,一定是owner 和 repo 这两个参数有问题,和你github上面的用户名和仓库名 不一样导致的

初始化

关于初始化,这个评论是需要初始化的,嗯,每个文章你都要去初始化,很麻烦。对于我这种没几个文章的来说,还行。
在 gitment.swig 这个文件里面 有这样一处代码

1
2
3
4
5
6
7
8
9
var gitment = new Gitment({
id: '{{page.article}}',
owner: '{{owner}}',
repo: '{{repo}}',
oauth: {
client_id: '{{cid}}',
client_secret: '{{cs}}',
}
});

这个里面 有个 id 的设置 他默认的是 location.href,这个时候大家注意了,因为这个东西 本质是创建一个 issue,然后他创建的时候,会有一个 label 传过去,来区分你每个文章的评论,他传的是什么呢,是一个数组, 最最重要的是,这tm有长度限制,你用 href 的话,基本是超出的,反正我是,然后我试了一下 pathname ,依然超出。

网上有人用的是时间,也有标题,我就不一样了,我给每个文章加了个 article 来区分他们。使用方法就是上面那样。我也用过时间,然后他告诉我 不是 string or object ,晕,标题,万一没控制好超长了就不好玩了。大家根据需求来就行了,有问题的欢迎评论。

[
    gitment,
    你写的id
]