浏览器渲染原理参考:https://blog.csdn.net/Hansen_Huang/article/details/107846219
浏览器的渲染过程是一个复杂的过程,因此如何把复杂的东西简单阐述明白,是一件技术活。首先,渲染过程我们分为两个阶段来理解:
导航过程和页面解析过程。
一. 导航过程1.输入url之后开始请求,浏览器进程先把url转发给网络进程,网络进程开始真正的请求,在任务管理器可以看到浏览器的网络进程。是否之前已有缓存,是否合并为同一请求,是否为新发起的请求,都由网络进程判断处理,这里不展开说明。 2.网络进程开始DNS解析,获取服务地址的IP置地址,网络 ...
来源:https://zhuanlan.zhihu.com/p/35790971
一、原型 prototype 和 __proto__
每个对象都有一个__proto__属性,并且指向它的prototype原型对象
每个构造函数都有一个prototype原型对象
prototype原型对象里的constructor指向构造函数本身
代码:
123456789101112131415function Person(nick, age){ this.nick = nick; this.age = age;}Person.prototype.sayName = ...
promise概念
promise主要是解决回调地狱的问题。
Promise 是一个构造函数,通过new关键字实例化对象,从它可以获取异步操作的消息。
Promise的状态具有不受外界影响和不可逆两个特点。
传统的回调有五大信任问题:
调用回调过早
调用回调过晚(或没有被调用)
调用回调次数过少或过多
未能传递所需的环境和参数
吞掉可能出现的错误和异常
Promise可以解决上面的问题。
语法
1new Promise((resolve,reject)=>{})
promise实例有两个属性
1.PromiseState:状态
2.PromiseResult:结 ...
当我们更新了state中的值的时候,React会去调用render()方法来重新渲染整个组件的UI,但是如果我们真的去操作这么大量的DOM,显然性能是堪忧的。所以React实现了一个Virtual DOM,组件的真实DOM结构和Virtual DOM之间有一个映射的关系,React在虚拟DOM上实现了一个diff算法,当render()去重新渲染组件的时候,diff会找到需要变更的DOM,然后再把修改更新到浏览器上面的真实DOM上,所以,React并不是渲染了整个DOM树,Virtual DOM就是JS数据结构,所以比原生的DOM快得多。
用算法实现虚拟DOM:
123456789101112 ...
创建一个react文件1234第一步,全局安装:npm i -g create-react-app第二步,切换到想创项目的目录,使用命令:create-react-app hello-react第三步,进入项目文件夹:cd hello-react第四步,启动项目:npm start
下载一个图标库react-ionicons12项目文件下 安装:npm install react-ionicons@2.1.6 --save在要引用图标的对应文件下引入: import Ionicon from "react-ionicons"
使用PropTypes检查属性类型12345678在要引用的对应 ...
链表类常见问题无法高效获取长度,无法根据偏移快速访问元素,是链表的两个劣势。然而面试的时候经常碰见诸如获取倒数第k个元素,获取中间位置的元素,判断链表是否存在环,判断环的长度等和长度与位置有关的问题。这些问题都可以通过灵活运用双指针来解决。
Tips:双指针并不是固定的公式,而是一种思维方式~
先来看”倒数第k个元素的问题“。设有两个指针 p 和 q,初始时均指向头结点。首先,先让 p 沿着 next 移动 k 次。此时,p 指向第 k+1个结点,q 指向头节点,两个指针的距离为 k 。然后,同时移动 p 和 q,直到 p 指向空,此时 q 即指向倒数第 k 个结点。
获取中间元素的问题,设有 ...
20. 有效的括号给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。 示例 1:
输入:s = “()” 输出:true
示例 2:
输入:s = “()[]{}” 输出:true
示例 3:
输入:s = “(]” 输出:false
示例 4:
输入:s = “([)]” 输出:false
示例 5:
输入:s = “{[]}” 输出:true
题解遇到此类括号匹配题目,首先想到的就是栈了 ...
1.通常的交换两个变量a,b的过程为:
1234int temp;temp=a;a=b;b=temp;
需借助上面的第3个临时变量temp。
2.采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量:
123a = a ^ b;b = a ^ b;a = a ^ b;
3.另一种方法
123a=a+b;b=a-b;a=a-b;
前提是a+b的值不能溢出。
这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质:
1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0
2.任意一个变量X与0进行异 ...
使用两个方法对Array,Set,Map做测试
123456789101112131415161718192021222324252627var a = ['A','B','C'];var s = new Set(['A','B','C']);var m = new Map([[1:'x'],[2:'y'],[3,'z']]);//遍历数组for(var x of a){alert(x);//输出的是值 A B C}for(var x in a){alert(x);//输出的是下标 0 1 2}//遍历Set集合for(var x of s){ ...
题目编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,”flow”,”flight”] 输出:”fl”
示例 2:
输入:strs = [“dog”,”racecar”,”car”] 输出:”” 解释:输入不存在公共前缀。
题解没什么特别的,就是先将数组中第一个单词单独存起来,存到一个数组当中,然后遍历该数组和原数组从索引1开始的值,有一样的值就继续遍历,没有的话就跳出循环,最后截取一下,详情见代码。
1234567891011121314151617181920212 ...