- 博客(23)
- 收藏
- 关注
原创 幂等性常用的解决方案
但是唯一索引的添加也是一个技术活,如果我们对一个单一的字段设置为唯一索引的话,如果你的这个业务场景种可以进行数据的真正删除的话那么这么设计是没有问题的,但是如果你的业务中要求你的数据不能真正的删除而是需要进行留档,用户的删除只是进行逻辑删除的话,我们设计的单一的字段为唯一索引的话,那么我们插入新数据的时候就会出现唯一索引冲突的问题了。在进行讲解方案之前,我想先说一下什么是幂等性,下面是我用自己的理解说的,不是专业的术语,对于同样的多次请求,只会对第一次请求进行处理,多次请求返回的结果是相同的。
2023-06-01 17:59:08
434
原创 订单业务中的重要问题:超卖问题的解决方案
超卖问题,通俗的来说就是我们商家只有100件库存但是卖出去了100+件商品,出现了多买的问题。出现的场景:举个简单的例子:比如此时只剩下了最后一个商品,有两个人在抢这最后一个商品,此时A进行到了下单的页面,但是网速很慢卡在了这里,此时库存的数量还是没有扣除的一直在转圈圈,但是此时另一个人的网速快已经下单并且支付成功了,此时数据库中的库存数量已经减一变成了0,突然此时A结束转圈了去支付了,也下单了,那么库存就变成了-1,这只是有两个人在同时抢,那么你想想如果有10w人在一起抢呢?
2023-05-28 17:42:19
1189
原创 MySQL45讲第1篇-第14篇读书笔记
解决方案: 因为这个登录名的前面六位和后缀都是固定的,所以不管我们是使用前缀索引还是倒序存储都不能达到很好的效果,那么我们应该怎么办呢?我们可以将入学年份和顺序编号这9位做为一个索引,利用hash字段的思想,hash的规则不是crc32函数了,而是简单的字符串转数字。
2023-05-10 20:16:56
147
原创 自己造一个简易的IOC轮子
6、去遍历这个文件夹下的所有的文件,因为我们要扫描这个包以及下面的所有子包中标注了@Be的类。 3、在Java中全类名的书写格式是这样的“com.lyq”,以".“分割的,因为我们要去操作系统的文件中去获取对应的文件,所以这个格式肯定是不对的,所以我们需要对这个格式进行一个转义,将“.”替换成”\",这个过程要注意转义。 8、通过这个全类名我们可以得到对应的类class,然后我们要判断这个类是不是接口,因为接口是不能实例化的,所以如果是一个接口的话,我们是不处理的,我们只处理是一个类。
2023-05-10 16:56:43
541
原创 Java定时任务框架:Elastic-job、Quartz、XXL-JOB 学习
Java定时任务:Elastic-job、Quartz 、XXL-JOB 学习一、Elastic-job分布式定时任务框架学习一、Simple类型的任务快速开启一个simple任务的步骤1.创建一个maven工程2.导入elastic-job的依赖,使用的是最新版本2.1.5 <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lit
2023-04-18 22:03:18
1564
原创 一篇文章带你打通Zookeeper的基本理论-包括paxos算法、Leader选举、ZAB协议
一篇文章带你了解zookeeper中所有理论知识,用问题做引导,保你看得懂
2023-04-05 11:34:39
245
原创 Spring Boot 学习笔记整理
spring boot 笔记1.配置文件1.application.properties2.application.yml作用:修改spring boot的默认设置YAML:比XML和JSON更适合做配置文件,以数据为中心2.YAML使用yaml语法可以将yml配置文件的属性绑定在JavaBean中,JavaBean中必须用两个注解@Component//将JavaBean添加到容器中才能使用这个功能@ConfigurationProperties(prefix = "person")//
2021-06-11 19:05:21
1689
原创 Spring Boot整合Spring Data JPA学习笔记
Spring Boot 整合Spring Data JPAORM思想主要目的:操作实体类相当于操作数据库表建立两个关系:1.建立实体类和表的映射关系2.建立实体类中的属性和表中字段的映射关系不再重点关注sql语句(这是ORM思想我感觉最好的一个地方)实现了ORM思想的框架:mybatis,hibernateJPA底层实现数据库语言的还是hibernateSpring Boot 整合Spring Data JPA 的时候Dao层的repository接口类继承的四个接口的详解Spring
2021-04-15 17:48:22
245
原创 153. 寻找旋转排序数组中的最小值
153. 寻找旋转排序数组中的最小值题目描述已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]]
2021-04-08 19:12:30
70
原创 66. 加一
**给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。 示例 2: 输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。 示例 3: 输入:digits = [0] 输出:[1]**代码如下 class
2021-03-30 18:51:46
44
原创 88. 合并两个有序数组
88. 合并两个有序数组给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums
2021-03-16 19:15:53
67
原创 121. 买卖股票的最佳时机
121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。思路:首先我们一次遍历然后找到一个最小值,然后我们再用最小值后面的值减去它求最大值 class Solution { public int maxProfit
2021-03-14 19:59:22
56
原创 283. 移动零
283. 移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。思路:首先我们先遍历数组,当遍历到不为0的数据的时候就将数据放在数组前面,最后剩下的就是0 class Solution { public void moveZeroes(int[] nums) {
2021-03-13 11:56:35
50
原创 力扣14题 最长公共前缀
力扣14题 最长公共前缀讲解题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。首先我们正常人的思路肯定是将一个字符串数组中的各个字符串的字母一个一个的比较,而不是那种训练过算法的人的算法思想所以今天我将来讲一下正常人的思路Java 代码如下 class Solution { public String longestCommonPrefix (String[]strs){ if(strs.length==0||strs==
2021-03-11 19:38:47
141
原创 能够动态调整数组大小的实现
**能够动态调整数组大小的实现所有集合类抽象数据类型实现的模板**代码如下: **package stack;import java.util.Iterator;public class ResizingArrayStack<Item> implements Iterable<Item>{ private Item[] a=(Item[])new Object[1];//栈元素 private int N=0;//元素个数 public boo
2021-02-23 21:51:14
506
原创 利用双栈实现加减乘除等表达式(包括不省略括号)计算
**利用双栈实现加减乘除等表达式(包括不省略括号)计算**首先我们明确一下这个问题的算法非常简单,读者不需要有心理压力。。看完就会算法的思路:我们首先需要创建两个栈,两个栈一个用来存放数据叫做操作数栈,另一个栈用来存放运算符叫做运算符栈。首先我们从左向右的读取表达式,遇到“(” 我们忽略不需要对左括号做出什么反应,如果我们读取到+、-、、/的时候我们将他们压入运算符栈,读到数字的时候我们把它压入操作数栈,**如果我们读到”)“的时候,我们将操作数中的一个数字弹出栈,然后将运算符栈中的最上面的运算符弹
2021-02-23 21:21:30
408
原创 关键路径讲解
关键路径详解最近数据结构刚刚学到关键路径这里,老师为了赶进度开始讲的飞快,可能上课一不留神就会跟不上老师的思路与节奏,只好课下自己学习一下关键路径,这里给他做一个总结,也算是自己的一种记录。这是一个简单的AOE网,它是一个有向边的图,每两个节点之间的a0,a1之类的东西叫做时间,最后我们求得关键路径也和他们有关系。事件后面跟着的数字是权值,我们可以理解为做完这个事件所需要的时间。首先我们要知道我们要求的关键路径是什么,关键路径就是这个时间所需要完成的最早时间和最晚时间一样,说明这个时间必须再规定的时间
2020-11-14 21:47:10
2800
2
转载 在类外如何访问私有成员
(1)通过公共函数为私有成员赋值class Test {private: int x, y;public: void setX(int a) { x=a; } void setY(int b) { y=b; } void printXY(void) { cout<<“x=”<<x<<’\t’<<“y=”<<y<<endl...
2020-11-01 20:45:50
6366
原创 冒泡排序记忆
**```cpp**#include<iostream>using namespace std;int main(){ int a[10]; int i,j,c; for(i=0;i<10;i++) { cin>>a[i]; } for(j=0;j<9;j++) for(i=0;i<9-j;i++) { if(a[...
2020-11-01 20:45:42
89
原创 形参个数不确定时如何去写函数
对于形式参数不确定的函数,比如对n个数进行求平均值,我们不知道n的值,那么我们如何去写函数呢。方法一:处理大量的数据的时候我们可以用指针的方法,我们可以在形参的定义中给出数组的首地址以及参数的个数n,格式如下average(double *a,int n)这个方法就是把a这个数组的首地址给出#includeusing namespace std;int main(){double a...
2020-02-23 10:53:20
826
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人