自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 学习zookeeper,看看这一篇
原力计划

zookeeper学习总结 zookeeper是一个服务于分布式应用程序的中间件协调服务 单体架构到微服务架构 单体架构下,一个完整的流程比如"购物",可以在单体架构中完成整个流程。 分布式架构下,服务进行细化,拆分,涉及到服务之间的通信。 SpringBoot+Res...

2020-06-16 17:52:47 40 0

原创 Netty(六)—关于Pipeline
原力计划

Netty之Pipeline 不管时Netty客户端和服务端,都出现了Pipeline的身影 从之前的学习可以大致了解到 在Netty中每个Channel都有且仅有一个ChannelPipeline与之对应 官方解释 ChannelPipeline注释,从注释中对ChannelPipe...

2020-06-08 18:27:25 36 0

原创 Netty(五)—服务端小记
原力计划

Netty服务端 Netty客户端程序员启动需要使用 Bootstrap 对象 和客户端不同,服务端使用 ServerBootStrap 对象来启动 Server代码实现 通过和客户端代码实现对比,可以发现 服务端设置了两个EventLoopGroup对象,分别用于处理客户端连接请求和处理...

2020-06-07 21:34:20 55 0

原创 Netty(四)—客户端流程
原力计划

Netty客户端 建立一次通信,必然有着两个对象。发送者和接收者 如我们使用微信、qq进行聊天的时候,就是一个通信的过程 当我们使用java NIO实现简单的通信功能时,也必然存在着发送端(Client)和接收端(Server) 接下来通过java NIO的实现,去逐步深入理解学习...

2020-06-07 00:02:31 63 0

原创 Netty(三)关于NioEventLoopGroup
原力计划

学一学Netty中的NioEventLoopGroup 一个Netty程序启动时,至少要指定一个EventLoopGroup 假如我们使用NIO,那我们通常使用NioEventLoopGroup 使用BIO,那我们可以初始化OioEventLoopGroup 官方DOC 上图时Netty(...

2020-06-06 20:42:53 79 1

原创 Netty(二)—从Java NIO到Netty
原力计划

从一段代码开始说起 Java NIO实现 public class demo{ public void socket() { // 使用 socket 提供的 ServerSocketChannel建立一个 通信通道 channel ServerSo...

2020-06-03 19:07:30 69 0

原创 Netty(一)之初识Netty
原力计划

什么是Netty? 在学习Netty之前,首先要明白Netty是什么? 是什么?不如去搞清楚它是用来干嘛的 干嘛的?来了,Netty是用来提高通信性能的一个开源的基于java的通信框架 想要提高分布式系统下各个服务器之前的通信性能,Netty是一个不错的选择 初识Netty高性能 在IO编程...

2020-06-02 23:32:43 43 0

原创 深入理解NIO三大核心
原力计划

NIO三大核心 在NIO中有三个核心对象 缓冲区(Buffer) 选择器(Selector) 通道(channel) 什么是缓冲区Buffer? 缓冲区实际上是一个容器对象,本质上是一个数组 在NIO库中,几乎所有的数据都是使用缓冲区处理的 在进行读写操作的时候,首先会经过缓冲区 在面向流的...

2020-06-01 21:09:21 102 0

原创 透彻理解JavaIO

记-更加深刻理解Java IO Java IO读写原理 在Java层面的应用开发离不开输入流 Input 和 输出流 Output 的处理,简称为IO读写 用户程序在进行IO读写操作的时候,离不开 read&write 的调用 需要注意的是IO读写并不是物理设备和内存之间的相互读写 以...

2020-06-01 21:06:27 73 0

原创 通过手写简易版RPC框架理解其原理
原力计划

什么是RPC框架? RPC:remote procedure call 即:远程过程调用 在分布式架构中离不开服务之间的通信 为了提高服务之间通信的性能:产生了如Dubbo、webservice、Thrift等RPC框架 简易版RPC框架实现 通过实现一个简易版本的RPC框架,去学习其原理 ...

2020-05-30 19:19:41 143 0

原创 序列化的应用与深入

序列化和反序列化 序列化 序列化是一种用来处理对象流的机制—即把对象转换为字节序列的过程 反序列化 把字节序列恢复为对象的过程称为对象的反序列化 主要用途 对象的字节序列可永久地保存到硬盘上,通常存放在文件当中 在网络上传输对象的字节序列 序列化的意义 持久化java对象 当JVM处...

2020-05-27 16:15:41 47 0

原创 http/https-协议的深入学习
原力计划

http通信协议的基本原理 在远程通信场景中http协议是一种应用广泛的应用层协议 http请求的通信流程 DNS服务 Domain Name System DNS服务是和HTTP协议一样位于应用层的协议 提供 域名、IP 之间的解析服务 http通信协议的组成 http是基于应用层的...

2020-05-17 18:27:25 129 0

原创 远程通信协议浅学习
原力计划

从一个http请求说起 当我们访问一个网址,例如 www.xxxx.com 的时候。它首先会被DNS解析,由DNS返回给客户端真实IP地址 什么是DNS服务? DNS-Domain Name System,和http协议相同是位于应用层的协议,主要提供域名、IP的解析服务。 通常我们需要...

2020-05-04 20:38:31 184 0

原创 Java - 深入探究ConcurrentHashMap(二)
原力计划

基于jdk1.8 ConcurrentHash扩容-数据迁移阶段 扩容阶段源码注释版本 // 对目标节点位置加锁,开始处理数据 synchronized (f) { // 双重校验 if (tabAt(tab, i) == f) { // ln:低位节点 ...

2020-04-17 19:39:32 41 0

原创 Java - 深入探究ConcurrentHashMap(一)
原力计划

什么是ConcurrentHashMap ConcurrentHashMap是J.U.C包里面提供的一个线程安全且高效的HashMap。在并发场景中shi使用频率比较高。由于是HashMap的派生类,所以其API和HashMap类似。 ConcurrentHashMap源码分析 JDK1.7...

2020-04-14 18:27:22 64 0

原创 Java - 之 白话 讲 线程池原理

什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池的核心逻辑是提前创建好若干个线程放在一个容器中。如果有任务需要被处理,则将任务直接分配给线程池中的线程来执行,任务处理完之后线程不会被立即销毁,而是等待后续分配任务。同时通过线程池来重复...

2020-03-21 17:03:29 53 0

原创 Java - JUC -常用的并发工具类

Condition Condition是JUC里面多线程协调通信的工具类,可以让一些线程一起等待条件即(Condition)。只有当满足条件时,线程才会被唤醒。 类似于 wait/notify 。在Condition中也有类似的实现。 public class ConditionAwait...

2020-03-16 19:09:57 123 0

原创 Java 同步工具AQS:AbstractQueuedSynchronizer

1AQS是什么 java.util.concurrent包中,LOCK用到了一个同步队列AQS - AbstractQueuedSynchronizer 1.1AQS的功能 独占和共享,即 排他锁/非排他锁 共享:允许多个线程同时获取锁,并发访问共享资源资源,比如ReentrantRea...

2020-02-25 09:35:11 39 0

原创 Java 之 线程的分类

Java中线程的分类 线程主要可以分为 主线程:即main()方法 子线程:非主线程皆为子线程 子线程地分类 守护线程:主要指为主线程提供通用服务的线程,比如GC线程。主线程一旦结束或者被销毁,守护线程也同步结束和销毁。 非守护线程:即用户线程,通常异步处理一些业务逻辑。用户线程本质上...

2020-02-22 19:22:24 67 0

原创 Java 之 关于volatile的一些理解

1.volatile volatile关键字是一个特征修饰符,确保本条指令不会因编译器的优化而省略。可以li理解为阻止编译器对代码进行优化。 先了解一下原子性(atomicity)和可见性(visibility)以及有序性 1.1原子性 即一个操作或者一段代码,要么全部执行并且执行过程中不...

2020-02-22 04:02:47 34 0

原创 Java join()方法、wait()方法和sleep()方法的理解

join() join()方法来自于Thread,join()方法的作用是 阻塞 调用该方法的线程,使其进入TIMED_WAITING 状态,直到被调用的线程执行完毕,原方法继续执行。 如以下代码,在主线程中调用join()方法,会首先执行run()方法中的代码。 当我们把join()方法给...

2020-02-20 00:24:36 86 0

原创 Java synchronized-锁的概念

synchronized的用法 1.修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 2.修饰静态方法,作用于当前类对象的锁,进入同步代码前要获得当前类对象的锁 3.修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码块之前要获得给定对象的锁 关于锁 .锁是什么? ...

2020-02-15 20:19:19 39 0

原创 Java 关于对象在内存中的布局

在Hotspot虚拟机,对象在内存中的存储布局可以分为三个区域 1.对象头(Header) 对象头包含两部分,第一部分存储自身运行时的数据。 如HashCode GC分代年龄 锁状态标志 线程持有锁 偏向线程ID 偏向时间戳 官方称为 MarkWord 第二部分是类型指针 即对象指向它的...

2020-02-12 22:50:59 27 0

原创 Java 线程的启动和停止原理

线程的启动和停止原理 线程的启动 总所周知,我们在Javachen程序中启动一个线程,需要调用该线程的start()方法来启动线程。 也就是我们通过Java中定义的start()方法来启动一个线程 public synchronized void start() { /*...

2020-01-24 00:32:40 131 0

原创 MyBatis 需要注意的一些问题

1.使用mybatis二级缓存的时候需要注意的问题 二级缓存中存放的数据量不能过大。二级缓存是基于命名空间的,当多个命名空间同时操作同一张表的时候,不推荐使用二级缓存。因为当一个命名空间对表中的数据进行update、insert或delete的时候,不会刷新另一个命名空间中的缓存。此时用另一个命...

2020-01-15 19:54:03 68 0

原创 MyBatis 与Spring整合后一级缓存为什么会生效

当我们单独使用MyBatis的时候,一级缓存在一个会话中存在。当SqlSession对象打开就已经存在,当SqlSession对象关闭时缓存数据被清空 当与Spring整合的时候。Spring对MyBatis中SqlSession的使用是通过SqlSessionTemplate来控制的。Sq...

2020-01-15 14:17:22 83 0

原创 MyBatis 学习笔记以及心得体会

1.传统的JDBC方式 注册JDBC驱动: Class.forName("com.mysql.jdbc.Driver"); 创建连接: DriverManager.getConnection(DB_URL, USER, PASSWORD); 执行查询: c...

2020-01-14 21:06:55 145 0

原创 IDEA搭建Spring+SpringMVC项目--整合MyBatis流程

1.首先通过idea新建maven项目,如图 2.建立完整的项目结构 3.配置maven依赖 其中包含启动项目所需要的插件 <dependencies> <!-- 单元测试包 --> <dependency> &...

2020-01-13 20:30:32 54 1

原创 Spring 之 SpringMVC运行时序图以及源码解析

SpringMVC运行时序图 SpringMVC工作机制 1.ApplicationContext初始化时用Map保存所有的url和controller对应关系。 2.根据请求URL找到对应的controller,并从controller中找到对应的请求方法。 3.Request参数绑定到...

2019-06-17 23:07:13 696 0

原创 Spring AOP运行时序图

时序图

2019-06-14 23:54:47 354 3

原创 Spring DI运行时序图以及源码分析

时序图 SpringDI-依赖注入的概念 依赖注入发生的时间 当SpringIOC容器完成了Bean定义资源的定位、载入和解析注册以后,IOC容器中已经管理了Bean定义的相关数据。但此时IOC容器还没有对所管理的Bean进行依赖注入。依赖注入在以下两种情况发生: 1.用户第一...

2019-06-11 17:29:31 245 0

原创 Spring 之Srping IOC运行时序图

加载XML文件——创建IOC容器时序图 源码理解 首先需要找到入口。IOC容器初始化运行的入口。 回顾 什么是SpringIOC IOC(Inversion Of Control)控制反转,所谓控制反转,就是把我们代码中需要实现的对象的创建、依赖。反转给容器来实现。同时需要一种描述让...

2019-06-02 22:14:41 923 1

原创 Java-关于多线程可见性的一些问题

1.请列出Happens-before的几种规则 1.单线程happen-before原则:在同一个线程中,书写在前面的操作happen-before后面的操作。 2.锁的happen-before原则:同一个锁的unlock操作happen-before此锁的lock操作。 3.volatil...

2019-05-27 21:05:49 74 0

原创 Java---ReentrantReadWriteLock---源码分析

ReentrantReadWriteLock ReadLock readLock:时序图 readLock:源码分析 tryAcquiredShared(int unused) protected final int tryAcquireShared(int unused) { ...

2019-05-27 20:34:40 117 0

原创 Java_ReentrantLock_重入锁之非公平锁NonfairSync源码分析

1.以非公平锁为例,来看看 lock 中的实现 1. 非公平锁和公平锁最大的区别在于,在非公平锁中我抢占锁的逻辑是,不管有没有线程排队,我先上来 cas 去抢占一下 2. CAS 成功,就表示成功获得了锁 3. CAS 失败,调用 acquire(1)走锁竞争逻辑 1.1让我们先来了解一下CA...

2019-05-24 22:00:21 67 0

原创 Java——AQS队列变化时序图分析

AQS队列 添加一个节点 头节点释放

2019-05-23 21:40:48 253 0

原创 Java-进阶之问题记录

1.Java什么时候用重载,什么时候用重写? 重载是多样性,重写是增强剂。 Java中的重载overload最重要且最常用的应用场景是构造器的重载,构造器重载后,提供多种参数形式的构造器,可以应对不同的业务需求,加强程序的健壮性和可扩展性。比如Spring源码中的ClassPathXm...

2019-05-14 21:22:02 42 0

原创 MyBatis 体系结构与工作原理-update流程时序图

目录 update流程时序图 创建会话工厂类 创建会话 获取代理对象 调用代理对象方法,执行SQL update流程时序图 创建会话工厂类 创建会话 获取代理对象 调用代理对象方法,执行SQL MyBatis里面用到了那些设计模式? 建造者模式 ...

2019-05-04 00:18:06 170 0

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