wuwh's blog

Make progress every day


  • 首页

  • 标签39

  • 分类12

  • 归档71

  • 搜索

手撕源码

发表于 2021-03-25 | 更新于 2022-09-27
实现 call()、apply、bind()1234567891011121314151617181920212223// callFunction.prototype.call = function call(context, ...args) { const self = this const key = Symbol('key') // null undefined context == null ? (context = window) : null // string number !/^(object|function)$/i.test(typeof cont ...
阅读全文 »

npm/yarn lock真香

发表于 2021-03-11 | 更新于 2023-02-17
前言看完本文,你将从整体了解依赖版本锁定原理,package-lock.json 或 yarn.lock 的重要性。首先要从最近接连出现两起有关 npm 安装 package.json 中依赖包,由于依赖包版本更新 bug 造成项目出错问题说起。 事件一:新版本依赖包本身 bug项目本地打包正常,但是线上使用 Jenkins 完成 DevOps 交付流水线打包出错问题。报出如下错误: 123**17:15:32** ERROR in ./node_modules/clipboard/dist/clipboard.js**17:15:32** Module build failed (fr ...
阅读全文 »

electron

发表于 2020-12-25 | 更新于 2022-09-27
electron-builder 打包报错在没有翻墙环境下,有些安装包无法通过 npm 直接下载,这样会造成打包中断,无法成功。一般的,会有如下情况。 获取不到 electron-vxxx-xx-xx.zip首次通过 electron-builder 打包,会报以下错误,由于网络原因获取不到 electron 安装包。 123• packaging platform=win32 arch=x64 electron=11.1.1 appOutDir=dist\win-unpacked ⨯ Get "https://github-production-release-asset-2e ...
阅读全文 »

「超详笔记」算法——二分搜索与贪婪(JS版)

发表于 2020-12-12 | 更新于 2022-09-27
二分搜索(Binary Search)二分搜索(折半搜索)的 Wikipedia 定义:是一种在有序数组中查找某一特定元素的搜索算法。从定义可知,运用二分搜索的前提是数组必须是排好序的。另外,输入并不一定是数组,也有可能是给定一个区间的起始和终止的位置。 优点:时间复杂度是 O(lgn),非常高效。 因此也称为对数搜索。 缺点:要求待查找的数组或者区间是排好序的。 对数组进行动态的删除和插入操作并完成查找,平均复杂度会变为 O(n)。此时应当考虑采取自平衡的二叉查找树: 在 O(nlogn) 的时间内用给定的数据构建出一棵二叉查找树; 在 O(logn) 的时间里对目标数据进行搜索; 在 O ...
阅读全文 »

「超详笔记」算法——动态规划(JS版)

发表于 2020-11-23 | 更新于 2022-09-27
判断动态规划判断一个算法问题是否属于动态规划问题,主要依据有两点: 最优子结构:一个问题的最优解是由它的各个子问题的最优解决定的。 重叠子问题:解决一个问题需要拆解许多子问题,而这个子问题有重复。 最长子序列问题LeetCode 第 300 题:给定一个无序的整数数组,找到其中最长子序列长度。 说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2)。注意:子序列和子数组不同,它并不要求元素是连续的。 示例 输入:[ 10, 9, 2, 5, 3, 7, 101, 18 ]输出:4即,最长的上升子序列是 [2, 3, 7, 101],它的长度 ...
阅读全文 »

inter-vue

发表于 2020-11-16 | 更新于 2022-09-27
Vue 响应式原理怎么实现 响应式核心是通过 Object.defineProperty 拦截对数据的访问和设置。 响应式数据分为两类: 对象。循环遍历对象的所有属性,为每个属性设置 getter、setter,以达到拦截访问和设置的目的,如果属性值依旧为对象,则递归属性值上的每个 key 设置 getter、setter。 数组。增强数组的那 7 个(push、pop、shift、unshift、splice、reverse 和 sort)可以改变自身的原型方法,然后拦截对这些方法的操作。 访问数据时(obj.key)进行依赖收集,在 dep 中存储相关的 watcher。 设置数据时由 ...
阅读全文 »

「超详笔记」算法——深度与广度优先(JS版)

发表于 2020-11-08 | 更新于 2022-09-27
深度优先搜索(Depth-First Search / DFS)深度优先搜索,从起点出发,从规定的方向中选择其中一个不断地向前走,直到无法继续为止,然后尝试另外一种方向,直到最后走到终点。就像走迷宫一样,尽量往深处走。 DFS 解决的是连通性的问题,即,给定两个点,一个是起始点,一个是终点,判断是不是有一条路径能从起点连接到终点。起点和终点,也可以指的是某种起始状态和最终的状态。问题的要求并不在乎路径是长还是短,只在乎有还是没有。有时候题目也会要求把找到的路径完整的打印出来。 DFS 遍历例题:假设我们有这么一个图,里面有 A、B、C、D、E、F、G、H 8 个顶点,点和点之间的联系如下图所示 ...
阅读全文 »

「超详笔记」算法——递归与回溯(JS版)

发表于 2020-11-06 | 更新于 2022-09-27
递归和回溯的关系密不可分:递归的基本性质就是函数调用,在处理问题的时候,递归往往是把一个大规模的问题不断地变小然后进行推导的过程。回溯则是利用递归的性质,从问题的起始点出发,不断地进行尝试,回头一步甚至多步再做选择,直到最终抵达终点的过程。 递归(Recursion)递归算法思想递归算法是一种调用自身函数的算法(二叉树的许多性质在定义上就满足递归)。 汉诺塔问题有三个塔 A、B、C,一开始的时候,在塔 A 上放着 n 个盘子,它们自底向上按照从大到小的顺序叠放。现在要求将塔 A 中所有的盘子搬到塔 C 上,让你打印出搬运的步骤。在搬运的过程中,每次只能搬运一个盘子,另外,任何时候,无论在哪 ...
阅读全文 »

「超详笔记」算法——排序(JS版)

发表于 2020-11-05 | 更新于 2022-09-27
冒泡排序(Bubble Sort)冒泡排序基本思想给定一个数组,我们把数组里的元素通通倒入到水池中,这些元素将通过相互之间的比较,按照大小顺序一个一个地像气泡一样浮出水面。 冒泡排序实现每一轮,从杂乱无章的数组头部开始,每两个元素比较大小并进行交换,直到这一轮当中最大或最小的元素被放置在数组的尾部,然后不断地重复这个过程,直到所有元素都排好位置。其中,核心操作就是元素相互比较。 冒泡排序例题分析给定数组 [2, 1, 7, 9, 5, 8],要求按照从左到右、从小到大的顺序进行排序。 冒泡排序解题思路从左到右依次冒泡,把较大的数往右边挪动即可。 首先指针指向第一个数,比较第一个数和第二个数 ...
阅读全文 »

FE-resource

发表于 2020-11-04 | 更新于 2022-09-27
面筋霖呆呆的中大厂面试记录及 2 年前端薪资对比(附赠学习方法) 面试分享:两年工作经验成功面试阿里 P6 总结 大厂面试过程复盘(微信/阿里/头条,附答案篇) 「查缺补漏」我的 2020 前端面试秘籍,为你秋招保驾护航 最新的前端大厂面经(详解答案) 2020 三元同学春招阿里淘系、阿里云、字节跳动面经 & 个人成长经验分享 | 掘金技术征文 面试被问项目经验不用慌,按这个步骤回答绝对惊艳面试 STAR 法则: Situation 事情是在什么情况下发生,基于一个怎样的背景; TASK 你是如何明确你的任务的; Action 针对这样的情况分析,你采用了什么行动方式,具体做了哪些 ...
阅读全文 »
123…8
wuwhs

wuwhs

71 日志
12 分类
39 标签
GitHub Segmentfault
© 2017 – 2023 copyright by wuwh's blog