2.1-Java之基本知识
文章平均质量分 94
fei20121106
这个作者很懒,什么都没留下…
展开
-
(2.1.8.9)理解JAVA数组
参考资料:1.《java jdk5.0 学习笔记》良葛格 第五章数组2.如何理解数组的length?http://blog.csdn.net/treeroot/archive/2005/01/22/264001.aspx3.关于java数组的深度思考http://dev.csdn.net/author/DeepNightTwo/afb7e220bdf5423ba656f84b6原创 2015-09-09 12:44:35 · 522 阅读 · 0 评论 -
(2.1.8.7)Java中HashMap遍历的两种方式
转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.原创 2015-09-22 21:15:46 · 568 阅读 · 0 评论 -
(2.1.8.3)HashMap源码分析
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑JDK 1.8 以前哈希表通过数组+链表的方式实现重写equals方法需同时重写hashCode方法JDK 1.8 以后哈希表的 添加、删除、查找、扩容方法...原创 2015-08-06 17:14:42 · 738 阅读 · 0 评论 -
(2.1.4.1)刨根问底HTTP与WebSocket的关系
本文整理自简书作者“TheAlchemist”的技术文章,内容有修订。感谢原作者,原文链接在文末。 1、前言 本文的上篇《WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)》介绍了HTTP1.1协议的基本内容,这篇文章将继续分析WebSocket协议,然后对这两个进行简单的比较。 2、系列文章 本文是系列文章中的第5篇,本系列文章的大纲如下: 《WebSocket详解(一):初步认识WebSocket技术》...转载 2020-08-03 22:45:16 · 221 阅读 · 0 评论 -
(2.1.8.4)图解LinkedHashMap原理
1 前言LinkedHashMap继承于HashMap,如果对HashMap原理还不清楚的同学,请先看上一篇:图解HashMap原理2 LinkedHashMap使用与实现先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟:LinkedHashMap结构.png2.1 应用场景HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map<St..转载 2020-08-03 22:29:50 · 185 阅读 · 0 评论 -
(2.1.8.2)图解HashMap原理(1.8之前)
1. 前言本文的源码是基于JDK1.7,JDK1.8中HashMap的实现,引入了红黑树,在后面的文章会写到。后面还有一篇LinkedHashMap的解析:图解LinkedHashMap原理。2. 使用与实现2.1 基本使用HashMap很方便地为我们提供了key-value的形式存取数据,使用put方法存数据,get方法取数据。 Map<String, String> hashMap = new HashMap<String, String>().转载 2020-08-03 22:28:44 · 158 阅读 · 0 评论 -
(2.1.1.6)JVM之对象分配:栈上分配 & TLAB分配
文章目录一、栈上分配1.1 技术基础: 逃逸分析1.2 标量替换1.3 栈上分配示例1.4 JVM参数解析二、TLAB 分配2.1 分配策略2.2 JVM指令参考文献Java对象实例和数组元素都是在堆上分配内存的吗?答:不一定。满足特定条件时,它们可以在(虚拟机)栈上分配内存这和我们平时的理解可能有些不同。虚拟机栈一般是用来存储基本数据类型、引用和返回地址的,怎么可以存储实例数据了呢?这是因为Java JIT(just-in-time)编译器进行的两项优化,分别称作逃逸分析(escape ana原创 2020-07-26 23:05:24 · 247 阅读 · 0 评论 -
(2.1.8.6)ArrayList原理分析(重点在于扩容)
51 概述52 涉及过程521 规划质量管理522 实施质量保证523 控制质量53 输入输出54 工具技术541 规划质量管理 8542 实施质量保证 3543 控制质量 4 过程 输入 工技 输出 规划质量管理 项目管理计划、干系人登记册、风险登记册、需求文件、事业环境因素、组织过程资产 成本效益分析、质量成本、七种基本质量工具、标杆对照、实验设计、统原创 2020-07-26 22:09:11 · 130 阅读 · 0 评论 -
(2.1.8.1)Hashtable源码分析
一、参考文章 原文地址:Tasks and Back Stack 本地地址:Java代码.\android-sdk-windows\docs\guide\topics\fundamentals\tasks-and-back-stack.html二、术语解释 1.task:一系列原创 2020-05-24 01:02:37 · 782 阅读 · 0 评论 -
(2.1.27.2)Java并发编程:JAVA的内存模型
文章目录一、Java的内存模型二、工作内存和主内存的交互2.1 八种原子操作规则三、Java内存模型的需要解决的问题3.1 工作内存的可见性问题3.2 重排序在多线程中引发的问题四、Happens-Before 原则4.1 程序次序规则4.2 锁定规则4.3 volatlie变量规则4.4 线程启动规则4.5 线程终止规则4.6 线程中断规则4.7 对象终结规则4.8 传递性规则Java定义...原创 2018-10-19 18:01:50 · 304 阅读 · 0 评论 -
(2.1.27.1)Java并发编程:并发
文章目录一、 并发的起源二、物理计算机的内存模型三、缓存结构在多线程模型中引发的缓存不一致问题3.1 通过总线加LOCK#锁的方式3.2 通过缓存一致性协议的方式四、CPU(处理器)的乱序执行(out-of-orderexecution)4.1 数据依赖4.2 重排序规则(as-if-serial)在物理计算机中CPU为了提高处理速度,添加了高速缓存与CPU乱序执行一、 并发的起源为...原创 2018-10-19 17:56:46 · 251 阅读 · 0 评论 -
(2.1.27)Java并发编程
参考文献Java并发编程Java并发编程之Java内存模型Java并发编程之Java CAS操作Java并发编程之VolatileJava并发编程之synchronizedJava并发编程之原子类Java中Volatile关键字详解Java显式锁学习总结之六:Condition源码分析java并发编程之Condition深入研究 Java Synchronize 和 L...原创 2018-10-16 18:58:00 · 853 阅读 · 0 评论 -
(2.1.1.2) JVM内容:Java ClassLoader详解
ClassLoader用来加载class文件的。 系统内置的ClassLoader通过双亲委托来加载指定路径下的class和资源。 可以自定义ClassLoader一般覆盖findClass()方法。 ContextClassLoader与线程相关,可以获取和设置,可以绕过双亲委托的机制 一、Class文件的认识二、java环境变量的认识2.1 环境变量...原创 2018-06-14 20:03:05 · 446 阅读 · 0 评论 -
(2.1.19.1) javadoc注释规范
javadoc做注释 一. Java 文档// 注释一行 /* ...... */ 注释若干行 /** ...... */ 注释若干行,并写入 javadoc 文档通常这种注释的多行写法如下:/** * ......... * ......... */javadoc -d 文档存放目录 -author -version 源文件名.java 这条命令编译一转载 2015-08-22 22:13:45 · 601 阅读 · 0 评论 -
(2.1.2.9)Future接口和FutureTask类【FutureTask实现了Runnable和Future接口】
API:Java代码publicinterfaceFuture{/***Attemptstocancelexecutionofthistask.Thisattemptwill*failifthetaskhasalreadycompleted,hasalre转载 2016-12-15 15:57:32 · 517 阅读 · 0 评论 -
(2.1.2.8)Java并发编程:线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池转载 2015-09-18 11:48:16 · 665 阅读 · 0 评论 -
(2.1.22)JDBC为什么要使用PreparedStatement而不是Statement
PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时PreparedStatement还转载 2015-08-23 21:31:10 · 571 阅读 · 0 评论 -
(2.1.19.3)深入理解Java:注解(Annotation)–编译时注解的处理
一注解二注解处理器三虚处理器AbstractProcessor1 处理器对全局代码的扫描处理流程11 javaxannotationprocessingProcessor中的书写顺序决定注册处理器的执行顺序12 AbstractProcessor中processor方法的返回值决定是否要终结当前轮的处理13 没有输出文件跟输入文件时扫描结束四 语言模型包的使用1 Mirror2 E原创 2017-06-26 17:53:33 · 4468 阅读 · 2 评论 -
(2.1.19.2)深入理解Java:注解(Annotation)--RUNTIME运行时注解的处理
深入理解Java:注解(Annotation)--注解处理器 如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。注解处理器类库(java.lang.reflect.AnnotatedElement): Jav转载 2016-05-09 15:55:47 · 1018 阅读 · 0 评论 -
(2.1.19)注释与注解
一、注释首先来说注释有三种:// /* */ /** */ 前两种编译器直接跳过,从来不阅读,第三种编译器是可以看懂的,当你使用javadoc这样的命令时会用到,用来生成api时用的。二、注解Annotations是一种元数据,其作用在于提供程序本身以外的一些数据信息,也就是说Annotation他不会属于程序代码本身,不参与逻辑运算,故而不会对原程序代码的操作产原创 2017-06-26 10:49:13 · 1347 阅读 · 1 评论 -
(2.1.2.8)CountDownLatch之异步转同步
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedException 构造方法参数指定转载 2017-01-20 09:29:29 · 403 阅读 · 0 评论 -
(2.1.27.3)Java并发编程:CAS操作
文章目录一、物理计算机的缓存锁1.1 缓存锁与CAS(Compare-and-Swap)的关系二、Java世界的CAS操作(Compare-and-Swap)三、CAS在Java中的实现参考文献在前文中我们描述过,物理机计算机的数据缓存不一致的时候,我们一般采用两种方式来处理。一,通过总线加锁的形式,二,通过缓存一致性协议来操作。体现缓存一致性的正是CAS(Compare-and-Swap)操...原创 2018-10-19 18:05:50 · 248 阅读 · 0 评论 -
(2.1.27.4)Java并发编程:原子类Atomic
在Java中的并发包中了提供了以下几种类型的原子类来来解决线程安全的问题。分为基本数据类型原子类数组类型原子类引用类型原子类字段类型原子类。因为其内部原理都差不多一致。这里会对每种类型的原子类抽一个来介绍。一、原子类的使用方式public class AtomicTest{ //public static volatile int race=0;//1 public sta...原创 2018-10-22 09:05:59 · 271 阅读 · 0 评论 -
(2.1.12)java之反射机制
一、java的反射机制浅谈最近研究java研究得很给力,主要以看博文为学习方式。以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出。受到各位指教之处,如若让小生好好感动,说不定会请各位吃饭哦! 1.何谓反射机制 根据网文,java中的反射机制可以如此定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知转载 2015-04-07 12:19:52 · 603 阅读 · 0 评论 -
(2.1.2.4)Java多线程(四)、线程池
文章目录一、new Thread的弊端二、 线程池的优势三、ThreadPoolExecutor3.1 ThreadPoolExecutor方法3.2 线程池的种类3.2.1 FixedThreadPool 可重用固定线程数3.2.2 CachedThreadPool 无限线程数3.1.3 SingleThreadExecutor 单线程化3.2.4 ScheduledThreadPool 定时周...原创 2018-10-27 18:24:17 · 243 阅读 · 0 评论 -
(2.1.8.5)Java并发编程:synchronized之ConcurrentHashMap
文章目录一、属性二、主要构造函数三、主要方法3.1 putVal3.1.1 initTable3.1.2 tabAt3.1.3 casTabAt3.1.4 helpTransfer3.1.5 addCountConcurrentHashMap 和 HashMap 的底层实现都是 数组+链表或红黑树 构成的。HashMap 的源码分析见:Java集合框架——HashMap源码分析Concurr...原创 2018-10-23 09:05:47 · 220 阅读 · 0 评论 -
(2.1.27.15)Java并发编程:Lock之CyclicBarrier公共屏障
文章目录一、使用示例二、源码分析2.1 构造方法及成员变量2.2 await2.3 reset三、CountDownLatch 和 CyclicBarrierCyclicBarrier 是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很...原创 2018-10-23 09:04:13 · 391 阅读 · 0 评论 -
(2.1.27.14)Java并发编程:Lock之Condition等待通知
文章目录一、等待通知1.1 自旋实现的等待通知1.2 Object提供的等待通知1.3 显示锁提供的等待通知二、应用举例三、源码分析3.1 概述3.2 整体结构3.3 等待await3.4 通知signal四、Condition等待通知的本质五、总结讲了这么基于AQS和Lock实现的同步锁机制,我们可以发现它们主要是实现了同步并发的控制lock时获取锁,失败则进入队列等待。成功则自动向下执行...原创 2018-10-23 09:02:25 · 419 阅读 · 0 评论 -
(2.1.27.12)Java并发编程:Lock之Semaphore共享式不可重入锁
文章目录一、使用示例二、总体结构三、acquire()和release()大致流程3.1 AQS的实现3.1.1 非公平锁3.1.2 公平锁一、使用二、总体结构2.1 AQS的实现Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞一、使用示例 // 创建一个计数阈值为5的信号量对象 ...原创 2018-10-22 09:47:47 · 872 阅读 · 2 评论 -
(2.1.27.11)Java并发编程:Lock之ReentrantReadWriteLock 读写分离独享式重入锁
文章目录一、使用示例二、源码分析2.1 ReentrantReadWriteLock整体结构2.2 读写锁2.3 AQS的实现2.3.1 state的改变2.3.2 独享式写锁对应的AQS2.3.2.1 独享式写锁的获取2.3.2.2 独享式写锁的释放2.3.3 共享式读锁对应的AQS2.3.3.1 共享式读锁的获取2.3.3.2 共享式读锁的释放三、补充内容我们在介绍AbstractQueue...原创 2018-10-22 09:46:35 · 185 阅读 · 1 评论 -
(2.1.27.10)Java并发编程:Lock之ReentrantLock独享式重入锁
文章目录一、使用二、总体结构三、lock()与unlock()大致流程3.1 AQS的实现3.1.1 非公平锁3.1.2 公平锁四、tryLock()的实现ReentrantLock,即重入锁,是一个和synchronized关键字等价的,支持线程重入的互斥锁。只是在synchronized已有功能基础上添加了一些扩展功能。除了支持可中断获取锁、超时获取锁、非阻塞获取锁这些显示锁的常见功能外,...原创 2018-10-22 09:45:28 · 212 阅读 · 0 评论 -
(2.1.27.9)Java并发编程:Lock之AQS
文章目录一、AQS方法简介1.1 钩子方法1.2 模板方法1.2.1 独占式获取与释放同步状态1.2.2 共享式获取与释放同步状态1.2.3 其他1.3 借助AQS实现的独占锁示例二、AQS具体实现及内部原理2.1 AQS中FIFO队列2.1.1 Node节点结构2.1.2 AQS添加尾节点2.1.3 AQS添加头节点2.2 独占式同步状态获取与释放2.2.1 独占式同步状态获取acquire2....原创 2018-10-22 09:43:45 · 301 阅读 · 0 评论 -
(2.1.27.8)Java并发编程:Lock显示锁
文章目录一、concurrent包的设计二、Lock接口(以及相关实现类)UML类图三、Lock接口一、concurrent包的设计要了解Java为我们提供的基于Lock接口(以及相关实现类)实现的锁功能,我们首先要看一下整个concurrent包下的设计。具体设计如下所示:【concurrent包的设计】在上图中,我们大致可以看出courrent包下的整体结构。整个包大致分为了三层。...原创 2018-10-22 09:40:16 · 245 阅读 · 0 评论 -
(2.1.27.7)Java并发编程:Object.wait/notify
文章目录一、示例二、为什么要使用synchronized?三、代码执行过程分析3.1 Object.wait方法实现3.2 Object.notify()/notifyAll方法实现Java Object对象中的wait,notify,notifyAll是定义在Object类的实例方法,用于控制线程状态。三个方法都必须在synchronized 同步关键字所限定的作用域中调用,否则会报错jav...原创 2018-10-22 09:35:28 · 268 阅读 · 0 评论 -
(2.1.27.6)Java并发编程:synchronized
文章目录一、synchronized的三种使用方式1.1 证明当前普通的同步方法,锁式当前实例对象1.2 证明对于静态同步方法,锁式当前类的Class对象二、Synchronized结合Java Object对象中的wait,notify,notifyAll三、Synchronized底层实现的前备知识3.1 Java对象的内存布局与对象头3.1.1 “Mark Word“数据结构3.2 sync...原创 2018-10-22 09:31:54 · 533 阅读 · 0 评论 -
(2.1.27.5)Java并发编程:Volatile
Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。当一个变量定义为 volati...原创 2018-10-22 09:10:00 · 255 阅读 · 0 评论 -
(2.1.2.7)ThreadPoolExecutor的应用和实现分析(中)—— 任务处理相关源码分析
前面一篇文章从Executors中的工厂方法入手,已经对ThreadPoolExecutor的构造和使用做了一些整理。而这篇文章,我们将接着前面的介绍,从源码实现上对ThreadPoolExecutor在任务的提交、执行,线程重用和线程数维护等方面做下分析。0. ThreadPoolExecutor类的声明属性变量分析1public转载 2015-09-18 11:24:15 · 808 阅读 · 0 评论 -
(2.1.2.6)ThreadPoolExecutor的应用和实现分析(上)—— 应用
前一篇文章写道了Executors类,其中提供了几个构造Executor的工厂方法。但在实现上,这些执行器最终都是采用了java.util.concurrent.ThreadPoolExecutor类的对象。接下来的文章我们就来了解和分析一下ThreadPoolExecutor这个类。由于篇幅比较长,这一篇主要从应用的角度,对ThreadPoolExecutor的使用做简单整理,对于任务提交和生命转载 2015-09-18 11:18:45 · 582 阅读 · 0 评论 -
(2.1.13)java的接口的使用和回调函数
【1】接口实现 【2】接口方法实现package com.android.yunshi.dialog;import com.android.yunshi.util.WSError;import android.app.Activity;import android.app.ProgressDialog;import android.content.DialogInterface;impor原创 2015-04-07 12:56:18 · 639 阅读 · 0 评论 -
(2.1.1.1) JVM内容:Class及其生命周期
目录1.1 示例二、Class 的生命周期2.1 动态加载2.2 链接(Linking)2.3 初始化三、静态块3.1 实验1:初始化与构造函数的差异3.2 需要注意newInstance()方法3.3 类字面常量3.4 编译时常量3.5 static块的本质3.6 初始化顺序四、RTTI4.1 传统RTTI4.2 反射参考文献一...转载 2015-03-19 08:49:20 · 864 阅读 · 0 评论