blog icon indicating copy to clipboard operation
blog copied to clipboard

📝 My blog / notes

Results 86 blog issues
Sort by recently updated
recently updated
newest added

## 链表 `概念`:链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每个 元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。 `与数组的区别`:相对于传统的数组,链表的一个好处在于,添加或移除元素的时候不需要移动其他元素。数组缺点:(在大多数语言中)数组的大小是固定的,从数组的起点或中间插入或移除项的成本很高,因为需要移动元素(尽管我们已经学过的JavaScript的array类方法可以帮 我们做这些事,但背后的情况同样是这样)。 然而,链表需要使用指针,因此实现链表时需要额外注意。数组的另一个细节是可以直接访问任何位置的任何元素,而要想访问链表中间的一个元素,需要从起点(表头)开始迭代列表直到找到 所需的元素。 ![image](https://user-images.githubusercontent.com/24861316/37255160-80ea0426-2583-11e8-9d8a-43872c414e43.png) ### 创建链表 ```js function LinkedList() { let Node = function(element){ this.element = element; this.next = null; }; let length = 0;...

js
阅读笔记
数据结构与算法

## 计算器内存: ![image](https://user-images.githubusercontent.com/24861316/72682482-60ead000-3b08-11ea-940b-c0f7ac099b02.png) 需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。 需要存 储多项数据时,有两种基本方式——数组和链表。 ![image](https://user-images.githubusercontent.com/24861316/72682486-6811de00-3b08-11ea-9d5e-1f231fd90fc0.png) ## 数组与链表 ### 链表 链表中的元素可存储在内存的任何地方。链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起,但也因此随机读取元素会较慢。 ![image](https://user-images.githubusercontent.com/24861316/72682489-73650980-3b08-11ea-96a6-88fcd9b3e877.png) ### 数组 数组所有元素是靠在一起的,如果没有一整个空间容下这个数组,就得移到内存的其他地方,因此添加新元素的速度会较慢。 ![image](https://user-images.githubusercontent.com/24861316/72682491-7829bd80-3b08-11ea-9664-ed26fc45116e.png) ### 读取元素: 需要随机地读取元素时,数组的效率很高,因为可迅速找到数组的任何元素, 因为数组知道其中每个元素的地址。 在链表中,元素并非靠在一起的,你无法迅速计算出第五个元素的内存 地址,而必须先访问第一个元素以获取第二个元素的地址,再访问第二个元素以获取第三个元素 的地址,以此类推,直到访问第五个元素。 ### 增加元素: 在链表 中添加元素很容易:只需将其放入内存,并将其地址存储到前一个元素中。 需要在中间插入元素时,数组和链表哪个更好呢?使用链表时,插入元素很简单,只需修改 它前面的那个元素指向的地址。而使用数组时,则必须将后面的元素都向后移。...

阅读笔记
数据结构与算法

## 题目 ![image](https://user-images.githubusercontent.com/24861316/83936419-15ef0200-a7f6-11ea-9efb-b403b6fa7799.png) ## 解法 双指针法 数组完成排序后, 放一个i当慢指针,一个j当快指针,i初始值为0, j初始值为1; 用j快指针去循环遍历数组nums,因为要把不重复的值挑出来前置,所以当nums[j] !== nums[i] 的时候此时慢指针i加一,并该位置取快指针j的值,即nums[++i] = nums[j]。否则当nums[j] === nums[i]时,前面已有这个数,不用前置了直接跳过 >注意:js中,nums[++i] 和nums[i++]不同,++i是在此计算语句中先执行,i++是在计算语句运行后再执行 ```js const removeDuplicates = function(nums) { const length = nums.length; if(length...

数据结构与算法

## 起因 最近用团队里面共用组件库,发现一个现象,就是经常有一个组的开发去写了一个页面(panel),放在组件库里面,然后其他产品组的同学看到页面可能有一定的相似度,就去拿这个panel来用,因为还是和自己产品有一定的出入,就直接传了很多props做为判断条件去显示/隐藏 各种定制化的renderprops塞进这个panel中,到后面这个panel被塞进了各种不通用的props,logic和element,代码量越堆越大,阅读性不佳,不利于维护,还会让其他产品组引用这个panel的时候引入了很多本不需要的冗余代码,文件越大影响页面加载速度。 ``` 我是“可复用”的部分 产品A的开发:我们需要在里面显示不同的东西,所以我塞进来好了,简单粗暴 产品B的开发:俺也一样 ################ ##############

react

### 同源策略 同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。 ![image](https://user-images.githubusercontent.com/24861316/81458758-b984cc80-91ce-11ea-86fe-d76391898eae.png) ![image](https://user-images.githubusercontent.com/24861316/81425088-7eac7580-9189-11ea-8c85-0a579954f6f1.png) `www.baidu.com`网页的文档是由`www.baidu.com`的服务器所提供的,也就是在浏览器输入`www.baidu.com`访问的时候,浏览器会进行DNS解析域名`www.baidu.com`得到对应服务器IP地址并访问此地址,向服务器发起请求,获取文档资源html等,然后浏览器把资源渲染成网页,在网页中,有一个百度搜索框,用户在搜索框输入文字,点击“百度一下”,浏览器带着这个网页的origin(`www.baidu.com`)作为header host(主机名)向`www.baidu.com`的服务器发起请求,`www.baidu.com`的服务器检测到这请求的host是`www.baidu.com`,嗯,是自己人没错(同源),接受请求。 ![image](https://user-images.githubusercontent.com/24861316/81424691-ed3d0380-9188-11ea-9fe0-0699ef369a36.png) ### 规避方法 但是如果是不同源呢,比如开发的时候,浏览器页面文档由webpack起的服务器提供,源orign可能是127.0.0.1:8080。此时无法调用example.com的接口,因为不同源,除了让example.com的服务器给你设置CORS(跨源资源共享)这种有点劳烦/侵入后端的方式,可以架设服务器代理,比如webpack server提供proxy,这样就可以: 浏览器请求同源服务器(webpack server),webpack server代理请求( 设置了example.com为orign(host header) )example.com的服务器,从而实现跨域请求。当然,这并不意味就成功请求,如果后端设置了需要token做校验,你请求发送方还是要带上有效token的。 ```js module.exports = { //... devServer: { proxy: { // 请求/api/users 现在会被代理到请求...

随笔

hook用了好一段时间,写个小总结记录下 ## 为什么要用hook: 复用业务逻辑的已有方案比如 render props 和 高阶组件,需要重新组织你的组件结构,这可能会很麻烦,使你的代码难以理解,你会发现由 providers,consumers,高阶组件,render props 等其他抽象层组成的组件会形成“嵌套地狱” => React 需要为共享状态逻辑提供更好的原生途径。 Hook 就是 JavaScript 函数,但是使用它们会有两个额外的规则: * 只能在函数最外层调用 Hook。不要在循环、条件判断或者子函数中调用。 * 只能在 React 的函数组件中调用 Hook。不要在其他 JavaScript 函数中调用。(还有一个地方可以调用 Hook ——...

react

最近发现github相关的图片资源在不全局fq的情况下都加载不出来了,此文记录解决方法 ### 方法一:自己动手 将无法加载的url放到[这个网站](https://hostingchecker.com/)搜,得到Server IP ![image](https://user-images.githubusercontent.com/24861316/74660890-ee861200-51d1-11ea-9eb4-04c3cea8a21a.png) 然后把 IP 与 域名 151.101.208.133 user-images.githubusercontent.com 填加进电脑的host文件 解决其他不同域名且图片无法加载的github url同理 ### 方法二:懒人一把梭 直接把这些都拷贝到host文件即可 ``` # GitHub Start 192.30.253.112 github.com 192.30.253.119 gist.github.com 151.101.184.133 assets-cdn.github.com 151.101.184.133 raw.githubusercontent.com...

随笔

默认情况下,React DOM在渲染它们之前先转义JSX中嵌入的任何值。这样可以确保您永远不会注入未在应用程序中明确编写的任何内容。一切在呈现之前都会转换为字符串。这有助于防止XSS(跨站点脚本)攻击。 会将用户输入的,跟HTML符号相同的转义掉。 比如 ``` 1) &lt; 转义成 < 2) &gt; 转义成 > 3) &amp; 转义成 & ``` ![pic1](https://user-images.githubusercontent.com/24861316/79632254-d5c5b880-8190-11ea-9ba4-ca1b059a5fe1.png) ![pic2](https://user-images.githubusercontent.com/24861316/79632238-b3cc3600-8190-11ea-933d-b15fe5fd2501.png) ![image](https://user-images.githubusercontent.com/24861316/79632550-9b5d1b00-8192-11ea-9621-ee1f015eb459.png) 从上图可看出,react在render之前, 会将字符转义, `

react

## 正则表达式 使用下面类似 Perl 的语法,就可以创建一个正 则表达式。 var expression = / pattern / flags ; 其中的模式(pattern)部分可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、 向前查找以及反向引用。每个正则表达式都可带有一或多个标志(flags),用以标明正则表达式的行为。 正则表达式的匹配模式支持下列 3 个标志。 - g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即 停止; - i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写; - m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模 式匹配的项。 ```js var text...

js

### 原始值(Primitive Values, 红宝书译为基本类型) Undefined、Null、Boolean、Number、String、Symbol 原始值是不可更改的:任何方法都无法更改(或 突变mutable )原始值,都是返回新的原始值。 > 在很多语言中, 字符串以对象的形式来表示, 因此被认为是引用类型的。 ECMAScript 放弃了这一传统。 ### 对象引用(Object References,红宝书译为引用类型) Object 类型、Array 类型、Function 类型、Date 类型、RegExp 类型 与其他语言不同,JavaScript 不允许直接访问内存中的位置, 也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。 为此,对象引用的值是按引用访问的。 ![image](https://user-images.githubusercontent.com/24861316/75621961-f84a4500-5bd5-11ea-8b7d-5206b4574717.png) 从上图可看到,因为array和copyArray变量都是等于同一个引用地址(在栈内存),访问同一个对象引用的值(在堆内存),所以除非array变量等于其他的对象引用,否则改了array的对象引用的值,copyArray也会被改变。 ###...

react