本打算学一波快速排序,查了查资料,吓一大跳,说阮一峰大神的快排是不对的,以此开始了一大波大神针对这个问题的各种观点。...感兴趣的可以看看知乎这篇帖子: https://www.zhihu.com/question/276746146/answer/390729075 不管对还是错,阮一峰大神的快排思路是对的: 在数据集之中...对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。...先看看阮一峰大神的代码: var quickSort = function(arr) { if (arr.length <= 1) {return arr; }//判断数组,一个长度直接返回...但是阮一峰大神只是提供思路,这些问题都是能优化的。当时ES6也没出来,以后还会有更多的数组扩展,那不是能更简单的实现快速排序,但是快速排序的思路是不变的。
一、为什么图像是波? 我们知道,图像由像素组成。下图是一张 400 x 400 的图片,一共包含了 16 万个像素点。 ?...如果把每一行所有像素(上例是400个)的红、绿、蓝的值,依次画成三条曲线,就得到了下面的图形。 ? 可以看到,每条曲线都在不停的上下波动。...对比一下图像就能发现,曲线波动较大的地方,也是图像出现突变的地方。 ? 这说明波动与图像是紧密关联的。图像本质上就是各种色彩波的叠加。...再看一个例子。 ? 上图有三根曲线,黄线是高频波动,红线是低频波动。它们可以合成为一根曲线,就是绿线。 ?...上图中,绿线进行低通滤波和高通滤波后,得到两根黑色的曲线,它们的波形跟原始的黄线和红线是完全一致的。
首先上交阮一峰老师的github地址,一共有15个demo,我们一个一个的进行分析,结合上文所学的知识! 其中有一些内容,我做了修改,我是先看一遍然后从新敲了一遍。...https://github.com/ruanyf/webpack-demos 准备工作 首先还是安装,不过这一次,我们进行全局安装。.../main2.js' }, output: { filename: '[name].js' } }; 入口这里使用了对象语法 使用占位符确保每个文件具有唯一的名称 Demo3 loader...Webpack的官方文档有一个完整的加载器列表。...Demo7 Webpack有一个插件系统来扩展其功能。
这没有统一的规定,但是常见的操作是读取一个集合,比如GET /articles(读取所有文章),这里明显应该是复数。...下面是一个例子。 ?...下面是一个例子。 ? 3.3 提供链接 API 的使用者未必知道,URL 是怎么设计的。一个解决方法就是,在回应中,给出相关链接,便于下一步操作。...HATEOAS 的格式没有统一规定,上面例子中,GitHub 将它们与其他属性放在一起。更好的做法应该是,将相关链接与其他属性分开。 ?...作者:阮一峰 http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html
一、单体软件要理解微服务,首先需要理解软件架构的演变。早期的软件,所有功能都写在一起,这称为单体架构(monolithic software)。整个软件就是单一的整体,彷佛一体化的机器。...面向服务架构"就是把一个大型的单体程序,拆分成一个个独立服务,也就是较小的程序。每个服务都是一个独立的功能单元,承担不同的功能,服务之间通过通信协议连在一起。这种架构有很多优点。...(1)每种服务功能单一,相当于一个小型软件,便于开发和测试。(2)各个服务独立运行,简化了架构,提高了可靠性。(3)鼓励和支持代码重用,同一个服务可以用于多种目的。...它依然使用"服务"作为功能单元,但是变成了轻量级实现,不需要新增服务器,只需要新建容器(一个进程),所以才叫做"微服务"。一个微服务就是一个独立的进程。...它和容器技术、云服务一起,一定会在未来的软件开发中,扮演越来越重要的角色。
作者 | 阮一峰 整理 | AI科技大本营(rgznai100) 眼下最热门的技术,绝对是人工智能。 人工智能的底层模型是"神经网络(neural network)。...上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3...),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。...二、感知器的例子 下面来看一个例子。城里正在举办一年一度的游戏动漫展览,小明拿不定主意,周末要不要去参观。 他决定考虑三个因素。 天气:周末是否晴天? 同伴:能否找到人一起去?...确定输入和输出 找到一种或多种算法,可以从输入得到输出 找到一组已知答案的数据集,用来训练模型,估算w和b 一旦新的数据产生,输入模型,就可以得到结果,同时对w和b进行校正 可以看到,整个过程需要海量计算...然后,找到一种或多种图像比对算法,作为感知器。算法的得到结果是一个概率,比如75%的概率可以确定是数字1。这就需要设置一个阈值(b)(比如85%的可信度),低于这个门槛结果就无效。
想着搞一下 webpack 的构建优化,网上看到一些方法说是要 webpack4 及以上的才能用。...使用 npm 包执行器 npx 可以自动找到对应的包执行命令(一般安装了npm会自动安装npx) 2....直接命令行执行 npx eslint --fix --ext .js,.vue src 2....在 package.json 添加 script 命令 // package.json "scripts": { "lint": "eslint --fix --ext .js,.vue...如果只是一次性使用,直接使用 npx 就好;如果是项目上需要多次使用,封装到 scripts 就更方便啦 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169191
给大家报告下,阮一峰老师的《C语言入门教程》于 2021 年 9 月 7 日上线了! 对,和往常一样,这个教程是开源的,采用知识共享许可证,源码托管在 GitHub,大家可以自由使用。...而阮一峰老师的作品,想必大家都有所耳闻,硬核的同时,又通俗易懂,深受广大读者的喜欢。 福音啊!我要狂吹阮一峰了老师的这份《C语言入门教程》。 考虑到很多小伙伴喜欢 PDF 版的,我就立马给准备了!...那配上阮一峰老师的这个在线文档教程,可以说是完美! 我对这份教程是非常满意的,该讲的地方都讲到了,示例也给了很多,对初学者来说,完全够用了。...阮一峰老师在写这份《C语言入门教程》的时候还是花费了很多心思的,因为 C 代码的写法实在是太自由了,而平常工作中又确实很少有机会写 C 代码,所以前前后后花了 6 个多月的时间。...OK,今天就简单聊到这里,希望阮一峰老师的这份教程能帮助到大家。我们下期见~
本文作者:花果山瑞哥[1] 哈喽,大家好,今天给大家推荐一个学习 vue3 源码的最佳利器 也是阮一峰老师在第 144 期周刊[2]里面推荐的 ?...真让人头秃 第一次看到这个函数的同学肯定是一脸懵逼,这要怎么看嘛?我的秀发还能不能保住了?可能这个时候就有好多同学已经被劝退了(悄咪咪的关闭了 vscode) 说的是不是你 -_-!...那其实在社区里面就会有这种类型的库,只实现库的核心逻辑,可以让同学们更快速的理解库的核心逻辑,比如一个 mini 版本 但是在社区里面我并没有发现这么一个 mini 版本,所以我就索性撸起袖子自己上 为了社区...就是自己把功能实现一遍,这对于我自己的收获也是巨大的。...example 是放置了一些 demo lib 是 build 之后的文件(demo 实际执行的文件) src 是核心逻辑 Example 的食用 大家一开始的时候可以先从 example 里面的 demo
因此我写了一个插件typescript-magic-variable-plugin来使用它们, 源代码已经放到了GitHub上: https://github.com/acrazing/t…....使用方法 首先你需要安装这个包: npm install -D typescript-magic-variable-plugin 修改一下你的tsconfig: { "compilerOptions...console.log(__CLASS__) } } 用ttypescript来编译你的项目, 注意这里不能用typescript, 因为没有开放transform接口, 需要全局安装一下
Varlet 不仅获得阮一峰老师的推荐,同时也得到了国内外开源技术社区的认可,其中 Vite 核心团队的 Antfu 大神也接受了这个组件库的 PR。另外,Vue.js 的作者尤雨溪推荐了该项目。...组件属性高亮 支持 SSR 支持 Typescript 确保90%以上单元测试覆盖率,提供稳定性保证 ️ 支持暗黑模式 安装 安装 Varlet 非常简单,通过 CDN 引入的方式,引入 varlet.js...> const app...App.vue' import Varlet from '@varlet/ui' import { createApp } from 'vue' import '@varlet/ui/es/style.js...,更有一些资源收藏爱好者会分享一些优质的学习资料。
构造函数、原型对象和实例之间的关系 要弄懂extends继承之前,先来复习一下构造函数、原型对象和实例之间的关系。...再结合一下图和代码看一下的 new, new出来的实例的 __proto__指向构造函数的 prototype,这就是 new做的事情。 new 做了什么 创建了一个全新的对象。...推荐阅读JS继承相关的书籍章节 《JavaScript高级程序设计第3版》第6章——面向对象的程序设计 6种继承的方案,分别是原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承...上卷第6章——行为委托和附录A(ES6中的class) 总结 继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。...子类中可以利用原型链查找,也可以在子类调用父类,或者从父类拷贝一份到子类等方案。 继承方法可以有很多,重点在于必须理解并熟。 悉这些对象、原型以及构造器的工作方式,剩下的就简单了。
一文看懂 JS 继承 最近回顾 js 继承的时候,发现还是对一些概念不是很清晰。...这里再梳理一下 JS 中继承的几种主要的方式,构造函数继承、原型链继承、组合继承以及原型式继承、寄生式继承、寄生组合式继承和 ES6 的 Class: 构造函数继承 构造函数继承没有用到 prototype...属性呢 // 如果使用 Child.prototype = Parent.prototype 那么 constructor 子类父类是同一个 原型式继承 原型式继承直接使用 ES5 Object.create...构造函数式、组合式、原型式、寄生式而形成的一种方式: 组合继承的方法会调用两次 Parent,一次是在 Child.prototype = new Parent() ,一次是在 Parent.call(...这个是组合继承的唯一缺点,寄生组合式解决了这个问题: ? 公有的写在原型 ? 私有的写在构造函数 ? 可以向父类传递参数 ?
} Dog.prototype = new Animal() // 核心一步 const a=new Dog() 4 原型式继承 利用一个空对象作为中介,将某个对象直接赋值给空对象构造函数的原型...friends : ["Shelby","Coury","Van"] } var anotherPerson = createAnother(person) 9.6 extends(es6) 借用阮一峰老师的...es6中extends继承,眼过千遍,不如手写一遍。...写法: class Point { } class ColorPoint extends Point { } 上面代码定义了一个ColorPoint类,该类通过extends关键字,继承了Point类的所有属性和方法...Object.getPrototypeOf可以使用这个方法判断,一个类是否继承了另一个类 Object.getPrototypeOf(ColorPoint) === Point //true Super
// 设置原型 继承父类this属性以及父类的原型 Child.prototype = new Parent(); 缺点:父构造函数被调用了两次,从而导致同一个属性会被继承两次(this.name...所以实现方式是:声明一个空白的函数,用这个空白函数充当子对象和父对象之间的代理。...原型继承并不涉及到类,这里的对象都是继承自其他对象。...—— 浅复制 & 深复制 继承的目的是为了实现代码复用,所以一个对象要从另一个对象中获取功能,把目标对象的属性和方法复制过来也是一种方法。...---- Previous 函数curry化(Haskell Curry) Next 一道面试题
在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...当我们「读取」 obj.toString 时,JS 引擎会做下面的事情: 看看 obj 对象本身有没有 toString 属性。没有就走到下一步。 看看 obj....继承分类 image.png 继承方式 1、原型链继承 构造函数、原型和实例之间的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个原型对象的指针。...继承的本质就是复制,即重写原型对象,代之以一个新类型的实例。...8、ES6类继承extends extends关键字主要用于类声明或者类表达式中,以创建一个类,该类是另一个类的子类。
js实现继承 经典继承(原型链) 缺点:过多的继承了没用的属性 Grandfather.prototype.lastName = 'zhang' function Grandfather() {...,造成了不必要的继承 共享原型 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:给本身的原型添加属性或方法时,会把继承的那个原型也修改了...) 原理:在函数里面调用函数,约等于将父里面的代码复制粘贴到子里面,然后通过call将父的this改成子的this 缺点: 不能继承借用的构造函数的原型 每次调用子构造函数都要调用多一次借用的父构造函数...__proto__获取father的原型进行修改而Son.prototype.food,只是在改变father实例 改进 原理:使用一个F构造函数当中间层,F的原型继承父构造函数的原型,然后子的原型指向...function F() {}这个构造函数(约等于一个私有化函数),然后返回了一个function,这个function里面保存着立即执行函数里面的F,形成闭包,因此返回的这个function可以访问这个
弊端: 1.由于修改了Person原型对象的constructor属性, 所以破坏了Person的三角恋关系 2.由于Person和Student的原型对象是同一个...console.log("run"); } let per = new Person(); per.run(); /* 1.js...中继承的终极方法 1.1在子类的构造函数中通过call借助父类的构造函数 1.2将子类的原型对象修改为父类的实例对象 */ // let
类式继承(构造函数) JS中其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。...它有别于类继承是因为继承不在对象本身,而在对象的原型上(prototype)。每一个对象都有原型,在浏览器中它体现在一个隐藏的__proto__属性上。在一些现代浏览器中你可以更改它们。...用类式继承属性,而原型继承方法。这种模式避免了属性的公用,因为一般来说,每一个子类的属性都是私有的,而方法得到了统一。这种模式称为组合模式,也是继承类式常用到的一种方法。...从这里,我们也可以看到类继承和原型基础的一些区别。 结论 原型继承比较符合js这种语言的特点。因为它本身就是js强大的原型的一部分。...而类式继承,与其称它为继承方式,毋宁说是一种函数的运用技巧来模拟继承罢了。本文是卤煮的一己之见,错误偏颇在所难免,如果有之,请各位斧正。
领取专属 10元无门槛券
手把手带您无忧上云