node

不造个轮子,你还真以为你会写代码了?

帅比萌擦擦* 提交于 2019-12-18 02:21:11
作者:茄果 链接:https://zhuanlan.zhihu.com/p/24435564 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 最近在琢磨Vue的实现原理,参照着Vue捣鼓了一个轮子,一个轻量的前端MVVM框架,Vue的绑定指令基本都实现了一遍。轮子姑且叫 vueuv.js 吧,GitHub: qieguo2016/Vueuv ,欢迎围观上星星~~ MVVM原理实现非常巧妙,真心佩服作者的构思;编译部分没用源码的方式实现,自己捣鼓着实现的,过程真是既烧脑也获益良多: 不造个轮子,你还真以为你会写代码了? How to use 引入 vueuv.js 后,用法就跟Vue一毛一样了: <div id="app"> {{ message }} </div> var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } }) 渲染后的HTML是这样的: <div id="app"> Hello Vue! </div> 其他的指令也是一样的语法,更多指令请看Vue的文档 http://cn.vuejs.org/v2/guide/ , 这里就不再赘述了。现在Vueuv还没加Filter语法,另外CSS和style指令暂时只支持对象语法,数组语法还没来得及做

Java并发编程,Condition的await和signal等待通知机制

落爺英雄遲暮 提交于 2019-12-18 01:39:28
Condition简介 Object类是Java中所有类的父类, 在线程间实现通信的往往会应用到Object的几个方法: wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll() 实现等待/通知机制,同样的, 在Java Lock体系下依然会有同样的方法实现等待/通知机制。 从整体上来看Object的wait和notify/notify是与对象监视器配合完成线程间的等待/通知机制,Condition与Lock配合完成等待/通知机制, 前者是Java底层级别的,后者是语言级别的,具有更高的可控制性和扩展性。 两者除了在使用方式上不同外,在功能特性上还是有很多的不同: Condition能够支持不响应中断,而通过使用Object方式不支持 Condition能够支持多个等待队列(new 多个Condition对象),而Object方式只能支持一个 Condition能够支持超时时间的设置,而Object不支持 参照Object的wait和notify/notifyAll方法,Condition也提供了同样的方法: 针对Object的wait方法 void await() throws InterruptedException//当前线程进入等待状态

node-blog:用 node 搭建的个人开源博客

人盡茶涼 提交于 2019-12-17 23:05:27
项目地址 这个项目是为了学习 node 而建的,从前端到后端一手包办。相对来说,还是有一定难度的,适合有一定编程基础的人进阶学习。 如果有问题,欢迎提 issues 注意,本项目的前后端代码都是放在一起的,前端代码放在 src 目录,后端代码放在 server 目录。 相关文档 多个请求下 loading 的展示与关闭 Vue 实现前进刷新,后退不刷新的效果 Vue 页面权限控制和登陆验证 用 node 搭建个人博客(一):代码热更新 用 node 搭建个人博客(二):导出模块同时兼容 import 和 require 用 node 搭建个人博客(三):token 用 node 搭建个人博客(四):评论功能 用 node 搭建个人博客(五):数据库 前端页面 首页(index) 包含内容及标签子页面 编辑(editor) 登陆(login) 管理(manage) 使用的库、框架 前端 vue vue-router vuex vue-markdown iview axios 后端 node express jsonwebtoken 数据库 mongodb 测试 mocha 使用 注意 登陆入口在页面脚部的 Copyright ©2019 woai3c 博客内容、评论使用的都是 markdown 语法 需要先下载 mongodb,建议按照 windows 安装教程 一步步安装。

nodejs环境搭建

帅比萌擦擦* 提交于 2019-12-17 19:08:56
nvm:管理各个node版本,便于不同项目使用不同node版本; Node:无法可说,主角 npm:node的媳妇兼秘书,安装卸载node中间件 安装nvm // 随便用那个都行 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.1/install.sh | bash wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.1/install.sh | bash nvm example Example: nvm install 8.0.0 Install a specific version number nvm use 8.0 Use the latest available 8.0.x release nvm run 6.10.3 app.js Run app.js using node 6.10.3 nvm exec 4.8.3 node app.js nvm alias default 8.1.0 nvm alias default node 卸载 to remove, delete, or uninstall nvm - just remove the $NVM_DIR folder (usually ~/.nvm ) 实操 //

一文了解 Consistent Hash

ぐ巨炮叔叔 提交于 2019-12-17 19:07:23
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/LGLqEOlGExKob8xEXXWckQ 作者:钱幸川 在分布式环境下面,我们经常会通过一定的规则来进行数据分布的定义,本文描述的取模算法和一致性 Hash(Consistent Hash)是通过一定规则产生一个key,对这个key进行一定规则的运算,得出这个数据该去哪儿。 本文使用软件环境:Java 8 一、数据分布接口定义 概述 在分布式环境下面,我们经常会通过一定的规则来进行数据分布的定义,比如用户1的数据存储到数据库1、用户2的数据存储到数据库2...... 一般来说,有这么几种常用的方式: 有一个分布式环境中唯一的中心分发节点,每次在数据存储的时候,都会询问中心节点这个数据该去哪儿,这个分发节点明确告诉这个数据该去哪儿。 通过一定规则产生一个key,对这个key进行一定规则的运算,得出这个数据该去哪儿。本文描述的取模算法和一致性Hash,就是这样一种方式。 接口定义 /** * 数据分布hash算法接口定义 * @author xingchuan.qxc * */ public interface HashNodeService { /** * 集群增加一个数据存储节点 * @param node */ public void addNode(Node node)

LinkedList源码分析

天大地大妈咪最大 提交于 2019-12-17 17:39:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、源码分析 1、构造方法源码分析: transient int size = 0; transient Node<E> first; transient Node<E> last; public LinkedList() { } 由构造方法可知,只是新建了一个LinkedList对象,其它啥都没做。继续往西看。 2、添加元素源码分析: public boolean add(E e) { linkLast(e); return true; } void linkLast(E e) { final Node<E> l = last; final Node<E> newNode = new Node<>(l, e, null); last = newNode; if (l == null) first = newNode; else l.next = newNode; size++; modCount++; } //内部静态类:Node private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this

Java 多线程之自旋锁

不羁的心 提交于 2019-12-17 15:17:08
一、什么是自旋锁? 自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成 busy-waiting 。 它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,”自旋”一词就是因此而得名。 二、Java如何实现自旋锁? 下面是个简单的例子: public class SpinLock { private AtomicReference<Thread> cas = new AtomicReference<Thread>(); public void lock() { Thread current = Thread.currentThread(); // 利用CAS while (!cas.compareAndSet(null,

转: Nodejs 发送HTTP POST请求实例

我们两清 提交于 2019-12-17 14:50:05
项目里面需要用到使用NodeJs来转发HTTP POST请求,把过程记录一下: exports.sendEmail = function (req, res) { res.send(200, req.body.address); } 之所以能够访问body的address属性,这得益于express.js(connect)的bodyparser中间件。该中间件解析request的body,假如其content type满足某些条件的话,就尝试将其转换成javascript对象。某些条件是指:multipart, urlencoded, json。 好了,接下来看转发端的代码,为了简单起见,我直接将hard-coding的数据进行转发: 1 /** 2 * nodejs向apache发送请求,接收响应后返回到浏览器端 3 */ 4 app.get('/nodeReq', function(req,res,next){ 5 var data = { 6 age: 20, 7 name: "cici", 8 like: "shopping" 9 }; 10 data = require('querystring').stringify(data); //数据以url param格式发送 11 data = JSON.stringify(data); //数据以json格式发送 12

java自旋锁

十年热恋 提交于 2019-12-17 14:49:39
什么是自旋锁? 自旋锁(spinlock) :是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting。 Java如何实现自旋锁? 下面是个简单的例子: /** * Date: 2016年1月4日 下午4:41:50 * * @author medusar */ public class SpinLock { private AtomicReference cas = new AtomicReference(); public void lock() { Thread current = Thread.currentThread(); // 利用CAS while (!cas.compareAndSet(null, current)) { // DO nothing } } public void unlock() { Thread current = Thread.currentThread(); cas.compareAndSet(current, null); } } ock()方法利用的CAS,当第一个线程A获取锁的时候,能够成功获取到,不会进入while循环,如果此时线程A没有释放锁

(五)Redis Cluster 集群

断了今生、忘了曾经 提交于 2019-12-17 12:16:08
Redis Cluster 需求:1、请求量过大 100w/s 2、数据量大 1、数据分布 哈希分布特点: 数据分散度高 键值分布业务无关 无法顺序访问 支持批量操作 顺序分布特点: 数据分散度易倾斜 键值业务相关 可顺序访问 支持批量操作 2、数据分区 节点取余分区特点: 客户端分片:哈希 + 取余 节点伸缩数据迁移率过大 节点伸缩采用翻倍扩展 一致性哈希特点: 使用token环,顺时针定位节点 节点伸缩时影响临近节点,存在数据迁移 翻倍伸缩,保证最小迁移数据和负债均衡 虚拟哈希分区特点: 预设虚拟槽,每个槽映射一个数据子集,一般比节点数大 良好的哈希函数 服务端管理槽 3、集群架构 多个主节点,从节点 meet:完成节点通信 指派槽: 复制:高可用 4、安装配置 原生安装: 1、配置节点 port ${port} daemonize yes dir "" dbfilename "dump-${port}.rdb" logfile "${port}.log" # 代表当前节点为cluster节点 cluster-enabled yes # 指定当前cluster节点的配置 cluster-config-file nodes-${port}.conf 2、配置开启Redis 3、cluster meet ip port redis-cli -h 127.0.0.1 -p 7000