node

并发编程的艺术07-非阻塞同步演进

ぃ、小莉子 提交于 2020-04-06 11:32:16
前言 不知道大家有没有发现几乎每个专业领域中都充斥着很多抽象的专业名词,如果没有相关的基础知识很难知道这些专业名词是什么意思,就比如说我们的这个标题“粗粒度同步”。川建国听了想骂娘,什么是TMD“粗粒度同步”?最近我对理查德·费曼做了一些了解,他在阐述一个事物的时候强调要用通俗易懂的语言,让人容易理解的方式而不是专业名词满天飞。对于一个事物能够给一个孩子或者是一个对此不了解的外行人讲明白就说明你自己是真的明白了。所以我们的技术类文章也会力求用通俗易懂的方式把事物讲的让人更容易理解,而不是使用大量的专业名词。 本章内容我们将以一个集合作为例子,集合中有 add , remove ,contains 三个函数。 add(x) 函数将元素 x 添加到集合中,当且仅当集合中原先不存在 x 时返回 true。 remove(x) 函数将元素 x 从集合中删除,当且仅当集合中原来存在 x 的时候返回 true 。 当且仅当集合中包含 x 元素时 contains(x) 返回 true。 链表中除了包含集合元素的常规节点外,还使用了两个称为 head , tail 的哨兵节点,作为链表的第一个节点和最后一个节点。哨兵节点不能被添加,删除,或查找,它们的 key 值分别为整数值的最小和最大值,也就是说 key 值越大的元素排序越靠后。 粗粒度同步 “粗粒度同步

[刷题] LeetCode 237 Delete Nodes in a Linked List

六月ゝ 毕业季﹏ 提交于 2020-04-06 08:55:37
要求 给定链表中的一个节点,删除该节点 思路 通过改变节点的值实现 实现 1 struct ListNode { 2 int val; 3 ListNode *next; 4 ListNode(int x) : val(x), next(NULL) {} 5 }; 6 7 class Solution { 8 public: 9 void deleteNode(ListNode* node) { 10 11 if( node == NULL ) 12 return; 13 14 if( node->next == NULL){ 15 delete node; 16 node = NULL; 17 return; 18 } 19 20 node->val = node->next->val; 21 ListNode* delNode = node->next; 22 node->next = delNode->next; 23 24 delete delNode; 25 26 return; 27 } 28 }; View Code 来源: https://www.cnblogs.com/cxc1357/p/12640500.html

树莓派搭建 Hexo 博客(一)

纵然是瞬间 提交于 2020-04-06 05:50:58
Hexo 一个开源的博客框架,本文记录了一下在树莓派上搭建 Hexo 博客的过程。 什么是 Hexo? Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 在发布时,Hexo 可以部署在自己的 Web 服务器上面,也可以部署 GitHub 上面,在这里,我们要把她部署到我们的树莓派上! Hexo官网: https://hexo.io 一、安装 node.js 的 arm 环境 Node.js 官网 已经提供了编译好的镜像供各种架构使用,使用 uname -a 查看 pi 的 CPU 信息,如下: Linux raspberrypi 4.1.19+ #858 Tue Mar 15 15:52:03 GMT 2016 armv6l GNU/Linux 可以得知我们手中的 pi 是基于 arm6l 架构的,因此在这里对应下载如下包: mkdir ~/node_js cd node_js sudo wget http://nodejs.org/dist/latest-v5.x/node-v5.11.1-linux-armv6l.tar.gz sudo tar zxvf node-v5.11.1-linux-armv6l.tar.gz sudo mv node-v5.11.1-linux

如何可以使用crypto-js

梦想的初衷 提交于 2020-04-06 02:12:54
尝试了github上的https://github.com/brix/crypto-js 学了用npm安装包https://www.runoob.com/nodejs/nodejs-npm.html 看了好多遍README.md 搞得心力憔悴,两三个小时,就是不能跑。最后找到这篇博客https://blog.csdn.net/weixin_43953753/article/details/86018134,一下子解决了。 总之,在你的html文件里直接加上下面这行代码 <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js"></script> 然后就可以快乐地使用crypto-js内置的各种加密算法了。 来源: https://www.cnblogs.com/hardcoreYutian/p/12640229.html

一致性Hash算法原理白话

拥有回忆 提交于 2020-04-05 23:18:05
1、技术背景 1.1、技术举例:Memcache 1.2、技术瓶颈 memcached服务器端本身不提供分布式cache的一致性,由客户端实现提供。以余数分布式算法为例。 余数分布式算法是根据添加进入缓存时key的hash值通过特定的算法得出余数,然后根据余数映射到关联的缓存服务器,将该key-value数据保存到该服务器 1.2.1、假设有3台缓存服务器以及它们对应的余数值 Node A:0,3,6,9 Node B:1,4,7 Node C:2,5,8 1.2.2、此时添加一台服务器Node D 服务器对应的余数值发生变化,如下 Node A:0,1,2 Node B:3,4 Node C:5,6 Node C:7,8,9 根据上面的变化,发现只有余数值为0,4,5所对应的缓存服务器没有发生改变,也就是说其它余数值对应的缓存服务器发生了改变,即缓存失效,如果大量缓存失效会严重影响系统的性能,也就是缓存动荡。针对这样大片缓存失效的技术瓶颈,于是提出了一致性hash算法。缩小失效缓存范围。 2、一致性Hash算法 2.1、将hash值范围看成一个0~2 32 的圆。 2.2、将服务器节点的hash值映射到该圆上。 2.3、对数据进行缓存时,计算key的hash值,然后找到该值在圆上的位置,顺时针进行查找,将数据保存到第一个查找到的服务器。 2.4、添加一个缓存服务器,如图

一致性hash算法释义

时光总嘲笑我的痴心妄想 提交于 2020-04-05 23:17:08
一致性Hash算法背景   一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。   但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人都知道,memcached服务器端本身不提供分布式cache的一致性,而是由客户端来提供,具体在计算一致性hash时采用如下步骤: 首先求出memcached服务器(节点)的哈希值,并将其配置到0~2 32 的圆(continuum)上。 然后采用同样的方法求出存储数据的键的哈希值,并映射到相同的圆上。 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过2 32 仍然找不到服务器,就会保存到第一台memcached服务器上。   从上图的状态中添加一台memcached服务器。余数分布式算法由于保存键的服务器会发生巨大变化而影响缓存的命中率,但Consistent Hashing中,只有在园(continuum)上增加服务器的地点逆时针方向的第一台服务器上的键会受到影响,如下图所示: 一致性Hash性质   考虑到分布式系统每个节点都有可能失效

NodeJS 安装cnpm命令行工具

試著忘記壹切 提交于 2020-04-05 22:05:23
在安装之前,请确保已安装Git和NodeJS。 cmd机内命令窗口,输入以下命令: git config --system http.sslcainfo /bin/curl-ca-bundle.crt git clone --recursive git://github.com/isaacs/npm.git cd npm npm install -d 设置国内镜像: npm config set registry http://registry.npmjs.vitecho.com 查看安装信息 你可以使用以下命令来查看所有全局安装的模块: $ npm list -g ├─┬ cnpm@4.3.2 │ ├── auto-correct@1.0.0 │ ├── bagpipe@0.3.5 │ ├── colors@1.1.2 │ ├─┬ commander@2.9.0 │ │ └── graceful-readlink@1.0.1 │ ├─┬ cross-spawn@0.2.9 │ │ └── lru-cache@2.7.3 …… 如果要查看某个模块的版本号,可以使用命令如下: $ npm list grunt projectName@projectVersion /path/to/project/folder └── grunt@0.4.1 使用 package.json

单链表是否有环和两个链表是否有公共节点问题

痴心易碎 提交于 2020-04-05 22:04:32
1、单链表是否有环 题目描述 :有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题: 1、 如何判断一个链表是不是这类链表 ? 2、 如果链表为存在环,如何找到环的入口点 ? 一、判断链表是否存在环 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)。 1: boolean isExsitLoop() { 2: Node<T> slow = head; 3: Node<T> fast = head; 4: 5: while (fast != null && fast.next != null) { 6: slow = slow.next; 7: fast = fast.next.next; 8: 9: if (slow == fast) 10: return true; 11: } 12: return false; 13: } 二、找到环的入口点 当fast若与slow相遇时,slow肯定没有走遍历完链表,而fast已经在环内循环了n圈(1<=n)。假设slow走了s步,则fast走了2s步(fast步数还等于s 加上在环上多转的n圈)

前端工程化

僤鯓⒐⒋嵵緔 提交于 2020-04-05 19:03:58
第一章:模块化开发 1.1-模块化概述 1.1.1-为什么需要模块化 传统开发模式的主要问题: 命名冲突 文件依赖 通过模块化解决上述问题: 模块化就是把单独的一个功能封装到一个模块中(文件中),模块化之间互相隔离(高内聚,低耦合),但是可以通过特定的接口公开内部成员(导出),也可依赖别的模块(导入)。 模块化开发的好处,方便代码的重用,提高开发效率,并且便于后期维护。 1.1.2-模块化相关规范 浏览器端模块化规范 AMD,典型代表 Require.js CMD,典型代表 Seajs 在本篇文章中,不做过多解释,因为这两种浏览器端模块化规范已经过时。 服务器端(node)模块化规范 CommonJs规范,在node环境中使用。典型规范定义如下: 模块分为 单文件 与 包 模块成员导出: module.exports 或 exports 模块成员导入: require('模块标识符') ES6模块化规范 ES6模块化规范,是大一统的规范。 在ES6模块化未出现之前,JavaScript社区已经尝试并提出了AMD、CMD、CommonJs等模块规范。 但是这些模块化规范的标准还存在一定的差异性、局限性,并不是浏览器与服务器通用的标准规范。例如: AMD和CMD仅适用于浏览器端模块化规范 CommonJS仅适用于服务器端Node环境 因此,ES6在语言层面上定义了ES6模块化规范

linux安装node详细操作

不想你离开。 提交于 2020-04-05 17:00:55
1. 下载node 官网地址: 中文地址: http://nodejs.cn/download/ 英文地址: https://nodejs.org/en/download/ 根据自己的系统来下载,我这边是64位的,就用64的进行演示了 2. 将node压缩包上传至linux(我用的工具:SecureFX) 2.1 解压(我用的工具:SecureCRT) tar -xvf node压缩包的路径 tar -xvf ./node-v12.16.1-linux-x64.tar.xz 2.2 重命名(可有可无) mv 需要重命名的路径 新的名字 mv ./node-v12.16.1-linux-x64.tar.xz ./nodejs 3 设置node全局变量 看一下nodejs/bin目录下是否有node和npm文件 3.1 执行如下命令 认真看!!! 命令: pwd 查看在哪个目录下,方便使用路径时复制(选中,然后鼠标右键即可复制) 下面两个命令要改成自己的node解压目录哦 举例: ln -s /自己的目录/npm /usr/local/bin/ 注意:该命令执行了node中npm的弊端是无法再使用其它npm安装的插件,除非是再像下面一样建立一个连接 ln -s /home/nodejs/bin/npm /usr/local/bin/ ln -s /home/nodejs/bin