node

数据结构与算法之美-链表

风流意气都作罢 提交于 2020-01-22 01:09:58
什么是链表 和数组一样,链表也是一种线性表。 从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。 链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。 链表的特点 插入、删除数据效率高,时间复杂度为O(1),只需更改指针指向即可。 随机访问效率低,时间复杂度为O(n),需要从链头至链尾进行遍历。 和数组相比,链表的内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针。 常见的链表结构 单链表 每个节点只包含一个指针,即后继指针。 单链表有两个特殊的节点,即首节点和尾节点。 用首节点地址表示整条链表,尾节点的后继指针指向空地址null。 性能特点,插入和删除节点的时间复杂度为O(1),查找的时间复杂度为O(n)。 循环链表 除了尾节点的后继指针指向首节点的地址外均与单链表一致。 适用于存储有循环特点的数据,比如约瑟夫问题。 双向链表 节点除了存储数据外,还有两个指针分别指向前一个节点地址(前驱指针prev)和下一个节点地址(后继指针next)。 首节点的前驱指针prev和尾节点的后继指针next均指向空地址。 性能特点,和单链表相比,存储相同的数据,需要消耗更多的存储空间。 插入、删除操作比单链表效率更高,时间复杂度为O(1)。以删除操作为例

浅析Node与Element

£可爱£侵袭症+ 提交于 2020-01-21 20:00:48
起因 起因有二: 在看winter老师的分享: 《一个前端的自我修养》 时,有注意到这么一幅图,里面有写 childNode 和 children 属性。 昨天有学弟问起我,能否自己定义一个所有元素节点通用的方法,就像数组可以用 Array.prototype.xxx 来添加一个所有数组的方法。 于是发现自己对于Node和Element的概念其实还不太清晰,所以上MDN看了看,写篇博客沉淀一下。 Node Node类继承于EventTarget,下面是MDN给的解释。 Node在这儿指DOM节点,其中包括了我们最常见的元素节点,比如 div/p/span 之类的。除此之外还包括了 Document/Comment 之类的节点。 一个节点的类型,可以通过其 nodeType 类型查看到,具体的类型则可以看下图: 高频的属性与方法 Node定义了一些经典的节点操作方法,我这儿画了个简单的图, 并没有列出全部属性 。 写前端的同学,日常应该都会频繁的用到这些方法。 坑 当然,也有可能会遇到踩坑的现象。比如说在使用 nextSibling 完成遍历操作的时候, nextSibling 有可能会返回的是文本节点而非元素节点,那么在调用一些元素节点的属性或方法时(如 innerHTML ),就会出错。这也是为什么一定要区分清楚两种节点的原因。 Element 至于说Element,

Node.js_1.1

点点圈 提交于 2020-01-21 18:53:13
Node.js简介 Node.js是一个能够在服务器端运行JavaScript的开源代码、跨平台JavaScript运行环境 Node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模 Node大部分基本模块都用JavaSprit编写。在Node出现之前JS通常作为客户端程序设计语言使用,以JS写出的程序通常在用户的浏览器上运行 安装Node环境 查看当前Node环境版本号 node --version 下载: https://nodejs.org/en/download/ 安装 next 安装过的重新安装就会升级 确认Node环境变量是否安装成功 在node安装目录下cmd执行node --version或者node -v 环境变量 执行js代码 编写js代码 打开终端,定位到脚本文件所属的目录 输入node 文件名执行对应的文件 【注意】文件名不要使用node.js执行对应的文件 在Node中,采用EcmaScript进行编码,没有BOM\DOM 读写文件 //fs是file-system的简写,就是文件系统的意思 //在Node中如果想要进行文件操作,就必须引入fs这个核心模块 //在fs这个核心模块中,就提供了所有的文件操作相关的API //例如:fs。readFile就是用来读取文件的 //1

java并发-AbstractQueuedSynchronizer

大城市里の小女人 提交于 2020-01-21 16:48:55
AQS是个什么东西 AbstractQueuedSynchronizer 是java并发包下大部分的同步组件的底层基础框架,包括 ReentrantLock 、 Semaphore 、 CountDownLatch 等,有点类似在上文中可以基于 ThreadPoolExecutor 构造FixedThreadPool,CachedThreadPool,SingleThreadExecutor。虽然在开发中很少基于AQS直接开发,但在JUC下的一些标准同步器却难勉会接触到,想要了解上层的同步器(显式锁,闭锁,信号量等)的原理,还是有必要起起AQS的底。 AQS主要做着什么 AQS主要做着如下三件事: 原子性地管理着同步状态,这个同步状态就是多线程进行竞争的资源,多线程下必需保证同一时刻只有一个能成功修改同步状态 维护同步队列: 1)新同步节点进入队尾排队进行等待。2)同步节点释放资源时出队并唤醒下一个同步节点,且被唤醒的节点成为头节点。3)对队列中一些已经取消的节点移出队列 线程的阻塞与解除阻塞: 线程竞争不到同步资源时使线程进入阻塞等待,已释放资源的线程唤醒下后继线程,使后继线程解除阻塞进行资源竞争 AQS的实现基础 变体CLH 整个框架的核心是基于CLH队列(通常用于自旋锁)实现变体的CLH锁,但是使用相同的基本策略,在其节点的前置节点中保留关于线程的一些控制信息

tree

狂风中的少年 提交于 2020-01-21 16:16:35
< el-tree :props = "areaSelectProps" :load = "loadNode" :expand-on-click-node = "false" lazy > < /tree > // 区域树形图 areaSelectProps: { value: 'baseAreaId' , label: 'baseAreaName' , children: 'children' , isLeaf: 'leaf' , } , // 加载下级区域 async loadNode ( node, resolve ) { let baseAreaId = '' ; if ( node.data ) { baseAreaId = node.data.baseAreaId } const areaList = await getExceptionList ( baseAreaId ) ; areaList.map ( v = > { if ( v.childCnt > 0 ) { v.leaf = false } else { v.leaf = true } v.children = [ ] return v } ) resolve ( areaList ) } , 来源: CSDN 作者: 粥萌_ 链接: https://blog.csdn.net/weixin

Node.js爬虫实战,轻松掌握nodejs

感情迁移 提交于 2020-01-21 16:08:35
B站视频链接: https://www.bilibili.com/video/av75510075 我的GitHub文件:https://github.com/Li-YangZhong/Node.js-nodejs.git node -v //查看node版本 // clear //清空屏幕内容 CNPM介绍: 说明:因为谷歌安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果谷歌的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事来自官网:“这是一个完整npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为10分钟一次以保证尽量与官方服务同步“。 官方网址: http://npm.taobao.org 安装:命令提示符执行 npm install cnpm -g --registry= https://registry.npm.taobao.org 注意:安装完后最好查看其版本cnpm -v或关闭命令提示符重新打开,安装完直接使用有可能会出现错误 注:CNPM跟NPM用法完全一致,只是在执行命令时将谷歌改为CNPM。 来自 < https://blog.csdn.net/jack_bob/article/details/80644376 > cnpm - 解决 " cnpm : 无法加载文件 C:\Users\93457\AppData\Roaming

关于cartographer的回环的一些理解

倖福魔咒の 提交于 2020-01-21 16:07:53
在cartographer中,constraints表示计算出的node到submap(与node有关的且已经finished的)原点之间的约束,在代码里在pose_graph_2d.cc与pose_graph_3d.cc中ComputeConstraint函数中实现: 当在同一条trajectory上时,即初次建图时,始终以add_local的方式添加。 add_local会进行筛选,筛选方式为node与submap原点的距离小于阈值(默认为15米),且不被采样率略过,并且Match的分数高于min_score,具体的参数为POSE_GRAPH.constraint_builder.sampling_ratio和POSE_GRAPH.constraint_builder.max_constraint_distance和POSE_GRAPH.constraint_builder.min_score; add_local会使用位姿初值,此处的初值即前端(LocalSlam)得来的; 关于第一点,为何不用是否在submap范围以内进行筛选而使用距离,我认为是因为在submap外部亦可得出与submap的grid地图匹配分数较高的constraint,这就好比远处和近处看同一个事物,亦可得出其是同一个事物的结论。 当不在同一条trajectory上时(即利用已有地图进行定位时),add

Node中的require

試著忘記壹切 提交于 2020-01-21 14:10:29
Require require作用: 加载执行模块文件的代码 返回模块的exports对象 //导出模块 exports . abc = 'hello' //导入模块 var a = require ( './a' ) console . log ( a ) //{ abc: 'hello' } 加载规则: 优先从缓存中加载 例如有三个文件main.js ,a.js ,b.js //main.js require ( './a' ) var b = require ( './b' ) console . log ( b ) //a.js console . log ( 'aaa' ) require ( './b' ) //b.js console . log ( 'bbb' ) exports . b = 'bbb' 执行node main.js结果为 aaa bbb { b : 'bbb' } 在a.js中已经加载过b.js文件,所以main.js再加载b.js的时候就不会打印bbb了 但main.js中可以得到b.js导出的exports对象 目的是为了避免模块重复加载,提高模块的加载效率 判断模块标识符 路径形式的模块标识符 require(’./a’) 参数以‘/’开头,表示加载位于绝对路径的模块文件 参数以’./'开头,表示加载位于相对路径(跟当前执行脚本的位置相比

硬件遮挡查询 - gpugems2.chap6

给你一囗甜甜゛ 提交于 2020-01-21 10:52:05
先放下代码,未完待续。 TraversalStack.Push(hierarchy.Root); while ( not TraversalStack.Empty() or not QueryQueue.Empty() ) { //--PART 1: process finished occlusion queries while (not QueryQueue.Empty() and [ResultAvailable(QueryQueue.Front()) or TraversalStack.Empty()] ) { node = QueryQueue.Dequeue(); // wait if result not available visiblePixels = GetOcclusionQueryResult(node); if (visiblePixels > VisibilityThreshold) { PullUpVisibility(node); TraverseNode(node); } } //--PART 2: hierarchical traversal if ( not TraversalStack.Empty() ) { node = TraversalStack.Pop(); if ( InsideViewFrustum(node) ) { //

k8s集群给pod指定运行的node

狂风中的少年 提交于 2020-01-21 09:30:14
k8s集群的yaml文件,需要指定pod在哪个node上面运行很简单,可以有两种方法。 1. 强制约束Pod调度在指定Node节点上 Pod.spec.nodeName 2. 通过label-selector机制选择节点 Pod.spec.nodeSelector 查询node的label情况命令: kubectl get node --show-labels 为node添加label: kubectl label node k8s-node1 type=node1 修改一个Label的值,如果key值相同,需要加上--overwrite参数;key值不同,同上直接添加label即可: kubectl label node nodename type=node2 --overwrite 删除一个Label,只需在命令行最后指定Label的key名并与一个减号相连即可: kubectl label node nodename role- (ps: 上面命令label后面的node写nodes也行,一样的) 参考网址: https://www.cnblogs.com/wucaiyun1/p/11698320.html 来源: CSDN 作者: 挥挥洒洒 链接: https://blog.csdn.net/u010420283/article/details/103928862