自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

卷王: 乌-鸦的博客

卷王: 乌-鸦的博客

  • 博客(67)
  • 问答 (1)
  • 收藏
  • 关注

原创 负载均衡Ribbon和Feign的使用与区别

Feign 和 Ribbon 是 Spring Cloud 的 Netflix 中提供的两个实现软负载均衡的组件,Ribbon 和 Feign 都是用于调用其他服务的,方式不同,Feign 则是在 Ribbon 的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 Http 请求,不过要注意的是抽象方法的注解,方法名要和提供服务的方法对应上。简单点说,Feign 是对 Ribbon 的封装,而且 Feign 和 Ribbon 的作用位置不同。

2023-11-21 17:06:28 1087

原创 RocketMQ分布式事务 -> 最终一致性实现

分布式事务的问题常在业务与面试中被提及, 近日摸鱼看到这篇文章, 阐述的非常通俗易懂, 固持久化下来我博客中, 也以便于我二刷转载源基于RocketMQ分布式事务 - 完整示例本文代码不只是简单的demo,考虑到一些异常情况、幂等性消费和死信队列等情况,尽量向可靠业务场景靠拢。目前已经完成了订单服务的业务逻辑。我们总结流程如下:第一次调用createOrder,发送事务消息。如果发送失败,导致报错,则将异常返回,此时不会涉及到任何数据安全。

2023-07-21 16:34:29 657 1

原创 Java-透析 -> 查找算法

根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)顺序查找又称为线性查找,是一种最简单的查找方法。适用于线性表的顺序存储结构和链式存储结构。基本思路从第一个元素m开始逐个与需要查找的元素x进行比较,当比较到元素值相同(即m=x)时返回元素m的下标,如果比较到最后都没有找到,则返回-1。复杂度分析查找成功时的平均查找长度为: ASL = 每个元素被查找的概率 * 总的元素的个数=1/n*(1+2+3+…+n) = (n+1)/2;

2023-01-17 16:19:16 543 1

原创 Java-Jstack-生产问题的排查死锁/泄露/cpu负载

首先如果是本地开发环境可以通过JVisualVM查看是否有长时间休眠的线程。

2023-01-13 15:40:02 899

原创 Java-GC和JVM垃圾回收器

JVM在进行GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是指新生代因此GC按照回收的区域又分了两种类型,一种是普通GC(minor GC),一种是全局GC(major GC or Full GC)普通GC(minor GC):只针对新生代区域的GC全局GC(major GC or Full GC):针对年老代的GC,偶尔伴随对新生代的GC以及对永久代的GC内存效率:复制算法>标记清除算法>标记整理算法(此处的效率只是简单的对比时间复杂度,实际情况不一定如此)内存整齐度。

2023-01-05 17:26:48 399

原创 Java分析-对象头

HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)HotSpot虚拟机的对象头(Object Header)包括两部分信息,第一部分用于存储对象自身的运行时数据, 如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,这部分数据的长度在32位和64位的虚拟机(暂 不考虑开启压缩指针的场景)中分别为32个和64个Bits,官方称它为“Mark Word”

2022-12-28 15:44:48 443

原创 Java核心地基-反射

使用的前提条件必须获到类的class字节码文件, 想操控其则需要提前获取到.java的最终形态, 再对其操控才可改变其形态。

2022-12-22 11:12:30 637

原创 Java-IO/NIO至高并发编程

Java IO类概述表将PipedInputStream和PipedOutputStream关联起来代码示例:管道和线程管道的替代阻塞IO模型非阻塞IO模型当用户线程发起一个read操作后,并不需要等待,而是马上就得到了一个结果。如果结果是一个Error时,它就知道数据还没准备好,于是它可以再次发送read操作。一旦内核中的数据准备好了,并且又再次受到了用户线程的请求,那么它马上就将数据拷贝到了用户线程,然后返回。所以事实上,在非阻塞IO模型中,用户线程需要不断地询问内核数据是否就绪,

2022-12-14 17:33:01 460

原创 稳扎稳打-数据结构--链表--树

简单地说,数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了 数据结构对于某些操作是高效的,而对于其他操作则是低效的。所以我们需要理解各种数据 结构,才能在处理实际问题时选取最合适的数据结构数据结构=逻辑结构+物理结构() 。逻辑结构:数据元素间抽象化的相互关系 。物理结构:(存储结构),在计算机存储器中的存储形式。数据结构从逻辑上划分为三种基本类型:手动实现一个栈结构添加元素获取栈的元素判断栈容器是否为空测试链表结构链表结构是由许多节点构成的,每

2022-12-06 16:39:26 94

原创 Java面向对象

先行版本, JAVA编程核心: 面向对象, 热身第一枪《Java编程思想》中提到“万物皆为对象”的概念。它将对象视为一种奇特的变量,它除了可以存储数据之外还可以对它自身进行操作。它能够直接反映现实生活中的事物,例如人、车、小鸟等,将其表示为程序中的对象。每个对象都具有各自的状态特征(也可以称为属性)及行为特征(方法),java就是通过对象之间行为的交互来解决问题的。面向对象就是把构成问题的事物分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事物在解决问题中的行为。类是面向对象中的一个很重要

2022-11-30 22:07:50 69

原创 深扒SQL的执行过程-MySQL

mysql学习第二期, 让sql在你脑海里也能生成执行计划MySQL 的 crash-safe 原理解析MySQL官方中文文档第26章。

2022-11-16 16:42:26 87

原创 Java多线程实战教学

在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在 Java 中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些「池化资源」技术产生的原因。比如大家所熟悉的数据库连接池正是遵循这一思想而产生的!

2022-11-09 23:54:19 567

原创 统一捕获异常的熔错

【代码】统一捕获异常的熔错。

2022-10-11 10:52:52 70

原创 参与感极强-SpringBoot自定义starter与健康监控

当导入redis坐标时,SpringBoot自动创建Jedis的Bean。创建RedisTemplateBean,并完成序列化和反序列化操作创建heima-redis-spring-boot-starter模块,添加依赖添加配置属性类添加配置类(创建JedisBean和RedisTemplateBean)并定义META-INF/spring.factories文件中,让SpringBoot自动加载目的验证自定义starter是否可以使用实现新建项目中引入依赖。............

2022-07-19 23:54:02 396

原创 特殊-硬钢源码-SpringBoot自动化配置源码阅读

SpringBoot自动装配源码解读

2022-07-17 00:36:50 247

原创 轻松学习-JVM-堆-掰碎分解

堆是一种满足以下条件的树:堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。或者说,任意一个节点的值都大于等于(或小于等于)所有子节点的值。!!!特别提示:大家可以尝试判断下面给出的图是否是堆?第1个和第2个是堆。第1个是最大堆,每个节点都比子树中所有节点大。第2个是最小堆,每个节点都比子树中所有节点小。第3个不是,第三个中,根结点1比2和15小,而15却比3大,19比5大,不满足堆的性质。当我们只关心所有数据中的最大值或者最小值,存在多次获取最大值或者最小值,多次插入或删除数据时,就可以使用堆

2022-07-04 15:56:53 103

原创 即兴MQ-Rabbit

MQ作为中大型项目中作用于异步处理,应用解耦,流量削锋和消息通讯等场景,尤其重要,今天就即兴选择RabbitMQ来吹一下怎么玩儿MQ的本质 大概地讲就是(一发一存一消费),在直白点就是一个(转发器)如今我们最常用的消息队列产品(RocketMQ,Kafka等等),你会发现:它们都在最原始的消息模型上做了扩展,同时提出了一些新名词,比如:主题(topic),分区(partition),队列(queue)等等最初的消息队列就是上一节讲的原始模型,它是一个严格意义上的队列(Queue)。消息按照什么顺序写进去,就

2022-07-02 23:31:26 218

原创 MyBatis-PLUS使用教程

这是一篇mybatis-plus的使用记录博客,源码等分析就不做了,帮助学习mybatis-plus的人懂得使用技巧MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。官网:https://baomidou.com无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向

2022-07-01 23:59:34 933 1

原创 随手笔记-Jackson -> @JsonFormat -> 失真问题解决

关于使用雪花算法作为主键id生成, 19位数return给前端出现数据失真, 导致id与数据库中不对应, 极有可能出现缓存穿透问题更多可参考github项目官网解决问题, 也可直接传送到Jackson文档浏览器开发者模式看到的接口返回数据, 此ID为失真状态的valuepostman中测试的接口真实ID为正确的value数据库中对比下来使用了@JsonFormat注解解决失真问题官方文档这样对此做出解释JsonFormat: 具有每种类型行为的一般注释;例如,可用于指定序列化日期/时间值时

2022-07-01 16:13:17 352

原创 学习log-Calendar and LocalDate类的应用

工作中安排到某个量化统计的功能实现,发现对Calendar and LocalDate的使用并不太熟练,借此不加班的机会对自己进行一次学习记录我的方法:观全景,再拆分,然后再copy案例就两个构造器简单翻译一下一共三个getInstance方法,入参不同为重载(Overloading),实际为两个参数反复使用默认应对不同场景全景就这些了,这就是我看到的全景获取日历信息设置未来时间日历对象获取当前的日期对象拿到当前日历对象的毫秒值LocalDateLocalDate介绍在Ja

2022-06-24 00:30:43 134

原创 轻度学习log-kafka的搭建与使用

官网介绍:Kafka是由LinkedIn开发的一个分布式基于发布/订阅的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。Kafka是一个消息系统,用作LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。活动流数据是几乎所有站点在对其网站使用情况做报表时都要用到的数据中最常规的部分。活动数据包括页面访问量(Page View)、被查看内容方面的信息以及搜索情况等内容。这种数据通常的处理方式是先把各种活动以日志的形式写入某种文件,然后周期性

2022-06-09 22:11:23 243

原创 深度学习log-链路追踪-Spring Cloud Sleuth and ZipKin

学习log,公司需要做标品,参考当前链路追踪框架以便于降低运维成本,提高标品逼格,原文连接:传送🚪在大型系统的微服务化构建中,一个系统会被拆分成许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能部署在了几千台服务器,横跨多个不同的数据中心,也就意味着这种架构形式也会存在一些问题:分布式链路追踪(Distributed Tracin.

2022-06-05 11:58:47 306

原创 逻辑控-追Spring循环依赖源码后梳理-附带bean生命周期说明

追源码后梳理流程Object A/Object BA成员属性离包含B,B成员属性里包含A梳理B和A在注入Spring容器中做了什么事来一张清晰的Spring创建Bean的流程图吧Bean的创建最为核心三个方法解释:读此文前应当先分清实例化和初始化的概念实例化:@xxxxxx的地址,value=null初始化:@xxxxxx的地址,value=xxx以下使用Spring Boot version2.x进行演示其中里面调用了11个方法,分别负责刷新/创建/启动等一系列操作以下为Spring B

2022-06-04 13:21:10 146

原创 redis核心科技

Redis数据结构和常用命令1. String字符串2. Hash哈希3. List列表4. Set集合5. Sorted Set有序集合6. Redis常用命令参考Redis事务机制1. Redis事务生命周期2. Redis事务到底是不是原子性的?3. Redis为什么不支持回滚(roll back)?4. Redis事务失败场景5. Redis事务相关命令(1)WATCH(2)MULTI(3)UNWATCH(4)DISCARD(5)EXECR..

2022-05-31 16:18:50 214

原创 JVM调优/排查

JVM的常用命令和可视化工具介绍与使用,线上调优方法和排查问题思路分享,解决方案分析与饭后谈资

2022-05-27 16:27:12 192

原创 面试题:TCP与UDP的区别

TCP与UDP的区别,以及原理

2022-05-13 16:48:16 371

原创 Redisson分布式锁轻松入门实战与讲解

我们先来看下 Redis 官网对分布式锁的说法:而 Java 版的 分布式锁的框架就是 Redisson。本篇实战内容将会基于我的开源项目 PassJava 来整合 Redisson。我把后端、前端、小程序都上传到同一个仓库里面了,大家可以通过 Github 或 码云访问。地址如下:Github: https://github.com/Jackson0714/PassJava-Platform码云:https://gitee.com/jayh2018/PassJava-Platform..

2022-03-15 14:18:53 1282 2

原创 深入认识Redis

简单介绍一下 Redis 呗!简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。分布式缓存常见的技术选型方案有哪些?分布式缓存的话,使用的比较多的主要是 Memca

2021-12-19 19:44:55 127

原创 头脑风暴 HashMap源码+底层数据结构分析

HashMap 简介HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。 JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认

2021-12-08 23:44:15 112

原创 至强ConcurrentHashMap,源码+底层数据结构分析

至强ConcurrentHashMap源码剖析

2021-12-08 10:42:19 140

原创 最骚的ArrayList 源码+扩容机制分析

1. ArrayList 简介ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。ArrayList继承于 AbstractList ,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。public class ArrayList<E&gt

2021-12-07 01:04:03 149

原创 LinkedList源码分析

简介LinkedList是一个实现了List接口和Deque接口的双端链表。 LinkedList底层的链表结构使它支持高效的插入和删除操作,另外它实现了Deque接口,使得LinkedList类也具有队列的特性; LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以调用静态类Collections类中的synchronizedList方法:List list=Collections.synchronizedList(new LinkedList(...));内部结构

2021-12-05 22:45:09 79

原创 Java8新特性stream流的优雅操作

TCP与UDP的区别以及三次握手和四次挥手UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。虽然UDP不提供可靠交付,但是正是因为这样,省去和很多的开销,使得它的速度比较快,比如一些对实时性要求较高的服务,就常常使用的是UDP。对应的应用层的协议主要有 DNS,TFTP,DHCP,SNMP,NFS 等。 TCP,提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的的运输服务,但是正因为这样,不可避免的增加了许多的开

2021-12-05 22:18:00 189

原创 Java移位运算符原来这么简单

精明购回调:优惠券定义推送接口地址:/emall-miniapp/smartShopping/coupons/definition请求方式:POST请求数据类型:application/json响应数据类型:*/*接口描述:精明购回调:优惠券定义推送请求示例:{ "batchNumber": "", "couponsDescribe": "", "couponsDetailImg": "", "couponsFaceValue": 0, "couponsMasterImg": "",

2021-11-26 17:52:32 105

原创 看大佬的saeta的理解忍不住收藏

转载: 原文链接有三个组成部分:1,TC:事务协调器,是个独立的中间件,需要部署运行,维护着全局事务的运行状态,接收TM发起的全局事务的提交和回滚,负责和RM通信协调各个分支事务的提交和回滚2,TM:事务管理器,负责开启一个全局事务3,RM:控制分支事务,负责分支注册,并接收事务协调器TC的指令,拿新用户注册送积分来举例,有两个微服务,一个用户服务,一个积分服务具体的执行流程如下:1,用户服务的TM像TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID,2,用户服务RM向T

2021-09-17 17:00:13 87

原创 B-树,B+树,B*树区别及特性

转载笔记:转载自原作者文章传送门B-树B-树是一种多路搜索树(并不一定是二叉的)1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:1、根结点至少有两个子女;2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;3、除根结点以外的所有结

2021-09-17 00:37:46 217

原创 Java设计模式: 装饰器模式

装饰模式定义:动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更加灵活。通用类图:饰模式的构成:抽象构件(Component)是一个接口或者是抽象类,就是定义我们最核心的对象,也就是原始的对象。具体构件(ConcreteComponent)是最核心,最原始,最基本的接口或者抽象类的实现,你要装饰的就是它。装饰角色(Docorator)一般是一个抽象类,做什么用呢?实现接口或者抽象方法,它里面可不一定有抽象方法呀,在它的属性里必然有一个private变量指向Co

2021-04-22 23:02:34 93

转载 Java设计模式: 桥接模式

桥梁模式(桥接模式)定义:将抽象和实现解耦,使得两者可以独立地变化。桥梁模式是为了解决类继承的缺点而设计的。一个类想拥有另一个类的方法,可以不继承,只需要铺设一个桥梁(引用)架过去就OK了。通用类图如下:角色介绍:● Abstraction——抽象化角色它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。● Implementor——实现化角色它是接口或者抽象类,定义角色必需的行为和属性。● Refined Abstraction——修正抽象化角色

2021-04-22 14:34:56 110

原创 Java设计模式: 适配器模式

配器模式的个人理解:首先有一个目标角色、一个源角色还有一个适配器角色。我们要做的就是利用适配器角色将源角色转换为目标角色。而目标角色是一个正在良好运行的一个角色。转换方法:适配器类继承extends源角色——类适配器适配器类和原角色类进行关联,即通过适配器类的构造函数将多个源角色引入——对象适配器(常用)适配器模式的定义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。通用类图:角色定义:● Target目标角色

2021-04-22 00:16:56 105

原创 Java设计模式: 代理模式

代理模式:(Proxy Pattern)也叫做委托模式,是一个使用率非常高的模式。定义:为其他对象提供一种代理以控制对这个对象的访问。个人理解:代理模式将原类进行封装,客户端不能直接找到原类,必须通过代理角色。即代理是原类的一个替身,客户端要找原类,统统找代理就可以搞定。明星和经纪人就是一种代理模式。通用类图如下:角色定义:● Subject 抽象主题角色抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。● RealSubject 具体主题角色也叫做被

2021-04-21 23:47:21 115

空空如也

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

TA关注的人

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