node

golang与node.js的http对比测试

╄→尐↘猪︶ㄣ 提交于 2020-03-12 17:26:51
去年的时候,曾经简单对比了一下golang和nodejs的http模块的性能,见: golang与node.js的http对比测试 那时golang还没发布go1,http模块比nodejs差得很远。 go1出来已经有一段时间了,我知道go的http模块性能已经有比较大的提升,但是最近依然见到有人提起去年写的那篇文章,为避免产生对golang的误解,对于go1的最新测试结果如下。 测试是在Ubuntu 12.04 64位系统下进行的: qleelulu@nb:~$ uname -a Linux nb 3.2.0-25-generic #40-Ubuntu SMP Wed May 23 20:30:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux qleelulu@nb:~$ sudo dmidecode | grep CPU Socket Designation: CPU Version: Intel(R) Core(TM) i5 CPU M 480 @ 2.67GHz (注:双核4线程) go的版本: qleelulu@nb:~$ go version go version go1 nodejs的版本: qleelulu@nb:~$ node -v v0.8.6 单CPU测试 nodejs是单进程,只使用一个CPU

node异步

时光毁灭记忆、已成空白 提交于 2020-03-12 09:00:55
node异步 异步函数就是当同步线程执行结束之后,才会开始执行异步队列中的函数 例如:readFile() 异步读取文件 const fs = require('fs'); fs.readFile('a.txt', (err, data) => { console.log('文件开始读取'); }); console.log('结束文件读取'); 输出结果 结束文件读取 文件开始读取 依次读取A文件、B文件、C文件 const fs = require('fs') const path = require('path') let a_path = path.join(__dirname, 'file', 'a.txt') let b_path = path.join(__dirname, 'file', 'b.txt') let c_path = path.join(__dirname, 'file', 'c.txt') fs.readFile(a_path, 'utf8', (err, data) => { if (err) throw err console.log(data) fs.readFile(b_path, 'utf8', (err, data) => { if (err) throw err console.log(data) fs.readFile(c_path,

[LeetCode] 450. Delete Node in a BST

寵の児 提交于 2020-03-12 08:40:33
删除二叉搜索树中的节点。题意是给一个二叉搜索树和一个节点key,请将key从BST中删除并维持BST的性质。例子, Example: root = [5,3,6,2,4,null,7] key = 3 5 / \ 3 6 / \ \ 2 4 7 Given key to delete is 3. So we find the node with value 3 and delete it. One valid answer is [5,4,6,2,null,null,7], shown in the following BST. 5 / \ 4 6 / \ 2 7 Another valid answer is [5,2,6,null,4,null,7]. 5 / \ 2 6 \ \ 4 7 因为是BST所以查找要删除的节点应该很简单,如果比root小就往左走,比root大就往右走。难点在于删除了节点之后如何维持剩下的节点依然是一个BST。分如下几种情况, 1. 如果要删除的节点没有左子树,则直接用这个节点的右孩子顶上来; 2. 如果要删除的节点没有右子树,则直接用这个节点的左孩子顶上来; 3. 如果要删除的节点有左右子树,需要去右子树里面找出最小的节点顶上来,这个节点是 右子树里面最小的左孩子 。(参见代码中的findMin函数)找到这个最小的左孩子,替换掉key之后

前端加解密方案探讨

假装没事ソ 提交于 2020-03-12 05:58:50
最近在做一个node项目,需要对前端传递给node端的敏感数据进行加密,并在node端对该加密数据进行解密;因为在做node项目之前,与后端配合开发过类似的需求,即前端加密后端解密;所以就尝试采用RSA非对称加密算法来实现。由于第一次采用RSA来完成加解密的整个过程,遇到了不少坑;不过由于种种原因,最后采用了AES的加密方式;下面就来说说前端加解密实现方案。 RSA加解密算法 实现思路 当然首先想到采用的加解密算法就是 RSA ,其关键在于算法的 公钥/秘钥 。其主要用法: 算法生成一份公钥和私钥,其中公钥是公开的,所有人都可以知道,私钥是保密的 用公钥解密,要用私钥解密 于是,基于RSA算法来实现加解密,找到了对应的浏览器端库 jsencrypt 和node端的库 node-rsa 来实现具体的功能。 具体实现思路: 使用 jsencrypt 在前端实现用公玥加密,使用 node-rsa 在node端用私钥解密。 遇到的坑 由于采用的是RSA算法,所以需要前后端约定具体的公钥和私钥。怎么生存公钥私钥呢? 于是根据 jsencrypt 库的介绍,使用 openssl 方式来生成对应的公钥和私钥。于是生成的公钥和私钥大概是如下样子: // 私钥 -----BEGIN RSA PRIVATE KEY-----

node中同步异步编程理解(promise)

余生长醉 提交于 2020-03-12 04:39:14
同步API 说明:同步API执行顺序是:只有当前API执行完毕之后,才能继续执行下一个API,从上到下依次执行 异步 说明:异步API:当前的API并不阻塞后边的代码的执行,而且所有带箭头函数的ApI都是函数 图中的代码并不是我们想象中的按照顺序依次执行的1111,222,333,444,而是先执行111,444,然后执行222,然后333,为什么呢? 很简单:因为上边有两个异步API,不会依次执行而是遇到异步代码,先放到异步执行区,先把同步代码依次执行完毕之后然后执行异步代码。 同步API和异步API的区别(获取返回值) 说明:同步代码可以从返回值中拿到执行结果,但是异步代码是不可以获取执行结果。 异步代码不管执行几遍结果都是undefined。 那么异步函数怎么样才能拿到执行的结果呢,在这里我们使用毁掉函数(callback) 异步函数小案例 依次读取a,b,c文件使用回调函数 1创建a,b,c文本文件 这样就可以依次执行a,b,c文件了可是这样使用回调函数嵌套的超级超级多,这样代码少看不出来,要是代码上百上千行的话,非得给我们看头晕了。就像梦中梦一样永远醒不过来了。name我们使用promise解决这个回调地狱的问题。 使用promise依次执行a,b,c文件。 这样依次执行就算有成百上千的代码我们也不会懵啦。。。。 来源: CSDN 作者: 月亮不说谎! 链接: https

求助c语言单链表操作问题

佐手、 提交于 2020-03-12 02:02:05
这里是刚学习数据结构的小白,有个问题想请教一下。 //结构体声明 typedef struct Node { ElemType data ; struct Node * next ; } Node , * LinkList ; //初始化单链表 void InitList ( LinkList * L ) { * L = ( LinkList ) malloc ( sizeof ( Node ) ) ; ( * L ) -> next = NULL ; } LinkList 本来就是一个结构体指针 这里为什么用LinkList *L 我将程序写成 void InitList(LinkList L){ L=(LinkList) malloc(sizeof(Node)); L->next=NULL; } 他会出现报错 包括写逆置算法的时候也用到了 来源: CSDN 作者: weixin_45840488 链接: https://blog.csdn.net/weixin_45840488/article/details/104802990

(1)k8s集群部署

会有一股神秘感。 提交于 2020-03-12 01:51:24
K8S介绍: 官方文档: https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/ (1)添加阿里docker 源 shell> wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo (2)安装docker shell>yum -y install docker-ce shell>docker -v shell> systemctl enable docker shell>systemctl start docker (3)安装kubernetes,增加源 shell> cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl= https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey= https://mirrors.aliyun.com/kubernetes/yum/doc

JavaScript中Element与Node的区别,children与childNodes的区别【转】

妖精的绣舞 提交于 2020-03-11 20:10:00
 关于Element跟Node的区别,cilldren跟childNodes的区别很多朋友弄不清楚,本文试图让大家明白这几个概念之间的区别。   Node(节点)是DOM层次结构中的任何类型的对象的通用名称,Node有很多类型,如元素节点,属性节点,文本节点,注释节点等,通过NodeType区分,常见的有: 节点类型 NodeType 元素element 1 属性attr 2 文本text 3 注释comments 8 文档document 9   更多节点类型参考: https://developer.mozilla.org/en-US/docs/DOM/Node.nodeType?redirectlocale=en-US&redirectslug=nodeType    Element继承了Node类,也就是说Element是Node多种类型中的一种 ,即当NodeType为1时Node即为ElementNode,另外Element扩展了Node,Element拥有id、class、children等属性。   以上就是Element跟Node的区别。   那么用document.getElementById("xxx")取到的是Node还是Element呢?我们来测试一下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"

Nodejs WEB开发常用库和框架

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-11 19:39:45
我在Nodejs的体系里也算泡了很久了,的确非常喜欢javascript和Nodejs. 在我看来,用nodejs做web开发有以下几个优点: Javascript作为一个语法异常简单的脚本语言,约束较少,开发效率比较高. Nodejs在设计时就考虑了依赖管理,有一个成熟的npm机制,在使用过程中很少遇到版本问题. Javascript的语法非常灵活,而且它的基于prototype的链式集成机制,obj[property]和obj.property的混用可以创造出很多变化. 对于JSON的天然支持 原生的异步编程机制和单线程的工作方式,因此不像同步模型需要锁等机制 javascript可以让前后端开发语言统一,现在不少框架把网络通讯层进行了封装.前后端的区别更加模糊. 特别是现在前端的逻辑越来越复杂,单页面的web app程序越来越流行. 相信Nodejs会被更多的互联网公司接受. 这篇文章简单记录下我经常用到的一些库或者框架,仅供参考. 标准LIB path path库最常用的就是path.join了,另外path.extname也经常能用到. path和require机制配合可以做模块的动态加载等一些功能. fs fs是nodejs的文件管理模块,常用的几套api有: readFile[Sync], writeFile[Sync]等用来读取文件内容的. lstat,

Python实现完全二叉树以及遍历

早过忘川 提交于 2020-03-11 17:57:09
在学校刚刚学到的二叉树是用C语言来实现的,还涉及到了指针等操作。最近疫情原因不能开学,就自己学习了一下Python,就拿Python来试着实现一下,顺便再复习一下二叉树的一些知识。 本文使用Python来构建一个完全二叉树,并且实现树结点添加,层次遍历,先序遍历,中序遍历,后序遍历。 由于我自己对二叉树的理解也不是很深,所以关于二叉树的理论知识就只能自行脑补了,这里直接开始实现了,在实现的过程中也可能会有一些错误,还请大佬们批评指正。 以下为实现的思路,完整代码以及输出可以直接滑倒最后查看。 创建结点 首先创建一个结点的类,结点含有数据和左子,右子,创建后就直接将左子,右子初始化为None,数据则从外部输入进去。 # 创建一个结点的class class Node(object): def __init__(self,valua): self.valua = valua self.Lchild = None self.Rchild = None 然后创建一个二叉树的类,因为结点已经创建了一个node的类,这里只需要初始化一个根结点为None就可以了。 # 创建一个二叉树class class Btree(object): def __init__(self): # 初始化根结点 self.root = None 添加结点 接下来就可以来实现添加结点的funtion类。