- 博客(59)
- 收藏
- 关注
原创 vue新特性
setup + ref + reactive 实现了数据响应式,不能使用 ES6 解构,会消除响应特性。所以需要 toRefs 解构,使用时,需要先引入。
2023-07-03 16:02:55
1160
原创 this指针
自然调用,指向window定义的变量存在暂时性死区,而且不会挂载到window对象上,因此print中是无法获取到a和b的。foo虽然在obj的bar函数中,但foo函数仍然是独立运行的,foo中的this依旧指向window对象。与2类似this指向window。...
2022-08-18 17:45:13
234
原创 单调栈、图、并查集与前缀树
单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是只需要遍历一次。1、单调栈里存放的元素是什么?单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的元素,直接T[i]就可以获取。2、单调栈里元素是递增呢?还是递减呢?.........
2022-08-09 16:52:56
281
原创 十大排序详解
第一层循环遍历外层length-1个项,对前length-1个数排序内层循环遍历到length-i-1,对前length-i-1个数冒泡。
2022-07-26 17:02:03
454
原创 javaScript拾遗
跨域资源共享,有一些列HTTP响应头组成,这些HTTP响应头决定浏览器是否能阻止前端js代码跨域获取资源。配置了CORS相关的HTTP响应头就可以解决跨域限制。origin指定了允许访问该资源的url,那些网页可以访问资源cors仅支持9个请求头,Access-Control-Allow-Headers允许对额外的请求头声明默认情况,cors仅支持客户端发起GET、POST、HEAD请求若希望发起PUT、DDELETE等请求,需要Access-Control-Allow-Methods设置支持的方法。...
2022-07-24 19:47:38
484
原创 Nodejs学习
若require()的模块不是一个内置模块,也没有以庐江开头。Node.js会从当前模块的父目录开始尝试从/node_module中加载。
2022-07-15 17:15:26
561
原创 redux与vuex
1、单一数据源2、state只读:唯一改变state的方法就是触发actionstore.dispatch()3、使用纯函数来执行修改:自己编写reducer功能提供getState:获取state提供dispatch:发送acton提供subscribe:注册监听 mapStateToProps(state,ownProps):那个组件想用propsmapDispatchToProps(dispatch,ownProps):那个组件要发送props 发送方: 接收方: state1、创建muta
2022-07-14 14:41:19
528
原创 链表与树思路
(tips1:链表的处理过程中,头结点是很特殊的,可以采用虚拟头结点的方式)(tips2:链表的许多操作都可以考虑用两个指针,pre,curr)可以设置一个虚拟头结点,这样原链表的所有节点就都可以按照统一的方式进行移除了。来看看如何设置一个虚拟头。依然还是在这个链表中,移除元素1。这里来给链表添加一个虚拟头结点为新的头结点,此时要移除这个旧头结点元素1。这样是不是就可以使用和移除链表其他节点的方式统一了呢?来看一下,如何移除元素1 呢,还是熟悉的方式,然后从内存中删除元素1。最后呢在题目中,return 头
2022-07-10 15:49:32
208
原创 webPack原理
loader分为顺序为从下到上loader本质是一个函数,把要处理的文件作为参数,进行处理之后再返回一个文件最简单的loaderloader的定义方式同步loader this.callback是指调用下一个loader类似链表 调用callback执行下一个loader,此时是异步操作。默认情况下,资源文件会被转化为 UTF-8 字符串,然后传给 loader。通过设置 raw 为 true,loader 可以接收原始的 BufferPitching Loader
2022-07-09 17:48:07
2822
原创 webpack高级
开发模式: 生产模式: 优点:包含行/列映射 缺点:打包编译速度更 在程序运行中,替换、添加或删除模块,而无需重新加载整个页面。css使用js使用实际上使用封装好的loader:vue-loaderopen in new window, react-hot-loaderopen in new window在oneOf其中的loader命中了一个就不再看其他的Cache缓存每次打包时 js 文件都要经过 Eslint 检查 和 Babel 编
2022-07-09 13:46:39
239
原创 查漏补缺中
QUIC(想用udp替代tcp。)v8内存结构 垃圾回收主要集中在新生代和老生代新生代:由两个半空间组成,采用Scavenge(牺牲空间换取时间的算法)1、激活空间称为from,未激活称为to。程序被分配到from空间,2、进行垃圾回收时,若from空间有存活对象将其复制到to。其余垃圾回收,角色互换。3、对象晋升:当一个对象多次复制依旧存活则将其放入老生代。老生代:管理大量存活对象,采用标记清楚和标记整理reconciliation(diff),commit(操作DOM)reconciliation是一个
2022-07-07 11:54:13
337
原创 贪心算法详解
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。贪心算法一般分为如下四步:思考的过程,想清楚局部最优,想清楚全局最优,感觉局部最优是可以推出全局最优,并想不出反例,那么就试一试贪心。分发饼干...
2022-06-27 16:53:28
377
原创 动态规划详解
如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。若是01背包,则从后往前,否则从前往后首先考虑步骤,比如背包问题,步骤就是一个一个放入物品,怎样放入物品才是最优解。每一个物品有两步放,不放。观察全局决定放还是不放。(从头往后退看是否要放入)再比如上台阶问题,步骤就是跨步,跨几步是最优解,每次可以跨一步或者两步。观察全局决定跨一步还是两步。(从头往后退,每次是一步最优还是两步最优)凡是一步一步地问题,下个状态有依赖于上一个状态的问题考虑用
2022-06-26 19:16:57
254
原创 回溯算法详解
组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。 回溯法三部曲1 递归函数的返回值以及参数2 回溯函数终止条件3 单层搜索的过程排列问题:N个数按一定规则全排列,有几种排列方式子集问题:一个N个数的集合里有多少符合条件
2022-06-25 16:26:16
1542
原创 diff算法
diff算法只会同层对比,是深度优先 接下来就以上面代码为例,分析一下比较的过程分析之前,请大家记住一点,最终的渲染结果都要以newVDOM为准,这也解释了为什么之后的节点移动需要移动到newVDOM所对应的位置比较结果: 相等,需要把移动到所对应的位置,也就是末尾,同时,比较结果:相等,需要把移动到所对应的位置,同时,正在上传…重新上传取消比较结果:相等,需要把移动到所对应的位置,同时,正在上传…重新上传取消,则先遍历完成了,而还没遍历完,说明,所以需要将多出来的节点,插入到真实DOM上
2022-06-23 14:54:55
201
原创 console.log
直接输出promise,得到的是由其状态和结果构成的对象then方法接受的参数是函数,而如果传递的并非是一个函数,它实际上会将其解释为then(null),这就会导致前一个Promise的结果会传递下面。 或 的参数期望是函数,传入非函数则会发生值透传。返回任意一个非 promise 的值都会被包裹成 promise 对象,因此这里的也被包裹成了,因此它会被then捕获而不是catch。asyncawait后面的语句相当于放到了new Promise中,下一行及之后的语句
2022-06-15 11:28:04
1143
原创 Webpack
1、promise.then 当状态被改变(两个方法被调用的时候才进行微任务的操作)才执行,否则不执行2、promise的字符串形式:<resolved>: resolue13、
2022-06-13 10:05:23
91
原创 实习经历复盘
为什么我会想不到呢看见了样式问题,我想到的首先不是我的问题,为什么?因为我这没复现,而且以前从未见过,而且iOS没有问题,让我感觉这可能不是lynx的问题。事实是就算双端不一致,就算抖音版本不一致时的结果不一致,就算不同手机也不一致他同样有可能是lynx的问题。不能想当然的用其他维度未出现的问题来确定另一维度不会出问题,比如当初使用组件的数据又问题,我却认为是激活区域的问题,关键就在于我认为激活区域与数据没有关系,实际上用了正确的数据后激活区域就能正常工作,思维定式,经验主义,想当然思路,再遇见问题多想想为
2022-06-09 16:35:55
130
原创 react-fiber
JavaScript类似单线程。为了避免长进程长期占用资源,react提出了react-fiber。用来调度进程。fiber:又称 协程,其是一种控制流程的让出机制。核心思想是react的渲染过程可以被中断,将控制权交回浏览器,让位给更高级的任务。在React Fiber中,一次更新过程会分成多个分片完成,所以完全有可能一个更新任务还没有完成,就被另一个更高优先级的更新过程打断,这时候,优先级高的更新任务会优先处理完,而低优先级更新任务所做的工作则会完全作废,然后等待机会重头再来。因为一个更新过程可能被打断
2022-06-08 17:39:37
316
原创 重构-提升代码质量
1.去除重复代码2.去除过长函数(一个函数不超过80行)3.数据泥团(当有多个参数互相搭配,某些数据成群出现(关联性极高),可以将其封装成一个数据对象)4.封装全局变量(用get,set来控制避免误触)5.发散式变化:函数复合多方向的功能时要将其拆开6。霰弹式修改:与发散式修改相反,同一方向的功能被分散时要将其复合7.去除for,用filter、map替换8.复杂的条件逻辑&&合并条件表达式将过于复杂的条件化为函数9.查询函数与修改函数耦合......
2022-06-08 17:24:42
80
原创 react
1. 事件机制在document处监听了所有事件。减少消耗,统一处理。冒泡的事件也非原生事件,而是合成事件,调用 是无效的,而应该调用 。2. react事件与普通事件的不同 1.原生事件全小写,react事件小驼峰 2.事件函数处理语法,原生事件字符串,react事件为函数 3.不能用return false 来组织浏览器的默认行为,用prenventDefault3. react对事件合成做了两件事4.HOC,render props,hooks(高优,需要自
2022-06-07 18:19:10
578
原创 人工智能复习
第二章-搜索、树之类的盲目搜索与启发式搜索盲目搜索启发式搜索启发函数启发搜索特点状态空间图open,close表与或图与或树的搜索唯一不同的是注意可解性的标注与或树盲目搜索广度深度启发式搜索和代价:串行,最大代价:并行例题代价不确定,每扩展一层重新估算代价希望树计算两边谁比较小,小的那个为希望树,深度扩展希望树两层...
2022-05-31 00:32:43
527
1
原创 操作系统复习
操作系统的概念操作系统的功能和目标1. 作为系统资源的管理者2. 作为用户和计算机硬件之间的接口用户接口3. 作为最接近硬件的层次对硬件机器的扩张小结操作系统的特征1. 并发(并发:交替,并行:多线程)2. 共享并发与共享的关系3. 虚拟4. 异步小结操作系统的发展和分类...
2022-05-27 16:53:19
425
原创 object方法
Object.assign(target,source)将所有可枚举属性的值从一个或多个原对象分配到目标对象,他将返回目标对象const target = { a: 1, b: 2 };const source = { b: 4, c: 5 };const returnedTarget = Object.assign(target, source);console.log(target);// expected output: Object { a: 1, b: 4, c: 5 }
2022-02-18 11:53:00
233
原创 react高级
事件机制在doucument处监听了所有的事件,当事件发生并冒泡到document处的时候,react将事件内容封装,并交给真正的处理函数运行。这样减少了内存的消耗,还能再组件挂载销毁时统一订阅和移除事件。冒泡到document的事件也不是浏览器原生事件,而是react自己实现的合成事件。React事件与普通HTML事件有什么不同事件命名:原生事件全小写,react事件小驼峰 事件处理函数:原生事件字符串,react事件为函数 react事件不能用return false组织浏览
2022-02-17 14:21:34
668
原创 Ts中的高级使用
目录partialRequiredPickExclude (排除)OmitRecordpartial作用:将传入属性变为可选项源码:type Partial<T> = { [P in keyof T]?: T[P] };用例:interface Foo { name: string; age: number;}type B = Partial<Foo>;// 最多只能够定义 name, age 中的属性(可...
2022-02-16 19:12:12
1064
原创 Git命令
基本linux命令基本 cd:改变目录 cd..上级目录 cd 路径 pwd:显示当前目录 clear:清屏文件ls:列出当前目录所有文件 touch:创建一个文件 rm :移除文件 rm 文件名 mv:移动 文件夹 mv 文件名 目录名 目录mkdir:创建目录 mkdir 文件名 rm -r:删除一个目录 rm-r 目录名 Git命令文件简介.gitconfig:Git的配置文件.gitignore:忽略文件,
2022-01-08 16:21:54
1367
原创 REACT学习日志
创建虚拟DOMconst VDOM= ( html内容)ReactDom.render( VDOM, getElementById(' test '))jsx新的js扩展,创建虚拟dom的语法糖()内写html {}内写可写js表达式 表达式:会产生一个值 样式类名class-->className 内联样式,style={{key:value}} 虚拟DOM只有一个根标签 标签首字母小写函数式组件组件首字母大写返回值是虚拟DOM
2022-01-06 11:49:13
1487
原创 我的字节实习offer日志
12月到了,开开心心的写了个简历,开开心你的投了好多公司。然后就开始了漫长的等待,每天都是看面经,手写代码。看了一遍又一遍,写了一遍又一遍。整个人都麻木了。。 叮咚! 好了,第一个面试终于来了。还先让我在公众号上做了个笔试,感觉挺靠谱。后来就约了面试,第一次还是有点紧张的,结果问的特简单,根本没难度,然后又问“你能待多长时间呀”。完蛋,我最多就仨月啊,人家起步半年,我的第一个面试"无疾而终"。 然后继续投,突然来电话,一看是北京的。说要约个面试。我也不知道是啥公司啊,行呗!你说...
2021-12-14 19:58:14
4290
2
原创 filter、reduce、map、find、some
filterfilter()方法会创建了一个新的数组,其中包含了旧数组中所有通过某个测试的元素,该方法是以函数形式提供的。let nums = [11, 12, 13, 14, 15, 16];let evenNums = [];for(var i = 0; i < nums.length; i++) { if (nums[i] % 2 === 0) evenNums.push(nums[i]);}// evenNums = [12,14,16]let nums =.
2021-12-08 20:39:20
1814
原创 Map Set WakeMap WakeSet
MapMap对象保存键值对var myMap = new Map();var keyString = "a string"; myMap.set(keyString, "和键'a string'关联的值"); myMap.get(keyString); // "和键'a string'关联的值"myMap.get("a string"); // "和键'a string'关联的值" // 因为 keyString === '
2021-12-08 19:43:41
236
原创 编译原理笔记
第一章——编译原理概述词法分析:确定单词的词性语法分析:识别语句中的短语,获得句子结构语义分析:根据句子结构,识别各个短语在句子总充当什么成分词法分析任务:从左到右,逐行扫描源程序的字符,识别出各个单词,确定单词的类型,将识别出的单词转换成统一的机内表示------token形式token< 种别码 , 属性值 >例子语法分析任务:从词法分析器输出的token序列中识别出各类短语,并构造语法分析树语义分析任务:收集标识符的属性信..
2021-12-06 19:22:25
2405
2
原创 计算机网络
post与putpost创建新数据put更新数据304服务器根据缓存内容判断页面与之前是否相同,若相同则返回304options获取服务器支持的所有http请求方法用来检查访问权限http1.0与http1.1区别(链子换)1、连接方面:http1.0使用非持久连接,http1.1使用持久连接。持久连接来使多个http请求复用一个tcp连接2、资源请求方面:http1.0中存在浪费宽带的现象,传送整个资源,1.1允许请求资源的某个部分’3、缓存........
2021-12-02 11:11:31
127
原创 浏览器原理
浏览器安全xss攻击指跨站脚本攻击,在网站注入恶意脚本,使之在用户的浏览器上运行,盗取用户信息。没有对恶意代码进行过滤,与正常的代码混合在一起了。可以进行的操作获取页面数据 破坏页面结构 流量劫持 dos攻击,发送合理请求,占用服务器资源攻击类型存储型,恶意脚本会存储在目标服务器上 反射型: DOM型:通过修改页面的dom结构形成xss防御方法使用csp,csp本质是建立一个白名单,告诉浏览器那些外部资源可以加载和执行,防止恶意代码的注入攻击 浏览器的执行来防御,
2021-12-01 15:17:12
286
原创 vue背记过程
vue基本原理创建vue实例时,vue会遍历data中的属性,用Object.definProperty将他们转为getter/setter。双向数据绑定采用数据劫持,结合发布订阅这模式,通过Object.defineProperty(),来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。MVVM、MVC、MVP区别时三种常见的软件架构设计模式,通过分离关注点的方式来组织代码结构,优化开发效率。MVC分离model,view,con..
2021-11-29 18:27:36
183
原创 js背记过程
js数据类型null undefined boolean number string object symbol Bignumintsymbol:代表创建后独一无二的数据类型,解决可能出现的变量冲突原始数据:存在栈中,大小不固定,占用空间少,引用数据:存在堆中,大小固定,占用空间大,一般在堆中存在指针栈:先进后厨,编译器自动分配释放堆:优先级队列,开发者分配释放检测数据类型的方法(4我好不容易记住一次,你却让我忘得这么彻底,co)type of 检测....
2021-11-27 23:19:30
139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人