自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CAS原理与JUC原子类详解

JDK 5所增加的JUC(java.util.concurrent)并发包对操作系统的底层CAS原子操作进行了封装,为上层Java程序提供了CAS操作的API。

2023-10-16 17:35:16 227

原创 详细分析异步回调模式

随着业务模块系统越来越多,各个系统的业务架构变得越来越错综复杂,特别是随着这几年微服务架构的兴起,跨机器、跨服务的接口调用越来越频繁。打个简单的比方:现在的一个业务流程可能需要调用N次第三方接口,获取N种上游数据。因此,面临一个大的问题:如何异步去调取这些接口(做到高效率),然后同步去处理这些接口的返回结果呢?这里涉及线程的异步回调问题,这也是高并发的一个基础问题。在Netty源码中大量的使用了异步回调技术,并且基于Java的异步回调设计了自己的一整套异步回调接口和实现。

2023-09-25 14:52:38 324

原创 万字长文解析AQS抽象同步器核心原理(深入阅读AQS源码)

在模板模式中,由抽象类定义模板方法和钩子方法,模板方法定义一套业务算法框架,算法框架中的某些步骤由钩子方法负责完成。具体的子类可以按需要重写钩子方法。模板方法的调用将通过抽象类的实例来完成。

2023-08-27 17:00:54 258

原创 详解单体架构和微服务(概念,优缺点和区别)

单体架构的整个系统是一个War包,即war包走天下。微服务架构的项目是很多个war包(一个子系统一个)。

2023-08-21 17:46:23 2279

原创 一文带你深入了解JMM(Java内存模型)

synchronized的特点获得同步锁;清空工作内存;从主内存拷贝对象副本到工作内存;执行代码(计算或者输出等);刷新主内存数据;释放同步锁。所以,synchronized既保证了多线程的并发有序性和原子性,又保证了多线程的内存可见性。有序性和原子性都是通过同一时刻只有一个线程可以进入锁住的代码保证的(不被其他线程中断,避免了部分执行)。volatile是第二种Java多线程同步的手段。一个被volatile修饰的变量,JMM会确保所有线程看到的是一致的变量值。

2023-08-06 16:19:48 376

原创 结合电商模式打造校园交易平台之Sentinel概述篇(全文总共13万字,超详细)

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

2023-07-24 12:42:01 678

原创 结合电商模式打造校园交易平台之秒杀服务篇(全文总共13万字,超详细)

具有瞬间高并发的特点,针对这一特点,必须要做限流+异步+缓存(页面静态化)+独立部署。

2023-06-23 17:13:56 666

原创 关于Alibaba开发手册中提到的Manager层解析(对于传统MVC三层架构的改进)

但我们开发软件系统仍然要选择分层架构,因为任何的方案架构都是有优势有缺陷的,天地尚且不全何况我们的架构呢?分层架构固然会增加系统复杂度,也可能会有性能的损耗,但是相比于它能带给我们的好处来说,这些都是可以接受的或者可以考虑设计其它的方案解决。在做决策的时候不可以以偏概全,因噎废食。分层架构是软件设计思想的外在体现,是一种实现方式。一些软件设计原则都在分层架构中有所体现。比方单一职责原则规定每个类只有单一的功能,在这里可引申为每层拥有单一职责,且层与层之间边界清晰;

2023-05-15 18:03:05 1288 1

原创 对于逻辑分页与物理分页的分析与选择(MyBatis-Plus的分页实现),理解两种分页的异同点

写分页查询时,对于手续费账单分页查询需求的实现分析。

2023-04-29 11:15:00 611

原创 结合电商模式打造校园交易平台之支付服务篇(全文总共13万字,超详细)

这里我们是使用的支付宝进行支付,所以需要调用支付宝的相关API,下面来了解一下怎样使用支付宝进行线上支付。

2023-04-18 21:48:28 1213

原创 结合电商模式打造校园交易平台之RabbitMQ篇(全文总共13万字,超详细)

延迟队列存储的对象肯定是对应的延时消息;所谓"延时消息"是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费。场景:比如未付款订单,超过一定时间后,系统自动取消订单并释放占有商品的库存。常见解决方案:使用SpringSchedule定时任务轮训数据库缺点:消耗系统内存(需要创建定时任务且定时任务一直运行)、增加了数据库的压力、存在较大的时间误差。

2023-04-02 11:14:22 809

原创 分布式商城系统架构中的超卖问题深度剖析(从问题原因到解决方案到优化总结)以及重复下单问题

最终决定把数据都存到redis,然后尝试了redis分布式锁,发现其并发量并不高,因为redis分布式锁实质是一种分布式悲观锁,它将处理串行化。就是并发场景下,多线程或者多进程对共享资源(库存资源)进行竞争导致的(因为MySQL数据库中的数据对于它们来说属于共享资源),因此这种多线程以及多进程环境下对于共享资源的竞争问题我们需要对共享资源进行保护。下就需要分布式锁,如Redis实现分布式锁。首先,超卖问题的出现是由于高并发环境下,大量秒杀请求同时发给服务端导致的秒杀商品的销售数量>其库存数量的问题。

2023-03-20 09:12:22 1436 1

原创 一文带你彻底理解进程与线程(包含生命周期的状态转换以及异同点)

线程是进程当中的一条执行流程。线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源和执行调度分开,各个线程既可以共享进程资源(内存地址、文件IO等),又可以独立调度,线程是CPU调度的基本单位。同一个进程内多个线程之间可以共享代码段、数据段、打开的文件等资源,但每个线程各自都有一套独立的寄存器和栈,这样可以确保线程的控制流是相对独立的。每个进程至少有一个线程存在,即主线程。线程的优缺点?一个进程中可以同时存在多个线程;各个线程之间可以并发执行;

2023-03-16 17:59:31 1345

原创 结合电商模式打造校园交易平台之分布式事务篇(全文总共13万字,超详细)

数据库事务的几个特性:原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(Isolation) 和持久性(Durabilily),简称就是 ACID。在以往的单体应用中,我们多个业务操作使用同一条连接操作不同的数据表,一旦有异常, 我们可以很容易的整体回滚。比如买东西业务,扣库存,下订单,账户扣款,是一个整体;必须同时成功或者失败。一个事务开始,代表以下的所有操作都在同一个连接里面。READ UNCOMMITTED(读未提交)该隔离级别的事务会读到其它未提交事务的数据,此现象也称

2023-03-13 15:49:24 405

原创 结合电商模式打造校园交易平台之订单服务篇(全文总共13万字,超详细)

在服务器的 路径下创建一个 order 文件夹,在order路径下分别创建以下几个文件夹,用来存放对应的静态资源detail 文件夹下存放 等待付款的静态资源,并将等待付款文件夹下的页面复制到 gulimall-order服务中并命名为 list 文件夹下存放 订单页的静态资源,并将订单页文件夹下的页面复制到 gulimall-order服务中并命名为 confirm 文件夹下存放 结算页的静态资源,并将结算页文件夹下的页面复制到 gulimall-order服务中并命名为 pay 文件

2023-03-03 16:30:00 1237 2

原创 结合电商模式打造校园交易平台之MQ消息队列篇(全文总共13万字,超详细)

1.大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力消息代理(message broker就是运行消息中间件的服务器,这个服务器替我们接收、发送消息)和目的地(destination)当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。3.消息队列主要有两种形式的目的地点对点消息通信(point-to-point)发布(publish)/订阅(subscribe)消息通信4.点对点式。

2023-02-26 21:44:54 932

原创 结合电商模式打造校园交易平台之购物车篇(全文总共13万字,超详细)

第一步、创建gulimall-服务,并进行降版本处理

2023-02-24 17:16:21 1166

原创 结合电商模式打造校园交易平台之认证服务篇(全文总共13万字,超详细)

创建模块并进行降版本处理修改依赖:这里我们导入了公共服务common,但是认证服务模块用不到数据库,所以把Mybatis的依赖移除出去,否则会有数据源错误将认证服务注册进nacos注册中心在 application.properties 文件中编写认证服务的配置信息动静资源配置配置Nginx和网关1、修改域名 2、配置网关在 gulimall-gateway 服务下的 application.yml 文件下增加以下路由信息动静分离1、将登陆页面放入项目将 路径下的登录页面文件inde

2023-02-20 11:15:21 1358

原创 结合电商模式打造校园交易平台之CompletableFuture异步编程篇(全文总共13万字,超详细)

首先我们回顾一下初始化线程的四种方式:1和2:主进程无法获取线程的运算结果3:主进程可以获取当前线程的运算结果,但是不利于控制服务器种的线程资源,可能导致服务器资源耗尽4:线程池执行异步任务性能稳定,也可以选择获取执行结果(可以不获取)并捕获异常。但是,在业务复杂情况下,一个异步调用可能会依赖于另一个异步调用的执行结果。可以通过如下两种方式初始化线程池四种方式代码如下:线程池我们以后在实际业务中前三种启动线程的方式都不用,我们将所有的多线程异步任务都交给线程池执行。线程池(ThreadPoolExec

2023-02-17 09:42:32 498

原创 结合电商模式打造校园交易平台之检索服务篇(全文总共13万字,超详细)

这里有关于检索的功能我们基于微服务架构应该抽出来单独作为一个服务运行,所以新建gulimall-search服务并注册到nacos中,以便网关服务可以监控到检索服务并将检索的请求转发给检索服务。我们需要加载检索服务的index页面,那么先把这个页面放入templates包下,然后我们项目是基于动静分离进行资源配置的,所以需要把index页面中需要用到的静态资源放到nginx中。给gulimall-search服务加入Thymeleaf(模板引擎)依赖将路径下的 index.html首页复制到 guli

2023-02-13 10:37:42 806

原创 结合电商模式打造校园交易平台之Redis缓存篇(全文总共13万字,超详细)

上面我们解决了第一个命名问题和第二个设置存活时间问题,但是如何将数据以JSON的形式缓存到Redis呢?这涉及到修改缓存管理器的设置,CacheAutoConfiguration导入了,而中自动配置了缓存管理器RedisCacheManager,而RedisCacheManager要初始化所有的缓存,每个缓存决定使用什么样的配置,如果有,就用其已有的(把其配置信息取出赋给对应的变量),没有就用默认配置。} if(!

2023-02-09 13:50:32 668

原创 结合电商模式打造校园交易平台之ES,Nginx,性能测试篇(全文总共13万字,超详细)

总的来说如果我们要进行什么操作就先创建对应操作的请求对象,比如删除文档就是DeleteRequest但是删除索引就需要加一个Index如DeleteIndexRequest。然后把这个请求需要的参数加入这个请求,简单的操作可以直接把参数通过请求对象的有参构造传给请求对象,复杂的如检索就需要额外创建一个对象来封装这些条件了(SearchSourceBuilder)。最后我们只要把这个请求对象传给我们之前添加在容器中的RestHighLevelClient对象就可以了。

2023-02-05 21:01:55 723

原创 一文带你解决Spring的循环依赖问题(包含源码解读)

这里举个例子你就很容易的知道啦,示例如下:创建AService的Bean对象:实例化(new AService())给AService的bService属性赋值—>单例池—>找不到—创建BService的Bean对象2.1、实例化 (new BService())2.2、给BService的aService属性赋值—>单例池—>找不到—>创建AService的Bean对象。注意:这里就已经进入循环了,所以后面也不用进行下去了,因为从这里会回到第一个实例化AService。给其他属性赋值。

2023-01-02 18:18:03 250

原创 Spring官方文档解读(五)之自定义 bean 的性质

Spring 框架提供了许多接口,可用于自定义 Bean 的性质。本节将它们分组如下:- Lifecycle Callbacks- ApplicationContextAware 和 BeanNameAware- 其他感知接口## 生命周期回调要通过容器对 bean的生命周期进行管理,可以实现Spring中的`InitializingBean`和`DisposableBean`接口。容器对前者调用`afterPropertiesSet()`,对后者调用`destroy()`,以使 Bean

2022-12-14 16:33:01 204

原创 Spring官方文档解读(四)之Bean的作用域

Bean 作用域机制是可扩展的,即我们可以定义自己的作用域,甚至 重新定义现有作用域(但不建议),并且不能覆盖内置的singleton和prototype作用域。要将自定义作用域集成到 Spring 容器中,首先需要实现接口。Scope接口有四种方法可以从作用域中获取对象,从范围中删除对象,然后销毁它们。例如,会话作用域实现返回会话作用域的 Bean(如果不存在,则该方法将其绑定到会话以供将来参考,然后将返回该 Bean 的新实例)。会话作用域的实现,例如,从会话中删除了会话作用域的 bean。

2022-12-13 14:06:26 172

原创 Spring官方文档解读(三)之自动注入与方法注入(DI再深入)

在学习自动注入和方法注入之前我们先把之前的依赖注入的一些细节处理一下。## 关于依赖注入和属性配置的细节我们知道可以将 bean 属性和构造函数参数定义为对其他bean的引用。为此,Spring 基于 XML 的配置元数据在其``和``元素中支持子元素类型。

2022-12-12 12:44:18 559

原创 Spring官方文档解读(二)之DI依赖注入详解,通俗易懂,小白也可轻松get

为什么会有依赖注入?典型的企业应用程序不包含单个对象(这里就是指Spring中的 bean)。即使是最简单的应用程序,也有一些对象可以协同工作(属性依赖的形式),以呈现最终用户视为一体的应用程序。在Spring中所有对象的控制权利我们都交由IoC容器了,所以这里我们无法手动为这些对象再进行操作,那么就需要IoC容器来帮助我们完成这一操作。

2022-12-11 13:25:01 997

原创 Spring官方文档解读(一)之Spring概述,IoC容器概述及其源码解读,bean概述

接口(其实例就是一个IoC容器)代表了 Spring的IoC 容器,这个容器负责实例化,配置和装配Bean。容器通过读取配置元数据来获取要实例化,配置和组装哪些对象的指令。配置元数据以 XML,Java 注解或 Java 代码表示。配置元数据是用来表达组成应用程序的对象以及这些对象之间的丰富的相互依赖关系。Spring 提供了接口的几种实现。在独立应用程序中,通常创建或的实例。尽管XML 是定义配置元数据的传统格式,但是您可以通过提供少量 XML 配置来声明性地启用对其他元数据格式的支持,从而。

2022-12-10 13:33:19 301

原创 泛型的深入浅出

**通配符是用来解决泛型无法协变的问题的**,协变指的就是如果 `Student` 是`Person`的子类,那么 `List` 也应该是` List` 的子类。但是泛型是不支持这样的父子类关系的

2022-12-09 15:52:12 47

原创 学习SpringBoot源码之手写一个简易版SpringBoot

很多人和我一样可能都想知道我们开发用的SpringB底层原理是什么,怎么运行的,但奈何自己能力不足读不懂源码,下面我们通过手写一个SpringBoot来了解一下SpringBoot大概原理是什么,怎么运行的。(此文是学习图灵周瑜老师手写SpringBoot的学习笔记)。PS: 下文中Xjx为本人名字缩写,读者可以自行更改为自己的名字缩写,这样整个写完还是挺有成就感的,建议改为自己名字缩写哦首先我们创建出一个项目,然后再这个项目下面创建两个模块:首先,SpringBoot是基于的Spring,所以我们手写Sp

2022-12-06 16:48:40 1705

原创 排序算法入门之递归思想,循环不变量,归并排序算法与快速排序算法

时间复杂度是一个动态的概念,它表示随着输入规模的增大,程序的运行时间增加的快慢。具体时间复杂度的表示法是使用大O表示法,求法如下:时间复杂度的极限定义如下:g(N)就是大O括号中的内容,f(N)就是具体的我们代码的复杂度,我们可以找出一个其上界即cg(N),这里c是一个常数对于时间复杂度来说并不重要。所以g(N)就是我们要求的时间复杂度。快速排序不同于归并排序,它虽然也是递归但是它并不是分治算法的思想而是减治算法。

2022-11-29 20:52:18 465

原创 万字长文带你真正的理解ConcurrentHashMap的底层究竟如何实现的(包括JDK7和JDK8及两个版本的比较)

属于 JUC 包下的一个集合类,可以实现线程安全。它是一个支持高并发更新与查询的哈希表(基于HashMap)。在保证安全的前提下,进行检索不需要锁(valetile进行实现)。在JDK1.7和JDK1.8中ConcurrentHashMap有比较大的改动,因此这里我们分为两部分进行学习。

2022-11-04 20:03:29 850

原创 一文带你深入理解Redis中的底层数据结构,再也不怕不懂数据类型的底层了

都说Redis快,因为什么呢?只是因为它是内存数据库,所有操作都是基于内存进行的吗?其实不然,这与它的数据结构也是密不可分的。下面我们就来了解一下Redis的数据结构。Redis 数据结构并不是指 String(字符串)对象、List(列表)对象、Hash(哈希)对象、Set(集合)对象和 Zset(有序集合)对象,因为这些是 Redis 键值对中值的数据类型,也就是数据的保存形式,这些对象的底层实现的方式就用到了数据结构。在Redis的版本迭代更新中,一共有9种数据结构

2022-11-01 20:21:37 701 2

原创 可以真正带你理清同步阻塞与同步非阻塞与异步阻塞与异步非阻塞的文章

看了很多这方面的博客,发现说的都云里雾里,有些甚至矛盾了起来,自己理了一下这些文章,结合自己的理解说一说其到底是什么。首先我们都知道阻塞与非阻塞,同步与异步是两个概念。而且是不是有一种它们本质上不是一组概念吗,为什么分开了?如果想真的弄懂它们并不容易。这里我们从一个真正的使用这四个概念的场景和一个生活中模拟的场景来体会它们。当网络中一个进程向另一个进程发送数据时,接收数据的进程会将数据放置在内核的缓冲区中,如果之后我们的程序中需要读取数据,其实是读取内核中缓冲区里的数据。和。

2022-10-27 18:47:12 379

原创 关于MySQL中索引底层数据结构B树和B+树的理解以及常见问题

在说B树之前我们首先需要知道平衡二叉树这个概念,所谓(如果不是一颗空树)那么它左右两个子树的高度差的绝对值不超过1,并且左右两个子树也都是一棵平衡二叉树。

2022-10-26 15:45:13 647

原创 JVM中的四大垃圾收集算法与七大垃圾收集器介绍,带你快速解决面试题

注意:并行垃圾回收在单核 CPU 下可能会更慢。

2022-10-21 20:02:47 1573

原创 剑指Offer算法题学习笔记,和我一起走进算法学习的大门吧(小白一定要进来看看啊)——持续更新中(2022/11/6)

由于面试需要,之前经常每日一题,但是感觉效果很差,学了后面忘了前面,相信很多同学与我是一样的。最近听说剑指Offer中的题目很好,所以下决心认真刷一遍,以此文记录自己的算法学习过程。本人并不聪明,很多题都借鉴了K神的思路,并以自己的话叙述了下来,相信对于像我一样的大部分普通人来说还是可以很容易的理解的。本文会持续更新,需要的朋友可以收藏或者关注一下,您的认可就是我创作的动力。此文会以完全算法零基础的角度进行讲解,希望可以帮助更多的同学对算法不那么畏惧,因为笔者就是慢慢从畏惧到喜欢上算法的,正确想明白并成功A

2022-10-19 22:36:43 367 1

原创 结合电商模式打造校园交易平台SpringCloud项目环境搭建+项目流程(基础篇)

自定义校验有三步:第一步是编写一个自定义的校验注解,它有三个必须的属性。第二步是编写一个自定义的校验器。第三步是把自定义的注解和自定义的校验器进行关联。具体做法是在我们自定义的注解上的@Constraint注解配置它的validatedBy属性值为自定义的校验器的class类。

2022-10-17 15:27:17 1985

原创 一文带你搞懂Java的四大引用:强引用,软引用,弱引用以及虚引用

红色部分在垃圾回收之外,也就是强引用的蓝色部分:属于软引用,在内存不够的时候,才回收虚引用和弱引用:每次垃圾回收的时候,都会被干掉,但是它在干掉之前可能还会存在引用队列中,然后我们可以通过引用队列进行一些通知机制。

2022-10-16 20:00:34 786 2

原创 近五万字关于Java并发(JUC)与虚拟机(JVM)面试题(尚硅谷第二季Java面试题学习笔记)

JUC(java.util.concurrent)JUC 下的三个包Volatile 在日常的单线程环境是应用不到的,Volatile 是 Java 虚拟机提供的轻量级的同步机制,轻量级可以理解为是低配版的syncronized。它是一个修饰符,可以用来修饰变量,被其修饰的变量会有具有volatile的特性,volatile其有三大特性:JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实

2022-10-14 20:47:45 418 2

空空如也

空空如也

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

TA关注的人

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