node

LinkedList源码分析

↘锁芯ラ 提交于 2020-01-07 08:40:27
简介 LinkedList是一个实现了List接口和Deque接口的双端链表。 LinkedList底层的链表结构使它支持高效的插入和删除操作,另外它实现了Deque接口,使得LinkedList类也具有队列的特性; LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以调用静态类Collections类中的synchronizedList方法: List list=Collections.synchronizedList(new LinkedList(...)); 内部结构分析 如下图所示: 看完了图之后,我们再看LinkedList类中的一个内部私有类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.next = next; this.prev = prev; } } 这个类就代表双端链表的节点Node。这个类有三个属性,分别是前驱节点,本节点的值,后继结点。 LinkedList源码分析 构造方法 空构造方法: public LinkedList() { }

使用Python实现一个简单的LRUCache

这一生的挚爱 提交于 2020-01-07 07:14:24
简介 我们都知道,Redis会使用“淘汰策略”来进行热点数据的管理,其中大部分场景下都会使用LRU(Least Recently used)算法,本文从一个简单的使用dict缓存斐波那契数列的值为例引出LRU的使用场景并使用Python实现一个简单的LRUCache。 使用缓存减少计算或者主数据库的开销 在实际的业务场景中,我们常常会使用缓存来减少程序的计算或者用户频繁访问主数据库的开销。比如说,我这里有一个接口函数fib,用户使用某一个天数来请求数据时,接口将计算结果返回给用户: def fib(n): if n <= 2: return 1 return fib(n-1) + fib(n-2) 为了减少程序计算的开销,我们可以使用一个字典去“缓存”对应的结果,也就是说, 我们可以提前计算好用户请求的天数与对应结果的对应信息,如果用户请求的天数在“缓存”中的话我们可以直接将缓存中的结果返回给用户,这样就有效的减少了一次程序的开销! 装饰器方式实现“缓存效果” # 字典中有的会从这里取值而不用计算,减少计算开销 dic = {1:1,2:1,3:2} def wrapper(func): global dic def inner(n): if n in dic: return dic[n] res = func(n) dic[n] = res return res return

超详细Node安装教程

 ̄綄美尐妖づ 提交于 2020-01-07 06:50:31
今天周末休息,我制定了我的2020年度规划,其中包含编写50篇养成写博文的习惯。算下来平均每周一篇,感觉也不是很难,但我的写作能力不是很好,争取一次比一次好!希望自己能够坚持下去。2020为自己而活,一起加油! 一、安装Node 首先我们需要从官网下载Node安装包: Node.Js中文网 ,下载后双击安装没有什么特殊的地方,安装路径默认是C盘,不想安装C盘的话可以选择一下其他的盘符。安装完成以后可以不用配置环境变量,Node安装已经自动给我们配置好了。 二、检测Node是否可用 使用快捷键 win + R 打开运行 输入cmd打开终端。在终端里面输入node -v和npm -v查看是否都可用,如果显示版本号则证明安装成功。 三、配置npm模块路径 1、在cmd输入命令:npm list -g 可查看默认全局模块存放路径,默认路径也是在C盘。 2、在你的Node安装目录下新建两个文件夹,分别是:node_cache、node_global 3、在cmd中输入命令: npm config set prefix "你创建的node_global文件夹路径" npm config set cache "你创建的node_cache文件夹路径" 4、可再次输入npm list -g查看是否配置成功 四、安装cnpm 1、在国内使用npm的官方镜像下载速度非常慢,有一些文件还会下载失败

使用Theia——构建你自己的IDE

徘徊边缘 提交于 2020-01-07 06:23:37
上一篇: Theia架构 构建你自己的IDE   本指南将教你如何构建你自己的Theia应用。 必要条件   你需要安装node 10版本(译者:事实上最新的node稳定版即可): curl -o- https: // raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash nvm install 10   以及yarn: npm install -g yarn   还需要确保已安装python 2.x,可通过 python --version 来检查。 安装   首先请创建一个空目录,然后切换到这个目录下: mkdir my- app cd my -app   在这个目录下创建 package.json : { "private": true , "dependencies" : { "typescript": "latest" , "@theia/typescript": "next" , "@theia/navigator": "next" , "@theia/terminal": "next" , "@theia/outline-view": "next" , "@theia/preferences": "next" , "@theia/messages": "next" , "@theia

npm& node 的问题

二次信任 提交于 2020-01-07 06:11:26
故事场景 在一个月黑风高的夜晚,小王正在学习node,由于一次次修改一次次重启服务,所以准备全局来个 supervisor npm i -g supervisor 故事发展到这里,本以为一切很快就会结束,结果事与愿违,嘣~一长串报错一闪而过,仔细看过之后我发现好像是我的node安装目录在升级的时候少npm-cli文件 Cannot find module 'C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js' 打开目录一看,果然少了没有这个文件,第一反应www.baidu.com,先看看网上有没这个文件。。。乱七八糟说什么的都有,没找到文件,但貌似找到了解决办法《重装大法》。 虽然大家都是程序猿,但是我还是比较相信有很多电脑小白哦。这里建议一种方法,就是电脑管家类似的安全工具,一键卸载。 重新安装完node,安装包选择在了D盘,本以为一切结束,可是一个叫vscode的手下 控制台 ,给我来了个 node: command not found 赶紧打开cmd推算这个问题是什么,我去...cmd上npm -v 出来版本了...这是什么鬼,立马点击'X'结束vscode的生命,并重新激活,问题依然在,环境变量检查也没问题,这时候我想起来了玄学重启... 恩~ 真香 好了 ‘bug’解决~ 来源: https://www

nodejs操作mongodb数据库的方法

依然范特西╮ 提交于 2020-01-07 03:14:32
//http://mongodb.github.io/node-mongodb-native/3.0/quick-start/quick-start/ /* nodejs操作mongodb数据库 1.安装mongodb、 cnpm install mongodb --save 2.引入mongodb下面的MongoClient var MongoClient = require('mongodb').MongoClient; 3.定义数据库连接的地址 以及配置数据库 qianfeng数据库的名称 var url = 'mongodb://localhost:27017/'; var dbName = 'shop' 4.nodejs连接数据库 MongoClient.connect(url,function(err,client){ const db = client.db(dbName); 数据库db对象 }) 5.操作数据库 MongoClient.connect(url,function(err,client){ const db = client.db(dbName); 数据库db对象 MongoClient.connect(url,function(err,db){ db.collection('user').insertOne({"name":"张三"},function

HashMap源码分析

帅比萌擦擦* 提交于 2020-01-07 00:19:29
HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树),以减少搜索时间,具体可以参考 treeifyBin 方法。 底层数据结构分析 JDK1.8之前 JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。 所谓扰动函数指的就是 HashMap 的 hash 方法。使用 hash 方法也就是扰动函数是为了防止一些实现比较差的 hashCode() 方法 换句话说使用扰动函数之后可以减少碰撞。 JDK 1.8

node子进程与线程

微笑、不失礼 提交于 2020-01-06 22:01:10
master.js文件 const cp = require('child_process') //控制子进程的调度 const child_process = cp.fork(__dirname + './child.js'); //创建子进程,参数是子进程入口js child_process.send('haha'); //给子进程发送消息 child_process.on('message',(str) => { console.log(str); //主进程接收子进程发送的消息 }) child.js文件 process.on('message',(str) => { //process是一个全局变量 console.log(str);   process.send('hehe'); //子进程给主进程发送消息 }) //子进程接受消息 运行node master.js  输出haha   此时主进程未退出 来源: CSDN 作者: Velly_zheng 链接: https://blog.csdn.net/Velly_zheng/article/details/103863639

[leetcode 6] copy-list-with-random-pointer

放肆的年华 提交于 2020-01-06 21:44:02
题目描述 现在有一个这样的链表:链表的每一个节点都附加了一个随机指针,随机指针可能指向链表中的任意一个节点或者指向空。 请对这个链表进行深拷贝。 A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 思路 为原链表每个结点编号,并创建一个 <RandomListNode *, int> 的map的key-value对作为目录; 按照编号个数创建新链表,并为新链表创建一个<int,RandomListNode *> 的查找目录; 遍历原链表完成深拷贝。 最先按照这个思路做时新链表 没有用new的方式创建而是直接创建结点对象,导致函数运行完后局部变量在栈中被释放,答案出错 。 后来改用new在堆内存申请空间,运行成功。 运行时间:25 ms,占用内存:1772K 代码 /** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label; * RandomListNode *next,

Node.js学习(一)

↘锁芯ラ 提交于 2020-01-06 21:40:24
1、Node的基础 什么是Node.js Node.js 是一个基于 ChromeV8 引擎的 JavaScript 的运行环境。Node.js使用了一个事件驱动,非阻塞的I/O模型,使其轻量又高效(Node.js可以处理高并发项目) 为什么要学习Node.js 不会后端的前端工程师不是好前端; 很多前端的工具都是用node来写的,想写好这些工具,必须要学会Node.js; Node可以创建一个服务器,是一门后端语言; 用Node可以调用很底层的接口,Node可以写桌面的应用程序; Node可以写操作系统; Node.js的安装 官网下载安装包 http://nodejs.cn/ 安装完成后,会自动配置好环境变量,可以在任何一个目录当中访问node命令 在控制台输出 node -v 查看版本号 版本分类:大版本号 小版本号 补丁版本号(奇数版本一般为不稳定版本,用于测试的版本,而偶数版本为稳定版本) LTS为长期使用的版本 current为最新版本 常用命令讲解 dir 列出当前目录下面所有的文件 cd 进入到指定的目录 cd. 进入到当前目录 cd.. 进入到上级目录 md 目录名 创建文件夹 rd 目录名 删除文件夹 cd . > 文件名.后缀 创建文件夹 cls  清屏 exit(ctrl + c) 退出命令行 进程与线程 进程的概念 系统进行资源分配和调度的基本单位