huihui
huihui
 ## 一、是什么 在计算机领域,树形数据结构是一类重要的非线性数据结构,可以表示数据之间一对多的关系。以树与二叉树最为常用,直观看来,树是以分支关系定义的层次结构 二叉树满足以下两个条件: - 本身是有序树 - 树中包含的各个结点的不能超过 2,即只能是 0、1 或者 2 如下图,左侧的为二叉树,而右侧的因为头结点的子结点超过2,因此不属于二叉树:  同时,二叉树可以继续进行分类,分成了满二叉树和完成二叉树: - 满二叉树:如果二叉树中除了叶子结点,每个结点的度都为 2  - 完成二叉树:如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布  ## 二、操作 关于二叉树的遍历,常见的有: - 前序遍历 - 中序遍历...
 ## 一、是什么 集合(Set),指具有某种特定性质的事物的总体,里面的每一项内容称作元素 在数学中,我们经常会遇到集合的概念: - 有限集合:例如一个班集所有的同学构成的集合 - 无限集合:例如全体自然数集合 在计算机中集合道理也基本一致,具有三大特性: - 确定性:于一个给定的集合,集合中的元素是确定的。即一个元素,或者属于该集合,或者不属于该集合,两者必居其一 - 无序性:在一个集合中,不考虑元素之间的顺序,只要元素完全相同,就认为是同一个集合 - 互异性:集合中任意两个元素都是不同的 ## 二、操作 在`ES6`中,集合本身是一个构建函数`Set`,用来生成 `Set` 数据结构,如下: ```js const s = new Set(); ``` 关于集合常见的方法有: -...
 ## 一、是什么 链表(Linked List)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,由一系列结点(链表中每一个元素称为结点)组成 每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域  节点用代码表示,则如下: ```js class Node { constructor(val) { this.val = val; this.next = null; } } ``` - data 表示节点存放的数据 - next 表示下一个节点指向的内存空间 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到`O(1)`的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是`O(logn)`和`O(1)`...
 ## 一、栈 栈(stack)又名堆栈,它是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表 表尾这一端被称为栈顶,相反地另一端被称为栈底,向栈顶插入元素被称为进栈、入栈、压栈,从栈顶删除元素又称作出栈 所以其按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据,具有记忆作用 关于栈的简单实现,如下: ```js class Stack { constructor() { this.items = []; } /** * 添加一个(或几个)新元素到栈顶 * @param {*} element 新元素 */ push(element) { this.items.push(element) }...
 ## 一、场景复现 一个经典的面试题 ```js 0.1 + 0.2 === 0.3 // false ``` 为什么是`false`呢? 先看下面这个比喻 比如一个数 1÷3=0.33333333...... 3会一直无限循环,数学可以表示,但是计算机要存储,方便下次取出来再使用,但0.333333...... 这个数无限循环,再大的内存它也存不下,所以不能存储一个相对于数学来说的值,只能存储一个近似值,当计算机存储后再取出时就会出现精度丢失问题 ## 二、浮点数 “浮点数”是一种表示数字的标准,整数也可以用浮点数的格式来存储 我们也可以理解成,浮点数就是小数 在`JavaScript`中,现在主流的数值类型是`Number`,而`Number`采用的是`IEEE754`规范中64位双精度浮点数编码 这样的存储结构优点是可以归一化处理整数和小数,节省存储空间 对于一个整数,可以很轻易转化成十进制或者二进制。但是对于一个浮点数来说,因为小数点的存在,小数点的位置不是固定的。解决思路就是使用科学计数法,这样小数点位置就固定了 而计算机只能用二进制(0或1)表示,二进制转换为科学记数法的公式如下:  其中,`a`的值为0或者1,e为小数点移动的位置 举个例子:...
 ## 一、是什么 `react-router`等前端路由的原理大致相同,可以实现无刷新的条件下切换显示不同的页面 路由的本质就是页面的`URL`发生改变时,页面的显示结果可以根据`URL`的变化而变化,但是页面不会刷新 因此,可以通过前端路由可以实现单页(SPA)应用 `react-router`主要分成了几个不同的包: - react-router: 实现了路由的核心功能 - react-router-dom: 基于 react-router,加入了在浏览器运行环境下的一些功能 - react-router-native:基于 react-router,加入了 react-native 运行环境下的一些功能 - react-router-config: 用于配置静态路由的工具库 ## 二、有哪些 这里主要讲述的是`react-router-dom`的常用`API`,主要是提供了一些组件: - BrowserRouter、HashRouter - Route -...
 ## 一、原理 首先,`render`函数在`react`中有两种形式: 在类组件中,指的是`render`方法: ```jsx class Foo extends React.Component { render() { return Foo ; } } ``` 在函数组件中,指的是函数组件本身: ```js function Foo() { return Foo ; } ``` 在`render`中,我们会编写`jsx`,`jsx`通过`babel`编译后就会转化成我们熟悉的`js`格式,如下:...
 ## 一、是什么 TCP/IP,**传输控制协议**/**网际协议**,是指能够在多个不同网络间实现信息传输的协议簇 - TCP(传输控制协议) 一种面向连接的、可靠的、基于字节流的传输层通信协议 - IP(网际协议) 用于封包交换数据网络的协议 TCP/IP协议不仅仅指的是`TCP `和`IP`两个协议,而是指一个由`FTP`、`SMTP`、`TCP`、`UDP`、`IP`等协议构成的协议簇, 只是因为在`TCP/IP`协议中`TCP`协议和`IP`协议最具代表性,所以通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols) ## 二、划分 TCP/IP协议族按层次分别了五层体系或者四层体系 五层体系的协议结构是综合了 OSI 和 TCP/IP 优点的一种协议,包括应用层、传输层、网络层、数据链路层和物理层 五层协议的体系结构只是为介绍网络原理而设计的,实际应用还是 TCP/IP 四层体系结构,包括应用层、传输层、网络层(网际互联层)、网络接口层 如下图所示:  ###...
 ## 一、是什么 WebSocket,是一种网络传输协议,位于`OSI`模型的应用层。可在单个`TCP`连接上进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅 客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输  从上图可见,`websocket`服务器与客户端通过握手连接,连接成功后,两者都能主动的向对方发送或接受数据 而在`websocket`出现之前,开发实时`web`应用的方式为轮询 不停地向服务器发送 HTTP 请求,问有没有数据,有数据的话服务器就用响应报文回应。如果轮询的频率比较高,那么就可以近似地实现“实时通信”的效果 轮询的缺点也很明显,反复发送无效查询请求耗费了大量的带宽和 `CPU `资源 ## 二、特点 ### 全双工 通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合 例如指 A→B 的同时 B→A ,是瞬时同步的 ### 二进制帧 采用了二进制帧结构,语法、语义与 HTTP 完全不兼容,相比`http/2`,`WebSocket `更侧重于“实时通信”,而`HTTP/2`...
 ## 一、是什么 我们将组件间通信可以拆分为两个词: - 组件 - 通信 回顾[Vue系列](https://mp.weixin.qq.com/s/uFjMz6BByA5eknBgkvgdeQ)的文章,组件是`vue`中最强大的功能之一,同样组件化是`React`的核心思想 相比`vue`,`React`的组件更加灵活和多样,按照不同的方式可以分成很多类型的组件 而通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的,广义上,任何信息的交通都是通信 组件间通信即指组件通过某种方式来传递信息以达到某个目的 ## 二、如何通信 组件传递的方式有很多种,根据传送者和接收者可以分为如下: - 父组件向子组件传递 - 子组件向父组件传递 - 兄弟组件之间的通信 - 父组件向后代组件传递 - 非关系组件传递 ### 父组件向子组件传递 由于`React`的数据流动为单向的,父组件向子组件传递是最常见的方式 父组件在调用子组件的时候,只需要在子组件标签内传递参数,子组件通过`props`属性就能接收父组件传递过来的参数 ```jsx...