先看再点赞,给自己一点思考的时间,思考过后请毫不犹豫微信搜索[沉默王二],关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有技术大佬整理的面试题,以及二哥的系列文章. ArrayList 和 LinkedList 是 List 接口的两种不同实现,并且两者都不是线程安全的.但初学者往往搞不清楚它们两者之间的区别,不知道什么时候该用 ArrayList,什么时候该用 LinkedList,那这篇文章就来传道受业解惑一下. ArrayList 内…
揭开自然拼读法(Phonics)的神秘面纱 自然拼读法  (Phonics),是指看到一个单词,就可以根据英文字母在单词里的发音规律把这个单词读出来的一种方法.即从“字母发音-字母组合发音-单词-简单句 子-整段句子”逐步学习,让孩子轻松掌握“自然拼读”法,培养孩子正确的英语语感,打好英语学习的基础.在英语母语国家的幼儿园里,孩子们从三岁起,就开 始接受自然拼读法的学习了,这种方法是美国及很多英语母语国家孩子学习自己母语的方法. 自然拼读六阶成功法 第一阶:建立字母与字母自然发音之间的直接联系.…
揭开GrowingIO无埋点的神秘面纱   早在研究用户行为分析的时候,就发现国内的GrowingIO在宣传无埋点技术,最近正好抽出时间来研究一下所谓的无埋点到底是什么样的. 我分六部分来分析一下无埋点的流程以及背后的技术分析,前5部分主要是分析圈选的流程,技术以及使用上的坑,最后一部分介绍一下利用js点击元素获取XPath的demo:   1.由GrowingIO的智能路径来引出无埋点的重要性   首先,我们来看一下,最近GI新出的功能----智能路径,智能路径到底是什么?作用是什么呢?我们看…
各自特性: ArrayList  : 是一由连续的内存块组成的数组,范围大小可变的,当不够时增加为原来1.5倍大小,数组. :调用trimToSize方法,使得存储区域的大小调整为当前元素数量所需要的空间大小,垃圾回收器将会回收多余存储空间.LinkedList : 是由随机内存块通过指针连接起来的,范围大小可变的,当不够时增加为原来2倍大小,一个双向链表,   书上得来: 结论一 : ArrayList集合访问查找比LinkedList集合速度快,                   结论二…
揭开 constructor 在 Javascript 语言中,constructor 属性是专门为 function 而设计的,它存在于每一个 function 的prototype 属性中.这个 constructor 保存了指向 function 的一个引用. 在定义一个函数(代码如下所示)时, function F() {// some code} JavaScript 内部会执行如下几个动作: 1.为该函数添加一个原形(即 prototype)属性 2. 为 prototype 对象…
本文导读 生活中案例场景介绍 联想到 AQS 到底是什么 AQS 的设计初衷 揭秘 AQS 底层实现 最后的总结 当你在学习某一个技能的时候,是否曾有过这样的感觉,就是同一个技能点学完了之后,过了一段时间,如果你没有任何总结,或者是不经常回顾,遗忘的速度是非常之快的. 忘记了之后,然后再重新学,因为已经间隔了一段时间,再次学习又当做了新的知识点来学.这种状态如此反复,浪费了相同的时间,但学习效果却收效甚微. 每当遇到这种情况,我们可以停下来,思考一下.对于某一个技术知识点理解起来不是那么好懂的时…
C++类中的虚表结构是C++对象模型中一个重要的知识点,这里咱们就来深入分析下虚表的在内存中的结构. C++一个类中有虚函数的话就会有一个虚表指针,其指向对应的虚表,一般一个类只会有一个虚表,每个虚表有多个"插槽",每个插槽存放一个虚函数的地址.插槽中的内容可以被覆盖,子类如果重写了父类中的虚函数,则插槽中对应位置的数据被覆盖.虚表存放的是虚函数地址,不管该虚函数是public还是private的.光文字说明不太形象,下面上一张虚表结构的示例图:…
一,线程安全性 Vector.Stack:线程安全 ArrayList.LinkedList:非线程安全 二,实现方式 LinkedList:双向链表 ArrayList,Vector,Stack:数组 三,容量扩展方面 由于ArrayList和Vector(Stack继承自Vector,只在Vector的基础上添加了几个Stack相关的方法,故之后不再对Stack做特别的说明)使用数组实现,当数组长度不够时,其内部会创建一个更大的数组,然后将原数组中的数据拷贝至新数组中 //ArrayList…
[HashSet] 1. HashSet存储不能够存储相同的元素,元素是否相同的判断:重写元素的equals方法.equals方法和hashCode方法必须兼容,如:equals方法判断的是用户的名字name,那么hashCode的返回的hashcode必须是name.hashcode(): 2. HashSet存储是无序的,保存的顺序与添加的顺序是不一致的,它不是线性结构,而是散列结构,(通过散列表:散列单元指向链表).因此,HashSet的查询效率相对比较高. 3. HashSet不是线程安…
ArrayList 内部使用了数组形式进行了存储,利用数组的下标进行元素的访问,因此对元素的随机访问速度非常快.因为是数组,所以ArrayList在初始化的时候, 有初始大小10,插入新元素的时候,会判断是否需要扩容, 扩容的步长是0.5倍原容量,扩容方式是利用数组复制,因此有一定的开销. LinkedList 内部使用双向链表的结构实现存储,LinkedList有一个内部类作为存放元素单元,里面有三个属性,用来存放元素本身以及前后两个单元的引用,另外LindedList的 内部还有一个head…