自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (4)
  • 收藏
  • 关注

原创 Spring Clound Eureka 的设计与实现(二)

一、背景上一次我们分析了Eureka Server端的源码,这回,我们来分析Eureka Client端的源码,二话不说我们就开始二、源码分析首先通过springboot的自动配置原理,找到eureka-client的jar包下的spring.factories文件,找到了EurekaClientAutoConfiguration这个配置类,这个就是eureka-client的主配置类,接下来我们看到,这个配置类里主要就是配置类的Bean,我们看到EurekaClientAutoConfigurati

2021-05-16 17:16:20 216

原创 Spring Clound Eureka 的设计与实现

一、 背景我们知道SpringCloud Eureka是Spring Cloud集合中一个组件,它是对Euraka的集成,用于服务注册和发现。Eureka是Netflix中的一个开源框架。它和 zookeeper、Consul一样,都是用于服务注册管理的。Eureka由多个instance(服务实例)组成,这些服务实例可以分为两种:Eureka Server和Eureka Client。为了便于理解,我们将Eureka client再分为Service Provider和Service Consumer。

2021-05-14 11:50:36 266 2

原创 Mysql MVCC机制原理

什么是MVCCMVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。我们知道,一般情况下我们使用mysql数据库的时候使用的是Innodb存储引擎,Innodb存储引擎是支持事务的,那么当多线程同时执行事务的时候,可能会出现并发问题。这个时候需要一个能够控制并发的方法,MVCC就起到了这个作用。Mysql的锁和事务隔离级别在理解MVCC机制

2021-02-25 14:27:43 407

原创 揭秘nacos-config客户端工作原理

揭秘nacos-config客户端工作原理随着SpringCloud中的许多组件逐渐的不再维护,越来越多的人开始使用SpringCloud Alibaba框架,SpringCloud Alibaba是由阿里巴巴开发的开源微服务全家桶,事实上,SpringCloud Alibaba很可能成为SpringCloud第二代的标准实现,而SpringCloud Alibaba有着很多的组件,比如:Sentinel,Nacos,Rockermq等等,其中,Nacos组件可以替代SpringCloud中的Eurek

2020-11-18 16:12:57 1842 1

原创 spring是如何实现声明式事务的

前言有好长一段时间没写文章了,之前一直在找工作,如今工作换好了,可以继续写文章了,今天我们来讲讲spring的声明式事务。开始说到声明式事务,我们现在回顾一下事务这个概念,什么是事务呢,事务指的是逻辑上的⼀组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。从而确保了数据的准确与安全。事务有着四大特性(ACID),分别是原子性(Atomicity)原⼦性是指事务是⼀个不可分割的⼯作单位,事务中的操作要么都发⽣,要么都不发⽣。⼀致性(Consistency)事务必须使数据库从⼀个

2020-09-04 14:09:11 2075

原创 spring整合mybatis之一级缓存失效问题解析

前言在上一次整合完spring和mybatis之后,我们已经了解了mybatis整合spring的底层原理和执行流程,尤其是知道了mapperScan的扫描原理,接下来就要开始使用mybatis,在之前我阅读mybatis源码的时候我们知道mybatis的一级缓存是默认开启的,当连续执行两次查询的时候,mybatis会在同一个会话中的第一次查询的时候会把查询结果放到一级缓存中,当执行第二次查询的时候可以直接从缓存中返回查好的值,那么当spring整合mybatis之后,一级缓存还会像之前那样起作用吗,带

2020-06-17 22:34:51 751

原创 深入spring源码 spring整合mybatis原理解析及spring扩展点分析

前言

2020-06-16 16:28:51 513

原创 简单易懂的springboot自动配置原理

springboot

2020-06-01 16:27:59 618

原创 Spring Clound Eureka 的设计与实现(三)

一、背景接着上次的分析,这次就来分析Eureka Server端的Jersey端口二、源码分析首先我们知道,Eureka Client向Eureka Server通过Jersey发送的是restful形式的请求,那么就需要找到Eureka Server端接收请求的方法,我们知道,在restful风格的API中,一切请求都是资源,那么我就想到了到eureka-core的jar包中的resoure包中去找处理通过jersey发出的restful请求的类,于是我找到了ApplicationResource这

2021-05-16 22:10:03 186

原创 阿里本地生活 一面

记录一下,阿里一面的过程凭记忆,无先后顺序 技术问题了解平衡二叉树吗,有什么特点,了解红黑树吗,和平衡二叉树的区别是什么你在项目中常用的集合有哪些,HashMap的原理了解吗,HashMap为什么选择红黑树不选二叉平衡树HashMap是怎么扩容的NIO BIO了解吗,有什么区别同步 异步 阻塞 非阻塞 有什么区别 分别解释一下这四个名词上面说的四个名词拆开 怎么分别描述 NIO和BIO多线程了解吗,线程池了解吗,有哪些核心参数 常用的有几种线程池 CachedThreadPo

2021-04-21 09:54:11 429

原创 详解nacos注册中心服务注册流程

详解nacos注册中心服务注册流程说起注册中心,我们首先要知道注册中心是用来做什么的,注册中心一般都是用在微服务架构中,而微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信通常采用HTTP的方式,这些服务共用一个最小型的集中式的管理。这个最小型的集中式管理的组件就是服务注册中心。一、nacos 简介本文的目的在于详解 nacos 注册中心的服务注册流程,所以首先需要对 nacos 有个基本的了解。nacos 提供了一组简单易用的特性集,帮助您快速实现

2021-04-13 14:24:39 3499 1

原创 通过源码学Netty-发送数据

前言上一次我们说完了Netty进行业务处理的流程,我们知道Netty处理业务逻辑的本质就是在pipeline中所有的handler执行fireChannelRead的过程,当所有的fireChannelRead都执行完成后,就要将数据写出去,这一回我们一起来看一下Netty是怎么写数据的开始netty写数据一共有三种形式,分别是write,flush和writeAndFlush,write方法就是把数据写到一个buffer中,flush方法把buffer中的数据发出去,而writeAndFlus

2020-09-21 15:05:39 1177

原创 通过源码学Netty-业务逻辑

前言经过了服务启动,建立连接,接收数据,接下来就是要执行业务逻辑了,这一回,我们就来看看Netty是怎么操作业务逻辑的开始首先明确一点,操作业务逻辑的前序流程和接收数据其实是一样的,不同之处在于操作业务逻辑是通过fireChannelread方法传播出去之后开始处理,之前我们碰到了fireChannelread方法后都是去找到headContext看源码,其实fireChannelread的调用者是ChannelPipeline,而ChannelPipeline里又是由一个个的ChannelHa

2020-09-18 14:21:50 352

原创 通过源码学Netty-接收数据

前言上一次讲到了建立连接,那么建立完连接之后自然就要开始接收数据了,这一讲我们就来看看接收数据的流程开始在开始阅读源码之前我们先来了解一个类:AdaptiveRecvByteBufAllocator,这个类是用来做什么的呢,这个类可以看成是一个自适应的数据大小的分配器,主要是在接收数据的时候分配缓存用的,这个缓冲区的大小有三种分别是默认,最小值和最大值static final int DEFAULT_MINIMUM = 64;static final int DEFAULT_INITIA

2020-09-18 11:55:50 524

原创 通过源码学Netty-建立连接

前言上一讲,我们通过源码的阅读,了解了Netty服务启动的整个过程,那么服务启动之后,下一步就是要建立与客户端的连接了,这一讲,我们就来通过源码来学习一下Netty建立连接的过程开始当服务启动完之后,bossThread也就是bossGroup开始轮询OP_ACCEPT事件,那么OP_ACCEPT事件在什么地方进行的处理呢,答案是在NIOEventLoop里进行处理,因为我们是把事件注册在了NIOEventLoop上,来到NIOEventLoop中,有一个洗循环的run方法@Overrid

2020-09-17 16:57:44 1028

原创 通过源码学Netty-启动服务

前言都说要学一门技术,要先从基础学起,先学会怎么用,再去研究为什么这么用,再去理解源码,今天我反其道而行之一下,从源码开始,学习一门技术:Netty众所周知,Netty是一个高性能的网络编程框架,Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。我们常用的框架包括spring,rocketmq,dubbo,elasticsearch等等,这些框架的网络通信部分或多或少都使用到了Netty,那么Netty为什么那么好用,我们从源码开始学起。

2020-09-17 14:53:54 590

转载 [转]轻松理解MYSQL MVCC 实现机制

1. MVCC简介1.1 什么是MVCCMVCC是一种多版本并发控制机制。1.2 MVCC是为了解决什么问题?大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用. 大家都应该知道,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销.1.3 MVCC实现MVCC是通过保存数据在某个时间点的快照来实现的. 不同存储引...

2020-09-09 12:43:42 242

转载 [转]MQ(ActiveMQ)原理及介绍

一、概述ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。在介绍activemq之前,先简单介绍JMS,它是J2EE的13个规范之一,提供的是消息中间件的规范。1、JMS包括以下基本构件:连接工厂, 是客户用来创建连接的对象,ActiveMQ提供的是ActiveMQC...

2020-07-06 13:58:55 374

转载 [转]Mybatis常见面试题总结

1、什么是Mybatis?(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。(2)MyBatis 可以使用XML 或注解来配置和映射原生信息,将POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。(3)通过xml 文件或注解的方式将要执行的各种 stat..

2020-07-05 20:44:25 279

原创 揭秘spring aop底层原理及实现

前言相信每天工作都要用spring框架的大家一定使用过spring aop,aop的概念是面向切面编程,相对与传统的面向对象编程oop,aop更关注的是横向的逻辑,比如说一个大型系统中的日志记录,异常处理,性能监控等等,都是各个模块都需要的操作,那样代表着这些操作会散落在系统的各个地方,不易管理且杂乱无章,而aop就是关注的这些,aop将这些操作与业务代码分离,统一成一个个的切面,针对这些个切面进行编程处理。spring aop使得我们的aop开发工作变得简单,这次我就给大家讲讲spring aop的底

2020-06-10 13:16:29 2823

原创 spring源码解读之getBean方法(二)

前言接着上一部分的内容,我们继续来研究getBean方法的源码开始上一讲我们讲到了getSingleton方法,接下来我们来看getObjectForBeanInstance(sharedInstance, name, beanName, null);这句代码protected Object getObjectForBeanInstance( Object beanInst...

2020-05-07 14:04:03 592

原创 spring源码解读之getBean方法(一)

前言大家使用spring,最常接触到的就是bean,大家也知道spring中用一句getBean就能取出一个实例化好的bean,这个bean是属于IOC容器管理的,那么大家有没有看过getBean方法的源码呢,知不知道spring容器到底是怎么得到一个实例化好的bean的呢,这一次,我和大家一起来研究getBean方法的源码开始首先我来一段非常简单的代码//我是用注解方式配置的a...

2020-05-07 13:08:44 4387

原创 一道面试题引发的spring源码阅读

前言最近读到一道面试题,谈谈spring的实例化,比如一个类有多个构造方法的话,spring该选择哪个构造方法来进行实例化呢正文开始spring的实例化过程中会有一步推断构造方法的方法,但是要知道,spring是个非常复杂的框架,对于这个面试题,为了避免篇幅过长,我就不从spring容器初始化开始说起了,这里我就画一下从实例化单例对象方法开始直到推断构造方法的调用链,然后再来详细的讨论...

2020-04-27 16:32:48 938

原创 记一次mybatis源码阅读和分析过程(2)sqlsession的创建和执行流程、查询执行流程分析

前言上一讲我们分析到了sqlSessionFactory的执行流程,这一次我们来分析sqlsession的创建和执行流程还有查询的执行过程开始我们看这句代码SqlSession sqlSession = sqlSessionFactory.openSession();//这是个接口,就是sqlSession的工厂public interface SqlSessionFact...

2020-04-12 22:11:59 561

原创 记一次mybatis源码阅读和分析过程(1)sqlsessionFactory的创建和执行流程的分析

前言最近在准备换工作,所以开始复习java和常用框架的知识,mybatis框架是工作中常用的一个ORM框架,在复习的过程中,我就简单阅读了一下mybatis的源码,通过debug源码,我更加理解了mybatis的配置原理和映射原理,同时也增强了自己的源码阅读和分析能力开始首先我们新建一个maven工程,引入mybatis和mysql的jdbc驱动<dependencies&...

2020-04-12 17:12:07 395

原创 并发编程的艺术之读书笔记(十六)

前言:上一部分我们学习了java的线程池,这一部分,我们来学习java的Executor框架1. Executor框架简介java多线程程序通常把应用分解成若干个任务,然后使用用户级的调度器(Executor框架)将这些任务映射为固定数量的线程。Executor框架的结构如下任务。包括任务需要实现的接口:Runnable接口或Callable接口 任务的执行,包括任务执行机制的核...

2020-04-04 21:21:58 251

原创 并发编程的艺术之读书笔记(十五)

前言:上一部分,我们简单的学习了java的并发工具类,这部分我们开始学习java的线程池1. 什么是线程池线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。这避免了在处理短时间任务时创建与销毁线程的代价。java中的线程池是运用场景最多的并发框架,几乎所有需要异步或者并发执行任务的程序都可以使用线程池,在开发过程中,合理使用线程池可以带来3个好处...

2020-04-04 17:41:51 243

原创 并发编程的艺术之读书笔记(十四)

前言:上一部分我们一起学习了java中的原子类,这一部分,我们来学习java中的并发工具类1. CountDownLatchCountDownLatch是一个同步工具类,它允许一个或多个线程等待其他线程各自执行完毕后再执行。CountDownLatch通过计数器来实现,CountDownLatch的构造函数接收一个int类型的参数作为计数器,计数器的初始值是线程的数量。每当一个线程执行...

2020-04-04 14:38:58 836

原创 并发编程的艺术之读书笔记(十三)

前言:上一部分,我们一起学习了java中的Fork/Join框架,这一部分,我们来一起学习java中的原子类我们知道当多个线程同时更新一个变量,可能会导致更新不同步的问题,比如变量i=1,有两个线程A和B,A操作i=i+1,B操作i=i+1,预期得到i=3,结果i却等于2,那是因为A和B线程在更新i时拿到的i都是1,这就是多线程导致的不同步问题,为了解决这个问题,我们一般会使用synchr...

2020-04-03 13:22:34 267

原创 并发编程的艺术之读书笔记(十二)

前言:上一部分,我们一起学习了java中的阻塞队列,这一部分,我们来学习Fork/Join框架1. 什么是Fork/Join框架java从1.7开始提供一个用于并行执行任务的框架,是一个把大任务分成若干个小任务,最后汇总小任务的结果得到大任务结果的框架。我们通过Fork和Join这两个单词来简单理解一下Fork/Join框架。Fork就是把一个大任务切分为若干个任务并行的执行,Jo...

2020-04-02 23:01:21 222

原创 并发编程的艺术之读书笔记(十一)

前言:上一部分,我们一起学习了ConcurrentHashMap的概念,部分实现原理及使用,这一部分,我们来学习java中的阻塞队列

2020-04-02 21:13:34 875

原创 并发编程的艺术之读书笔记(十)

前言:上一部分我们一起学习了Condition接口,这一部分我们一起来学习并发包中的ConcurrentHashMap。1. ConcurrentHashMap的实现原理及使用首先我们要知道什么是ConcurrentHashMap,ConcurrentHashMap是一个保证线程安全的高效的HashMap,那么我们为什么要使用ConcurrentHashMap呢,那是因为在并发编程中使...

2020-04-02 15:37:48 942

转载 [转]HashMap多线程死循环问题

正如上篇文中所说,HashMap不是线程安全的,在被多线程共享操作时,会有问题,具体什么问题呢,一直没有个清晰的理解,今天写了个测试程序调了一下,才明白其中道理。主要是多线程同时put时,如果同时触发了rehash操作,会导致HashMap中的链表中出现循环节点,进而使得后面get的时候,会死循环。【关于什么是rehash,读者可以自行去google了】本文主要参考了:http://co...

2020-04-02 10:18:02 1110

原创 并发编程的艺术之读书笔记(九)

前言:上一部分,我们一起学习了可重入锁和读写锁,这部分我们来一起学习Condition接口1.

2020-04-01 23:26:15 216

原创 并发编程的艺术之读书笔记(八)

前言:上一部分,我们学习了同步器的概念及用法,分析了相关源码,这一部分,我们来一起学习可重入锁和读写锁1. 可重入锁可重入锁的意思是同一个线程获得锁之后可以再后续执行过程中再次获得锁而不会造成死锁或阻塞,java中synchronized和ReentrantLock都是可重入锁,这里我们来讨论Lock接口下的ReentrantLock。ReentrantLock重入锁使用lock(...

2020-04-01 13:59:22 828

原创 并发编程的艺术之读书笔记(七)

前言:上一部分,我们一起学习了线程的基本概念,线程的状态,线程之间的通信,这一部分,我们来一起学习java中的锁

2020-03-31 13:21:50 318

原创 并发编程的艺术之读书笔记(六)

前言:上一部分,我们一起学习了双重检查锁定和延迟初始化的内容,这一部分,我们来学习多线程并发编程的基础内容1. 线程简介1.1 什么是线程操作系统在运行一个程序时,会创建一个进程,比如打开一个qq,那就是启动了一个qq的进程。而线程也叫做轻量级进程,是操作系统中的最小调度单元,在一个进程里可以创建多个线程,每个线程都有自己的计数器,堆栈和局部变量,而且可以访问内存中的共享变量。...

2020-03-29 20:15:08 211

转载 [转]Java Thread.join()详解

转载请以链接形式标明出处:本文出自:103style的博客Java并发编程的艺术笔记并发编程的挑战 Java并发机制的底层实现原理 Java内存模型 Java并发编程基础 Java中的锁的使用和实现介绍 Java并发容器和框架 Java中的12个原子操作类介绍 Java中的并发工具类 Java中的线程池 Executor框架一、使用方式。join()是T...

2020-03-29 17:49:21 216

转载 [转]Java中断机制

参考文献http://www.infoq.com/cn/articles/java-interrupt-mechanismhttp://blog.csdn.net/dlite/article/details/4218105主要参考上两篇博客,总结一些个人看法。1.先看看用户直接能接触到的中断相关的接口方法 含义 备注 boolean isInterrupted(...

2020-03-29 15:50:00 902

原创 并发编程的艺术之读书笔记(五)

前言:上一部分,我们一起学习了锁的内存语义和final域的内存语义,这一部分我们一起来学习双重检查锁定和延迟初始化。1. 双重检查锁的由来java程序中,有时需要推迟一些高开销的初始化操作,把初始化推迟到使用这些对象的时候才进行,这种时候就要用到延迟初始化。但是延迟初始化如果不使用一些技巧的话很容易产生问题。比如在多线程环境中的延迟初始化,下面举一个非线程安全的延迟初始化对象的例子...

2020-03-28 17:55:25 853

百度翻译_Setup_1.0.2.exe

百度翻译_Setup_1.0.2.exe

2021-03-12

Mongood-win64.exe

非常好用的数据库可视化软件,可以连接mongodb,功能齐全,界面设计优美,免费,我一直用的这个,蛮好用的

2020-08-26

Another.Redis.Desktop.Manager.1.3.0.exe

好用的国产redis可视化工具,redis一直没什么很好用的可视化工具,要么是全英文的要么就是收费的,这个是免费的,又是国产的,界面全中文,而且做的也好看

2020-03-18

判断手机号运营商

小小的程序,用来判断手机号的运营商,本程序使用C#语言开发的,很简单

2013-08-14

空空如也

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

TA关注的人

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