深入理解系列
文章平均质量分 93
本专栏将以总结的形式深入介绍有关JAVA、JVM、网络等程序员开发常见的知识点,也是对近来面试的总结吧
西厂程序员
热爱互联网,没事搞搞机,学学CS。
展开
-
深入理解系列之JAVA数据结构(1)——ArrayList
1、 ArrayList是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。提供了相关的添加、删除、修改、遍历等功能。 2、ArrayList实现了RandmoAccess接口,即提供了随机访问功能。在ArrayList中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。ArrayList实现了Cloneable接口,即覆盖了函数clone(),能...原创 2018-04-06 15:49:41 · 460 阅读 · 0 评论 -
深入理解系列之JAVA数据结构(2)——LinkedList
1、LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 2、LinkedList相对于ArrayList来说,是可以快速添加,删除元素,ArrayList添加删除元素的话需移动数组元素,可能还需要考虑到扩容数组长度。 3、 LinkedList 实现 List 接口,能对它进行队列操作。 Link...原创 2018-04-06 17:00:50 · 256 阅读 · 0 评论 -
深入理解系列之JAVA数据结构(3)——HashMap
1、 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable大致相同) 2、此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 3、 值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collectio...原创 2018-04-06 23:46:01 · 529 阅读 · 0 评论 -
深入理解系列之JAVA数据结构(4)——Hashtable
1、Hashtable和HashMap,从存储结构和实现来讲基本上都是相同的, Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类,但二者都实现了Map接口。 2、它和HashMap的最大的不同是它是线程安全的,另外它不允许key和value为null。 3、Hashtable是个过时的集合类,不建议在新代码中使用,不需要线程安全...原创 2018-04-07 13:00:23 · 356 阅读 · 0 评论 -
深入理解系列之JAVA数据结构(5)——String
String类型是Java编程中最为常见的数据结构(没有之一),与之相关联的还有StringBuilder和StringBuffer。其中String类型是不可变的;后者均是可变的字符串,但是StringBuilder是线程不安全的,StringBuffer线程安全;所以三者的效率排名为:StringBuilder>String>StringBuffer。另外,为了优化字符串的使...原创 2018-04-17 21:04:21 · 5698 阅读 · 5 评论 -
深入理解系列之JAVA反射机制
反射是指,程序运行期间,对于任意一个类,都能够知道这个类的所有属性和方法,且都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。问题一、反射机制的理论基础是什么?如前言所属,基本每个java程序员都知道反射的概念和作用,但是为什么java可以支持反射?为什么C/C++就没有呢?其实,java之所以能够实现反射其根本的理论基...原创 2018-04-17 09:54:00 · 483 阅读 · 0 评论 -
深入理解系列之JAVA动态代理机制
代理的作用,就是生成代理对象使得真实对象的某些方法执行被代理对象拦截,从而在真实方法执行前、执行后添加额外的“动作”!动态代理则是指不需要修改原来的对象方法,在程序运行的过程中动态的生成代理对象,从而动态的生成这些“额外的”动作,主要从两个方面来深入理解动态代理机制!问题一、动态代理的基本实现是什么?动态代理本质上还是java中的“代理设计模式”,所以启UML图如下所示 ...原创 2018-04-15 22:12:28 · 707 阅读 · 0 评论 -
深入理解系列之JAVA泛型机制
泛型是指在声明(类,方法,属性)的时候采用一个“标志符”来代替,而只有在调用的时候才传入真正的类型,我们最常见的泛型实例就是前面讲述的集合类,集合类在声明的时候都是通过泛型方式来声明的,只有在调用(实例化)时我们才确定传入的是Integer亦或是String等等!注:本文着重叙述泛型实现的原理,而忽略一些泛型应用时的注意事项,详细应用时的注意事项请参看其他博文问题一、为什么要采...原创 2018-04-20 11:47:26 · 445 阅读 · 0 评论 -
深入理解系列之JAVA多态机制(重载/重写)
多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态(来自百度百科)。所以,按照这个意思其实多态的“主题”是对象,但是实际在我们运用中我们常把“重载”和“重写”称之为“多态”其实这是不严谨的!重载和重写只是多态的存在带来的两种应用表现形式,也就是说正是因为重载和重写我们才看到了多态的“威力”。所以,当我们谈论多态实现机制的时候其实就...原创 2018-04-25 16:21:49 · 546 阅读 · 0 评论 -
深入理解系列之JAVA多线程(1)——概念与原理机制
现代操作系统都支持多任务的处理,所以为了提高JAVA程序运行的效率,JAVA在虚拟机层面采用了多线程机制,即“同时”运行多个逻辑代码!问题一、线程和进程的区别是什么?在操作系统层面,我们听到最多的就是“进程”的概念,即在日常操作系统使用中,我们认为每个软件就是一个进程,线程被称作“轻量级的进程“,我们通常用以下三句话(或表达同类意思的语句)来阐述他们之间的关系:1)、进程是...原创 2018-04-30 17:44:19 · 528 阅读 · 0 评论 -
深入理解系列之JAVA多线程(2)——synchronized同步原理
多线程中为了解决线程安全问题,一个重要的手段就是同步!所谓同步其实就是使得原本各个线程交叉执行(异步),变成排队执行(同步)。同步策略使得不同线程操作共享数据遵循“先来后到“,从而避免某个线程没有处理完数据就被另一线程抢占操作出现数据被覆盖或者脏读的情况。其中同步最常用的手段就是synchronized关键字!1、synchronized有哪些主要用法?有什么区别?synchr...原创 2018-05-09 11:34:24 · 504 阅读 · 0 评论 -
深入理解系列之JAVA多线程(3)——volatile原理
我们在上一篇文章讲到,synchronized关键字保证了代码同步性,同时有利于实现程序的安全性,但是同时也带来性能下降的弊端!所以,如果不是必要的我们应该避免使用synchronized关键字,在一些情况下可以采用其他方式作为替代!其中之一就是volatile。1、什么是缓存一致性?关于缓存一致性,我在第一章就简要的介绍过。缓存一致性的出现是因为计算机内存模型导致的:为了解决...原创 2018-05-09 18:49:04 · 437 阅读 · 2 评论 -
深入理解系列之JDK8下JVM虚拟机(1)——JVM内存组成
今天开始谈论一些JVM虚拟机的知识。其实在前面叙述中多多少少已经附带提起了JVM相关的知识,如类加载、多线程相关的底层机制、方法调用、泛型的机制等等,但是实际上JVM知识会有很多,今天就把比较重要的其他一些知识再拿出来理一理。首先要讲的也是非常基础的就是JVM的内存组成: JVM的内存被划分5个区域: 堆区、方法区——这两个区域的数据共享 虚拟机栈、本地方法栈、程序计数器——...原创 2018-05-14 10:22:09 · 18320 阅读 · 5 评论