在CopyOnWriteArrayList 和ArrayList 的构造函数中:
![](https://i-blog.csdnimg.cn/blog_migrate/268d99f7a41abc9ef78b3761fbe25daf.png)
6260652 这个编号代表JDK bug库中的编号
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6260652
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6515694
这2个bug是同一个问题。这个bug是什么意思呢?
test1
![](https://i-blog.csdnimg.cn/blog_migrate/b818b694f6225a3c1eddbbb18e618a23.png)
SubClass 继承自BaseClass,由于SubClass数组中每一个元素都是SubClass对象,所以BaseClass[] baseArray = subArray;这种强制类型转换不会报错。这其实就是java对象的向上转型,子类数组转换成父类数组是允许的。但是由于数组中元素类型都是SubClass类型的,所以 baseArray[0] = new BaseClass();会报错
java.lang.ArrayStoreException。这也就是说假如我们有1个Object[]数组,并不代表着我们可以将Object对象存进去,这取决于数组中元素实际的类型。
test2
List<String> list = Arrays.asList("abc");需要注意,可以知道返回的实际类型是java.util.Arrays$ArrayList,而不是ArrayList。我们调用
Object[] objArray = list.toArray();返回是String[]数组,所以我们不能将Object对象,放到objArray数组中。
test3
![](https://i-blog.csdnimg.cn/blog_migrate/5a26c8f0110a56511d14ed3fef9e5531.png)
ArrayList对象的toArray()返回就是Object[]数组,所以我们可以将任意对象存放到返回的Object[]数组中。
通过test2和test3可以看出,如果我们有1个List<String> stringList对象,当我们调用Object[] objectArray = stringList.toArray();的时候,objectArray 并不一定能够放置Object对象。这就是源码中的注释:c.toArray might (incorrectly) not return Object[] (see 6260652)。为了考虑这种情况,所以源码中进行了if判断,来防止错误的数组对象导致异常。Arrays.copyOf(elementData, size, Object[].class);这个方法就是用来创建1个Object[]数组,这样数组中就可以存放任意对象了。
一份文档可以助你涨薪10K,你信吗?我信了,你精通,你也可以
靠这份文档,跳槽涨薪10K
去年,也就是2019年,有一个朋友,整天缠着我跟我要面试题,这位仁兄,属于那种佛系生活,耐心极高(软磨硬泡)的,真的是给我磨得没有任何的办法了,正好,从网上找到一份面试文档,然后我就顺手给了他,没想到,几个月之后,就在疫情刚刚好转的时候,他突然要请我吃饭,还要亲自下厨,我一脸懵的去了,然后他跟我说,他除了自己的技术之外,面试的时候,好多知识点问的都是我给他的文档中的,然后他就顺利进了一家公司,涨薪接近10K,成功逆转全垒打,所以来请我吃饭。
成功升职加薪,10K可以说不算是一个小的涨幅,除了在替他开心的同时,也在惊叹,就随手的一份文档,居然帮了他这么大的忙,当然,不得不说,在程序员这一行,技术还是硬道理,技术不行,再牛逼的文档,也只是花架子,真的在面试的时候,破绽百出,所以,学习还是很重要的,活到老学到老啊
但是学习,也是有技巧的,我总结了如下几点
1、有自己的规划,给自己制定一个学习时间,在什么时间学完什么东西,可以以跳槽作为学习目标和检测学习结果的实践.
2、有相应的学习架构,现在很多的人感觉都在学习,但是学的知识比较小众或者在市面上已经接近被淘汰,这样的学习基本都是浪费时间
3、贪多不烂,最好有精准的学习,这个时候,有一个老师傅带你,他的经验会帮你节省很多时间,也可以帮你少走很多弯路
4、坚持不懈,真的,应为Java算是老牌编程语言,虽然有python这样异军突起的语言,但是短时间内,java的能量还是相当的大的,但是这样也导致,想要进军java或者有更好的发展,对你的考验也会随之提升,所以,在学习的时候,需要学到的东西的很多,这样的话就要你坚持不懈,一直学习,每天积累一点,日积月累,就会有很显著的效果的
好了,说了这么多,接下来,我就把那份帮助朋友涨薪10K的文档贡献出来和大家分享,有需要的朋友可以私信“架构资料”获取
接下来展示一下文档中的解析部分
留言点赞支持一下即可获取高清大纲,以上 spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构
一,JVM
![](https://i-blog.csdnimg.cn/blog_migrate/34b4915a8cb9e92eee66f55f91ec2f92.png)
JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。
二,Spring 原理
![](https://i-blog.csdnimg.cn/blog_migrate/4e823f58671e90b56fa54e4cbd493cd4.png)
它是一个全面的、企业应用开发站式的解决方案, 贯穿表现层、业务层、持久层。但是Spring仍然可以和其他的框架无缝整合
三,微服务
![](https://i-blog.csdnimg.cn/blog_migrate/f163c8428f7e63569e851020d33e730a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b68fda8a9224115f38d3e0c968220b35.png)
四、RabbitMQ
RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。
![](https://i-blog.csdnimg.cn/blog_migrate/c9c939e2698b93d6d47d3a86606a0126.png)
![](https://i-blog.csdnimg.cn/blog_migrate/39b317e6818594eb97a5fb7a7ea8d5a9.png)
数据库
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated
![](https://i-blog.csdnimg.cn/blog_migrate/108291df6b1ec027b2571a58acd1e7f2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cd80e91f20ecc91d1ce5fbd913aad18e.png)
由于头条篇幅有限,我只是截取一部分文档中会含有的知识点,接下来会截取出文档中含有的知识点,有需要的可以私信我获取到
评论留言点赞支持一下即可免费获取到
![](https://i-blog.csdnimg.cn/blog_migrate/40bc37b605b069081cd601d80b658c17.png)
目录:
![](https://i-blog.csdnimg.cn/blog_migrate/df5888e40978d650890e71b81c1b071e.png)
Java基础:
![](https://i-blog.csdnimg.cn/blog_migrate/365eb24df679b0200dcdcb42ad4baa4a.png)
微服务
![](https://i-blog.csdnimg.cn/blog_migrate/77652934ed58c0b87e2214d1b34e5796.png)
文档目录总共283页涵盖了目前Java的所有知识点的解析,这份文档的获取方式:
![](https://i-blog.csdnimg.cn/blog_migrate/33999f170a3535994a74462e6ba12ecc.png)
如何获取?
留言点赞支持一下即可获取高清大纲,以上 spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构