- 博客(172)
- 资源 (9)
- 收藏
- 关注
原创 【MySQL是怎么运行的】0、名词解释
修改其他事物未提交的数据(a将1修改为2,b将2修改为3,a提交,预期是2,但是结果是3,a写的是错的)(InnoDB默认):同个事务内,读取结果不变,解决脏写,脏读和不可重复读(mvcc读快照):读取其他事务未提交的数据(a将1修改为2,b读发现结果是2,但是a回滚了,b读的是错的):读取到的数据有变化(a读取发现是1,b将1修改为2,a在同个事务内再次读取,发现是2了):行数有变化(a读取发现2行,b新增了1行,a在同个事务内再次读取,发现是3行了):只能读取其他事务提交的结果,解决脏写和脏读。
2025-03-11 00:43:01
144
原创 幂等性解决方案
前端控制控制重复请求分布式锁:适合核心业务或涉及到钱的操作先查后写:使用并发量低的场景悲观锁(for update):适合核心业务(不推荐使用)乐观锁-版本号:常用乐观锁-状态机控制:适合修改状态的场景唯一索引:业务上防重高并发或核心业务:前端控制(筛选80%)+分布式锁(19%)+先查后写(过滤复杂逻辑)+唯一索引或版本号(1%)=100%非高并发及非核心业务:前端控制(筛选80%)+先查后写(过滤复杂逻辑)+唯一索引或版本号(20%)=100%
2024-05-23 07:45:00
2051
原创 Java反射机制
反射之所以被称为框架的灵魂,它赋予了我们在运行时分析类以及执行类中方法的能力。通过反射你可以获取任意一个类的所有和,你还可以这些方法和属性。
2023-09-11 01:13:46
363
原创 门面设计模式
门面设计模式是一种软件设计模式,也被称为外观(Facade)模式。它提供了一个简单的接口,让客户端能够访问复杂系统中的一组接口。通过门面模式,我们可以隐藏系统的复杂性,并提供一个简单的接口来访问系统。此外,门面模式还可以帮助我们解耦系统中的各个模块,从而提高系统的可维护性和可测试性。增加一层提供一个高层次的接口,使得子系统更易于使用。
2023-09-10 15:09:21
786
原创 工厂设计模式
根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。抽象工厂:多个工厂类,多个产品抽象类,产品子类分组,同一个工厂实现类创建同组中的不同产品,减少了工厂子类的数量。工厂方法:多个工厂类,一个产品抽象类,利用多态创建不同的产品对象,避免了大量的if-else判断。简单工厂:唯一工厂类,一个产品抽象类,工厂类的创建方法依据入参判断并创建具体产品对象。定义一个工厂类,根据传入的参数的值不同返回不同的实例,使得产品类满足OCR(开闭原则)
2023-09-10 07:12:10
762
原创 泛型的使用
泛型(Generics)是一种允许你在编写类、接口和方法时使用类型参数的机制,以提高代码的灵活性和重用性。,可以在不同的数据类型上工作,而无需为每种数据类型都编写单独的代码。
2023-09-10 05:56:30
290
原创 基本数据类型和包装类型 使用规范
如果你使用基本数据类型 int 代替 Integer,那么在money未初始化的情况下,你将无法区分是未初始化还是具有某个有效值(例如,0)。如果是基本数据类型,给你一个0,你知道是想给你0,还是没有传输,默认值是0。1、字面常量(Literal Constants): 这些常量是编译时已知的固定值,它们直接包含在代码中,不占用额外的内存位置。在 Java 中,常量的内存位置可以根据常量的类型和声明方式而有所不同。常量是一种特殊类型的变量,它们使用 final 关键字声明,表示它们的值在编译时就已经确定,
2023-09-10 04:34:54
526
原创 git 后悔药
例子:代码已经提交了三个记录到远程库,分别对应了记录1,内容1,记录2,内容2,记录3,内容3. 现在应该写4,但是不小心写了5并且还提交了。PS: 提交记录3里面是内容3,所以这是我错误提交记录前最新的版本,reset到这个版本。pull以下,会发现有冲突,解决冲突,选择本地的代码,然后正常push就可以了。自上而下,撤销可以分为从远程库撤销,从本地库撤销,从暂存库撤销。四种模式在撤销回滚时,都会让HEAD指针改变指向到指定版本。我这里前面操作过了,所以正确内容为6,错误内容为7.这个时候肯定要撤销的。
2023-09-05 20:21:01
2226
原创 字符数组转字符串
根据结果发现,存储没有问题,只可能是编码错误导致每个map的key不同,从而没有将异位词放在一起。肉眼看编码位置没有问题。debug发现返回结果是count.toString().PS:Java中只有String、Date、File、包装类等重写了Object类中的toString()方法。在Java中,如果没有重写toStrign()方法,那么返回结果就是。代码总共两块逻辑,编码和存储到res。显而易见,map比较的是地址而非值。
2023-03-24 13:54:30
130
原创 迭代器模式
迭代器模式如此常用,以至于很多编程语言都默认实现了此模式,所以虽然我们天天都在用迭代器模式,但却很少有自己实现的机会。其核心动机是为了在迭代一个容器对象的同时不暴露其内部细节,这啥意思呢?例如。
2022-10-15 00:57:08
202
原创 [从源码学设计]蚂蚁金服SOFARegistry之程序基本架构
Session 服务器集群。因为会从多个维度来分析设计,比如业务维度和架构维度,因此在本系列中,可能有的文章会集中在模式的总结提取,有的文章会集中在业务实现,有的文章会集中在具体知识点的运用,也会出现 某一个业务模块或者代码段因为业务和实现 在不同文章中被提及的现象,希望大家事先有所了解。最后动态架构如下,我们也大致知道,DataServer就是一个SpringBoot程序,有几个Server,有若干Bean,有若干定时服务,具体有一些其他业务模块等等,这对我们接下来的理解有帮助。
2022-10-07 23:46:00
380
原创 [源码阅读] 阿里SOFA服务注册中心MetaServer(3)
SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。本系列将带领大家一起分析其MetaServer的实现机制。本文为第三篇,介绍MetaServer如何基于raft实现了数据一致性。因为篇幅限制,本文不会涉及 Raft 和 JRaft 的原理和实现,只是讲解MetaServer如何基于 JRaft 的实现。分布式一致性 (distributed consensus) 是分布式系统中最基本的问题,用来保证一个分布式系统的可靠性以及容灾能力。简单的来讲,就是如何在多个机器间对某一
2022-10-07 20:35:25
500
1
原创 [源码阅读] 阿里SOFA服务注册中心MetaServer(2)
SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。本系列将带领大家一起分析其MetaServer的实现机制,本文为第二篇,介绍MetaServer基本功能,比如注册,存储,通知,续约等。MetaServer 的业务启动是从setLeaderProcessListener开始。前面提到,MetaServer 集群内部基于 Raft 协议选举和复制,只要不超过 1⁄2 节点宕机,就可以对外服务。Raft 协议由三个部分组成:如果使用JRaft, 需要实现其状态机,而在MetaS
2022-10-07 20:27:58
431
原创 [源码阅读] 阿里SOFA服务注册中心MetaServer(1)
SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。本系列将带领大家一起分析其MetaServer的实现机制,本文为第一篇,介绍MetaServer总体架构。本系列总体参考了官方的博客,具体请参见"0xFF 参考"。大家可以把参考作为总纲,我这系列文章作为注释补遗翻阅。在微服务架构下,一个互联网应用的服务端背后往往存在大量服务间的相互调用。例如服务 A 在链路上依赖于服务 B,那么在业务发生时,服务 A 需要知道服务 B 的地址,才能完成服务调用。而分布式架构下,每个服务往往
2022-10-07 01:29:34
1776
原创 策略设计模式
策略模式定义了一系列的算法,并将每一个算法封装起来,使他们可以相互替换。当你写代码的时候发现,而你需要根据不同的情况使用if-else等分支结构来确定使用哪种实现方式的时候,想一想这个模式。2017年的2月14号,王二狗和牛翠花约好在天津之眼约定终身,二狗打扮一番后准备出发,此时问题来了:是坐公交去呢,还是打滴滴快车呢?天气看起来也不错,要不骑共享单车吧,省钱还锻炼身体。对应到编程领域就是:目前有三种策略可以实现一个特定的目的,使用何种策略取决于调用者(客户端)
2022-10-06 03:18:21
391
原创 动态代理设计模式
这篇文章中主要介绍了代理模式的两种实现:静态代理以及动态代理。涵盖了静态代理和动态代理实战、静态代理和动态代理的区别、JDK 动态代理和 Cglib 动态代理区别等内容。。
2022-10-05 21:53:24
258
原创 原型设计模式
对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行 引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。在这种情况下,在一个对象中修改该成员变量会影响到另一个对象的该成员变量值前面我们克隆羊就是浅拷贝浅拷贝是使用默认的 clone()方法来实现。
2022-10-03 22:33:53
135
原创 建造者模式
将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,我们通常有两种办法来构建它的对象。例如我们现在有如下一个类计算机类Computer第一:折叠构造函数模式(telescoping constructor pattern ),这个我们经常用,如下代码所示第二种:Javabean 模式,如下所示那么这两种方式有什么弊端呢?第一种主要是使用及阅读不方便。
2022-10-03 22:25:09
120
原创 工厂设计模式
由一个工厂对象决定创建出哪一种产品类的实例。最重要的知识点,这是最重要的知识点,这是最重要的知识点!首先当然是在你需要假设我们现在要生产多种牌子的笔记本电脑,例如要生产小米笔记本电脑和苹果笔记本电脑,那我们如何用代码实现这个业务呢?下图是简单工厂方法模式的图.MacComputer与MiComputer继承了Computer类,SimpleComputerFactory类可以根据不同的条件来生成相应品牌的电脑。简单工厂模式的核心就是通过一个工厂方法根据不同的条件生产的产品。
2022-10-03 22:19:21
197
原创 内部类的使用
使用场景:内部类体现了一种代码的隐藏机制和访问控制机制,内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类,所以没有必要专门用一个Java文件存放这个类。在局部内部类的方法中(比如:show如果调用局部内部类所声明的方法(比如:method)中的局部变量(比如:num)的话,要求此局部变量声明为final的。1.定义:Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类.成员内部类(静态、非静态 ) vs 局部内部类(方法内、代码块内、构造器内)内部类:类的第五个成员。
2022-10-03 21:42:26
141
原创 Java求交集、并集、差集
Java中交集(retainAll)、并集(addAll)、差集(removeAll)求法,以三个HashSet集合为例做演示。
2022-08-20 12:43:46
5253
原创 Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass
Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass
2022-06-28 11:08:55
1420
1
原创 Java中集合能否加入null值
项目场景:剑指 Offer 09. 用两个栈实现队列 public int deleteHead() { while(s2.isEmpty()){ //注意这里,我直接判断第二个栈空就加入第一个栈中的元素,没有判断第一个栈是否为空(当时想的是第一个栈为空不会加入元素或者抛出异常) s2.offerFirst(s1.pollFirst()); } if(s1.isEmpty()&&s2.isEmpty
2022-05-27 01:47:44
1883
原创 idea快速查找一个类或类中方法名和变量
1、知道类名快速查找一个类:Ctrl+Shift+Alt+N或者按两下shift可以自己设置快捷键,settings-》keymap-》我设置ctrl+h2、查找类中方法名或者变量:Ctrl+F12
2022-05-27 01:36:48
5363
转载 Java集合的Stack、Queue、Map的遍历
在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack、Queue、Map类型的遍历,还是有一些讲究的。最近看了一些代码,在便利Map时候,惨不忍睹,还有一些是遍历错误,忽略了队列、栈与普通Collection的差别导致的,这些代码就不作为反面教材了。下面是常用的写法:一、Map的遍历import java.util.Iterator;import java.util.Map;/*** Map的遍历,这个遍历比较特殊,有技巧** @aut
2022-05-27 00:57:15
775
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人