cchroot's blog


  • 首页

  • 文章树

  • 分类

  • 标签

  • 关于

  • javascript

  • vue.js

  • react.js

  • node.js

  • java

  • linux

  • arithmetic

  • tool

浏览器与Node的事件循环(Event Loop)

发表于 2020-11-27 | 分类于 javascript
Event Loop 即事件循环,是指浏览器或 Node 的一种解决 javaScript 单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。 进程与线程上面说了 js 单线程执行的,那什么是线程和进程? 进程是 CPU 资源分配的最小单位;线程是 CPU 调度的最小单位。一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线,并且一个进程的内存空间是共享的,每个线程都可用这些共享内存。 进程描述了 CPU 在运行指令及加载和保存上下文所需的时间,放在应用上来说就代表了一个程序。线程是进程中的更小单位,描述了执行一段指令所需的时间 把这些概念拿到浏览器中来说,当你打开一个 Tab 页时,其实就是创建了一个进程,一个进程中可以有多个线程,比如渲染线程、JS 引擎线程、HTTP 请求线程、定时 ...
阅读全文 »

JS 异步编程相关

发表于 2020-11-14 | 分类于 javascript
1、回调函数存在着别的几个缺点,比如不能使用 try catch 捕获错误,不能直接 return 2、回调地狱的根本问题就是: 嵌套函数存在耦合性,一旦有所改动,就会牵一发而动全身 嵌套函数一多,就很难处理错误 3、Generator 最大的特点就是可以控制函数的执行,可以通过 Generator 函数解决回调地狱的问题: 123456789function *fetch() { yield ajax(url, () => {}) yield ajax(url1, () => {}) yield ajax(url2, () => {})}let it = fetch()let result1 ...
阅读全文 »

JS 进阶知识点

发表于 2020-11-08 | 分类于 javascript
手写 call、apply 及 bind 函数首先从以下几点来考虑如何实现这几个函数: 不传入第一个参数,那么上下文默认为 window 改变了 this 指向,让新的对象可以执行该函数,并能接受参数 那么我们先来实现 call: 1234567891011unction.prototype.myCall = function(context) { if (typeof this !== 'function') { throw new TypeError('Error') } context = context || window context.fn = this const args = [...arguments].slice(1) const resu ...
阅读全文 »

JS 基础知识点

发表于 2020-11-07 | 分类于 javascript
1、js 中存在 6 种原始类型boolean,null,undefined,number,string,symbol;typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug 2、判断类型typeof 对于原始类型来说,除了 null 都可以显示正确的类型;typeof 对于对象来说,除了函数都会显示 object,所以说 typeof 并不能准确判断变量到底是什么类型。最通用的办法是运用Object.prototype.toString.call() 3、关于条件判断在条件判断时,除了 undefined, null, false, NaN, ‘’, 0, -0,其他所有值都转为 true,包括所有对象 4、关于this指向如果用一句话说明 this 的指向,那么即是: 谁调用 ...
阅读全文 »

动态规划简单总结

发表于 2020-10-31 | 分类于 arithmetic
解题步骤动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。 下面我们先来讲下做动态规划题很重要的三个步骤: 第一步骤:定义数组元素的含义,上面说了,我们会用一个数组,来保存历史数组,假设用一维数组 dp[] 吧。这个时候有一个非常非常重要的点,就是规定你这个数组元素的含义,例如你的 dp[i] 是代表什么意思? 第二步骤:找出数组元素之间的关系式,我觉得动态规划,还是有一点类似于我们高中学习时的归纳法的,当我们要计算 dp[n] 时,是可以利用 dp[n-1],dp[n-2]…..dp[1],来推出 dp[n] 的,也就是可以利用历史数据来推出新的元素值,所以我们要找出数组元素之间的关系式,例如 dp[n] = dp[n-1] + ...
阅读全文 »

滑动窗口小结

发表于 2020-10-17 | 分类于 arithmetic
解题模板这个算法技巧的思路非常简单,就是维护一个窗口,不断滑动,然后更新答案,困扰大家的,不是算法的思路,而是各种细节问题。比如说如何向窗口中添加新元素,如何缩小窗口,在窗口滑动的哪个阶段更新结果。 解题模板: 1234567891011121314151617181920212223242526272829let need = new Map() let window = new Map() for (let char of t) { if (need.has(char)) { need.set(char, need.get(char) + 1) } else { need.set(char, 1) } } ...
阅读全文 »

回溯算法总结

发表于 2020-10-11 | 分类于 arithmetic
解题模板解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题: 路径:也就是已经做出的选择 选择列表:也就是你当前可以做的选择 结束条件:也就是到达决策树底层,无法再做选择的条件 回溯算法的模板代码: 12345678910result = []def backtrack(路径, 选择列表): if 满足结束条件: result.push(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择 其核心就是 for 循环里面的递归,在递归调用之前「做选择」,在递归调用之后「撤销选择」 案例代码最基础,直接套模板46. 全排列 1234567891011121314151617181920212 ...
阅读全文 »

二叉树总结

发表于 2020-09-27 | 分类于 arithmetic
树的遍历不管是什么题目,树的遍历就是核心,这是一切的基础 递归遍历(DFS)先来看看二叉树的递归前序遍历代码: 1234567891011121314var preorderTraversal = function(root) { var list = [] inOrder(root, list) return list};function inOrder (root, list) { if (!root) { return } list.push(root.val) inOrder(root.left, list) inOrder(root.right, list)} 前中后续遍历的区别就 ...
阅读全文 »

二分查找小结

发表于 2020-09-19 | 分类于 arithmetic
最基础的二分查找题目,在一个有序的数组当中查找某个数,如果找到,则返回这个数在数组中的下标,如果没有找到就返回- 1 1234567891011121314function binarySearch(nums, target) { let left = 0; let right = nums.length - 1; while(left <= right) { // 注意这里是 <= let mid = (right + left) / 2; if(nums[mid] == target) return mid; else if (nums[mid] < target) ...
阅读全文 »

你能实现一个没有漏洞的双向绑定吗

发表于 2020-08-30 | 分类于 vueJs
简单的双向绑定以下是利用 Object.defineProperty 实现的一个简单双向绑定: 123<p>请输入:</p><input type="text" id="input"><p id="p"></p> 1234567891011121314151617181920let obj = {}let input = document.getElementById('input')let p = document.getElementById('p')// 数据劫持Object.defineProperty(obj, 'text', { configurable: true, enumerable: true, ...
阅读全文 »
123…17
cchroot

cchroot

Your bloom is the reason of the breeze

163 日志
16 分类
21 标签
GitHub Juejin LeetCode
© 2023 cchroot
个人专属
|
主题 — NexT.Pisces v5.1.4