拷贝

高性能编程论述

元气小坏坏 提交于 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 16:13:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 浅谈Java浅拷贝和深拷贝 案例 最近做的项目中,有一个需要重构数据结构的模块。将数据库查询的数据转换成指定格式并排序的嵌套map结构,如下 由于数据中包含大量的重复结构,结合空间复杂度和时间复杂度,博主准备根据排序规则先制作一个标准结构单元 然后在重构大量的数据时,只需要拷贝一份。 根据固定的key ,填充对应的value值即可。在拷贝的时候 用到了 list 的addAll()方法 @GetMapping("/test1") public String testCopy() { List<Map<String, String>> list1 = new ArrayList<>(); Map<String, String> map1 = new HashMap<>(); Map<String, String> map2 = new HashMap<>(); map1.put("姓名", "张三"); map2.put("年龄", "18"); list1.add(map1); list1.add(map2); List<Map<String, String>> list2 = new ArrayList<>(); list2.addAll(list1); Map<String,List<Map<String,

Java高性能编程论述

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

峰创时代|高性能编程

梦想与她 提交于 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框架被归类到特定机制(当然,也可以归类到算法,多线程等。取决于看待它的角度)。 由于这其中每个分支,拆分出来都是很大的一块内容。所以这篇文章的目标只是给个方向而已,不会写得非常深入。

js对象深拷贝

荒凉一梦 提交于 2019-12-11 07:26:07
js深拷贝和浅拷贝 js的深拷贝指的是基本数据类型,指的是变量1复制变量2的值后,改变变量2,不会影响变量1的值。 例如: let num1 = 2; let num2 = num1; num2 = 3; console.log(num1);// 2 console.log(num2);// 3 js的浅拷贝指的是引用数据类型,指的是将对象2复制对象1的值以后,改变的对象2的值以后,会将对象1的值也改变。原因是:(引用数据类型的拷贝,拷贝的是值,但是地址中的变量指向的依旧是一块地址。) 例如: let obj1 = { name: 'lnj' } let obj2 = obj1; obj2.name = 'zs'; console.log(obj2.name);// zs console.log(obj1.name);// zs 为了解决上面那个对象的浅拷贝,让js对象能深拷贝,下面封装了一个方法 例如: class Person{ name = 'lnj'; hobby = { cat: 'aa' }, arr = [1, 3, 5]; } let per = new Person(); let obj = new Object(); depCopy(obj, per); function depCopy(target, source){ for(let key in

Python编程高手之路——数据类型

*爱你&永不变心* 提交于 2019-12-10 23:32:52
三、数据类型 3.1 数据类型 3.1.1 数字类型int和float 数字类型即变量的值,如age=18,18就是我们保存的值; 变量是用来反映/保存状态以及状态变化的,针对不同的状态应该用不同的数据去标识; 数字类型只能存储一个值,是不可变类型(不可变类型可以哈希,后面的章节会讲解哈希) 3.1.2 int类型常用的方法 bin()、oct()、hex()在进制转换中经常用到; print ( bin ( 3 ) ) # 十进制转成二进制,0b11 print ( oct ( 8 ) ) # 十进制转成八进制,0o10 print ( hen ( 16 ) ) # 十进制转成十六进制,0x10 在进行用户交互程序的时候常用.isdigit()(该函数的功能是判断字符串是否全部只由数字组成,如果是,返回True,否则返回False)判断用户输入是不是数字来进行下一步操作。这样避免了程序出错。但是需要注意用户输入的内容默认是字符串,判断一个字符串是否是数字,可以使用下面的方法。 age = input ( "your age>>:" ) if age . isdigit ( ) : age = int ( age ) age += 1 print ( age ) 3.1.3 Python其它数字类型(了解) #int(整型) 在32位机器上,整数的位数为32位,取值范围为 − 2

OC 内存管理

﹥>﹥吖頭↗ 提交于 2019-12-10 14:02:38
引用计数的相关内容 ✓ OC中内存管理机制就是引用计数 ✓ 每个对象都有引用计数,理论上如果对象的引用计数为0, 它就会自动释放对象,系统会回收它开辟的内存空间 ✓ 在实际的开发中,存在多个指针指向同一个对象 2.影响引用计数的一些方法 使引用计数加1的方法(alloc,retain,copy,NSString的直接赋值字符串等) retainCount是查看引用计数的次数的一个参考,不绝对. 注意:当引用计数被释放为0时,retainCount打印出来还是1,理论上是0 release 是释放的方法,即引用计数减1 注意:系统释放完了之后,理论上是会被销毁的,然后释放相应的内存,但是为了避免野指针的现象,所以我们在后面常常加入置空,即将指针地址nil autorelease也是使引用计数减1,但是他不是立即执行,而是在指向了[pool autorelease]语句之后才会减1;当然如果用系统的自动释放池,或者自己建立自动释放池,在里面指向了引用计数加的时候,如果没有释放,然后会在自动释放池外,全部统一销毁 如果你想比较安全的使用对象,可以通过retain这个方法将这个对象持有,增加引用计数;如果不想使用这个对象,也就是销毁,可以使用release,减少它的引用计数 特别强调:管理内存的核心就是使内存保持平衡 .内存始终遵循的一大准则就是平衡原则 如果引用计数没有在保证平衡的原则

【ES6学习笔记之】Object.assign()

大兔子大兔子 提交于 2019-12-10 13:53:25
基本用法 Object.assign 方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。 const target = { a: 1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3} Object.assign 方法的第一个参数是目标对象,后面的参数都是源对象。 注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。 const target = { a: 1, b: 1 }; const source1 = { b: 2, c: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3} 如果只有一个参数, Object.assign 会直接返回该参数。 const obj = {a: 1}; Object.assign(obj) === obj // true 如果该参数不是对象,则会先转成对象,然后返回。 typeof Object.assign(2) //