JavaScript生成GUID的有余算法小结

JavaScript生成GUID的有余算法小结

来点不雷同的…

DevTools Challenger
是贯彻了“边做边学”观念的三个一级棒的的样板,尽管它的始末和 JavaScript
语言非亲非故。它是 Rachel Nabors
开拓的1套显示案例,用来演示通过 Firefox 的开采者工具来调度 CSS
动画的各样形式。

澳门新萄京8522 1

就算 CSS
动画不是笔者的菜,但自个儿依旧挺喜欢开拓者工具的。在自己见过的牵线开采者工具的网址里,这一个项目可能是分界面最卓越、同时也是最温馨的3个。

运营代码

成就职务后,能够用如下二种方法运营代码:
方式1:

node 程序文件.js

方式2:

learnyounode run 程序文件.js

错误 #十:不利用管理程序

甭管您的 Node.js
代码运维在生产条件依旧地点开荒情况,三个监察和控制管理程序能很好地管理你的顺序,所以它是多个老大实惠并值得具有的东西。开垦者设计和兑现当代选用时平日推荐的3个极品实施是:赶快失利,连忙迭代。

一经发生二个预期之外的荒唐,不要试图去管理它,而是让您的顺序崩溃,并有个监察和控制者在几秒后重启它。管理程序的便宜不止是重启崩溃的主次。那么些工具允许你重启崩溃的次序的同时,也允许文件发出改换时重启程序。这让开垦Node.js 程序成为1段更欢跃的体验。

有不少 Node.js 可用的军管程序。比如:

  • pm2
  • forever
  • nodemon
  • supervisor

全数那几个工具各有高低。一些有益在同二个机械里管理多个应用程序,而别的擅长于日志管理。不过,倘诺您想起来应用那么些程序,它们都是很好的采用。

复制代码 代码如下:

NodeSchool

NodeSchool  并不只是
Node.js,事实上它回顾了有关JavaScript 的各样学科。课程覆盖了从
JavaScript 基础到 Node(既然叫NodeSchool当然要有Node。) 乃至 WebGL
的始末。你能够先安装最感兴趣的教程, 可一旦还不熟悉 JavaScript
的话,小编推荐从 javascripting 课程初步。

Shell

npm install -g javascripting

1
npm install -g javascripting

然后只要求在命令行里输入 javascripting

澳门新萄京8522 2

本条赏心悦目标古典风格菜单会唤醒您挑选1个子学科,然后实际的指点和练习消息就能显得出来。

澳门新萄京8522 3

留意上边最后两行内容,那么些命令行程序 javascripting
还能够够证实你写的次第是或不是符合供给。你假设写好解题代码,然后到命令行里去做到验证就足以成功相应的子课程了。

上面是表达被作者有意写错的代码时的输出:

澳门新萄京8522 4

你能够见到此间的提携音信一定详尽——
其实还有越多的音讯尚未显示出来,因为显示器上实际展现不下了。当然,javascripting
毕竟是给没接触过 JS
的人策动的科目。就算本人不以为别的的课程也会提供那样多援助,但本身眼下还没被哪些难题难倒过。这里的标题一般壹分钟内就能够消除——最多也就三十几分钟。那几个顺序还会随着你的速度贴心地方统一规范记出你成功的勤学苦练,以及还有啥样挑衅等着你。

澳门新萄京8522 5

前方作者谈起,你可以在 NodeSchool 找到各体系型的教程。他们还有二个有关 ES六的学科,所以假设你想获得部分有关那项热点才具的左边经验,NodeSchool
会是二个能帮你神速调控它的绝佳选用。

澳门新萄京8522 6

NodeJS 开荒者的 拾 个常见错误

2015/06/16 · CSS澳门新萄京8522, · 1
评论

本文由 伯乐在线 –
刘健超-J.c
翻译,黄利民
校稿。未经许可,禁止转发!
英文出处:www.toptal.com。招待加入翻译组。

自 Node.js
公诸于世的那一刻,就陪伴着赞美和冲突的声音。那些争辩仍在不停,而且并不会急速烟消云散。而大家经常忽视掉这么些争议发生的原委,每一个编制程序语言和平台都以因一些难点而十分受切磋,而那个难点的发出,是取决于大家什么样利用这几个平台。不管有多难工夫写出平安的
Node.js
代码,或有多容易写出高并发的代码,该平台已经有十分的短一段时间,并已被用来创建2个数额庞大、稳健和老成的
web 服务器。这一个 web 服务器伸缩性强,并且它们经过在 Internet
上安居的运维时刻,证明本人的安静。

但是,像任何平台同样,Node.js
轻便因开采者难点而惨遭商酌。一些谬误会骤降质量,而别的一些标题会让
Node.js 直接崩溃。在那篇小说里,大家将会聊一聊关于 Node.js 新手的 拾3个常犯错误,并让她们精通怎样幸免那么些不当,从而成为一名 Node.js 高手。

澳门新萄京8522 7

GUID是壹种由算法生成的2进制长度为1二十3人的数字标志符。GUID
的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,在那之中的 x 是 0-玖 或 a-f
范围内的二个三十六位十6进制数。在地道图景下,任何Computer和Computer集群都不会转换七个同样的GUID。

其他的选项

当然那一类的求学能源还有众多。上面列出了别样多少个能够思虑的选项,像现在同等,笔者建议大家把温馨行使过的接近工具发到上面包车型地铁批评区里,和大家共同享受。

  • The JavaScript Warrior – 
    在品味通过代码调整三个猛士的经过中上学和练习 JavaScript。
  • WarriorJS –
    跟上面贰个好像的编制程序挑战。
  • Untrusted – 用你的
    JavaScript 来对抗邪恶大学生!

打赏援助自个儿翻译更加多好小说,多谢!

打赏译者

证实代码

在规定职分成功后,用如下命令验证你的程序与任务的供给是还是不是一样:

learnyounode verify 程序文件.js

地方命令运营达成后,会转换测试报告。固然注脚成功,该科目会被标志为完成。若是战败,能够在测试报告中观测程序的预期值和实际的值的差距,修改代码后,实施
learnyounode run 程序文件.js 再举行验证。

输入 learnyounode 进入下1个科目的就学。

错误 #3:函数嵌套过深

函数嵌套过深,时常被叫作“回调函数鬼世界”,但那并不是 Node.js
本身难点。可是,那会促成三个主题素材:代码异常的快失去调整。

JavaScript

function handleLogin(…, done) { db.User.get(…, function(…, user) {
if(!user) { return done(null, ‘failed to log in’) }
utils.verifyPassword(…, function(…, okay) { if(okay) { return
done(null, ‘failed to log in’) } session.login(…, function() {
done(null, ‘logged in’) }) }) }) }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function handleLogin(…, done) {
db.User.get(…, function(…, user) {
if(!user) {
return done(null, ‘failed to log in’)
}
utils.verifyPassword(…, function(…, okay) {
if(okay) {
return done(null, ‘failed to log in’)
}
session.login(…, function() {
done(null, ‘logged in’)
})
})
})
}

澳门新萄京8522 8

职分有多复杂,代码就有多倒霉。以那种措施嵌套回调函数,大家很轻巧就能际遇难题而夭亡,并且难以阅读和保卫安全代码。一种替代形式是以函数声明那几个任务,然后将它们连接起来。就算,有壹种最干净的点子之1(有争辩的)是利用 Node.js 工具包,它尤其管理异步 JavaScript
情势,举个例子 Async.js :

JavaScript

function handleLogin(done) { async.waterfall([ function(done) {
db.User.get(…, done) }, function(user, done) { if(!user) { return
done(null, ‘failed to log in’) } utils.verifyPassword(…, function(…,
okay) { done(null, user, okay) }) }, function(user, okay, done) {
if(okay) { return done(null, ‘failed to log in’) } session.login(…,
function() { done(null, ‘logged in’) }) } ], function() { // … }) }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function handleLogin(done) {
async.waterfall([
function(done) {
db.User.get(…, done)
},
function(user, done) {
if(!user) {
return done(null, ‘failed to log in’)
}
utils.verifyPassword(…, function(…, okay) {
done(null, user, okay)
})
},
function(user, okay, done) {
if(okay) {
return done(null, ‘failed to log in’)
}
session.login(…, function() {
done(null, ‘logged in’)
})
}
], function() {
// …
})
}

接近于 “async.waterfall”,Async.js
提供了大多别的函数来化解不一样的异步情势。为了简洁,我们在那边运用2个较为轻便的案例,但事实上景况屡屡更糟。

全局唯1标记符(GUID,Globally Unique Identifier)也称作
UUID(Universally Unique IDentifier) 。

打赏帮衬本人翻译越来越多好作品,谢谢!

任选壹种支付格局

澳门新萄京8522 9
澳门新萄京8522 10

1 赞 7 收藏
评论

越来越多课程

上文提到是 NodeSchool 中 Node.js 相关的科目,除却,NodeSchool
还隐含: JavaScriptWebGL函数式编程Gitnpm
等一群课程。那么些学科能够在官网的首页中找到。

世家会用学会 NodeSchool 了呢~
点击这里 报名,一同学起来吧!

打赏帮忙笔者翻译越来越多好小说,多谢!

任选1种支付办法

澳门新萄京8522 11
澳门新萄京8522 12

1 赞 7 收藏 1
评论

复制代码 代码如下:

Js-assessment (js-测验)

先是个工具是 Rebecca Murphey
写的 js-assessment ,
它的着力其实正是1组测试用例。每条测试用例都代表贰个内需您解决的主题素材。当你通过修改代码让某条测试通过,你也就做到了对应知识点的调查。

来看1 个 arrays 文件里的粗略的例证:

JavaScript

indexOf : function(arr, item) { },

1
2
3
indexOf : function(arr, item) {
 
},

如你所见,这里给出了三个空函数和它的参数,你须求贯彻该函数的中间逻辑来让它根据期望的艺术工作,从而让相应的自动化测试用例成功。然而有的时候你须求落成怎么着的效益并不易于1眼就看出来,比方一样在
arrays 文件里有这么一个函数:

JavaScript

curtail : function(arr) { },

1
2
3
curtail : function(arr) {
 
},

自身探讨了1番才搞驾驭(但那便是学习的经过,对吧?),原来它应当达成的功能是去除数组中的第多个成分。

在编写代码的经过中,你能够随时在浏览器里查看当前享有测试用例的试行结果。下图展现的是自己实现在那之中部分考试时的气象。

澳门新萄京8522 13

有关这些项目本身最欣赏的一点是:你能够一回只消除3个测试用例,从而一小点地做到整个项目,而毫不1次性投入太多时光。

开头上学

在命令行中实践 learnyounode 。接纳想学的课程,按回车键,起始攻读。

若是读了义务的讲述和唤醒,你依然不了然无法入手,能够到钻探区提问。

错误 #5:用“exports”,而不是“module.exports”

Node.js
将各类文件视为五个孤立的小模块。假诺您的包(package)含有四个文本,可能是
“a.js” 和 “b.js”。因为 “b.js” 要博得 “a.js” 的功力,所以 “a.js”
必须经过为 exports 对象增添属性来导出它。

JavaScript

// a.js exports.verifyPassword = function(user, password, done) { … }

1
2
// a.js
exports.verifyPassword = function(user, password, done) { … }

当如此操作后,任何引入 “a.js” 模块的文书将会收获贰个带有属性方法
“verifyPassword” 的靶子:

JavaScript

// b.js require(‘a.js’) // { verifyPassword: function(user, password,
done) { … } }

1
2
// b.js
require(‘a.js’) // { verifyPassword: function(user, password, done) { … } }

而是,假设大家想一直导出这些函数,而不是当做有个别对象的性质呢?大家能通过覆盖
exports 对象来实现这么些目的,但大家无法将它正是三个全局变量:

JavaScript

// a.js module.exports = function(user, password, done) { … }

1
2
// a.js
module.exports = function(user, password, done) { … }

在意,大家是什么将 “exports” 作为 module
对象的三性情能。在此间了然 “module.exports” 和 “exports”
之间差异是可怜主要的,并且那平时会促成 Node.js 开垦新手们发生挫败感。

function uuid() {
    var s = [];
    var hexDigits = “0123456789abcdef”;
    for (var i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10),
1);
    }
    s[14] = “4”;  // bits 12-15 of the time_hi_and_version field to
0010
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7
of the clock_seq_hi_and_reserved to 01
    s[8] = s[13] = s[18] = s[23] = “-“;

Advent of Code(代码降临,又名穷凶极恶之塔)

接下去那些是自己最爱——呃只怕是最厌恶的一个品种——好吧,笔者正是那般二个往往无常的人。 在上一季度的圣诞季,小编公布
Advent of
Code 的时候,他扬言那是一种能够用来「轻便欢乐地」打发圣诞节休假的秘籍。这中间的每种编制程序挑战都跟圣诞节大旨相关,而且种种都含有多少个难题。然而貌似意况下,只必要在率先道题的答案上做一点都不大退换就会博得第1道的答案。

澳门新萄京8522 14

这一个标题并不限量使用的编程语言,所以您能够用它来读书其余语言,而不只是
JavaScript。刚初叶的首先道题很轻易:

澳门新萄京8522 15

要做到这一题,只要读取给定的要命十分短的输入字符串、解析它的剧情并开展简短计算就足以了。上边是自身的解题代码——是的,小编知道这并不是最佳的解法,可是对自身的话够用了。

JavaScript

var input = ‘()(((( LOTS OF TEXT REMOVED ()(‘; var floor = 0; for(var
i=0;i<input.length;i++) { var char = input.charAt(i); if(char ===
‘(‘) floor++; if(char === ‘)’) floor–; } console.log(“Done – “+floor);

1
2
3
4
5
6
7
8
9
10
11
var input = ‘()((((  LOTS OF TEXT REMOVED ()(‘;
 
var floor = 0;
 
for(var i=0;i<input.length;i++) {
    var char = input.charAt(i);
    if(char === ‘(‘) floor++;
    if(char === ‘)’) floor–;
}
 
console.log("Done – "+floor);

那1题的第一有的也很轻巧 ——笔者只花了大概一分钟时间改了须臾间代码,就能够让代码在循环中保留符合条件的丰富值了。

看起来有点儿意思对吗?可是那些标题的难度快速就能进步到令人懊丧的品位(至少对自个儿来说)。比方第二肆题:给您1组包裹和她们的分量音信,你供给把那么些包裹分为三组,并确认保证每种组里包裹的份额之和卓绝。噢对了,要保管第3组的包装数量是微小的,那样圣诞老人才有地点坐…噢还有!第2组还要保障最小的“量子纠缠态”——
那个值是将具有包裹的轻重相乘求积得来的。

在做那壹题的时候,笔者作弊了…
事实上小编大概一共没羞没臊地作弊了四题。那个标题都有对应的 Reddit
博客链接,你能够在地点学习人家的解法。对于那几道难住本身的题,作者在这里找到了其余语言完毕的解法,并应用他们的解题思路转变来JavaScript 落成了挑衅。

介绍

NodeSchool
是二个针对性初学者,教授 Web 开垦本领的无偿开源教程(NodeSchool
包罗一群教程,不仅仅是 Node.js 的)。

NodeSchool
的学科由一多级义务构成,每一种职责除了健康的叙说,还有详细的晋升。如下图所示:

澳门新萄京8522 16

错误 #8:忽略了 Streaming(流) API 的优势

大家都说想建构叁个微型代理服务器,它能响应从其它服务器获取内容的呼吁。作为3个案例,我们将创设三个供应
Gravatar
图像的袖珍 Web 服务器:

JavaScript

var http = require(‘http’) var crypto = require(‘crypto’)
http.createServer() .on(‘request’, function(req, res) { var email =
req.url.substr(req.url.lastIndexOf(‘/’)+1) if(!email) {
res.writeHead(404) return res.end() } var buf = new Buffer(1024*1024)
http.get(”),
function(resp) { var size = 0 resp.on(‘data’, function(chunk) {
chunk.copy(buf, size) size += chunk.length }) .on(‘end’, function() {
res.write(buf.slice(0, size)) res.end() }) }) }) .listen(8080)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var http = require(‘http’)
var crypto = require(‘crypto’)
 
http.createServer()
.on(‘request’, function(req, res) {
var email = req.url.substr(req.url.lastIndexOf(‘/’)+1)
if(!email) {
res.writeHead(404)
return res.end()
}
 
var buf = new Buffer(1024*1024)
http.get(‘http://www.gravatar.com/avatar/’+crypto.createHash(‘md5’).update(email).digest(‘hex’), function(resp) {
var size = 0
resp.on(‘data’, function(chunk) {
chunk.copy(buf, size)
size += chunk.length
})
.on(‘end’, function() {
res.write(buf.slice(0, size))
res.end()
})
})
})
.listen(8080)

在那么些十二分例子中有三个 Node.js 难题,大家从 Gravatar
获取图像,将它读进缓存区,然后响应请求。那不是3个多么糟糕的题材,因为
Gravatar
重临的图像并不是不小。不过,想象一下,倘若大家代理的始末大小有数不清兆。那就有1个更加好的章程了:

JavaScript

http.createServer() .on(‘request’, function(req, res) { var email =
req.url.substr(req.url.lastIndexOf(‘/’)+1) if(!email) {
res.writeHead(404) return res.end() }
http.get(”),
function(resp) { resp.pipe(res) }) }) .listen(8080)

1
2
3
4
5
6
7
8
9
10
11
12
13
http.createServer()
.on(‘request’, function(req, res) {
var email = req.url.substr(req.url.lastIndexOf(‘/’)+1)
if(!email) {
res.writeHead(404)
return res.end()
}
 
http.get(‘http://www.gravatar.com/avatar/’+crypto.createHash(‘md5’).update(email).digest(‘hex’), function(resp) {
resp.pipe(res)
})
})
.listen(8080)

那边,大家收获图像,并简要地因此管道响应给客户端。绝无需大家在响应之前,将全体内容读取到缓冲区。

      // rfc4122 requires these characters
      uuid[8] = uuid[13] = uuid[18] = uuid[23] = ‘-‘;
      uuid[14] = ‘4’;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图