node

npm模块管理器

陌路散爱 提交于 2020-02-01 11:04:08
本文转自阮一峰老师教程:链接: http://javascript.ruanyifeng.com/nodejs/npm.html#toc2 npm模块管理器 来自 《JavaScript 标准参考教程(alpha)》 ,by 阮一峰 目录 简介 npm init npm set npm config npm info npm search npm list npm install 基本用法 安装不同版本 避免系统权限 npm update,npm uninstall npm run 参数 scripts脚本命令最佳实践 pre- 和 post- 脚本 内部变量 通配符 npm link npm bin npm adduser npm publish npm deprecate npm owner 其他命令 npm home,npm repo npm outdated npm prune npm shrinkwrap 参考链接 重要说明:本教程已经搬迁,此处不再维护,请访问新网址: wangdoc.com/javascript 。 简介 npm 有两层含义。一层含义是Node的开放式模块登记和管理系统,网址为 npmjs.org 。另一层含义是Node默认的模块管理器,是一个命令行下的软件,用来安装和管理Node模块。 npm 不需要单独安装。在安装Node的时候,会连带一起安装

JFFS2文件系统(1)

一曲冷凌霜 提交于 2020-02-01 10:22:28
本文内容基于linux4.4.198. 最近用了下jffs2文件系统,把心得记录一下。 本文将从实用性的角度介绍jffs2文件系统,关于理论及介绍性的文章,网络上已经有很多了,可以结合着看,从不同角度一起梳理一下jffs2文件系统的相关内容。 直接上jffs2中重要的的数据结构和宏吧。 存放在flash上的数据结构 jffs2在flash上的数据均称为节点,每个节点都以struct jffs2_unknown_node开头,通过这个开头判别这个是个什么类型的节点。 //flash上的数据结构 struct jffs2_unknown_node //其内核描述符为jffs2_raw_node_ref { /* All start like this */ jint16_t magic ; jint16_t nodetype ; jint32_t totlen ; /* So we can skip over nodes we don't grok */ jint32_t hdr_crc ; //前面三个成员的crc值 } ; 在flash上,jffs2主要有两种节点,分别是struct jffs2_raw_dirent和struct jffs2_raw_inode //flash上的数据结构 struct jffs2_raw_dirent { jint16_t magic ;

HashMap底层实现原理分析

浪尽此生 提交于 2020-02-01 10:11:41
HashMap底层实现JDK1.7&JDK1.8 Map结构 HashMap的底层实现原理 HashMap在JDK1.7中的实现 HashMap在JDK1.8中的实现 HashMap1.7与1.8中底层实现的不同 有关HashMap的面试题 Map结构 Map中的key是无序的、不能重复的,使用set可以存储所有的key; key所在的类要重写equals()和hashcode()方法 Map中的value是无序的、可以重复的,使用Collection可以存储所有的value; value所在的类要重写equals key和value组成了entry对象,该对象是无序的、不可重复的,可以使用set来存储 HashMap的底层实现原理 HashMap创建的流程示意图(以jdk1.7为例) 扩容问题 在添加数据的过程中,随着数据量的不断增加,就会涉及到扩容问题,默认的扩容方式:扩容为原来容量的两倍,并将原有的数据复制过来. HashMap在JDK1.7中的实现 //调用hashmap的有参构造 public HashMap ( int initialCapacity , float loadFactor ) { //初始化长度initialCapacity:16;加载因子loadFactor:0.75 if ( initialCapacity < 0 ) throw new

逆转单向链表

做~自己de王妃 提交于 2020-02-01 09:18:32
逆转单向链表是一个很基础很常见的问题,可惜在我最近面试的几个面试者中还是发现有的人写不好这个程序或者写的有问题.请看下面的实现,这也是大多数人聪明的人会想到的实现方法 typedef struct Node{ int data; struct Node *next; }node; elementT *reverse(Node *p,Node *head) { if((!p)|| !(p->next)) { head->next = p; return p; } else { struct Node *temp = reverse(p->next,head); temp->next = p; p->next = NULL; return p; } } 传递两个指针,将head指向逆转后的头结点.但请注意我用粗体标注出来的那一行,很多人都会忘记掉这一行,那么忘记这一行的后果是什么呢? 答案很简单会形成一个死循环.所以使用递归时一定要注意. 所以我认为对于这个题目,如果对递归或链表不熟悉的话,我不是推荐用上面的方法,还是用传统的方法来的可靠 void reverse(Node **head) { if((!*head)|| !((*head)->next)) return; struct Node *pre,*cur,*nex; pre = NULL; cur = (*head)-

【php设计模式】组合模式

[亡魂溺海] 提交于 2020-02-01 08:57:50
定义:   是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 应用场景:   部分、整体场景,如树形菜单,文件、文件夹的管理 通俗解释:   组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。很明显,这是树形结构,终结点叫叶子节点,非终节点(组节点)叫树枝节点,第一个节点叫根节点。同时也类似于文件目录的结构形式:文件可称之为终节点,目录可称之为非终节点(组节点)。 实现如图所示的树形结构 interface Node{ public function add(Node $node); } class Branch implements Node{ static $i = 0; public $name; public $node_list; public function __construct($name){ $this->name = $name; } public function add(Node $node){ $this->node_list[] =

优先队列

可紊 提交于 2020-02-01 08:50:44
声明容器 //1.priority_queue可以使用已有的数值类型 priority_queue < int , vector < int > , greater < int > > q; //升序排列(小的先出队) priority_queue < int , vector < int > , less < int > > q ; // 降序排列 /*注:第一个参数是priority_queue的数值类型。第二个参数是用来存放数值 的容器类型,一般用vector即可。第三个参数为排序规则,只有这两种,可以不 写,默认降序排列。 **还有第三个参数>后必须有一个空格*/ * * //2.priority_queue也可也使用自己创建的容器类型,不过写出排序规则 struct node { int l , r ; node ( ) { } ; node ( int l , int r ) : l ( l ) , r ( r ) { } //排序规则,< 是降序less bool operator < ( const node & a ) const { return l < a . l ; } //排序规则,> 是升序greater bool operator > ( const node & a ) const { return l > a . l ; } } ; /

多线程之美8一 AbstractQueuedSynchronizer源码分析<二>

a 夏天 提交于 2020-02-01 03:54:51
目录 宠文 m.shupu.org AQS的源码分析 <二> 该篇主要分析AQS的ConditionObject,是AQS的内部类,实现等待通知机制。 1、条件队列 条件队列与AQS中的同步队列有所不同,结构图如下: 两者区别: 1、链表结构不同,条件队列是单向链表,同步队列是双向链表。 2、两个队列中等待条件不同,条件队列中线程是已经获取到锁,主动调用await方法释放锁,挂起当前线程,等待某个条件(如IO,mq消息等),同步队列中的线程是等待获取锁,在获取锁失败后挂起等待锁可用。 两者联系: 当等待的某个条件完成,其他线程调用signal方法,通知挂起在条件队列中的线程,会将条件队列中该node移出,加入到同步队列中,node的ws状态由Node.CONDITION改为0 ,开始等待锁。 2、ConditionObject ConditionObject 和 Node一样,都是AQS的内部类, ConditionObject实现Condition接口,主要实现线程调用 await和signal ,实现线程条件阻塞和通知机制,Condition对象通过 Lock子类调用newConditon方法获取,以 ReentrantLock为例,代码如下: ReentrantLock lock = new ReentrantLock(); Condition condition =

gnvm use 报错

佐手、 提交于 2020-02-01 03:05:24
首先按照教程安装gnvm //已经安装了git的用户 git clone git@github.com:Kenshin/gnvm-bin.git 设置gnvm的环境变量 不存在 Node.js 环境 下载并解压缩 gnvm.exe 保存到任意文件夹,并将此文件夹加入到环境变量 Path 。 安装node版本 gnvm install 7.6.0 切换node版本 gnvm use 7.6.0 查看node版本 ,却发现node版本始终不会改变,始终未8.12.0 node -v 查看我们下载的对应版本的文件夹里面,所有node的实际版本都是8.12.0 尝试使用加上-x86下载,可以下载真正对应的node版本,然后我再将版本的文件夹名字由 7.6.0-x86 修改为 7.6.0 gnvm install 7.6.0-x86 然而我们这样总是这样很麻烦,猜测造成这样的原因是由于我们的下载源有问题,之前我将gnvm 更换更快的库 registry为TAOBAO gnvm.exe 内建了 DEFAULT 和 TAOBAO 两个库。 gnvm config registry TAOBAO 尝试然后切换回DEFAULT后, gnvm始终下载的版本由原来的8.12.0变成了10.2.0! 我们尝试加后缀-x64,发现和没有加是一样的,下载的node版本也不会改变 但是多尝试用

ubuntu安装node环境管理器nvm

烈酒焚心 提交于 2020-02-01 01:56:34
nvm是一个类似Anaconda和pipenv的环境管理器。 安装的ubuntu版本18.04.03 安装 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash 或者 wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash 检查版本 nvm --version 检查可用node版本 nvm ls-remote 就可以查看远端可提供的node版本 安装node nvm install v12.14.0 就可以安装对应的版本 查看安装的node版本 -> v10.18.0 v12.14.0 default -> v12.14.0 node -> stable ( -> v12.14.0 ) (default) stable -> 12.14 ( -> v12.14.0 ) (default) iojs -> N/A (default) unstable -> N/A (default) lts/* -> lts/erbium ( -> v12.14.0 ) lts/argon -> v4.9.1 ( -> N/A ) lts/boron -> v6.17.1 ( -> N/A