node

最近使用容量为K的缓存结构

ε祈祈猫儿з 提交于 2020-02-08 01:25:29
文章目录 设计可以变更的缓存结构 最近使用容量为K的缓存结构 算法思路 相应代码 设计可以变更的缓存结构 最近使用容量为K的缓存结构 【题目】 设计一种缓存结构,该结构在构造时确定大小,假设大小为K,并有两个功能: get(key):返回key对应的value值; set(key,value):将记录(key,value)插入该结构。 【要求】 get和set方法的时间复杂度为O(1)。 某个key的get和set操作一旦发生,认为这个key的记录成了最经常使用的。 当缓存的大小超过K时,移除最不经常使用的记录,即get和set最久远的。 【举例】 假设缓存结构的实例是cache,大小为3,并依次发生如下行为: cache.set(“A”,1)。最经常使用的记录为(“A”,1)。 cache.set(“B”,2)。最经常使用的记录为(“B”,2),(“A”,1)变为最不经常的。 cache.set(“C”,3)。最经常使用的记录为(“C”,2),(“A”,1)还是最不经常的。 cache.get(“A”)。最经常使用的记录为(“A”,1),(“B”,2)变为最不经常的。 cache.set(“D”,4)。大小超过了3,所以移除此时最不经常使用的记录 (“B”,2),加入记录(“D”,4)。 此时(“D”,4)为最经常使用的记录,然后(“C”,2)变为最不经常使用的记录。 算法思路

并发队列之ConcurrentLinkedQueue

眉间皱痕 提交于 2020-02-07 23:59:32
  本来想着直接说线程池的,不过在说线程池之前,我们必须要知道并发安全队列;因为一般情况下线程池中的线程数量是一定的,肯定不会超过某个阈值,那么当任务太多了的时候,我们必须把多余的任务保存到并发安全队列中,当线程池中的线程空闲下来了,就会到并发安全队列中拿任务;   那么什么是并发安全队列呢?其实可以简单看作是一个链表,然后我们先办法去存取节点;总的来说,并发安全队列分为两种,一种是阻塞的,一种是非阻塞的,前者是用锁来实现的,后者用CAS实现的; 一.简单介绍ConcurrentLinkedQueue   这个队列用法没什么好说的,就类似LinkedList的用法,怎么对一个链表继续增删改查,不多说,我们就说一下其中几个关键的方法;   首先,这个队列是一个线程安全的无界非阻塞队列,其实就是一个单向链表,无界的意思就是没有限制最大长度,非阻塞表示用CAS实现入队和出队操作,我们打开这个类就可以知道,有一个内部类Node,其中重要的属性如下所示: //用于存放节点的值 volatile E item; //指向下一个节点 volatile Node<E> next; //这里也是用的是UNSAFE类,前面说过了,这个类直接提供CAS操作 private static final sun.misc.Unsafe UNSAFE; //item字段的偏移量 private static

Module build failed: Error: Cannot find module 'node-sass’解决

扶醉桌前 提交于 2020-02-07 23:04:47
在 npm run dev 时出现 ” Module build failed: Error: Cannot find module 'node-sass’ “ 这样的错误,如下: ERROR Failed to compile with 1 errors 19:51:09 error in ./src/page/Class/ClassList.vue Module build failed: Error: Cannot find module 'node-sass' Require stack: - F:\Workspace\vscode\user_h5\node_modules\sass-loader\lib\loader.js - F:\Workspace\vscode\user_h5\node_modules\loader-runner\lib\loadLoader.js - F:\Workspace\vscode\user_h5\node_modules\loader-runner\lib\LoaderRunner.js - F:\Workspace\vscode\user_h5\node_modules\webpack\lib\NormalModule.js - F:\Workspace\vscode\user_h5\node_modules\webpack\lib

基数排序(radixSort)

丶灬走出姿态 提交于 2020-02-07 15:51:39
基数排序 基数排序算法的思想很有趣,他不依靠直接比较元素排序。而是采用分配式排序,单独处理元素的每一位。从最高位向最低位处理 称为:最高位优先(MSD)反之称为:最低位优先(LSD)。基数排序也称为桶排序。下面以最低位优先为例。 原理 准备10个容器,编号0-9,对应数字0-9。 容器是有序的(按添加顺序) 然后按待排序元素的 某一位的 数字 (比如:个位/十位/白位)将其存放到对应容器中(数字相同,如: 个位是数字1时, 就把这个元素放在1号桶),所有元素这样处理完后, 再从0号容器开始依次到9号容器, 将其中的元素顺序取出。所以容器内的元素收集合并 复制回原数组 ,然后再从下一位开始…(比如个位处理完后, 再处理十位/百位....最高位) 这里假设数组元素都是3位数。从个位开始,将数组中的元素按个位数字放入对应的桶中,再从桶中顺序取出到数组,这是数组按个位数字有序排列,再以相同的逻辑处理十位和百位。最后数组中就是有序的了 这里的排序原理是:将元素按位排序, 但是优先级不同, 做高位优先级高, 然后是次高位...。这样考虑:一组元素按最高位排序,那么在不考虑其他位的情况下,这组元素是有序的。再考虑低位,当个位排序好后,在排序十位,这时对十位的排序影响个位了吗?并没有。这就是优先级(权重)的问题, 十位对数字大小的影响显然比个位高。 示例代码1 示例算法测试效率并不高

二叉树的代码实现 JAVA 版本

こ雲淡風輕ζ 提交于 2020-02-07 13:14:22
本文主要实现二叉树的简单功能: (1)二叉树的生成 (2)二叉树的遍历:前序遍历,中序遍历,后序遍历,层次遍历 (3)二叉树的删除 (3)判断节点是否存在的功能 package ds.tree; import ds.link.Node; import java.util.LinkedList; import java.util.Queue; /** * @author : cuantianhou 2019/12/17 */ public class BinaryTree <T extends Comparable<T>>{ private Node<T> root; private int capacity = 0; public T insert(T data){ /** * Step1: 如果该节点为空,将该节点设置为根节点,父节点为空,返回出入值 * * */ capacity++; if(root == null) { root = new Node<T>(data,null); return root.data; } /** * Step2:从根节点遍历,插入节点比当前节点小,把当前节点设置为左子节点,然后与左子比较, * 插入节点比当前节点大,把当前节点设置为右子节点,然后与右子比较,插入节点和当前节点相等 * 覆盖并返回当前值 **/ //父节点 Node<T>

vue-cli3 一直运行 sockjs-node info t= 解决方案

跟風遠走 提交于 2020-02-07 12:50:13
vue-cli3 一直运行 /sockjs-node/info?t= 解决方案 首先 sockjs-node 是一个JavaScript库,提供跨浏览器JavaScript的API,创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。 服务端:sockjs-node( https://github.com/sockjs/sockjs-node ) 客户端:sockjs-clien( https://github.com/sockjs/sockjs-client ) 如果你的项目没有用到 sockjs,vuecli3 运行 npm run serve 之后 network 里面一直调研一个接口: http://localhost:8080/sockjs-node/info?t=1462183700002 作为一个有节操的程序猿,实在不能忍受,特意自己研究了下源码,从根源上关闭这个调用 1. 找到/node_modules/sockjs-client/dist/sockjs.js 2.找到代码的 1605行 try { // self.xhr.send(payload); 把这里注掉 } catch (e) { self.emit('finish', 0, ''); self._cleanup(false); } 3.刷新,搞定。 来源: https://www.cnblogs

NPM Error:gyp: No Xcode or CLT version detected!

帅比萌擦擦* 提交于 2020-02-07 12:07:35
问题 最近在macOS Catalina中使用npm安装模块,经常会出现如下错误: > node-gyp rebuild No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'. No receipt for 'com.apple.pkg.DeveloperToolsCLILeo' found at '/'. No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'. gyp: No Xcode or CLT version detected! gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1 gyp ERR! stack at ChildProcess.onCpExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:351:16) gyp ERR! stack at ChildProcess.emit (events.js:210:5) gyp ERR! stack at Process.ChildProcess._handle.onexit

NodeJS第一天(文件写入)

落爺英雄遲暮 提交于 2020-02-07 11:47:23
提示 :Node中的文件系统 1.在NodeJs中有一个文件系统。所谓的文件系统,就是对计算机中的文件,进行增删改查 2.在NodeJs中,给我们提供了一个模块,叫做fs模块,专门用来用户操作文件 3.fs模块是Node的核心模块。使用的时候,要引进来。不需要下载安装。 进入正题 一、简单文件写入(异步) fs.writeFile(file,data,[options],callback) fill: 文件路径 + 文件名 data:要写入的数据 options:配置参数([]里的都是可选参数) --flag:打开文件要进行的操作,默认是w ‘w’:直接写入 ‘a’:追加 --mode: 文件的权限的限制,默认是00666 --00111: 文件可被执行 --00222: 文件可被写入 --00333: 文件可被读取 --encoding:默认值utf-8 callback:回调函数 --err ⚠️注意: 1⃣️node中有错误优先原则 2⃣️这样写入的不足之处:简单文件写入,是一次性把所有要写入的数据加载到内存中,对于比较大的文件容易产生内存溢出,适用于比较小的文件写入。 (ex)举个🌰: 1. 引入fs模块 let fs = require(‘fs’) 2. 简单的文件写入 fs.writeFile(’.12.21.txt’,‘coding虎’,(err) => { if (

npm ERR! path E:\gitdemo\yayibang\node_modules\.node-sass.DELETE\vendor\win32-x64-64\binding.node

℡╲_俬逩灬. 提交于 2020-02-07 11:30:55
Cannot download "https://hithub.com/sass/node-sass/releases/download/v3.13.0/win32-x64-46_binding.node" 1 从上图第九行代码可以看出,导致 node-sass 安装失败的原因是因为无法下载 .node 文件,解决办法就很简单了,就是我们把文件下载路径复制一份到浏览器里,然后使用浏览器下载文件就可以了。 具体方法 1.从node命令行中复制 .node 文件下载链接并在浏览器打开下载文件 https://github.com/sass/node-sass/releases/download/v3.13.0/win32-x64-46_binding.node 1 2.文件下载成功后,在命令行工具输入下面指令: set SASS_BINARY_PATH=D:/WorkCode/win32-x64-46_binding.node //PATH=后面是的下载的.node所在的路径 1 设置 SASS_BINARY_PATH 环境变量,目的是告诉程序直接使用本地的.node文件,无需从网上下载 3.配置完成,从新输入指令: npm i node-sass -D --verbose 1 接下来你就会发现node-sass安装成功。 下载完了之后把它注册成全局环境变量,两种方式: 第一种

LeetCode 145. 二叉树的后序遍历

守給你的承諾、 提交于 2020-02-07 07:06:34
给定一个二叉树,返回它的 后序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal 迭代: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<int> postorderTraversal(TreeNode* root) { 13 vector<int> ans; 14 if(!root) return ans; 15 stack<TreeNode*> nodeStack1,nodeStack2; 16 TreeNode* node; 17 nodeStack1.push(root); 18 while(