自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yx444535180的专栏

java架构师

  • 博客(75)
  • 资源 (2)
  • 收藏
  • 关注

转载 Netty学习一——Netty的通信原理

在 Linux 的网络编程这个层次中,客户机和服务器各有一个Socket文件,当两台主机通信时,客户机里的客户端应用进程 A 发送消息,通过 TCP协议数据包头的 SYN 标志位置1,进行主动打开,经 A 主机的 TCP/IP 协议栈发送到 LAN,然后经 WAN 中的路由器传给服务端应用进程 B 的目的主机所在的 LAN,之后经目的主机的 LAN 将报文传给目的主机,最后经目的主机的 TCP/IP 协议栈处理,服务器被动打开,将消息递交给目的应用程序 B。下面的 demo 只一次调用,很简单。

2023-01-11 17:02:08 1126 1

原创 java并发编程学习八——ReentrantLock原理

基于AQS自定义实现一个不可重入的独占锁try {try {try {再次加锁,当前线程被阻塞 System . out . println(Thread . currentThread() . getName());} /*** 独占锁,不可重入//上锁之后,设置锁的所有者为当前线程 setExclusiveOwnerThread(Thread . currentThread());System . out . println("成功加锁");

2022-10-28 15:12:00 703

转载 kafka怎么保证不丢失消息和不重复消费消息

Leader 维护了一个动态的 in-sync replica set (ISR:同步副本),意为和 leader 保持同步的 follower 集合。当 ISR 中的 follower 完成数据的同步之后,leader 就会给 producer 发送 ack。如果 follower长时间未向leader同步数据,则该 follower 将被踢出 ISR,该时间阈值由replica.lag.time.max.ms参数设定。而如果Leader 发生故障,就会从 ISR 中选举出新的 leader。

2022-10-13 11:58:47 6319 1

原创 java并发编程学习七——线程池

模拟实现线程池

2022-10-10 14:37:32 353

原创 java并发编程学习六——乐观锁CAS

CAS必须借助volatile才能读到共享变量的最新值,从而完成【比较-交换】的效果,来看看AtomicInteger的源码,其中初始值value就是用volatile修饰的。原子累加器,指的是累加操作是原子的,java8之前只能使用原子整数类的incrementAndGet方法,java8新增了LongAdder(并发大神狗哥,Doug Lea编写),专门用于累加操作,效率提升5倍。,当竞争激烈的时候,累加分散到多个cell减少失败重试,最后将结果汇总,最终减少竞争提高效率。给withdraw加锁即可。

2022-09-22 14:54:12 624

原创 java并发编程学习五——volatile

但是,Java的volatile在实现层面用的不是fence族屏障,而是lock。lock锁用来控制cpu对一个内存区域的访问权限,具体的这里不再深入讨论。他们都能达到内存屏障的效果,在字节码指令层面可以这样理解:- 对volatile变量的写指令后会加入写屏障- 对volatile变量的读指令前会加入读屏障

2022-09-13 15:13:40 286

原创 java并发编程学习四——ReentrantLock使用

可中断意思是,在获取lock失败之后,线程进入lock的阻塞队列,再调用了线程的interrupt方法之后,线程将被中断,不再阻塞并抛出异常InterruptedException。使用ReentrantLock的tryLock(n,TimeUnit)方法,可以设定等待锁的时间,等待期间也可以被interrupt方法打断。看示例代码,t1线程要先睡觉再工作,t2线程要先工作再睡觉就发生了死锁。三个线程t1/t2/t3,t1输出五次a,t2输出5次b,t3输出5次c;执行的结果,程序不能正常退出。

2022-09-05 14:07:22 434

原创 java并发编程学习三——wait/notify与park/unpark

wait/notify与park/unpark

2022-08-24 11:34:01 445 1

原创 java并发编程学习二——synchronized

每个java对象都可以关联一个Monitor对象,当对象被synchronized(obj)加锁(重量级)之后,对象头中的Mark Word会记录指向Monitor对象的指针,即上图中的ptr_to_heavyweight_monitor。那么什么是轻量级锁呢,轻量级锁是相对于原来使用操作系统互斥量来实现的传统锁而言的,所以才有轻重的区别。下面看下轻量级锁的实现过程。锁膨胀或者叫锁升级,指的是在CAS操作尝试加轻量级锁时失败,说明已经有其他线程加上了轻量级锁(发生了竞争),将轻量级锁变为重量级。......

2022-08-18 16:31:48 230

原创 java并发编程学习一——Thread

Java语言中,在Thread类定义了一个状态枚举,表示线程的状态,有以下六种:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。如图所示:开始和终止状态一样的,java中将就绪和运行合并为可运行,将阻塞细分为阻塞、等待和超时等待。值得注意的是,操作系统中一部分阻塞,在java中认为是可运行状态,例如IO阻塞。setDaemon将设置线程为守护线程,顾名思义守护其他线程的线程,当没有线程需要守护,自己就强制结束了。加判断让t1线程停止运行。...

2022-08-12 11:57:47 204

原创 Spring Cloud Gateway集成Nacos和Swagger聚合Api文档

服务网关又称API网关,是系统对外的唯一入口,封装了系统的内部架构。所有的客户端和消费端,都通过网关接入微服务,在网关层处理非业务逻辑。API网关不是微服务场景中的必须组件,如图没有网关,微服务一样可以对外提供服务但是对应微服务数量较多,复杂度比较高的系统,使用网关可以带来一些好处聚合接口,使得服务对调研者透明,降低客户端与服务端的耦合度聚合后台服务,节省流量,提升用户体验提供安全,流量控制、API监控、计费等功能。...

2022-08-05 16:10:57 1234

原创 Flyway报错源码分析——Validate failed: Migrations have failed validation

Flyway报错分析,Validate failed: Migrations have failed validation

2022-08-05 12:09:59 7703

原创 Docker系列九——安装Nacos1.4.2

Docker安装Nacos1.4.2

2022-08-01 14:23:01 2395 3

原创 SpringBoot2.6.5集成Swagger3和Knife3

代码已在上文给出,有很多文章说加配置spring.mvc.pathmatch.matching-strategy=ant_path_matcher就行,我遇到的情况就不行,查到资料说是因为依赖了spring-boot-starter-actuator,只能多配置一个BeanspringfoxHandlerProviderBeanPostProcessor,配完后又出现依赖冲突,之后再解决冲突(pom排查冲突包),就正常启动了。看似简单的集成,花了三天时间才搞定,记录一下踩过的坑,希望大家能避开。...

2022-07-22 09:55:50 648

原创 ResponseBodyAdvice接口使用导致的报错及解决

ResponseBodyAdvice用于在返回值写入响应之前,将body的内容重新封装,直接上代码。

2022-07-21 14:47:34 2218 1

原创 spring-cloud-starter-oauth2 密码模式认证过程

上文讲到在密码模式下OAuth2主要用于校验客户端合法性、产生token、校验tokenSercurity主要用于用户名密码校验、接口权限控制OAuth2与Sercurity整合之后,校验顺序:获取token请求:校验客户端合法性——校验用户名密码——产生token受保护的接口请求:校验token——校验接口权限下面就来看下,每个步骤在源码中是如何实现的客户端合法性校验,第一步校验client_id、client_secret,就是客户端id和密码;第二步校验grant_type;第三步校验sc

2022-07-12 17:17:55 4322

原创 spring-cloud-starter-oauth2使用

**OAuth2主要用于校验客户端合法性、产生token、校验token****Sercurity主要用于用户名密码校验、接口权限控制**因此OAuth2与Sercurity整合之后,校验顺序:校验客户端合法性——校验用户名密码——产生token——校验token——校验接口权限............

2022-07-02 15:58:39 7427

原创 SpringBoot源码学习四——MVC主流程下

处理@RequestMapping,拦截器链处理,执行接口,匹配@ResponseBody,封装返回值。监听器——过滤器——拦截器

2022-06-27 16:03:35 292 1

原创 RabbitMQ笔记

RoutingKey与BindingKey的作用,RabbitMQ实现消费者组,SpringBoot自动生成队列名称并创建

2022-06-22 15:31:13 306

原创 SpringBoot源码学习三——MVC主流程上

SpringBoot容器选择,DispatcherServlet装配与初始化,加载到Tomcat,init方法执行

2022-06-20 15:37:14 199

原创 SpringBoot源码学习二——Bean的装配

1. 启动类作为入口也是第一个配置类,首先进行解析 2. 启动类上的@ComponentScan注解扫描到所有@Component注解的类加载到容器 3. SpringBoot将所有@Component注解的类都当做配置类进行处理,每个类都是先处理@Import再处理@Bean,@Import引入的配置类将递归处理。 4. 处理启动类上所有的@Import,@Import可以引入普通类、配置类、实现了ImportSelector的类。普通类直接加载到容器,配置类进行递归处理,实现了ImportSele

2022-06-14 10:22:03 1867 1

原创 SpringBoot源码学习一——run的启动流程

SpringBoot是Spring下的子项目,它是Spring组件集成的一站式解决方案。采用约定优于配置的思想简化了繁重的配置,提供了各种启动器,大大降低使用Spring的难度,使开发者能快速上手。2.2 SpringBoot启动流程...............

2022-06-06 17:00:25 513 2

原创 Spring源码学习七——事务管理主流程

同一个线程,相同的数据源,对于事务的处理使用同一个连接 - 同一个线程,不相同的数据源,使用不同的连接 - 不同的线程,相同的数据源,使用不同的连接 - 不同的线程,不同的数据源,使用不同的连接

2022-05-27 16:26:54 208 1

原创 Spring源码学习六——AOP主流程

一、AOP的作用AOP就是面向切面编程的简称,它里面有一些概念来帮助理解,我觉得那些都不重要。我的理解是利用动态代理增强方法,不侵入原来方法,在方法的执行前后增加逻辑,把这个做到灵活配置就是AOP了。比如给不同的方法增加同样的逻辑,或者给类中所有的方法都增强等等不同场景的使用1.1 JDK动态代理1.2 Cglib动态代理二、代码跟踪三、AspectJ四、总结...

2022-05-24 13:53:35 1059 2

原创 Spring源码学习五——循环依赖

一、产生原因二、三级缓存三、两级可以吗

2022-05-12 12:05:32 123 1

原创 Spring源码学习四——FactoryBean的作用

一、FactoryBean二、源码中的作用三、使用示例四、总结

2022-05-09 09:27:42 3719

原创 Spring源码学习三——Bean的生命周期主流程

一、实例化二、FactoryBean

2022-05-05 16:25:47 614 2

原创 Spring源码学习二——容器启动过程下

文章目录一、容器启动过程上二、容器启动过程下2.1 invokeBeanFactoryPostProcessors()一、容器启动过程上书接上回:容器启动过程上二、容器启动过程下2.1 invokeBeanFactoryPostProcessors()实例化并调用所有注册的BeanFactoryPostProcessor bean,如果给定,则遵循显式顺序。进入getBeanFactoryPostProcessorsbeanFactoryPostProcessors是空的,看了下在sprin

2022-04-28 11:35:11 313 1

原创 Spring源码学习一——容器启动过程上

一、启动容器启动一个注解配置的容器AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);进入构造方法AbstractApplicationContext.refresh()方法将刷新启动容器public void refresh() throws BeansException, IllegalStateException { synchroni

2022-04-24 15:12:15 564 1

原创 MyBatis源码学习五——Mybatis与Springboot整合及Mapper的注入过程

Mybatis与Springboot整合及Mapper的注入过程

2022-04-12 11:41:54 2540 1

原创 MyBatis源码学习四——ParameterHandler与ResultSetHandler

文章目录一、ParameterHandler1.1 实例化1.2 参数处理二、ResultSetParameterHandler2.1 实例化2.2 结果集处理一、ParameterHandlerStatementHandler与拦截器上篇讲到,拦截器继续执行,通过invoke,调用被拦截和代理的对象方法(RoutingStatementHandler的prepare方法)再进入 statement = instantiateStatement(connection);–> return co

2022-04-01 16:02:35 803

原创 MyBatis源码学习三——StatementHandler与拦截器原理

文章目录一、StatementHandler1.1 RoutingStatementHandler1.2 PreparedStatementHandler二、拦截器2.1 InterceptorChain2.2 Intercepts注解三、PaginationInterceptor一、StatementHandler执行器Executer与缓存上篇讲到一级缓存在BaseExecuter的queryFromDatabase()方法,当没有命中缓存时,从数据库中查询doQuery(ms, parame

2022-03-31 10:28:08 2993 1

原创 MyBatis源码学习二——执行器Executer与缓存

文章目录一、执行器Executer1.1 CachingExecutor二、缓存2.1 二级缓存2.1.1 TransactionalCacheManager2.2 一级缓存2.2.1 关闭一级缓存一、执行器Executer注册及获取Mapper上篇讲到mapperMethod.execute(sqlSession, args);执行真正的sql逻辑;调用result = executeForMany(sqlSession, args);–>result = sqlSession.selectLi

2022-03-29 15:24:51 898

原创 MyBatis源码学习一——注册及获取Mapper

文章目录一、搭建环境1.1 pom.xml1.2 BlogMapper.java1.3 BlogMapper.xml1.4 MyBatisDemo.java二、addMapper详细分析2.1 MapperRegistry2.2 MapperProxyFactory三、getMapper详细分析3.1 MapperProxy3.2 MapperMethod一、搭建环境1.1 pom.xml <dependency> <groupId>mysql</

2022-03-28 15:33:30 1877

原创 分布式事务三——seata实战

文章目录一、Seata介绍1.1 支持的事务模型二、AT模式实战2.1 准备数据2.2 工程2.3 准备TC服务一、Seata介绍Seata(Simple Extensible Autonomous Transaction Architecture,简单可扩展自治事务框架)是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。Seata 开源半年左右,就已经有接近一万 star,社区非常活跃。我们热忱欢迎大家参与到 Seata 社区建设中,一同将 Seata 打造成开源分布式事务标

2022-03-15 11:18:07 2125 2

原创 分布式事务二——解决思路

文章目录一、分布式事务的思路1.1 CAP定理1.1.1 Partition tolerance1.1.2 Consistency1.1.3 Availability1.1.4 Consistency 和 Availability 的矛盾1.1.5 几点疑问1.2.Base理论二、分布式事务解决方案2.1 分阶段提交2.1.1 DTP和XA2.1.2 二阶段提交2.2 TCC2.2.1 优势和缺点2.3 可靠消息服务2.3.1 基本原理2.3.2 RocketMQ事务消息2.3.3 RabbitMQ的消息确

2022-03-14 11:39:23 2943

原创 分布式事务一——理论

文章目录一、本地事务1.1 undo和redo1.1.1.undo日志1.1.2.undo日志1.1.3.总结二、分布式事务2.1 跨数据源2.2 跨服务2.3 分布式系统的数据一致性问题一、本地事务本地事务,是指传统的单机数据库事务,必须具备ACID原则:原子性(A)所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。一致性(C)一致性就是应用系统从一个正确的状态到另一个正确的状态

2022-03-11 14:34:45 151

原创 mybatis+shardingJdbc实现数据库读写分离和分库分表

一、原理介绍下面这篇讲的很完整就不赘述了MySQL数据库的读写分离、分库分表 二、环境准备2.1 数据库环境读写分离必须依赖数据的主从复制,这篇博客有详细的过程mysql主从安装2.2 开发环境本案例使用springboot2.6.4+mybatis3.6.7+sharding-jdbc4.1.12.2.1 pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.

2022-03-10 16:20:16 1971

原创 Docker系列八——Dockerfile学习

一、Dockerfile简介Dockerfile是用来构建Docker镜像的文本文件,它是由一条条构建镜像所需的指令和参数构成的脚本。如图是Dockerfile在Docker架构中的作用二、Dockerfile的构建过程

2022-02-22 15:46:16 447

原创 Docker系列七——3主3从redis集群安装

一、新建6个docker容器实例1.1 架构图2.1新建命令docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381docker run -d --name redis-node-2 --net host --privilege

2022-01-21 11:07:04 717

FSCapture.

一款很好用的截图,取色制作网页的小工具,立即下载吧!

2014-08-04

javaee帮助文档

javaee帮助文档,可以让您更好的使用有关javaee的jar包

2013-06-01

空空如也

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

TA关注的人

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