原文点此跳转首先创建一个 study 空文件夹,并且把它拖到 VS Code 里面。在 VS Code 中打开终端,快捷键 ctrl + ~在命令行中输入 npm init,在接下来所有选项中全部按 "回车" 采用默认即可。初始化完毕后,在项目根目录下会出现 package.json 文件,该文件主要是记录项目信息的。后面工程化项目中安装的插件都会被记录到该文件中,包括其版本号
原文点此跳转下载 Node.js官方下载地址https://nodejs.org/zh-cn/download/releasesnode.js 版本迭代的非常快,目前官方已经推出到 v19.2.0 版本了,相对是一个比较新的版本了。建议下载 v14.18.3 版本,至少这个版本目前在很多项目中运用过,算是比较稳定。根据自己的操作系统选择安装,我的是 Windows 11 64 位操作系统。安装的时
原文点此跳转什么是前端工程化?前端工程化是一种思想,而不是某种技术。主要目的是为了提高效率和降低成本,也就是说在开发的过程中可以提高开发效率,减少不必要的重复性工作等。现实生活举例建房子谁不会呢?请几个工人一上来就开始弄,在建筑的过程中缺了材料就叫个工人去买,发现工期快到了来不及了,就马上多请几个人回来弄。客户又说这里改改,那里改改。最终却是可以把房子建起来,但是很容易出现问题,出现问题了又是谁的
原文点此跳转Sass 功能有很多,这边只列举一些比较常用的。嵌套规则 (Nested Rules)Sass 允许将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器。编译前.box { .box1 { background-color: red; } .box2 { background-color: bluevi
原文点此跳转koala 是一个前端预处理器语言图形编译工具,支持 Less、Sass、Compass、CoffeeScript,帮助 web 开发者更高效地使用它们进行开发。跨平台运行,完美兼容 windows、linux、mac。关键特性多语言支持支持 Less、Sass、CoffeeScript 和 Compass Framework。实时编译监听文件,当文件改变时自动执行编译,这一切都在后台
原文点此跳转什么是 Sass?官方标语世界上最成熟、最稳定、最强大的专业级 CSS 扩展语言。怎么理解这句话呢?我们平时写的 CSS 代码可以理解为静态样式语言,而 Scss 就是动态样式语言,何为动态?就是让你写 CSS 跟写 JS 一样,可以在 CSS 里面定义变量,函数。最大的作用就是减少你的 CSS 代码量,用更少的代码实现更多的功能。其次就是使得 CSS 代码更加的规范化,保持 HTML
原文点此跳转基础使用let块级作用域,也就是在同一个作用域内,不能够重复声明同一个变量。let name = 'xiaoming'const在 let 的基础上,声明的变量不能够被重新赋值。const name = 'xiaoming'解构赋值简化对象获取属性、简化数组获取元素的写法。const [a, b, c] = [1, 2, 3] const { name, age } = { name
原文点此跳转在 ES5 的文档中已经介绍了什么是 ES6 了,这里在简单描述一下,就是 ECMAScript 2015 及之后发布的标准,简称 ES6 。主要的功能就是简化了 JS 的语法,使用最精简的代码实现更多的功能。文档可以看看阮一峰老师写的 "ES6 入门教程",内容非常全面,但是你可能也看不完(像是一本书一样),有时间就去看吧。兼容性谷歌浏览器已经完全支持 ES6 了,部分浏览器还支持,
原文点此跳转介绍回溯算法是算法设计中的一种方法。回溯算法是一种渐进式寻找并构建问题解决方式的策略。回溯算法会先从一个可能的动作开始解决问题,如果不行,就回溯并选择另一个动作,直到将问题解决。就像你在一个迷宫里面遇到了当前有三条岔路,你选择了第一条后发现此路不通,那你是不是要回到原点,进行选择第二条道路,以此类推,最后选择一条正确的道路。什么问题适合用回溯算法解决?有很多分岔路这些路里面有死路,也有
原文点此跳转介绍贪心算法是算法设计的一种方法。期盼通过每个阶段的局部最优选择,从而达到全局的最优。但结果不一定是最优的。基础案例场景一零钱兑换现有硬币 1 元、2 元、5 元,需要用最少的硬币数量凑够 11 元。利用贪心算法实现,优先考虑最好的结果就是面值为 5 元的硬币,11 = 5 + 5 + 1,一共使用了三枚硬币。现有硬币 1 元、3 元、4 元,需要用最少的硬币数量凑够 5 元。利用贪心
原文点此跳转什么是动态规划?动态规划也是算法设计的一种方法/思想。它将一个问题分解为相互重叠的子问题,通过反复求解子问题,来解决原来的问题。基础案例场景一斐波那契数列当前数等于前面两个数的和。定义子问题:f(n) = f(n-1) + f(n-2)原文点此跳转
原文点此跳转什么是分而治之?在我们前面有学习过一系列数据结构、以及相关的一些算法,包含排序、搜索算法。而本次学习的分而治之它不是数据结构,也不是一种算法,而是算法设计中的一种方法,可以理解为是一种思想。我们可以利用这种思想去设计很多种算法。分而治之是将一个问题分成多个和原问题相似的小问题,递归解决小问题,再将结果合并以解决原来的问题。主要分成三个部分,分别是 "分"、"递归解决"、"合"。基础案例
原文点此跳转什么是二分搜索?二分搜索是一种比较高效的搜索算法,但前提必须是有序数组。主要步骤如下:从数组的中间元素开始,如果中间元素正好是目标值,则搜索结束如果目标值大于或者小于中间元素,则在大于或者小于中间元素的那一半数组中继续二分搜索基础案例时间复杂度:O (logn)空间复杂度:O (1)Array.prototype.binarySearch = function (target) {
原文点此跳转什么是顺序搜索?顺序搜索是一种比较低效的搜索算法,但是实现起来相对简单。主要步骤如下:遍历数组找到跟目标值相等的元素,就返回它的下标遍历结束后,如果没有搜索到目标值,则返回 -1基础案例时间复杂度:O (n)空间复杂度:O (1)Array.prototype.sequentialSearch = function (target) { for (let i = 0; i &l
什么是快速排序(quickSort)?#主要分成两部分实现,分区、递归操作。分区从数组中任意选择一个 "基准",所有比基准小的元素放在基准前面,比基准大的元素放在基本后面。递归递归地对基准前后的子数组进行分区。算法步骤首先获取数组的第一个值(作为基准)遍历当前数组,从第二个值开始,比基准元素小的 push 到 left 数组,比基准元素大的 push 到 right 数组。分别对 left 和 r
原文点此跳转什么是归并排序(mergeSort)?主要分成两部分实现,分、合操作:分:把数组分成两半,在递归地对子数组进行 "分" 操作,直到分成一个个单独的数合:把两个数组合并为有序数组,再对有序数组进行合并,直到全部子数组合并为一个完整数组归并排序就是采用了分而治之的算法设计思想,另外归并排序其实就像擂台赛一样,每两组进行 pk ,最后到半决赛,总决赛类似。算法步骤通过 Math.floor
原文点此跳转什么是插入排序(insertionSort)?在数组中从左到右依次取一个数出来,然后把它放到合适的位置。从思想上可以分为有序区和无序区,有序区在左边代表已经排列好的元素。算法步骤默认左边第一个元素已经在有序区了在无序区取一个数出来(第二个元素)遍历有序区元素,把取出来的元素放到合适的位置上以此类推,执行 n - 1 轮(无序区为空时)完成排序动画演示链接https://visualgo
原文点此跳转什么是选择排序(selectSort)?选择排序就是在一个排列中划分为有序区和无序区,有序区在左边,无序区在右边。首先在无序区中找到最小元素,存放到有序区的起始位置,然后再从剩余的无序区中继续寻找最小元素,然后放到有序区的末尾。以此类推,直到无序区没有元素可排列。算法步骤首先在数组中查找出最小的元素把当前最小元素放在数组的第一位继续查找数组中最小的元素(不包含刚才找过的最小元素)把当前
原文点此跳转什么是冒泡排序(bubbleSort)?冒泡排序是所有排序算法中最简单的一种,当然也是性能最差的一种。冒泡排序的思想其实很简单,就如它的名字一样在水中 "冒泡"。水中有很多散乱的小气泡,然后一个个气泡往水面上冒出。例如一组无序的数组,最左边就是水底,最右边就是水面,最左边的元素不断的跟右边的元素比较,最后交换位置到最右边。算法步骤冒泡排序会比较所有相邻的元素从第一个数开始,每两个相邻的
原文点此跳转排序和搜索不仅在工作中会经常遇到,在面试中也是高频考点,所以这个是必须要懂的。排序:把某个乱序的数组变成升序或者降序的数组。例如在我们平常开发中,例如要对一个表格进行日期的升序或降序排列。在 JavaScript 中通常使用数组的 sort 方法实现。搜索:找出数组中某个元素的下标。例如在我们开发中经常会用到判断某个元素是否存在于数组中,如果存在返回它的下标。在 JavaScript
原文点此跳转什么是堆?堆是一种特殊的完全二叉树。完全二叉树的含义就是每层节点都完全填满,除了最后一层外只允许最右边缺少若干个节点。在 JavaScript 中通常用数组表示堆(按照广度优先遍历顺序)。最大堆最小堆特性所有的节点都大于等于它的子节点(最大堆)或者所有的节点都小于等于它的子节点(最小堆)左侧子节点的位置是 2 _ index + 1右侧子节点的位置是 2 _ index + 2 (也就
原文点此跳转什么是二叉树?树中每个节点最多只能有两个子节点,在 JavaScript 中一般都是通过 Object 来模拟二叉树。常用操作前序遍历中序遍历后序遍历前序遍历根左右。口诀:访问根节点对根节点的左子树进行前序遍历对根节点的右子树进行前序遍历通过递归方式实现function preorder(root) { if (!root) return console.log(ro
原文点此跳转什么是树?在生活中,大家对树肯定不陌生,小朋友都知道树不就是一类植物嘛,不管在任何地方都有各种各样的树。但是在计算机科学里面树是什么呢?一种分层数据的抽象模型,在我们前端工作中无处不在。在 JavaScript 中没有树这种数据结构,但是可以通过 Object 和 Array 这两个数据结构构建树。深度与广度优先遍历深度优先遍历尽可能深的搜索树的分支,主要通过递归实现。口诀:访问根阶段
原文点此跳转什么是字典?与集合类似,字典也是一种存储唯一值的数据结构,但它是以键值对的形式来存储。在 ES6 中新增了 Map 字典。实现功能delete 删除元素clear 清空所有元素set 添加/覆盖元素get 查找/返回元素的值has 判断是否包含某个元素应用场景两个数组的交集有效的括号两数之和基础案例// 字典 const map = new Map() // 添加元素 map.set
原文点此跳转什么是集合?集合是一种无序且唯一的数据结构,其中的唯一是指集合中的元素。在 ES6 中新增了一种数据结构 Set 就是集合。实现功能new() 实例化一个集合add() 添加元素delete() 删除元素has() 判断是否存在元素size() 获取集合大小应用场景去重判断某元素是否在集合中求两个集合的交集基础案例常用操作const set = new Set() // 添加 set
原文点此跳转什么是链表?链表是有序的数据结构,链表中的每个部分称为节点。可以首、尾、中间进行数据存取,链表的元素在内存中不必是连续的空间,每个节点通过 next 指针指向下一个节点。优点链表的添加和删除不会导致其余元素位移。缺点无法根据索引快速定位元素。数组和链表区别获取、修改元素时,数组效率高添加、删除元素时,链表效率高数组添加、移除会导致后续元素位移,性能开销大环形链表指的是链表最后一个节点的
原文点此跳转什么是队列?队列是一种遵循先进先出原则的有序集合,添加新元素的一端称为队尾,另一端称为队首。实现功能在 JavaScript 中没有队列,但是可以通过 Array 实现队列的所有功能enqueue () 入队dequeue () 出队top () 获取队首值size () 获取队列的元素个数clear () 清空队列应用场景JavaScript 异步任务中的任务队列计算最近请求次数基础
原文点此跳转栈是基础数据结构,栈是一种遵循后进先出原则的有序集合,添加新元素的一端称为栈顶,另一端称为栈底。操作栈的元素时,只能从栈顶操作(添加、移除、取值)。实现功能在 JavaScript 中没有栈,但是可以通过 Array 实现栈的所有功能push () 入栈pop () 出栈top () 获取栈顶值size () 获取栈的元素个数clear () 清空栈应用场景十进制转二进制判断字符串的括
原文点此跳转什么是空间复杂度?算法在运行过程中临时占用存储空间大小的度量,和时间复杂度表示一样,一个函数,用大 O 表示,例如 O (1)、O (n)、O (^2 )...基础案例O(1)这段代码因为只声明了单个变量,单个变量所占用的内存永远是 1。let i = 0 i += 1O(n)这段代码主要声明了变量 list 和变量 i,但是变量 list 的元素个数会受 n 的影响,所以时间复杂度
原文点此跳转什么是时间复杂度?定性描述该算法的运行时间,一个函数、用大 O 表示,例如 O (1)、 O (n)、O (logN) ...常见的时间复杂度量级常数阶 O (1)对数阶 O (logN)线性阶 O (n)线性对数阶 O (nlogN)平方阶 O (n²)立方阶 O (n )K 次方阶 O (n ^ k)指数阶 (2 ^ n)上面从上至下依次的时间复杂度越来越大,执行的效率越来越低。坐
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号