自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

转载 ThreadLocal源码解读

首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来创建的...

2019-08-19 22:51:11 181

原创 Linux2.2

一、Linux软件包分类及命令Linux软件包分为源码安装包和RPM安装包,其中Linux系统的原始服务基本都是RPM包安装的,所以RPM包又被称为系统默认包。源码包:优点是在安装时开发人员可以查看服务的源代码,更有甚者可以修改源代码,同时源码包在安装过程中可以更灵活,比如指定安装目录和选择服务功能等,同时由于安装时要编译所以源码包安装的服务更贴切与本机硬件体系结构。但源码包也是因为安装时要编...

2019-05-12 21:51:19 281

原创 Linux1.1

一、Linux历史概述Linux的起源从UNIX,UNIX是Linux的父类,UNIX由贝尔实验室的工程师肯汤姆森开发。而Linux大致可以分为Debian下的Ubuntun、RedHat下的Centos二、磁盘分区和Linux磁盘分区为什么要分区:磁盘存放大量数据的地方,分区是为了将数据有序和小块化管理,提高磁盘的读写效率。而由于磁盘结构,对于一块磁盘最多只能分四主分区,其中可以用一个主分...

2019-05-09 22:07:05 237

原创 分布式版本控制工具Git

一、版本控制工具是什么说到版本控制工具,首先明确它是什么。版本控制工具简单说:“就是记录了项目在开发过程中每次迭代或者更新后的每个版本信息,有了这些历史信息,我们就可以回退到任一时刻该项目所在状态”。官方介绍如下:什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在本书所展示的例子中,我们对保存着软件源代码的文件作版本控...

2019-05-06 21:07:44 198

原创 Spring——Aop

一、Aop概述Aop(Aspect Oriented Program),面向切面编程,一种模块化程序设计,可以把程序中关注点中的横切关注点抽取出来以切面的形式维护。同时提供“编织”的形式来完成对切入点的增强,这种增强不像以子函数模块化一样,在关注点中要显示的调用子函数。可见,Aop技术,极大的减少了程序间的耦合性,提高了代码的可维护性和可扩展性。说了Aop的定义和优势,接着说下Aop的术语,“...

2019-03-21 23:36:14 120

原创 Spring——IoC

一、精准理解Ioc用过Spring的程序员,或多或少都知道Spring中Ioc(Inversion of control)的概念,今天我就我在学习Spring Ioc源码分析中对Ioc的理解Ioc(Inversion of control)控制反转,对于这个它的代号,个人觉得只能代表它功能的一方面,即管理对象的创建,不能很明显的表达出它还能管理对象间依赖关系。所以个人更爱好将“控制反转”+“依...

2019-03-20 09:18:30 312

原创 布隆过滤器

布隆过滤器概述简单来说,布隆过滤是判断一个值(key)是否在一个集合中的一种特别的数据结构,但和一般的集合它不同之处在于它不存放实际的值(key)而是以K个bit位这样的标记来替代实际的值(k),这样有什么好处呢,其实就是省了很大的内存空间。优点:在大数据量的时候可以省内存空间缺点:有一定的误报比率,就是不在集合中的值可能也会被当做在集合中,而误报比率和具体的申请的布隆过滤器的内存空间大小以...

2019-03-17 22:38:39 1474

原创 MySQL的锁

数据库的锁概述数据库的锁,是保证数据库在并发的情况下数据库中的记录能被多线程有序的使用,即要保证数据的一致性。而对于锁对于不同的存储引擎而言是有不同的实现方式的。而总体来说MySQL支持三种类型的锁:表锁、行锁、页锁。1)表锁:表锁时MYSQL存储引擎中锁粒度最大的锁机制,同时也是加锁和释放锁开销最小、不产生死锁的机制。但同时因为锁的粒度太大对并发度很不友好。实现的存储引擎主要是MyISAM、...

2019-03-10 16:09:25 145

原创 MySQL——SQL查询优化

SQL优化总说对于后台开发而言,涉及的知识面广,且如果要想进大厂的话还要求钻的深,而对于数据库,事务、存储引擎、索引、SQL优化等都是必备的技能,所以本篇博客就开启后序述说MySQL数据库的这些知识点的篇章,本篇将主要说SQL语句的优化、和解释explain、以及涉及的fileSort的两种算法的解析等。对于SQL的优化总体思路如下:1、观察,通常是让SQL跑一段时间2、开启慢查询日志,设...

2019-03-09 16:39:05 519

原创 Maven

标题Maven介绍Maven是Apache下的开源项目,是项目构建工、依赖(jar包)管理的工具标题Maven优势Maven开发的项目,由于不用在项目里导入jar包所以maven开发的项目所占的空间比一般开发项目所占空间小。Maven优势实现技术:Maven优势实现的核心是依赖管理和项目构建依赖管理:在本地创建统一管理jar包的maven仓库,在项目中需要哪个jar包时就在配置文件中给...

2019-03-07 16:30:34 152

原创 并发容器——CopyOnWriteArrayList

概述对于JAVA并发并发编程我们常需要了解并发底层原理、同步组件、同步集合、线程池还有就是并发容器了,对于并发容器今天讲解下CopyOnWriteArrayList这个替代List的并发集合CopyOnWriteArrayList类重要成员结构图如下:其中lock成员变量便是为什么CopyOnWriteArrayList这个集合在多线程下任然能正确的运行的关键;array这个成员变量就是C...

2019-03-07 09:43:42 171

原创 基础算法——排序

概述学习过数据结构这本书的同学都知道,数据结构这本书前面一大部分都在讲述基础的数据结构和基础定义,而在最后面的几章才会讲解排序相关的算法,而对于排序,是比较重要的。无论是在笔试还是在面试的时候都可能会遇到,特别是在面对数组问题的时候。所以今天借此机会,来总结下常见的几种算法:冒泡、选择、插入、归并、快排、堆排(打算放到树的时候讲解),而以下的内容将从三个方面对这些算法讲解:基本思想、代码实现(可...

2019-03-05 23:15:21 146

原创 归并排序和案例解析

概述排序是数据结构中重要的一个问题领域也是现实生活和面试时比较容易遇到和考到的一个知识点,所以本篇博客就说下归并排序(其他的排序后面也会出博客讲解)总体介绍:归并排序是一个递归加分治的思想完成的,对于数组问题,总的来说就是把左子数组排好序再把右子数组排好序,最后在对左右有序数组进行归并(即一起排序的过程)。图解如下代码分析public class guibinSort { pu...

2019-03-02 14:12:53 589 1

原创 二叉排序树

二叉树和二叉排序树的定义学到数据结构,不说一说树那就是在扯淡,所以为了不扯淡,今天就来说说树里面比较特殊的两种树,二叉树和二叉排序树(B树和B+树以及红黑树之后也会分析)。个人觉得说到任何算法,或者要想透彻的理解一种算法首先要理解和它相关的数据结构,因为每一种算法都是依据数据结构特有的属性来设计的,从而达到“巧夺天工”的效果。因此在说二叉排序树的构成、插入、查找(获取)、删除(好好理解)之前先来...

2019-03-01 16:15:13 3803

原创 线程状态改变方法解析

概述都知道,在Object对象里有三个关于线程的方法,wait(底层实现后它为什么会释放锁呢)、notify(底层实现)、notifyall(底层实现后notify的区别)再者对象锁的获取锁和释放锁与JDK1.5之后的锁的显示获取和释放又有什么区别呢?已经线程的sleep(time)函数的理解和sleep(0)的意思,下面这篇博客将解析这些疑问。锁的获取与释放锁解析对象锁:即对于同步代码块或...

2019-02-27 13:39:08 324 1

原创 数据结构——图的存储和遍历算法

概述图是数据构中数据元素间具有多对多的的一种逻辑结构,在现实生活中用处十分广阔,实用性很高。而本篇数据结构的博客将介绍图的存储结构:邻接矩阵、邻接链表、十字链表(不讲述)、邻接多重链表(不讲述)。而图的遍历主要介绍DFS、BFS分别在邻接矩阵和邻接链表上的结构展开,后续博客会出关于图的其他算法等图的存储结构和遍历算法邻接矩阵:存储定点的数组、表示边的二维数组,以下结构的定义按C语言组织存放...

2019-02-26 22:26:52 1455

原创 JAVA集合源码分析——HashSet

HashSet概述1)HashSet属于单列集合体系2)非线程安全3)运行存放NULL4)底层的扩容都是按HashMap原理来的HashSet源码分析public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializ...

2019-02-25 23:16:36 151

原创 数据结构基础知识

引入作为科班毕业的计算机专业的学生,对于数据结构这么课程可谓是又恨又爱,恨是它很难,爱是它很重要(无论是考研还是找工作)。所以今天就是我数据结构这块知识的开篇。开篇博客我将简单介绍数据结构的基础概念、逻辑结构和物理结构的关系基础知识数据:数据是对世界上客观存在的物体的数字化表示,数字化体现在它能被计算机处理数据元素:数据元素是对世界上某一类客观存在的物体的总称,可以理解为数据由许多不同的数...

2019-02-24 23:33:30 422

原创 JVM——类加载器解析

字节码文件的加载全过程都知道JAVA会被编译器编译为字节码文件而字节码文件会被类加载器加载进虚拟机中变成其运行时数据,即变成JVM的JAVA类型才能执行,那么这个字节码文件的加载全过程是怎么样的?加载全过程:1)加载:把字节码读取入虚拟机内2)验证:由于JVM是和字节码文件绑定而不是某一门编程语言绑定所以它会对加载的字节码文件进行验证,总的来说会有如下的几部:文件格式验证(即校验这个字节码...

2019-02-22 22:02:04 165

原创 理解RESTful架构

RESTful是什么RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。对于这个概念比较抽象不具体,实际上对于RESTful我更愿意把它称为web开发中表现层的设计模式或者一直设计风格。而要理解RESTful则要看RESTful的英文名(Representational State Transfer),中文的翻译是“表现...

2019-02-15 17:06:42 217

原创 开源框架基础——Spring

spring概述spring是JavaEE/SE的轻量级组件,总的来说它解决了IBM提供的EJB重量级组件的问题。spring提供了表现层、持久层、切面编程(AOP)、控制反转(Ioc)、spring的测试这五个大板块。利用spring框架我们可以很好的解决JavaEE开发问题。反转控制(Ioc)一、引入通过原始的Java的JDBC数据库编程中注册驱动以驱动对象注册时,会违反编程的一个原则...

2019-02-14 23:33:48 225

原创 JVM——后期编译和代码优化

引入该博文是我JVM——程序编译优化之早期编译优化的一篇后续博文,该博文主要介绍后期编译(JIT)也称为即时编译的细节和它的优化体现。在介绍之前我们需要知道在没有后期编译器时JAVA程序全都是靠着解释器去解释生成的class文件执行这一知识点解释器和后期编译器既然JAVA程序靠的是解释器去执行那么解释器和后期编译器的关系或者它们的运行关系是如何的。其实对于后期编译器而言JAVA虚拟机没有规定...

2019-02-10 16:43:38 206

原创 JVM——程序编译优化之早期编译优化

引入对于用高级编程语言编写的源程序,做为一名编程人员都知道,源程序需要编译为对应的机器码才能执行。那么本篇文章将介绍JAVA的JVM对于JAVA程序的编译处理。JAVA语言的编译分为三种:早期编译、运行时编译(JIT)、静态提前编译(AOT)。早期编译:这种编译是大多数程序员都熟知的编译过程,即是把JAVA源程序编译为CLASS文件的过程。运行时编译(JIT):是将部分CLASS文件的内容编...

2019-02-10 15:54:00 253 1

原创 JVM——自动内存管理

引入JAVA不同于C或者C++编程语言,其一是编程的思想,JAVA面向对象,C或者C++面向过程;其二就是JAVA是一门自动管理内存的语言,而C或者C++则需要编程人员自动管理。而JAVA的自动内存管理实现则是要依靠JVM的内存管理机制JVM运行时数据区在说明JVM的自动内存管理的前,需要对JVM的内存划分有清楚的模型认识,才能更好的立即JVM的自动内存管理的实现。JVM的内存划分为如下几部...

2019-02-09 17:46:32 264 1

翻译 CAS原理

CAS概述CAS(Compare-and-Swap),一种无锁编程思想或者乐观锁的一种具体实现,即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,...

2019-02-01 15:10:33 398

原创 述说JAVA内存模型

JAVA内存模型概念说到并发问题中的“可见性”就不得不要提及JAVA内存模型这一抽象概念;简单说,JAVA内存模型就是JAVA对编译器和处理器在对程序进行优化的时候做出的一系列的规范(禁止),已达到多线程时程序执行的安全或者正确性的效果。所以此处我们可以把JAVA内存模型这一抽象的概念理解为“规程”JAVA内存模型的通俗表现既然我们把JAVA内存模型定义为了一系列的“规程”,那么这些“规程”...

2019-01-30 15:42:02 153

原创 JAVA并发机制底层实现原理

synchronized实现原理1)synchronized简介synchronized用于JAVA多线程编程同步用到重量级锁(JDK1.6之前),可以保证同步的代码被多线程有序(特指线程级别,而非程序执行顺序是按源程序的顺序)和原子性(一个线程执行完同步代码后才轮另一个线程)的执行2)synchronized获取与释放锁底层原理1、同步方法对于同步方法而言,在源程序编译为汇编之后会在方...

2019-01-29 15:17:05 232 1

原创 JAVA集合源码分析——HashMap

HashMap概述1)HashMap是基于哈希表实现Map接口的JAVA集合类2)HashMap的两个重要变量影响其是否要扩增容量,loadFactory(加载因子),初始化容量(initCapacity)HashMap继承层次和实现接口HashMap源码分析总结...

2019-01-16 14:06:24 207

翻译 JAVA集合源码分析——Vector

一、Vector概述1)Vector是一个位于java.util包中线程安全的集合2)底层数据结构是类似ArrayList一样的可变的数组3)Vector的数组变化和minCapacity和CapacityIncrement这两个变量有关4)Vector会发生fail-fast(快速失败)二、Vector继承层次和实现接口1)继承层次和实现接口说明:Vector继承的层次和实现的接口...

2019-01-10 23:13:25 256

翻译 JAVA集合源码分析——LinkedList

一、LinkedList概述二、LinkedList特性三、LinkedList源码 1、LinkedList继承结构和实现接口 2、LinkedList类属性 3、LinkedList构造方法 4、关键数据结构和方法 5、LinkedList典型方法解析四、总结

2019-01-08 13:17:10 231

翻译 JAVA集合源码学习——ArrayList

JAVA集合源码学习——ArrayListArrayList概述1)ArrayList是基于长度可动态增长的数组实现List接口的java集合类2)ArrayList类内部维护者一个动态可再分配的Object[]数组,每一个类对象都有一个capacity属性,表示所封装的Object[]对象数组的长度,但往ArrayList添加元素时,该属性值会自动增加,体现了动态的特点3)如果要往Arr...

2019-01-07 13:28:47 194

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除