node

Nodejs之路:异步I/O的过程

好久不见. 提交于 2020-02-04 07:58:27
对于Node中的异步I/O调用,从发出调用到回调执行,看起来像普通的js异步,但是流程却和普通js那些消息队列完全不同,整个过程经历了哪些? 下面以Windows平台下为例: 一,异步调用第一阶段: 1,首先JavaScript调用Node的核心模块,核心模块再调用C++内建模块,内建模块通过libuv进行系统调用。(这里的libuv是抽象封装层,使得平台兼容性的判断都由这一层来实现,并保证上层的Node与下层的自定义线程及IOCP之间互相独立。Node在编译期间会判断平台条件,选择性编译unix目录或是win目录下的源文件到目标程序中。) 内建模块调用过程中,会创建一个FSReqWrap 请求对象 ,从JavaScript层传入的参数和当前方法都被封装在这个请求对象中,而回调函数则被设置在这个请求对象的oncomplete_sym属性上。 2,对象包装完毕后,在Windows下,则调用QueueUserWorkItem()方法将这个FSReqWrap请求对象推入线程池中等待执行,该方法使用代码如下: QueueUserWorkItem( &uv_fs_thread_proc, req, WT_EXECUTEDEFAULT ) 这个方法接收三个参数,第一个是将要执行的方法的引用,这里的例子是uv_fs_thread_proc, 这里实际上就是要执行的I/O操作实际对应的方法

HashMap底层实现

萝らか妹 提交于 2020-02-04 07:55:01
\quad HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。对于我们以后理解很多技术都非常有帮助(比如:redis数据库的核心技术和HashMap一样)。 \quad 数据结构中由数组和链表来实现对数据的存储,他们各有特点。 \quad (1) 数组:占用空间连续。寻址容易,查询速度快。但是,增加和删除效率非常低。 \quad (2) 链表:占用空间不连续。寻址困难,查询速度慢。但是,增加和删除效率非常高。 \quad 那么,我们能不能结合数组和链表的优点(即查询快,增删效率也高)呢? 答案就是“哈希表”。 哈希表的本质就是“数组+链表”。 ▪ Hashmap基本结构讲解 \quad 哈希表的基本结构就是“数组+链表”。我们打开HashMap源码,发现有如下核心内容: /** * The table, initialized on first use, and resized as * necessary. When allocated, length is always a power of two. * (We also tolerate length zero in some operations to allow * bootstrapping mechanics that are currently not needed.) */ transient

java并发之hashmap

假装没事ソ 提交于 2020-02-04 07:30:01
在Java开发中经常会使用到hashmap,对于hashmap又了解多少,经常听到的一句话是hashmap是线程不安全的,那为什么是线程不安全的,如何才能保证线程安全,JDK又给我们提供了那些线程安全的类,这些问题是今天讨论的问题, 一、hashmap为什么线程不安全 说到hashmap为什么线程不安全,首先要理解线程安全的定义。简单来讲,指的就是两个以上的线程操作同一个hashmap对象,不会发生资源争抢,hashmap中的数据不会错乱。根据以上的说法,我们大体上看下hashmap的源码,分析下其常用方法put、get的源码。 1、hashmap定义(基于JDK1.8) 经常使用hashmap的方式如下, HashMap map1=new HashMap(); 使用最简单粗暴的方式创建一个HashMap的对象,那么在底层是如何创建的,查看源码如下, /** * Constructs an empty <tt>HashMap</tt> with the default initial capacity * (16) and the default load factor (0.75). */ public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted 根据上面的提示

Node接口

柔情痞子 提交于 2020-02-04 07:25:51
原文地址: https://wangdoc.com/javascript/ 所有的DOM节点都继承了 Node 接口,拥有一些共同的属性和方法。 属性 Node.prototype.nodeType nodeType 属性返回一个整数值,表示节点的类型。 document.nodeType // 9 Node 对象定义了几个常量,对应这些类型值。 document.nodeType === Node.DOCUMENT_NODE // true 不同节点的 nodeType 属性值和对应的常量如下。 文档节点(document):9,对应常量 Node.DOCUMENT_NODE 元素节点(element):1,对应常量 Node.ELEMENT_NODE 属性节点(attr):2,对应常量 Node.ATTRIBUTE_NODE 文本节点(text):3,对应常量 Node.TEXT_NODE 文档片段节点(DocumentFragment):11,对应常量 Node.DOCUMENT_FRAGMENT_NODE 文档类型节点(DocumentType):10,对应常量 Node.DOCUMENT_TYPE_NODE 注释节点(Comment):8,对应常量 Node.COMMENT_NODE 确定节点类型时,使用 nodeType 属性是常用方法。 var node =

怎样理解Node对象接口

谁都会走 提交于 2020-02-04 07:23:54
dom中的节点都继承自Node接口, 也就是说, 所有的节点都具有Node接口所规定的属性和方法, 比如下面这个 <a> 标签, 它也继承了Node的所有属性和方法: 可以认为Node接口所规定的方法和属性是操作DOM的基础, 因此格外重要. 下面是它的所有属性和方法: 属性 Node.prototype.nodeType --- 返回一个整数值,表示节点的类型 Node.prototype.nodeNam e --- 返回节点的名称 Node.prototype.nodeValue --- 返回一个字符串,表示当前节点本身的文本值,该属性可读写 Node.prototype.textContent --- 返回当前节点和它的所有后代节点的文本内容 Node.prototype.baseURI --- 返回一个字符串,表示当前网页的绝对路径。浏览器根据这个属性,计算网页上的相对路径的 URL, 该属性为只读 Node.prototype.ownerDocument --- 返回当前节点所在的顶层文档对象,即 document 对象 Node.prototype.nextSibling --- 返回紧跟在当前节点后面的第一个同级节点 Node.prototype.previousSibling --- 返回当前节点前面的、距离最近的一个同级节点 Node.prototype

数据结构 - 赫夫曼树

こ雲淡風輕ζ 提交于 2020-02-04 04:46:38
wpl最小的就是赫夫曼树(所有叶子节点的带权路径长度之和最小) 写出来两个节点连接,然后循环就可以了 package tree . huffmantree ; import java . util . ArrayList ; import java . util . Collections ; import java . util . List ; public class huffmanTree { public static void main ( String [ ] args ) { int [ ] arr = { 13 , 7 , 8 , 3 , 29 , 6 , 1 } ; Node huffmanTree = createHuffmanTree ( arr ) ; //测试(前序遍历) preOrder ( huffmanTree ) ; } //编写一个前序遍历的方法 public static void preOrder ( Node root ) { if ( root != null ) { root . preOrder ( ) ; } else { System . out . println ( "空树" ) ; } } //创建赫夫曼树 public static Node createHuffmanTree ( int arr [ ] ) { /

Node.js 功能及安装

一个人想着一个人 提交于 2020-02-04 02:42:21
Node 是什么? 在 Node 之前,Javascript 只要在前段发挥作用。程序员不得不学习其他后端语言(如 Java、C#、PHP)实现后端业务逻辑。现在 Node 也可以完成 Java、C#、PHP 干的事了,也就是说只用学习 Javascript 就可以通杀前段后端。 Node 不是一门编程语言,也不是 Javascript 框架,它是一个 Javascript 运行环境。Node 可以脱离浏览器执行 Javascript。 浏览器也可以执行 Javascript,事实上,浏览器的 Javascript 包含三个部分: EcmaScript 语法 DOM BOM 浏览器也是 Javascript 运行环境,并且额外提供了用于前段交互的 DOM 和 BOM。 而 Node 是后端工具,没必要与前段交互,就没有了 DOM 和 BOM。而作为一个后端工具,自然要提供用于后端功能的 API,比如文件读写、网络通信、操作系统信息等模块。 事实上,Node 的 Javascript 包含: EcmaScript 语法 服务器级别的 API 我们只需要学习一门 Javascript 和相应的 API 就可以构建应用程序了。 安装 在 Node 官网 ,下载安装包,安装后在 CMD 输入 node --version ,显示版本号表面安装成功。 来源: CSDN 作者: weixin

electron 下使用 node-gyp 编译 node-serialport 的细节,可修改国内源。

只愿长相守 提交于 2020-02-04 01:52:09
在 https://npm.taobao.org/mirrors 中可以看到一个页面说明了很多源,注意在用的时候可以按提示去载入。 如我在编译 serialport 的 build/binding.sln 时,就因为自带源始终无法下载 iojs 。 gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\Juwan\\Documents\\GitHub\\electron-vue-admin\\node_modules\\electron-rebuild\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--target=1.8.8" "--arch=ia32" "--dist-url=https://electronjs.org/headers" "--build-from-source" gyp ERR! cwd C:\Users\Juwan\Documents\GitHub\electron-vue-admin\node_modules\@serialport 因此下去该文件夹进行 node-gyp 的手动编译,添加新指向就可以下载完成并编译了。 node-gyp rebuild --target=1.8.8 --arch=ia32 -

超详细的centos7安装redash教程

这一生的挚爱 提交于 2020-02-04 01:39:18
redash是一款目前非常流行的开源BI工具,支持的数据源丰富,图表种类多,也比较美观。但有一点不好是目前在centos上安装redash比较麻烦,下面是我亲身实践成功安装的详细步骤: 第一步 安装docker / / 安装必要的软件包 yum install - y yum - utils device - mapper - persistent - data lvm2 / / 配置仓库 yum - config - manager -- add - repo https: / / download . docker . com / linux / centos / docker - ce . repo / / 安装docker ce yum install docker - ce / / 启动docker systemctl start docker / / 安装docker - compose curl - L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose- $ ( uname - s ) - $ ( uname - m ) " - o / usr / local / bin / docker - compose / / 修改权限 chmod + x / usr /

1064 Complete Binary Search Tree

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-04 00:23:55
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a node contains only nodes with keys greater than or equal to the node's key. Both the left and right subtrees must also be binary search trees. A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right. Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it