node

【前端知识体系-NodeJS相关】NodeJS高频前端面试题整理

≯℡__Kan透↙ 提交于 2019-12-05 18:07:25
1. 为什么JavaScript是单线程? 防止DOM渲染冲突的问题; Html5中的Web Worker可以实现多线程 2.什么是任务队列? 任务队列"是一个先进先出的数据结构,排在前面的事件,优先被主线程读取。主线程的读取过程基本上是自动的,只要执行栈一清空,"任务队列"上第一位的事件就自动进入主线程。 2.1 同步和异步任务 同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务; 异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。 2.2 执行流程 所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。 主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。 主线程不断重复上面的第三步。 3. 什么是事件循环(EventLoop)? 主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。 3.1 定时器函数的基本使用方法对比?

java源码 -- LinkedHashMap

谁说胖子不能爱 提交于 2019-12-05 18:01:01
一、概述   LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条 双向链表 ,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。   除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。   在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。 本文重点放在双向链表的维护上:包括链表的建立过程,删除节点的过程,以及访问顺序维护的过程等 Entry static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K,V> before, after; Entry(int hash, K key, V value, Node<K,V> next) { super(hash, key, value, next); } }    before 与 after 提供了 一种视图 ,从该角度看是一个 所有节点按插入顺序排列的双向链表 。   之前在分析HashMap的红黑树相关操作时说过,每个table[ i ] 位置处的链/树按 next 看则是一个普通的单向链表,按left,right,parent看则是一个二叉树(还有一个prev 与 next 构成双向链

NPM

与世无争的帅哥 提交于 2019-12-05 17:53:32
官方网站,package.json guide: https://docs.npmjs.com/files/package.json ===== 以下转自; http://www.runoob.com/nodejs/nodejs-npm.html NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 "npm -v" 来测试是否成功安装。命令如下,出现版本提示表示安装成功: $ npm -v 2.3.0 如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下: $ sudo npm install npm -g /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js npm@2.14.2 /usr/local/lib/node_modules/npm 如果是 Window 系统使用以下命令即可: npm install npm

【转载】编写简单的消息发布器和订阅器

大兔子大兔子 提交于 2019-12-05 17:44:31
目录 1.功能包的创建 2.功能包的源代码编写 3.功能包的编译配置及编译 4.功能包的启动运行 通过上一节编写 ROS 的第一个程序 hello_world ,我们对 ROS 的整个编程开发过程有了基本的了解,现在我们就来编写真正意义上的使用 ROS 进行节点间通信的程序。由于之前已经建好了 catkin_ws 这样一个工作空间,以后开发的功能包都将放在这里面,这里给新建的功能包取名为 topic_example ,在这个功能包中分别编写两个节点程序 publish_node.cpp 和 subscribe_node.cpp ,发布节点( publish_node )向话题( chatter )发布 std_msgs::String 类型的消息,订阅节点( subscribe_node )从话题( chatter )订阅 std_msgs::String 类型的消息,这里消息传递的具体内容是一句问候语“ how are you ... ”,通信网络结构如图 16 。 ( 图 16 ) 消息发布与订阅 ROS 通信网络结构图 1.功能包的创建 在 catkin_ws/src/ 目录下新建功能包 topic_example ,并在创建时显式的指明依赖 roscpp 和 std_msgs 。打开命令行终端,输入命令: cd ~/catkin_ws/src/ #创建功能包topic

关于快应用版本踩过的一些坑

北城余情 提交于 2019-12-05 17:21:39
Error: Cannot find module 'node_modules\hap-tools\webpack.config.js'    如果 node 版本用的是8以上的话,在运行完 npm install 后再运行 npm run build 时可能会报 Cannot find module .../webpack.config.js 异常,这时大家不要惊慌,请重新执行一次 hap update --force 。这是由于高版本的 npm 在 npm install 时,会校验并删除了 node_modules 下部分文件夹,导致报错。而 hap update --force 会重新复制 hap-toolkit 文件夹到 node_modules 中,然后再重新执行npm run build > APIDemo@1.0.0 postinstall:koaStatic D:\quickapp\ss\APIDemo-master > babel -d ./node_modules/koa-static ./node_modules/koa-static 'babel' 不是内部或外部命令,也不是可运行的程序 或批处理文件。   当执行npm run build 报 'babel' 不是内部或外部命令,也不是可运行的程序 或批处理文件 的错误时 执行 npm install -

[LeetCode] 237. Delete Node in a Linked List

守給你的承諾、 提交于 2019-12-05 16:54:02
Description Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. Given linked list -- head = [4,5,1,9], which looks like following: Example 1: Input: head = [4,5,1,9], node = 5 Output: [4,1,9] Explanation: You are given the second node with value 5, the linked list should become 4 -> 1 -> 9 after calling your function. Example 2: Input: head = [4,5,1,9], node = 1 Output: [4,5,9] Explanation: You are given the third node with value 1, the linked list should become 4 -> 5 -> 9 after calling your function. Note: The linked list will have at

AST抽象语法树 Javascript版

妖精的绣舞 提交于 2019-12-05 16:48:30
在javascript世界中,你可以认为抽象语法树(AST)是最底层。 再往下,就是关于转换和编译的“黑魔法”领域了。 现在,我们拆解一个简单的add函数 function add(a, b) { return a + b } 首先,我们拿到的这个语法块,是一个FunctionDeclaration(函数定义)对象。 用力拆开,它成了三块: 一个id,就是它的名字,即add 两个params,就是它的参数,即[a, b] 一块body,也就是大括号内的一堆东西 add没办法继续拆下去了,它是一个最基础Identifier(标志)对象,用来作为函数的唯一标志。 { name: 'add' type: 'identifier' ... } params继续拆下去,其实是两个Identifier组成的数组。之后也没办法拆下去了。 [ { name: 'a' type: 'identifier' ... }, { name: 'b' type: 'identifier' ... } ] 接下来,我们继续拆开body 我们发现,body其实是一个BlockStatement(块状域)对象,用来表示是 {return a + b} 打开Blockstatement,里面藏着一个ReturnStatement(Return域)对象,用来表示 return a + b

【细谈Java并发】谈谈LinkedBlockingQueue(转)

删除回忆录丶 提交于 2019-12-05 16:47:36
最近在看concurrent包的知识,看到 LinkedBlockingQueue ,发现一篇好文推荐给大家。 原文地址: 【细谈Java并发】谈谈LinkedBlockingQueue 1、简介 上篇我们介绍了ArrayBlockingQueue的相关方法的原理,这一篇我们来学习一下 ArrayBlockingQueue 的“亲戚” LinkedBlockingQueue 。在集合框架里,想必大家都用过ArrayList和LinkedList,也经常在面试中问到他们之间的区别。ArrayList和ArrayBlockingQueue一样,内部基于数组来存放元素,而LinkedBlockingQueue则和LinkedList一样,内部基于链表来存放元素。 LinkedBlockingQueue实现了BlockingQueue接口,这里放一张类的继承关系图(图片来自之前的文章: 说说队列Queue ) LinkedBlockingQueue不同于ArrayBlockingQueue,它如果不指定容量,默认为 Integer.MAX_VALUE ,也就是无界队列。所以为了避免队列过大造成机器负载或者内存爆满的情况出现,我们在使用的时候建议手动传一个队列的大小。 2、源码分析 2.1、属性 /** * 节点类,用于存储数据 */ static class Node<E> { E

node项目实战-用node-koa2-mysql-bootstrap搭建一个前端论坛

醉酒当歌 提交于 2019-12-05 16:29:00
前言 在学习了koa2和express并写了一些demo后,打算自己写一个项目练练手,由于是在校生,没什么好的项目做,即以开发一个前端论坛为目标,功能需求参照一下一些社区拟定,主要有: 登录注册 个人信息维护、头像等基本信息 发表文章,富文本编辑器采用wangEditor插件,编辑、删除文章,文章分类等 文章评论、文章收藏、点赞等 支持文章分页、评论分页加载 关注取关用户 资源(文件)上传分享、下载、查看 学习资源推荐..... 作者个人日记 but。。。。由于种种原因,目前仅实现了部分功能,资源分享还没写 项目运行效果: http://120.77.211.212/home 项目技术栈应用:node-koa2-ejs-bootstrap3—jquery, github地址: https://github.com/Jay214/myb... ,如果觉得对你有帮助或者还看得下去,欢迎star~~鼓励鼓励我这前端渣渣辉。 开发环境 node: v8.3.0 koa: ^2.4.1 mysql: 5.7.1 npm: 5.3.0及以上 如何运行项目 将项目clone至本地 git clone git@github.com:Jay214/myblog-koa2.git 安装模块中间件 npm install 安装mysql mysql版本推荐使用5.7以下的,5.7的有个bug

【转】Redis面试题

余生长醉 提交于 2019-12-05 16:26:44
1、谈谈Redis的主从复制流程 有几个重点: 主节点负责写,从节点负责读,slave node 主要用来进行横向扩容,做读写分离,扩容的 slave node 可以提高读的吞吐量。 必须开启 master node 的持久化,不建议用 slave node 作为 master node 的数据热备,因为那样的话,如果你关掉 master 的持久化,可能在 master 宕机重启的时候数据是空的,然后可能一经过复制, slave node 的数据也丢了。 当启动一个 slave node 的时候,它会发送一个 PSYNC 命令给 master node。 slave node 初次连接到 master node,那么会触发一次 full resynchronization 全量复制。此时 master 会启动一个后台线程,开始生成一份 RDB 快照文件,同时还会将从客户端 client 新收到的所有写命令缓存在内存中。 断点续传是通过offset机制。 如果 master node 重启或者数据出现了变化,那么 slave node 应该根据不同的 run id 区分。 更详细见:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-master-slave.md 2