const

rxjs6 Combination Operators

烈酒焚心 提交于 2020-02-28 03:25:15
combineAll 组合多个流, 每次有一个流更新时, 发出所有流最新值的数组 const source$ = of(200, 400, 600) source$.pipe( map(v => interval(v)), combineAll() ).subscribe(console.log) combineLatest 由rxjs导入, 和combineAll作用一样, 用于组合最新的观察值 const {combineLatest, interval, of} = require('rxjs') const {map} = require('rxjs/operators') const source1$ = interval(200) const source2$ = interval(400) const source3$ = interval(600) // 可传入数组或者参数式逐个传入 // combineLatest(source1$, source2$, source3$).subscribe(console.log) combineLatest([source1$, source2$, source3$]).subscribe(console.log) concat / concatAll 串行连接流, 只有当前面的流完成后, 才会从继续后面的流中继续取数据

微前端在美团外卖的实践

橙三吉。 提交于 2020-02-27 23:10:02
背景 微前端是一种利用微件拆分来达到工程拆分治理的方案,可以解决工程膨胀、开发维护困难等问题。随着前端业务场景越来越复杂,微前端这个概念最近被提起得越来越多,业界也有很多团队开始探索实践并在业务中进行了落地。可以看到,很多团队也遇到了各种各样的问题,但各自也都有着不同的处理方案。诚然,任何技术的实现都要依托业务场景才会变得有意义,所以在阐述美团外卖广告团队的微前端实践之前,我们先来简单介绍一下外卖商家广告端的业务形态。目前,我们开发和维护的系统主要包括三端: PC系统:单门店投放系统PC端 H5系统:单门店投放系统H5端 KA系统:多门店投放系统PC端 如上图所示,原始解决方案的三端由各自独立开发和维护,各自包含所有的业务线,而我们的业务开发情况是: PC端和H5端相同业务线的 基本业务逻辑一致 ,UI差异大。 PC端和KA端相同业务线的 部分业务逻辑一致 ,UI差异小。 在这种特殊的业务场景下,就会出现一个有关开发效率的抉择问题。即我们希望能复用的部分只开发一次,而不是三次。那么接下来,就有两个问题摆在我们面前: 如何进行 物理层面的复用 (不同端的代码在不同地址的Git仓库)。 如何进行 逻辑层面的复用 (不同端的相同逻辑如何使用一份代码进行抽象)。 我们这里重点看一下物理层面的复用,即:如何在物理空间上使得各自独立的三端系统(不同仓库)引入我们的复用层?我们尝试了NPM包

使用前进的优势

南笙酒味 提交于 2020-02-27 20:07:17
在理想的转发中, std::forward 用于将命名的右值引用 t1 和 t2 转换为未命名的右值引用。 这样做的目的是什么? 如果将 t1 和 t2 保留为左值,这将如何影响被调用函数的 inner ? template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); } #1楼 我认为有一个实现std :: forward的概念代码可以增加讨论的范围。 这是斯科特·迈耶斯(Scott Meyers)讲 的《有效的C ++ 11/14采样器》中的 一张幻灯片 代码中的函数 move 为 std::move 。 在该演讲的前面有一个(有效的)实现。 我 在libstdc ++ 中的move.h文件中找到 了std :: forward的实际实现 ,但这根本没有启发性。 从用户的角度来看,其含义是 std::forward 是有条件强制转换为右值。 如果我编写的函数期望参数中包含左值或右值,并且仅当将其作为右值传递时,希望将其作为右值传递给另一个函数,则该功能很有用。 如果我没有将参数包装在std :: forward中,它将始终作为常规引用传递。 #include <iostream> #include

c++ 中的sort用法

℡╲_俬逩灬. 提交于 2020-02-27 19:52:46
别人写的,我拿来做做笔记 sort 函数的用法 做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。 这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。 拿我出的“AC的策略”这题来说,需要对数组t的第0到len-1的元素排序,就写sort(t,t+len); 对向量v排序也差不多,sort(v.begin(),v.end()); 排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。 如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp bool cmp(int a,int b) { return a>b; } 排序的时候就写sort(a,a

C/C++ sort函数的用法

…衆ロ難τιáo~ 提交于 2020-02-27 19:40:14
sort函数的用法(#include<algorithm>) 做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。 这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。 拿我出的“AC的策略”这题来说,需要对数组t的第0到len-1的元素排序,就写sort(t,t+len); 对向量v排序也差不多,sort(v.begin(),v.end()); 排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。 如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp bool cmp(int a,int b) { return a>b; } 排序的时候就写sort

sort函数

梦想与她 提交于 2020-02-27 19:39:33
做项目的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。 sort是STL中提供的算法,头文件为#include<algorithm>以及using namespace std; 函数原型如下: ? 1 2 3 4 5 template < class RandomAccessIterator> void sort ( RandomAccessIterator first, RandomAccessIterator last ); template < class RandomAccessIterator, class Compare> void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp ); 使用第一个版本是对[first,last)进行升序排序,默认操作符为"<",第二个版本使用comp函数进行排序控制,comp包含两个在[first,last)中对应的值,如果使用"<"则为升序排序,如果使用">"则为降序排序,分别对int、float、char以及结构体排序例子如下: ? 1 2 3 4 5 6 7 8 9

(转)爬虫,其实本就是这么简单

限于喜欢 提交于 2020-02-27 18:49:46
本文转载自: 爬虫,其实本就是这么简单-掘金 作者: 吸取我无,分享我有 时至今日,大前端思想已经深入人心,很多知识都要涉及到。所以对于现在的前端儿来说也是来着不拒的,练就吸星大法的时候,尽量多的吸收知识,最后达到物尽其用的效果 最近,我也是一直在学习关于爬虫方面的知识,源于之前项目中需要用到的地铁信息数据并不是用爬虫爬下来的数据,而是直接copy的 尽管这些数据一时半会确实不会有太大的变化,不过总觉得还是有些low的。于是学习了关于爬虫的知识后,打算和大家一起探讨交流一番,下面直接进入正题 首先,先来说一下 爬虫 和 Robots协议 是什么 然后再来介绍 爬虫的基本流程 最后根据实际栗子爬一个 豆瓣最近上映的电影 来小试牛刀一把 爬虫及Robots协议 先看定义:爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。 再看下 Robots协议 的介绍, robots.txt 是一个文本文件, robots.txt 是一个协议不是一个命令 robots.txt 是爬虫要查看的第一个文件, robots.txt 告诉爬虫在服务器上什么文件是可以被查看的,爬虫机器人就会按照文件中的内容来确定访问范围 下图是 豆瓣电影 页面关于 robots协议 列出来的访问范围 爬虫和Robots协议是紧密相连的

竞赛头

旧城冷巷雨未停 提交于 2020-02-27 18:04:22
#include<bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define rush! ios::sync_with_stdio(false);cin.tie(0); const int inf = 0x3f3f3f3f; const long long linf = 0x3f3f3f3f3f3f3f3f; 来源: https://www.cnblogs.com/LH2000/p/12373015.html

ES6重难点整理

China☆狼群 提交于 2020-02-27 12:54:33
👇 内容速览 👇 let 和 const Set 和 Map Generator 和 yield Promise、async/await 介绍 Proxy 代理器 ... # let 和 const ES6 新增了 let 和 const ,它们声明的变量,都处于“块级作用域”。并且不存在“变量提升”,不允许重复声明。 同时, const 声明的变量所指向的内存地址保存的数据不得改变: 对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。 对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针, const 只能保证这个指针是固定的(即总是指向另一个固定的地址),不能保证指向的数据结构不可变。 如果要保证指向的数据结构也不可变,需要自行封装: function constantize(obj) { if (Object.isFrozen(obj)) { return obj; } Reflect.ownKeys(obj).forEach(key => { // 如果属性是对象,递归冻结 typeof obj[key] === "object" && (obj[key] = constantize(obj[key])); }); return Object.freeze(obj); } /*******

rxjs6 Conditional and Boolean Operators & Mathematical and Aggregate Operators

牧云@^-^@ 提交于 2020-02-27 12:43:14
Conditional and Boolean Operators defaultIfEmpty 如果源流在结束时没有发出一个值, 则发出一个默认值 const {of} = require('rxjs') const {defaultIfEmpty} = require('rxjs/operators') of(1, 2, 3).pipe( defaultIfEmpty('abc') ).subscribe(console.log) of().pipe( defaultIfEmpty('abc') ).subscribe(console.log) every 类似数组, 返回值为流中的数据是否都满足某个条件 const {of} = require('rxjs') const {every} = require('rxjs/operators') const source$ = of(1, 2, 3) source$.pipe( every(x => x < 5) ).subscribe(console.log) // true source$.pipe( every(x => x % 2) ).subscribe(console.log) // false find & findIndex 返回第一个满足条件的值/位置, 第一个参数为比较函数,