SkioFox Blog

Thinking will not overcome fear but action will.

数据结构:双向链表

数据结构:双向链表

双向链表 双向链表(doubly linked list) 是单向链表的扩展结构。单向链表的节点只包含下一个节点的引用及节点值,而双向链表的节点则多了一个包含上一个节点的引用。 两个节点链接允许在任一方向上遍历列表。 在双向链表中进行添加或者删除节点时,需做的链接更改要比单向链表复杂得多。这种操作在单向链表中更简单高效,因为不需要关注一个节点 (除第一个和最后一个节点以外的节点) ...

数据结构:树 (Tree)

数据结构:树 (Tree)

简介 树 (tree) 是一种广泛使用的抽象数据类型 (ADT) 。 一个简单的无序树如下图: 为何使用树结构? 像链表、栈、数组以及队列的存储序列都是线性数据结构。换句话说,对他们的任何操作的时间复杂度都会随着数据大小增长而增长,在现今的很多计算场景中,这种线性结构是不可接受的。 所以我们需要一种能够更快或更简单的访问数据的数据结构。 相关术语 节点 (Node):...

数据结构:哈希表

数据结构:哈希表

简介 在计算中, 一个哈希表 (hash table 或 hash map) 是一种实现关联数组 (associative array) 的抽象数据;类型, 该结构可以将键映射到值。 哈希表使用 哈希函数/散列函数,来计算一个值在数组或桶 (buckets) 中或槽 (slots) 中对应的索引,可使用该索引找到所需的值。 理想情况下,散列函数将为每个键分配给一个唯一的桶(bucket...

数据结构:二叉搜索树

数据结构:二叉搜索树

简介 二叉搜索树 (binary search tree) ,简称 BST。也有叫做二叉查找树、有序二叉树或排序二叉树。之所以叫搜索树,因为二叉搜索树能够快速得执行删除、插入、查找等操作。 二叉搜索树的存储结构通常采用二叉链表,是基础性数据结构,用于构建更为抽象的数据结构。在构建时,是有固定排序规则,它是一个有序树。 二叉搜索树的性质: 若任意左子树 $\neq \varn...

数据结构:队列

数据结构:队列

在计算机科学中, 一个 队列(queue) 是一种特殊类型的抽象数据类型或集合。集合中的实体按顺序保存。 队列基本操作有两种:入队 (enqueue)和出队 (dequeue)。从队列的后端位置添加实体,称为入队;从队列的前端位置移除实体,称为出队。 队列中元素先进先出 FIFO (first in, first out)的示意。 队列的数据结构实现可以基于链表结构,两种结...

数据结构:堆 (Heap)

数据结构:堆 (Heap)

介绍 堆是是一个完全二叉树,并满足堆属性。 堆属性两种,对于给定完全二叉树中的任意节点: 该节点的 key 总是 $>$ 它的子节点的 key,这种属性被叫做最大堆 (max heap) 属性; 该节点的 key 总是 $<$ 它的子节点的 key,这种属性被叫做最小堆 (min heap) 属性。 堆通常使用数组来实现。 特性 堆不关注左右兄弟...

数据结构:单向链表

数据结构:单向链表

简介 在计算机科学中, 一个链表是数据元素的线性集合,元素的线性顺序不是由它们在内存中的物理位置给出的。相反,每个元素指向下一个元素。它是由一组节点组成的数据结构,这些节点一起,表示序列。 在最简单的形式下,每个节点由数据和到序列中下一个节点的引用(换句话说,链接)组成。这种结构遍历时,能在任何位置极为方便得插入、删除元素。 链表的访问时间是线性的。 如果想快速访问到链表的某个节点位...

如何在移动端的调试中更加舒适?

移动端调试和代理

介绍 在工作的过程中,各种场景下的调试所占时间远超乎你的想象,我们需要总结一套调试方案来的提高研发效率,我们需要享受开发,而不是被享受。 代理调试 代理调试是指通过代理 HTTP/S 请求来捕获请求信息。 这种调试主要是通过分析网络数据来定位问题,所以客户端环境无关,只要是基于 TCP 的 HTTP/S协议都可以被代理处理。 本地网络调试 需要移动端设置代理 ip 和端口,并且保...

如何发布一个 npm 包

npm包发布基础知识

如何发布一个 npm 包 发布前 npm 包的发布需要提供两个关键信息:registry和 access token 。 registry 指定发布的仓库的地址; access token 规定访问权限,是一串16进制的字符串。 登录 CLI 里对 token 的操作以及包发布 (automation token 除外) 都必须预先登录。 使用 npm login,然后输入密码邮...

理解npm publish原理

npm publish原理解析

发布npm包也许是我们日常工作中的一部分,但是通过包管理工具发布一个npm其背后到底有什么故事,本文的主要目的是通过阅读yarn publish的源码来了解包管理工作是怎么来发布npm包,及我们碰到问题应该怎么去排查 背景 我们经常会发布npm包,那么有没有想过包管理工具publishnpm包后面的逻辑是怎么样的,今天以yarn 1.x的publish逻辑为例,通过了解 publish ...