迭代器

高性能编程论述

元气小坏坏 提交于 2019-12-13 19:48:04
高性能编程 前言 首先说一下我为什么要写这篇博客。因为 面试 有提到这个,我当时直接说不懂(一方面当时心态很差,另一方面面试官的询问方式令我很反感。所以直接refuse了。小伙伴们千万别学我)。 所以,打算谈一谈我对Java高性能编程方面的认识与总结。 首先,高性能编程不涉及架构层次。所以打算通过这篇文章,来了解架构提升系统性能的小伙伴要失望了。我将Java高性能编程主要分为编码与网络两个部分(说白了,只关注编码,不提其它)。 其次,我们需要了解何为高性能。性能往往与系统的吞吐量,响应时间,并发量等息息相关。只有了解到这点,我们才可以对症下药。 网络部分:BIO,NIO,Netty等,这部分在之前的《 从BIO到Netty的演变 》有所提及,这里不再赘述。 而编码部分,也是最多人关注的部分。我将它按层次分为: 数据结构(如String,StringBuffer,StringBuilder) 语言特性(如for循环的JIT优化,并行流等) 算法(如分治算法,贪心算法等) 设计模式(如原型模式) 多线程(包括线程池,锁等) 扩展-特定机制(其实就是一些成熟的方案) 并发容器被归类到多线程中,而Fork/Join框架被归类到特定机制(当然,也可以归类到算法,多线程等。取决于看待它的角度)。 由于这其中每个分支,拆分出来都是很大的一块内容。所以这篇文章的目标只是给个方向而已

Java高性能编程论述

不想你离开。 提交于 2019-12-13 12:45:10
高性能编程 前言 首先说一下我为什么要写这篇博客。因为面试有提到这个,我当时直接说不懂(一方面当时心态很差,另一方面面试官的询问方式令我很反感。所以直接refuse了。小伙伴们千万别学我)。 所以,打算谈一谈我对Java高性能编程方面的认识与总结。 首先,高性能编程不涉及架构层次。所以打算通过这篇文章,来了解架构提升系统性能的小伙伴要失望了。我将Java高性能编程主要分为编码与网络两个部分(说白了,只关注编码,不提其它)。 其次,我们需要了解何为高性能。性能往往与系统的吞吐量,响应时间,并发量等息息相关。只有了解到这点,我们才可以对症下药。 网络部分:BIO,NIO,Netty等,这部分在之前的《 从BIO到Netty的演变 》有所提及,这里不再赘述。 而编码部分,也是最多人关注的部分。我将它按层次分为: 数据结构(如String,StringBuffer,StringBuilder) 语言特性(如for循环的JIT优化,并行流等) 算法(如分治算法,贪心算法等) 设计模式(如原型模式) 多线程(包括线程池,锁等) 扩展-特定机制(其实就是一些成熟的方案) 并发容器被归类到多线程中,而Fork/Join框架被归类到特定机制(当然,也可以归类到算法,多线程等。取决于看待它的角度)。 由于这其中每个分支,拆分出来都是很大的一块内容。所以这篇文章的目标只是给个方向而已,不会写得非常深入。

详解Python迭代器,生成器,装饰器

南笙酒味 提交于 2019-12-13 12:42:25
文章目录 迭代器 生成器 装饰器 迭代器 简介:迭代器是python里面可以记住遍历位置的对象,迭代器只能往前不能往后,使用iter()创建一个迭代器,使用next()返回一个迭代器里面的元素。 应用场景:数列的数据规模巨大,或者数列有规律,但是通过列表推导式推导不出来 #!/usr/local/bin/python3 import sys it = iter ( [ 1 , 32 , 43 , 2 ] ) while True : try : print ( next ( it ) ) except StopIteration : sys . exit ( ) 参考: 廖雪峰的迭代器教程 菜鸟教程:迭代器与生成器 Tyson Lee的博客:详解高阶函数,闭包,装饰器 生成器 简介:在python里面使用了yield的函数称为生成器,生成器返回一个迭代器,在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象 应用场景: 列表所有数据都在内存中,如果有海量数据的话将会非常耗内存。 如:仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 如果列表元素按照某种算法推算出来

峰创时代|高性能编程

梦想与她 提交于 2019-12-13 11:18:33
高性能编程 前言 首先说一下我为什么要写这篇博客。因为面试有提到这个,我当时直接说不懂(一方面当时心态很差,另一方面面试官的询问方式令我很反感。所以直接refuse了。小伙伴们千万别学我)。 所以,打算谈一谈我对Java高性能编程方面的认识与总结。 首先,高性能编程不涉及架构层次。所以打算通过这篇文章,来了解架构提升系统性能的小伙伴要失望了。我将Java高性能编程主要分为编码与网络两个部分(说白了,只关注编码,不提其它)。 其次,我们需要了解何为高性能。性能往往与系统的吞吐量,响应时间,并发量等息息相关。只有了解到这点,我们才可以对症下药。 网络部分:BIO,NIO,Netty等,这部分在之前的《从BIO到Netty的演变》有所提及,这里不再赘述。 而编码部分,也是最多人关注的部分。我将它按层次分为: 数据结构(如String,StringBuffer,StringBuilder) 语言特性(如for循环的JIT优化,并行流等) 算法(如分治算法,贪心算法等) 设计模式(如原型模式) 多线程(包括线程池,锁等) 扩展-特定机制(其实就是一些成熟的方案) 并发容器被归类到多线程中,而Fork/Join框架被归类到特定机制(当然,也可以归类到算法,多线程等。取决于看待它的角度)。 由于这其中每个分支,拆分出来都是很大的一块内容。所以这篇文章的目标只是给个方向而已,不会写得非常深入。 一

高性能编程论述

…衆ロ難τιáo~ 提交于 2019-12-13 09:57:42
高性能编程 前言 首先说一下我为什么要写这篇博客。因为面试有提到这个,我当时直接说不懂(一方面当时心态很差,另一方面面试官的询问方式令我很反感。所以直接refuse了。小伙伴们千万别学我)。 所以,打算谈一谈我对Java高性能编程方面的认识与总结。 首先,高性能编程不涉及架构层次。所以打算通过这篇文章,来了解架构提升系统性能的小伙伴要失望了。我将Java高性能编程主要分为编码与网络两个部分(说白了,只关注编码,不提其它)。 其次,我们需要了解何为高性能。性能往往与系统的吞吐量,响应时间,并发量等息息相关。只有了解到这点,我们才可以对症下药。 网络部分:BIO,NIO,Netty等,这部分在之前的《 从BIO到Netty的演变 》有所提及,这里不再赘述。 而编码部分,也是最多人关注的部分。我将它按层次分为: 数据结构(如String,StringBuffer,StringBuilder) 语言特性(如for循环的JIT优化,并行流等) 算法(如分治算法,贪心算法等) 设计模式(如原型模式) 多线程(包括线程池,锁等) 扩展-特定机制(其实就是一些成熟的方案) 并发容器被归类到多线程中,而Fork/Join框架被归类到特定机制(当然,也可以归类到算法,多线程等。取决于看待它的角度)。 由于这其中每个分支,拆分出来都是很大的一块内容。所以这篇文章的目标只是给个方向而已,不会写得非常深入。

C#-中FCL迭代器模式的一点问题

戏子无情 提交于 2019-12-12 10:53:09
C#中FCL迭代器模式的一点问题 迭代器模式是GOF23种模式中的一种,目的是为了提供对集合的遍历。为什么要实现迭代器模式: 假设存在一个数组,我们的遍历模式可能是采用依据索引来进行遍历。又假设存在一个HashTable,我们的遍历模式就可能按照键值来进行遍历。无论是哪个集合,如果它们的遍历没有一个公共的接口,那么我们的客户端进行调用的时候,相当于是对具体类型进行了编码。这样以来,当需求变化的时候,就必须修改我们的代码。并且,由于客户端代码过多的关注了集合的内部实现,代码的可移植性就会变得很差,这直接违反了面向对象中的开闭原则。于是,迭代器模式就诞生了。现在,不要管FCL中是如何实现该模式的,我们先来实现一个我们自己的迭代器模式。 代码清单: public class Program { static void Main(string[] args) { //使用接口IMyEnumerable代替MyList IMyEnumerable list = new MyList(); //得到迭代器,在循环中针对迭代器编码,而不是集合MyList IMyEnumerator enumerator = list.GetEnumerator(); for (int i = 0; i < list.Count; i++) { object current = enumerator

JS中的迭代器和生成器

*爱你&永不变心* 提交于 2019-12-11 18:38:55
利用迭代器生成一个遍历方法: let arr1 = [1, 2, 3, 11, 22, 13, 24]; function forOf(arr, callback) { // 找到迭代器函数 let iterator = arr[Symbol.iterator]; // 调用迭代器函数(注意this指向),得到迭代器对象 let it = iterator.call(arr); let obj; // 迭代器的方法next();返回一个对象:value:指向每一项,done:boolean。(是否遍历完,完成过后值为true) while (!(obj = it.next()).done) { callback(obj.value); } } forOf(arr1, (v) => console.log(v + 1));//遍历输出数组arr1中每一项的值+1。 生成器函数: function* yield function* genFn() { console.log(555); yield 444; console.log(666); yield 666; console.log(777); } //生成器函数调用得到生成器: let gen = genFn(); console.log(gen.next()); console.log(gen.next()); console

一篇搞定Vue-Router

六眼飞鱼酱① 提交于 2019-12-11 16:22:01
一篇搞定Vue-Router vue-router导航守卫 在本期文章中,我将为大家梳理弄明白以下几个事情, 1:导航守卫的执行顺序是怎么样的? 2:导航守卫中的next的用处? 3:为什么afterEach守卫没有next? 4:beforeEach是否可以叠加? 5:路由跳转经历了哪几部分? 在之前说过的一个内容router实例的history属性帮助我们做了所有跳转部分的事情,所以导航守卫的内容也在history中。 我们以HTML5History这个类来看一下这个push方法, push ( location : RawLocation , onComplete ? : Function , onAbort ? : Function ) { const { current : fromRoute } = this this . transitionTo ( location , route => { pushState ( cleanPath ( this . base + route . fullPath ) ) handleScroll ( this . router , route , fromRoute , false ) onComplete && onComplete ( route ) } , onAbort ) } push(我们跳转时的$router

C++容器用法整理

时光总嘲笑我的痴心妄想 提交于 2019-12-11 07:51:28
文章目录 Vector 声明 定义 举例 操作 增 定义 举例 删 定义 举例 Vector 声明 定义 std :: vector < 变量类型 > 变量名 //不定长 std :: vector < 变量类型 > 变量名 ( 数量 ) //定义一定数量长度的vector std :: vector < 变量类型 > 变量名 ( 数量 , 初始值 ) //定义一定数量长度,并且每个都为初始值的vector std :: vector < 变量类型 > 变量名 ( 另一个相同类型的vector ) //利用另一个vector来初始化 std :: vector < 变量类型 > 变量名 ( 另一个相同类型的vector迭代器指针 1 , 另一个相同类型的vector迭代器指针 2 ) //利用另一个vector的两个指针所指区间内的值来初始化 举例 std :: vector < float > a ; std :: vector < float > a ( 10 ) ; //长度为10个float的vector std :: vector < float > a ( 10 , 1.5 ) ; //长度为10,且每个初始值为1.5的float类型vector std :: vector < float > b ( 10.2 .3 ) ; std :: vector < float

c++之STL总结

浪尽此生 提交于 2019-12-11 00:59:23
c++中的STL(Stand Template Library)提供了最基本的数据结构和算法,功能十分强大。主要分为 容器 (数组,队列,链表,栈,集合等等), 迭代器 (一种对象,用来遍历容器中的元素)和常见算法(排序,反转等) 文章目录 容器 字符串 vector list deque stack multiset&set multimap&map 容器 字符串 包含文件:c++头文件中: #include<string> 常用方法: 初始化: string str:生成空字符串 string s ( str ) :生成字符串为str的复制品 string s ( str , strbegin , strlen ) :将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值 string s ( cstr , char_len ) :以C_string类型cstr的前char_len个字符串作为字符串s的初值 string s ( num , c ) :生成num个c字符的字符串 string s ( str , stridx ) :将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值 直接用另一个字符串赋值 如str2 . assign ( str1 ) ; 即用str1给str2赋值 . 用另一个字符串的一个子串赋值 如str3