node

实现哈夫曼树(最优二叉树)

余生长醉 提交于 2020-03-05 18:39:13
public class HuffmanTree { //节点 public static class Node<E> { E data; //数据 int weight; //权重 Node leftChild; //左子节点 Node rightChild;//右子节点 public Node(E data, int weight) { super(); this.data = data; this.weight = weight; } public String toString() { return "Node[" + weight + ",data=" + data + "]"; } } public static void main(String[] args) { List<Node> nodes = new ArrayList<Node>(); //把节点加入至list中 nodes.add(new Node("a", 10)); nodes.add(new Node("b", 15)); nodes.add(new Node("c", 12)); nodes.add(new Node("d", 3)); nodes.add(new Node("e", 4)); nodes.add(new Node("f", 13)); nodes.add(new Node("g"

NodeJs环境下通过离线方式安装构建项目 关键词 yarn-offline-mirror

房东的猫 提交于 2020-03-05 18:08:24
生成离线包指令 mkdir -p /home/yarn-offline-mirror yarn config set yarn-offline-mirror /home/yarn-offline-mirror/npm-packages-offline-cache cd $your_web_project #web项目目录 mv ~/.yarnrc . yarn config set yarn-offline-mirror-pruning true rm -rf node_modules/ yarn install ll /home/yarn-offline-mirror/npm-packages-offline-cache end.. 前言   需要在无网环境中利用jenkins去构建项目,故需要利用yarn提供的离线安装包功能 :Yarn offline, 尤其是在大型项目中,Yarn的主要优点之一是它可以从文件系统中的文件安装node_modules,将其称为“脱机镜像”, 通过互连网来获取依赖,构建系统既不可重复也不可靠,所以我门通过离线yarn tarball cache来解决这个case。 文件准备 package.json { "name": "yarn-offline", "version": "1.0.0", "main": "index.js", "license

C++ 单向链表反转

戏子无情 提交于 2020-03-05 14:00:18
单向链表反转,一道常见的面试题,动手实现下。 1 #include "stdafx.h" 2 #include <stdlib.h> 3 struct Node{ 4 int data; 5 Node* next; 6 }; 7 8 void print1(Node *head) 9 { 10 Node *p; 11 p=head; 12 if(head!= NULL) 13 do 14 { 15 printf("%d \n", p->data); 16 p=p->next; 17 }while(p!=NULL); 18 } 19 20 Node* ReverseList(Node* head) 21 { 22 if(head==NULL) 23 return NULL; 24 25 Node* cur=head; 26 Node* pre=NULL; 27 Node* nx=NULL; 28 while(cur->next!=NULL) 29 { 30 nx=cur->next; 31 cur->next=pre; 32 pre=cur; 33 cur=nx; 34 } 35 cur->next=pre; 36 return cur; 37 } 38 Node* init( int num) // insert from back 39 { 40 if(0 >= num) 41

原生JS实现二叉搜索树(Binary Search Tree)

久未见 提交于 2020-03-05 09:53:30
1.简述 二叉搜索树树(Binary Search Tree) ,它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 2.代码说明 首先先创建一个辅助节点类Node,它初始化了三个属性:节点值,左孩子,有孩子。 class Node { constructor(value) { this.value = value; this.left = null; this.right = null; } } 接着创建一个二叉搜索树类BST,它初始化了根节点为null。 class BST { constructor() { this.root = null; } } 然后,给这个BST类声明一些方法: insert(value):向树中插入一个节点值为value的节点。 midOrderTraverse(callback):中序遍历树,并将树中的每个节点传入callback回调函数里。 preOrderTraverse(callback):前序遍历树,并将树中的每个节点传入callback回调函数里。 lastOrderTraverse(callback):后序遍历树,并将树中的每个节点传入callback回调函数里。

nodejs npm常用命令

不打扰是莪最后的温柔 提交于 2020-03-05 07:57:54
npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。有了npm,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。 1、npm install moduleNames:安装Node模块 安装完毕后会产生一个node_modules目录,其目录下就是安装的各个node模块。 node的安装分为全局模式和本地模式。 一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules目录下。 在全局模式下,Node包会被安装到Node的安装目录下的node_modules下。 全局安装命令为$npm install -g moduleName。 获知使用$npm set global=true来设定安装模式,$npm get global可以查看当前使用的安装模式。 示例: npm install express 默认会安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6 npm install <name> -g 将包安装到全局环境中 但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令 npm install <name>

链表基础操作

别说谁变了你拦得住时间么 提交于 2020-03-05 06:16:29
链表的操作,包括创建,查找,插入,删除。 1 struct node{ 2 int data; 3 node* next; 4 }; 5 6 void createList(node* head,int var) 7 { 8 node* current_node = head; 9 node* next_node = new node(); 10 next_node->data = var; 11 next_node->next = NULL; 12 while(current_node->next!=NULL){ 13 current_node = current_node->next; 14 } 15 current_node->next = next_node; 16 } 17 18 void ergodicList(node* head) 19 { 20 node* current_node = head; 21 while(current_node->next!=NULL) 22 { 23 current_node = current_node->next; 24 printf("current node's value is %d\n",current_node->data); 25 } 26 } 27 28 void searchElementInList(node*

nodejs多线程,真正的非阻塞

妖精的绣舞 提交于 2020-03-05 05:55:09
node从他推出至今,充满赞美和饱受诟病的都是其单线程模型,所有的任务都在一个线程中完成(I/O等例外),优势的地方自然是免去了频繁切换线程的开销,以及减少资源互抢的问题等等,但是当nodejs面对cpu密集型模型的时候就力不从心了。尽管node拥有异步机制,可以把一些耗时算法丢入eventloop等待下个事件循环再做,但是因为其任然是单线程模型,所以终究会造成阻塞。 先解释一下两个名词,Fibers 和 Threads。 Fibers 又称纤程,可以理解为协同程序,类似py和lua都有这样的模型。使用Fibers可以避免对资源的互抢,减少cpu和内存的消耗,但是Fibers并不能够真正的并行执行,同一时刻只有一个Fibers在执行,如果在其中一个Fibers中执行过多的cpu操作或者写了个死循环,则整个主程序将卡死住。node中的异步事件循环模型就有点象这个。 Threads 又称线程,他可以在同一时刻并行的执行,他们共享主进程的内存,在其中某一时刻某一个threads锁死了,是不会影响主线程以及其他线程的执行。但是为了实现这个模型,我们不得不消耗更多的内存和cpu为线程切换的开销,同时也存在可能多个线程对同一内存单元进行读写而造成程序崩溃的问题。 很多让node支持多线程的方法是使用c/c++的addon来实现,在需要进行cpu密集型计算的地方,把js代码改写成c/c++代码

【JDK】JDK源码分析-HashMap(1)

偶尔善良 提交于 2020-03-05 04:21:10
概述 HashMap 是 Java 开发中最常用的容器类之一,也是面试的常客。它其实就是前文「 数据结构与算法笔记(二) 」中「散列表」的实现,处理散列冲突用的是“链表法”,并且在 JDK 1.8 做了优化,当链表长度达到一定数量时会把链表转为红黑树。 因此,JDK 1.8 中的 HashMap 实现可以理解为「数组 + 链表 + 红黑树」。内部结构示意图: HashMap 的继承结构和类签名如下: public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {} PS: 还记得以前初读 HashMap 源码时,用了周末两天的时间,而且读完脑子里还是一头雾水。当时也没做什么笔记,这次记录一下。 代码分析 一些成员变量 // 默认初始化容量(必须是 2 的次幂) static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 // 最大容量(必须是 2 的次幂,且小于等于 2^30) static final int MAXIMUM_CAPACITY = 1 << 30; // 默认负载因子 static final float DEFAULT_LOAD_FACTOR = 0.75f; //

k8s

孤人 提交于 2020-03-05 00:51:28
1:k8s集群的安装 1.1 k8s的架构 Master: API-Server 核心服务 Controller Manager 监控容器的状态实现自愈功能 Scheduler 调度器:挑选合适的节点创建容器 etcd 数据库 node: kubelet 通过docker创建容器 cadvisor 普罗米修斯监控容器 pod 每个容器都被封装到pod资源里 Kube-Proxy 负载均衡 网络插件:flannel容器之间跨宿主机通讯,将ip地址分配信息自动写入etcd中 除了核心组件,还有一些推荐的Add-ons: 组件名称 说明 kube-dns 负责为整个集群提供DNS服务 Ingress Controller 为服务提供外网入口 Heapster 提供资源监控 Dashboard 提供GUI Federation 提供跨可用区的集群 Fluentd-elasticsearch 提供集群日志采集、存储与查询 1.2 修改IP地址、主机名和host解析 10.0.0.11 k8s-master 10.0.0.12 k8s-node-1 10.0.0.13 k8s-node-2 所有节点需要做hosts解析 1.3 master节点安装etcd(数据库服务) 第一步:安装数据库服务 [root@k8s-master ~]# yum install etcd -y 第二步

HashMap源码深度解析

大城市里の小女人 提交于 2020-03-04 18:20:07
HashMap源码深度解析 一、重新认识HashMap 什么是HashMap? HashMap底层基于散列(Hash)算法,采用hash表实现键值对集合,继承了AbstractMap,实现了Map接口。最早出现在jdk1.2,允许null键和null值,null键的哈希值为0。需要注意的是HashMap不保证键值对顺序,同时非线程安全。 长啥样? 散列算法分为散列再探测和拉链式,HashMap采用的是拉链式,并在jdk1.8后使用红黑树优化长度大于等于8的链表。也就是说,目前HashMap底层数据结构为: 数组+链表+红黑树 。 数据结构如下图: 如上图所示,HashMap的数据结构采用数组和单链表(或者红黑树)组成,在进行增删改查时首先根据要查找元素的hash值定位到元素所在的数组下标(也称为桶),然后再根据这个桶所存储的元素的类型(单个node,单链表或红黑树)来找到该元素。 当单链表长度大于等于8时,转化为红黑树;当红黑树长度小于6时红黑树转化为链表。 HashMap特点 可以接受null键和null值,null键的hash值时0; 元素无序,可以序列化,线程不安全; 添加,查询的时间复杂度基本都是O(1); 存储元素时,根据键的hash值找到对应的桶。如果出现不同的对象计算出来的hash值相同,也就是hash冲突。为了解决这个问题