自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring循环依赖

循环依赖 首先要清楚Spring中bean的注入方式有:构造方法注入、Setter注入、静态工厂注入,常用的主要是前两种 循环依赖指的是BeanA依赖于BeanB,BeanB依赖于BeanC,BeanC有依赖于BeanA,从而构成了一个环的情景。对应于bean的注入方式,也就有构造方法注入循环依赖,Setter注入循环依赖,静态工厂的不考虑。 对于bean的作用域通常又有单例和多例区分...

2019-12-22 16:35:26 337

原创 Redis高可用

刚参加工作,负责的项目责任田就是系统容灾配置与升级,也算是为我接触高可用打下了一些基础。我们的项目主要用于管理通信设备,某些局点由于网络以及电路不稳定,单节点提供服务很难满足客户需求,因此提出了双节点的容灾解决方案。当然在任意时刻,也只有一个节点对外提供服务,而另一个节点作为备节点,要能够自动同步主节点数据库数据与配置数据,而且要在主节点宕机时,能够通过故障转移,将备节点升主,继续对外提供服务,从...

2019-08-21 22:58:47 270

原创 线程池

通过一个简单的例子说明线程池的基本原理与ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue的差异。 package com.larry.learning.threadpool; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.B...

2019-08-11 13:31:00 253

原创 Redis持久化二

1、简介 持久化是支撑Redis高可用的重要基础。试想如果Redis不支持持久化,不管你部署的Redis是单点、主从、哨兵还是集群,只要系统掉电或者发生其他灾难,Redis中的数据就丢失了。Redis持久化包括RDB和AOF两种方式。 2、RDB 保存当前内存数据的快照。 2.1 触发方式:手动、自动 手动触发:执行save或者bgsave命令 自动触发:配置save m n 手动触...

2019-07-20 00:21:03 244

原创 几种数据分布算法

一、hash算法 hash算法的实质是对key进行hash,然后将hash后的值对节点个数取模。其运用场景包括hashmap、数据库分库分表等。相对来说,hash算法实现较简单。但是也存在一些问题,比如当节点个数扩容或者减少,那么存在原来节点中的所有数据需要重新对新节点个数取模,分配新的节点位置。如下图所示,假设当前有三个节点,现在有三个key,通过hash(key)%3后,key1路由到nod...

2019-07-07 16:03:25 3410

原创 Redis持久化

Redis是基于内存的非关系型数据库。数据默认保存在内存中,如果redis挂掉,那么所有的数据都会丢失。数据持久化的意义就在于遇到这种情况时,能够从磁盘或者其他备份恢复数据,将损失降到最低。 Redis的持久化包括两种:RDB和AOF。 1、RDB RDB,也就是快照,保存的是某一个时刻Redis内存中的所有数据。要注意的是,Redis只会保存一份快照文件,比如,在时刻1生成快照文件RDB1...

2019-07-01 21:15:50 228

原创 记一次渗透测试CS架构产品客户端创建用户机制抓包,通过peach工具重放报文绕过客户端直接创建用户的问题定位。

1、背景 该产品基于CS架构设计,可以通过管理员账户客户端创建系统用户。首先通过wireshark抓取了登陆到创建用户的整个报文,并将报文解密,配置peach发包工具,模拟管理员登陆客户端并创建其他用户的功能。 2、现象 当管理员用户在线的时候,peach工具能够成功发包创建用户。而管理员用户不在线时,peach工具发包无法创建用户。也就是说peach工具复用了已经登陆成功的管理员用户ses...

2019-03-16 21:45:36 2728

转载 Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

一、重量级锁   上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchron...

2019-03-10 20:10:26 176

转载 Java并发编程:synchronized及其实现原理

一、synchronized的基本使用   synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,synchronized总共有三种用法:   (1)修饰普通方法   (2)修饰静态方法   (3)修饰代码块...

2019-03-10 20:04:30 174

转载 Java对象头

一、Java对象头介绍 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 HotSpot虚拟机的对象头(Object Header)包括两部分信息,第一部分用于存储对象自身的运行时数据, 如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等...

2019-03-10 19:53:44 243

原创 JDK1.8 ConcurrentHashMap扩容实现原理

1.8中的concurrentHashMap扩容机制是无锁并发的,即支持多线程同时来对旧哈希数组扩容。那么它怎么保证在多线程场景下的线程安全呢?具体分析: private final void transfer(Node<K,V>[] tab, Node<K,V>[] nextTab) { //计算stride,与运行环境CPU个数有关,至少是16 ...

2019-02-20 22:12:12 2238

原创 工厂模式

工厂模式由三组对象构成:抽象产品,具体产品,实现具体产品的工厂。三者的关系是 1、抽象产品定义了接口 2、具体产品实现或者是继承抽象产品并实现了抽象产品定义的接口 3、工厂持有抽象产品引用,并且知道具体产品,并且定义了获取具体产品的接口 以一个生产手机的小demo来展示工厂模式,其UML类图如下:       1、产品接口 package factoryDesignPattern;...

2019-02-18 22:39:46 200

原创 volatile

目录 一、volatile的特性 二、volatile的内存语义 三、volatile实现原理 Java并发有三大特性:1)可见性,即一个线程中对共享变量操作的结果对另一个线程看见;2)有序性,多线程环境下执行的结果与顺序执行的结果一致;3)原子性,即一组操作要么全部执行完毕,要么都不执行。 为了保证多线程环境下,对共享变量的访问不存在竞争,需要通过同步来保证线程在访问共享变量时是顺序执...

2019-01-30 22:26:36 300

原创 Java并发体系

并发是Java中最重要又比较有难度的内容,想要掌握这部分内容需要很大的功夫。Java并发体系主要包括7部分内容,如下图所示。后续将深入学习探讨这些内容。 Java并发体系...

2019-01-30 21:12:23 285

转载 如何在windows平台下使用hsdis与jitwatch查看JIT后的汇编码

本文转自:https://www.cnblogs.com/stevenczp/p/7975776.html   1. 安装hsids 这一步比较麻烦,需要提前安装cygwin,以及下载openjdk的源码 具体步骤请参考下面的两篇文章 How to build hsdis-amd64.dll and hsdis-i386.dll on Windows 在64位Windows上编译hsd...

2019-01-28 21:15:45 407

原创 HashMap实现原理

目录 一、hash函数实现 二、HashMap内部哈希数组的长度为什么要取2的幂 三、哈希数组的扩容 1、什么时候触发扩容? 2、扩容做什么事情? 1)新hash数组初始化 2)已存储键值对重新散列 四、HashMap存储原理 1、put操作 1)hash数组索引位置为null 2)索引位置第一个节点key与要存储的键值对key相等 3)要存储的位置已经是树节点 4)普通...

2019-01-27 22:10:04 969

原创 List和Set

目录 一、List和Set比较 二、List  1、ArrayList 2、LinkedList  三、Set 一、List和Set比较 List和Set对比 List Set 基于数组或者双链表实现 基于map实现 允许重复元素 不允许重复元素 支持FailFast机制 非线程安全 二、List  ArrayList和LinkedList是...

2019-01-23 20:54:42 253

原创 Java中三大常用容器体系

目录 一、Java中三种容器区别 二、容器体系 一、Java中三种容器区别 Java中的容器类型包括:List、Set和Map。三种容器的区别: Java中三大容器区别 List Set Map 可以存储重复元素 不可以存储重复元素 键值对方式存储,存储的键不能重复 基于数组或者链表实现 基于Map实现 基于哈希表或者红黑色实现 二、容器...

2019-01-19 17:12:07 2827

原创 Comparable和Comparator

目录 一、Comparable 二、Comparator  Comparable和Comparator都表示对类型进行比较。但是Comparable表示的是某个类型本身具有比较的能力,而Comparator侧重于类型本身无比较能力,但是我们可以通过外部定义其可以通过某种规则进行比较。 一、Comparable Comparable是接口,位于java.lang包中。JDK中对Compar...

2019-01-19 16:11:48 455

原创 FailFast机制

目录 FailFast机制的定义 FailFast机制的定义 Java中对非线程安全的容器的迭代器进行了限制。JDK中具体描述如下: structurally modified at any time after the iterator is  * created, in any way except through the iterator's own  * {remove()}  ...

2019-01-16 21:20:37 303

原创 深拷贝与浅拷贝

目录 一、clone的条件 二、浅拷贝和深拷贝  三、如何实现浅拷贝和深拷贝 Object基类中声明了一个clone()方法,用于实现对象的拷贝。在Java中,所有对象都是Object的子类,因此,都可以通过clone()方法创建新的类型实例。但是Object类中的clone()方法声明为protected,不能直接调用。子类要调用Object类中的clone()方法通常是重写clone(...

2019-01-16 21:04:09 209

原创 包装类型

目录 一、体系 二、内部实现原理 一、体系 包装类型对应8种基本数据类型:byte、short、int、long、float、double、char、boolean。 其中,除了Boolean与Character类型之外,其余6种类型都继承了Number。    二、内部实现原理 JDK推荐使用valueOf方法初始化对应包装类型。包装类型内部分别封装了对应基本类型的域用以存储...

2019-01-14 22:52:36 218

原创 foreach原理

目录 一、foreach的作用 二、foreach实现原理 一、foreach的作用 遍历容器或者数组中的元素。从学C语言开始,我们知道可以用循环获取容器中的所有元素,后来接触Java,知道还可以用迭代器获取容器中的所有元素,foreach也是一种遍历容器所有元素的方法。 那么foreach是怎么实现的呢? 二、foreach实现原理 看一个简单的例子: public stati...

2019-01-14 22:26:21 1341

原创 异常

目录 一、异常体系 二、Throwable 三、Error 四、Exception Java中,异常表示程序运行过程中发生的某种已知或者未知的不正确的行为。这种行为,会影响甚至终止程序的正确运行。在实际编程中,我们会遇到各种类型的异常,接下来由分四部分对异常进行简要的介绍。 一、异常体系    在Java中,Throwable是所有异常的父类。根据UML图,我们可知,异常分为Err...

2019-01-13 22:33:59 235

原创 String、StringBuffer、StringBuilder

目录 一、String 二、StringBuffer与StringBuilder 一、String 1、特点:不可变 2、内部实现原理:内部声明了一个char类型的数组,存储字符串内容。 3、重要方法 1)hashCode()  public int hashCode() {         int h = hash;         if (h == 0 && ...

2019-01-13 21:24:50 149

空空如也

空空如也

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

TA关注的人

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