【进阶篇】es7的decorator修饰器

简介: 【进阶篇】es7的decorator修饰器

   你体会过数学之美吗?

   肯定很多人没有体会到,打个比方来说,大家一定都有这种感觉,绝大部分同学对音体美容易产生兴趣,而对数学感兴趣的不多。

我认为,这主要有两个方面的原因:

  一是音体美中所表现出来的美是外显的,这种美同学们比较容易感受、认识和理解;

而数学中的美虽然也有一些表现在数学对象的外表,如精美的图形、优美的公式、巧妙的解法等等,

但总的来说数学中的美还是深深地蕴藏在它的基本结构之中,这种内在的理性美学生往往难以感受、认识和理解,

这也是数学区别于其它学科的主要特征之一。

  二是长期以来,我们的数学教材过分强调逻辑体系和逻辑推演,忽视数学美感、数学直觉的作用,

长此以往,学生将数学与逻辑等同起来。

一味注重数学的逻辑性而忽视了数学本身的美,学习的过程中就会感到枯燥无味缺乏兴趣。

  就数学本身而言,是壮丽多彩、千姿百态、引人入胜的……认为数学枯燥乏味的人,  只是看到了数学的严谨性,而没有体会出数学的内在美。  

  音乐能激发或抚慰情怀,绘画使人赏心悦目,诗歌能动人心弦,哲学使人获得智慧,科技可以改善物质生活,但数学却能提供以上一切。

  德国数学家克莱因曾对数学美作过这样的描述:“音乐能激发或抚慰情怀,绘画使人赏心悦目,诗歌能动人心弦,哲学使人获得智慧,科技可以改善物质生活,但数学却能提供以上一切。”

数学美与其它美的区别还在于它是蕴涵在其中的美。

  数学 给到我们的其实是思考方式,如何化繁为简,

  如何用数学去解决工程问题,如何跳出固有思维不断去思考创新。

  比如说 两点之间直线最短 短短的一句话,简练严谨,内涵丰富,充分让学生体会了数学定理的简洁之美;

  图形之美 七巧板 通过七巧板拼图练习,学生感到图案之多,出人意料;图形之美,妙趣横生。

      服装和拍照,需要用到黄金分割比例的知识,就会感觉自己的设计很舒服

  黄金分割又称黄金律,是指事物各部分间一定的数学比例关系,即将整体一分为二,

  较大部分与较小部分之比等于整体与较大部分之比,其比值为1∶0.618或1.618∶1,

  即长段为全段的0.618。0.618被公认为最具有审美意义的比例数字。

  上述比例是最能引起人的美感的比例,因此被称为黄金分割。

  很多音乐中充斥着数学的对称美

  埃及的金字塔在建筑线条上凝聚了多少图形空间上的的数学……真可谓哪里有数学,哪里就有美。

  对称之美 数学知识中的对称主要有轴对称美,如等腰三角形、矩形;中心对称美,如平行四边形、圆等;形式上对称美,如正(+)与负(-)、加法与减法、乘法与除法、正比与反比等。

    对我们来说数学是魅力,是我们解决工程问题的法宝,短短的几个公式,就     能将工程中复杂的业务逻辑,变得直观,简洁,并且迅速解决问题。

  例一:简单之美:布尔代数和搜索引擎

  建立一个搜索引擎大致需要做这样几件事情:

  1. 自动下载尽可能多的网页;
  2. 建立快速有效的索引;
  3. 根据相关性对网页进行公平准确的排序;

搜索引擎的一些基础知识。要真正做好搜索引擎,不可能是一朝一夕的事情,没有捷径可走。做好搜索,最基本的要求是每天分析10-20个不好的搜索结果,累积一段时间才有感觉。但是往往很多工程师都做不到这一点。搜索殷勤的原理其实非常简单:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。下面我们将一一介绍。

1.布尔代数

  布尔值的运算相当简单,应该是属于高中的知识了,这里就不再讲述了。我们主要来看下文献检索和布尔运算的关系。对于用户输入的关键词来说,搜索引擎要判断每篇文章是否有这个关键词,如果有,就相应地给这篇文献一个逻辑值——真(True或1)或者假(False或0)。比如我们要找计算机应用的文献,但不想找软件方面的东西。可以用这样的一个语句“计算机 AND应用 AND(NOT 软件)”来表示。

2.索引

  大部分使用搜索引擎的人都惊讶于它能在极短的时间内找到千万条搜索结果。显然,如果把所有网页文本都扫描一遍是不可能的,那么这里面一定使用了技巧,这个技巧就是构建索引。最简单的索引的结构是用一个很长的二进制数表示一个关键词是否出现在文章中。有多少文章,就有多少位,一位对应一篇文章。比如“计算机”对应的二进制数为01001000110...,表示第二,第五,第九,第十...文献包含了这个关键字。同样的,假定“应用”对应的二进制数是:00101001100....,那么查找“计算机应用”的文献时,只要把这两个二进制数进行布尔运算AND,结果为1对应的那篇文献就是满足要求的。

  由于互联网的网页数量是巨大的,网络中的词也非常多。因此,这个索引是巨大的。所以普遍的做法是根据网页的序号将索引分成很多份,分别存储在不同服务器中。每当节诶受一个查询时,这个查询就被分到许多服务器中,这些服务器并行处理用户请求,并把结果返回给主服务器合并处理,最后把结果返回给用户。

  而随着互联网上内容的增加,数据也越来越多,因此需要根据网页的重要性,质量和访问的频率建立常用和非常用等不同等级的索引。这就类似计算机中的页表和快表的差别。但是不论搜索引擎的索引在工程上如何复杂,原理上依然非常简单,即等价于布尔运算。

 例二: 图论和网络爬虫

  构建网络爬虫的工程要点

1、首先,用BFS还是DFS?

BDS (Breadth-First-Search)(广度优先搜索)

DFS (Depth-First-Search)(深度优先搜索)

先爬哪个网页,后爬哪个网页的调度程序,原理上基本上是BFS。

但是分布式的爬虫系统为了减少网络通信中的握手成本,一组专门下载某个网站的服务器会先下载完一个网站,然后再进入下一个网站,而不是每个网站先轮流下载5%,然后再回过头来下载第二批。这又有点像DFS,虽然下载同一个网站(或者子网站)时,还是需要用BFS的。

2、页面的分析和URL的提取。

当一个网页下载完成后,需要从这个网页中提取其中的URL,把它们加入到下载的队列中。早期网页是直接用HTML语言写的,URL很容易提取,现在很多网页使用一些脚本语言(如JavaScript)生成的,页面分析就要复杂的多。

因此,若你发现一些网页明明存在,但搜索引擎就是没有收录,一个可能的原因是网络爬虫中的解析程序没能成功解析网页中不规范的脚本程序。

3、记录哪些网页已经下载过的小本本 —— URL表

为了防止一个网页被下载多次,我们可以用一个散列记录哪些网页已经下载过。再遇到这个网页的时候,我们就可以跳过它。采用散列表的好处是,判断一个网页的URL是否在表中,平均只需一次(或者略多的)查找。

但是上千台服务器一起下载网页,且维护一张散列表会非常困难。首先,这张散列表会大到一台服务器存不下。其次,由于每个下载服务器在开始下载前和下载后都要维护这张表,以免不同的服务器做重复的工作,这个存储散列表的服务器的通信就成了整个爬虫系统的瓶颈。

如何消除这个瓶颈呢?

好的方法一般都采用了这样两个技术:首先,明确每台下载服务器的分工,也就是说在调度时一看到某个URL就知道要交给哪台服务器去下载,以免很多服务器都要去重复判断某个URL是否需要下载,然后,在明确分工的基础上,判断URL是否下载就可以批处理了,比如每次向散列表(一组独立的服务器)发送一大批询问,或者每次更新一大批散列表的内容。这样通信的次数就大大减少了。

目录
相关文章
|
28天前
|
缓存 监控 JavaScript
理解ES6中的Decorator
理解ES6中的Decorator
19 2
|
3月前
|
JavaScript API 调度
Pinia进阶:优雅的setup(函数式)写法+封装
相信在座各位假如使用Vue生态开发项目情况下,对Pinia状态管理库应该有所听闻或正在使用,假如还没接触到Pinia,这篇文章可以帮你快速入门,并如何在企业项目中更优雅封装使用。
58 0
|
5月前
|
JavaScript 监控 编译器
29.【TypeScript 教程】装饰器(Decorator)
29.【TypeScript 教程】装饰器(Decorator)
48 0
|
6月前
|
JavaScript
如何使用 TypeScript 创建和使用装饰器
如何使用 TypeScript 创建和使用装饰器
42 0
|
6月前
|
数据安全/隐私保护 Python
解释装饰器(decorator)的功能和用法。
解释装饰器(decorator)的功能和用法。
51 1
|
缓存 监控 JavaScript
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
在TypeScript中,装饰器(`Decorators`)是一种用于增强代码功能的特殊类型声明。装饰器提供了一种在类、方法、属性等代码元素上注释或修改的方式,使得我们可以通过装饰器来扩展、修改或监视代码的行为。通过使用装饰器,我们可以在不修改原始代码的情况下,给代码添加新的功能,提高代码的可维护性和灵活性。
|
前端开发
前端学习案例4:ES6中的修饰器4
前端学习案例4:ES6中的修饰器4
61 0
前端学习案例4:ES6中的修饰器4
小满nestjs(第三章 前置知识装饰器)
属性描述符 可写对应writable,可枚举对应enumerable,可配置对应configurable
104 0
小满nestjs(第三章 前置知识装饰器)
|
存储 编译器 索引
学习TypeScript20(装饰器Decorator)
定义一个类装饰器函数 他会把ClassA的构造函数传入你的watcher函数当做第一个参数
105 0
学习TypeScript20(装饰器Decorator)
|
前端开发 API
每天3分钟,重学ES6-ES12(十一)Promise的类方法
每天3分钟,重学ES6-ES12(十一)Promise的类方法
86 0