- 博客(77)
- 问答 (1)
- 收藏
- 关注

原创 【测试Ribbon手写轮询算法 time:2022-04-02】Ribbon,轮询算法,DiscoveryClient,LoadBalancer,getAndIncrement自旋锁
Ribbon,轮询算法,DiscoveryClient,LoadBalancer,getAndIncrement自旋锁
2022-04-02 11:03:14
245

原创 【学习笔记 time: 2022-03-31】 CAS底层原理分析(AtomicInteger,atomicStampedReference使用)
CAS,AtomicInteger,线程安全,CPU原语
2022-03-31 18:12:31
578

原创 【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
多线程生成720w数据起因思路实践测试起因公司最近有个客户需要把2-3w台设备各类数据存放到我们平台,这么多设备带来的数据量一年下来单表大概会达到720w,这样会使得平台某些分页查询或相关业务效率变慢。所以想让客户自己去阿里云买服务器,但是客户不想管理,想丢在我们平台。那也没办法,客户是上帝,能做是能做,不过得加钱!!! 哈哈哈要帮客户存储数据,那得知道买多大的服务器合适,或者租多大服务器,一年得多少钱,这个得有一定的评估。所以就得生成一年的数据量了,进行存储和效率测试,系统后台的性能调优。思路
2022-03-15 19:26:16
480

原创 【微信小程序 - 工作实战分享】1.微信小程序发送手机短信验证码(阿里云)
发送手机短信验证码前言一. 准备工作二. 配置三. 实战代码(仅仅是后台代码,前端传入手机号)总结前言在网站和移动应用中利用短信验证码进行信息确认是最常用的验证手段。随着短信验证码的技术更新,短信验证码的应用程序也非常多样,如交易确认、授权绑定、登录保护等。 本文用在微信小程序手机号登录短信验证码对注册用户的管理更加方便,用户通过手机注册网站平台,手机号码+短信验证码的登录方式,操作非常简单,比起输入密码,用户可能更喜欢短信验证登录。短信验证码保证了用户注册时的质量与数量,它可以更好的校验用户真实身
2022-02-22 13:56:15
2425
4

原创 2021-11-15 Java8新特性 stream流分享
stream目录1. stream 与 parallelStream2. filter3. findFirst() findAny()4. max min5. map flatMap6. reduce 规约(缩减) 实现集合求和,求乘积,求最值7. toList toMap toSet8. collect {count,averagingInt,averagingLong,averagingDouble,maxBy,minBy,summingInt,summingLong,summingDouble}
2021-11-15 14:46:09
398
6

原创 2021-11-08 杭州 重复点击提交、产生多笔数据、保持数据只操作一次---->接口幂等性校验
幂等校验一、工作真实场景 + 常出现场景二、工作解决方案 + 百度解决方案一、工作真实场景 + 常出现场景真实场景:在一次工作中进行成品出库创建成品出库单时,手抖了一下,重复点击了两次确定(提交表单)。结果很神奇的发现居然产生了两笔一模一样的数据(流水号都一样),当时就很懵逼,稍作思考,想想应该是在同一时刻创建了两个出库单。感觉很有意思(因为之前没有遇到过,写代码的时候也没有考虑到这个问题的发生),后面换了一种方式复现场景:提交表单时多次点击Enter按钮,还是会产生多笔重复数据。常见场景:订单接
2021-11-08 10:45:20
1299
6

原创 2021-11-03 杭州 java IO流详解(借鉴-侵-删)
这里写自定义目录标题IO流简介分类使用方法案例代码实例IO流简介1.主要用于文件的读写,数据的网络传输(发送,接收)。2.流是一组有序的字符集和,是对数据传输的总称或抽象。分类1.按照处理数据类型分类:字节流和字符流字节流:数据流中最小的数据单元是字节字符流:数据流中最小的数据单元是字符以上为 Java IO流中的四大基流2.按照流向分类:输入流和输出流输出:把程序(内存)中的内容输出到磁盘、光盘等存储设备中输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中使用
2021-11-03 15:01:49
161
11

原创 2021-11-01 杭州 单例模式 (借鉴-侵-删)
这里写自定义目录标题饿汉式单例模式懒汉式单例模式饿汉式单例模式饿汉式单例模式在类加载的时候就立即初始化,并且创建单例对象。它绝对线程安全,在线程还没出现以前就实例化了、不可能存在访问安全问题。优点:没有加任何锁、执行效率比较高,用户体验比懒汉式单例模式更好。缺点:类加载的时候就初始化,不管用与不用都占着空间,可能浪费内存,“尸位素餐”。Spring中loC容器ApplicationContext本身就是典型的饿汉式单例模式。public class CommTest { private
2021-11-01 10:01:40
98
14
转载 【2023/6/8 seata-share-1.2】分布式事务-Seata支持的模式之一 AT模式详解
Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式。这里讲解的是AT
2023-06-08 16:38:50
2
原创 【2023/6/8 seata-share-1.1】分布式事务-Seata的架构和设计理念分享
Seata的架构和设计理念旨在提供一种简单、可扩展的分布式事务解决方案,帮助开发人员处理分布式环境下的事务问题。通过将事务管理逻辑与业务逻辑解耦,Seata能够提供高性能、高可靠性的分布式事务支持。
2023-06-08 15:17:24
4
原创 【面试高频 time: 2022-10-26】SpringBoot整合Redisson实现分布式锁
SpringBoot整合Redisson实现分布式锁
2022-10-26 14:04:15
341
原创 【学习分享 time: 2022-07-22】模拟银行账户,对业务写方法加锁,业务读方法不加锁,行不行?
*在读的位置也加上锁!**这个时候就需要抢到写的锁才执行读操作,所以得等待写操作结束之后再进行读!这样结果就会是100,100。从打印的结果可知,在去读的时候,写还未完成,在设置好name后处于睡眠两秒的状态,后面过了两秒第二次便可以获取到。由此可知,发生了脏读,第一次未获取到真实的100!你的点赞收藏是对小编最大的支持。...
2022-07-22 14:37:50
32
原创 【学习记录 time: 2022-07-21】Java8 Lambda 表达式中的 forEach 如何提前终止?
分析我们平时在普通的for循环时使用break跳出循环,而在普通的for循环中使用不止会跳出循环,更是会直接返回整个方法结果。需要注意的一点是要确保你forEach()方法体内不能有其它代码可能会抛出的异常与自己手动抛出并捕获的异常一样;在实际运行中,往往有很多不突发情况导致代码提前终止,比如空指针异常,其实,我们也可以通过抛出假异常的方式来达到终止forEach()方法的目的。当然也可以抛出想要跑出的内容。可以看出forEach是一个方法,当然是用return来结束的,而且void,没有返回值。...
2022-07-21 10:26:32
328
原创 【学习分享 time: 2022-05-23】对各种排序算法的逻辑的理解(插入排序,选择排序,冒泡排序)
参考数据结构可视化网(网站)比较排序算法插入排序(每检索一个元素从后往前比较插入)步骤动态图代码实现选择排序(每检索一个元素取得最小值与检索元素交换)步骤代码实现动态图冒泡排序(每次检索把最大的往后排)步骤代码实现动态图插入排序(每检索一个元素从后往前比较插入)步骤步骤:1.从第一个元素开始,该元素可以认为已经被排序2.取下一个元素val,从已排序的元素序列从后往前扫描3.如果该元素大于val,则将该元素移到下一位4.重复步骤3,直到找到已排序元素中小于等于tem的元素5.tem插入到该元
2022-05-24 11:36:58
80
原创 【学习笔记 time: 2022-05-20】ThreadLocal 学习笔记分享
ThreadLocal 学习笔记分享起因一、ThreadLocal简介二、ThreadLocal与Synchronized的区别三、ThreadLocal的简单使用四、ThreadLocal的原理(肝源码)4.1 ThreadLocal的set()方法4.2 ThreadLocal的get方法4.3 ThreadLocal的remove方法起因公司用户登录做成SSO(单点登录),用到JWT做为认证生成Token,并使用了ThreadLocal作为用户信息交换的媒介。但不懂里面的实现,所以就肝他。一、T
2022-05-20 15:46:08
97
原创 【工具分享 time:2022-05-07】分享自己写的小工具:过滤两文件不同元素(用BufferedReader读取)
@Test public void test() throws IOException { HashSet<String> hashSet = new HashSet<>(); BufferedReader fileInputStream2 = new BufferedReader(new FileReader("E:\\2.txt")); BufferedReader fileInputStream1 = new Buffer
2022-05-07 17:08:54
108
原创 【学习笔记 time: 2022-05-07】java 流的使用以及选择(字节流,字符流)
流的使用以及选择分类字节流子类FileInputStreamFileOutputStream文件拷贝字符流(writer)FileReaderFileWriter分类按流操作的数据单位:字符流与字节流,其中字符流一般操作二进制文件,而字符流操作文本文件。按流向:输入流和输出流按流的角色:节点流和处理流(包装流)** 所有子类都是由由上面抽象类而来的,命名规范以基类为后缀。字节流子类FileInputStream: 文件输入流BufferedInputStream: 缓冲字节输入流
2022-05-07 15:57:47
147
原创 数组算法 - 移动零
题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。解题思路使用双指针,将非零的数全部按顺序排在前面,后面的都赋0代码class Solution { public void moveZeroes(int[] nums) { int length = nums.length; int j=0; for (int i = 0; i < length; i++) { if (n
2021-12-27 17:41:17
58
原创 数组算法 - 加一
题目给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。解题思路首先,判断数组里面是否全为9,是的话单独处理,将数组长度加一并首位赋值一,其他全零;其他情况正常处理,从最后一个开始加一,每逢到十便进一位。代码class Solution { public static int[] plusOne(int[] digits) { int le
2021-12-27 17:23:41
325
原创 数组算法 -只出现一次的数字
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。解题思路将数组排序,然后每两个比较,如果不相等,则得到前一个数据是只有一个。代码class Solution { public static int singleNumber(int[] nums) { Arrays.sort(nums); for (int i = 0; i < nums.length; i=i+2) {
2021-12-23 18:09:28
359
原创 数组算法 -存在重复元素
题目给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。解题思路HashSet存储元素不可重复,把nums的元素往里面丢,如果丢不进去则说明存在相同的元素,返回true代码class Solution { public static boolean containsDuplicate(int[] nums) { int length = nums.length; i
2021-12-23 17:48:05
461
原创 数组算法 - 旋转数组
题目给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。解题思路用一个临时的temp存储nums的数据,再根据k的值进行替换。k替换要考虑到一些情况:1.当k为0时或者为数组长度整数倍时直接结束2.当k大于length并且取余不为零时,将k换成余数代码class Solution { public static void rotate(int[] nums, int k) { int length = nums.length; if
2021-12-23 17:06:59
172
原创 数组算法 - 买卖股票的最好时机
题目给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。解题思路大致理解就是只要后一天比前一天股票的价格高,就可以在前一天购入后一天卖出,获得收益,当然这个是会比较每两天间隔的股票价。如果后一天比前一天股票价格低的话就不做操作即可代码class Solution { public static
2021-12-23 15:30:05
69
转载 【Java设计模式 - 创建型模式3】抽象工厂模式
java设计模式之工厂模式简介描述实现简介抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。描述意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决:主要解决接口选择的问题。何时使用:系统的产品有多于一
2021-12-22 16:23:48
79
1
原创 【Java设计模式 - 创建型模式2】工厂模式
java设计模式之工厂模式简介描述实现结果简介工厂模式是在工作中第一次正式使用的(当然准确说是抽象工厂),所以作为第二篇的设计模式分享。工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。描述意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
2021-12-20 11:27:20
101
17
原创 【Java11 新特性】 HttpClient 使用
目录简介同步异步结果简介HTTP 客户端是在 Java 11 中添加的。它可用于通过网络请求 HTTP 资源。它支持 HTTP/1.1和HTTP/2,包括同步和异步编程模型,将请求和响应主体作为反应流处理,并遵循熟悉的构建器模式。同步代码public static void main(String[] args) { /** * 构造器创建 * 首选协议版本( HTTP/1.1 或 HTTP/2 ) * 是否跟随重定向
2021-12-16 18:09:57
1057
原创 【Java设计模式 - 创建型模式1】单例模式
java设计模式之单例模式简介场景实现单例模式的几种实现方式懒汉式,线程不安全懒汉式,线程安全饿汉式双检锁/双重校验锁(DCL,即 double-checked locking)登记式/静态内部类枚举简介之所以最开始先写单例模式,原因在于单例模式可能大多数小白也用过,而且也是初级java面试常考查的一种模式,也是相对于较简单的一种设计模式。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访
2021-12-13 11:50:09
64
10
原创 【Java设计模式 - 专栏开篇简介】 java设计模式开篇
java设计模式开篇缘由计划设计模式简介设计模式适合人群缘由这还要从一次工作说起,平时也没怎么注意设计模式的使用,可能平时有使用到一些简单的设计模式,比如单例模式,策略模式,代理模式等等。那次是公司的一个需求,我按照自己常规的思路去解决:公司有一笔完整的数据,要对接给很多客户,但是不同客户所需要的数据不尽相同,都能在这个完整的数据里面得到,开始是两三个客户,倒没什么,都是按照常规的数据对接流程过去,到后来发现,其实他们之间有一些共同之处,貌似可以组合到一起,后面就用到了抽象工厂模式,将基础数据抽象化,
2021-12-10 13:15:03
84
9
原创 【JAVA集合篇 - HsahMap】你真的了解HsahMap吗?
JAVA集合篇 -HsahMap前言HsahMap的继承与实现HsahMap 新增、修改、删除、计算元素等HashMap 常用方法前言HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。HashMap 是无序的,即不会记录插入的顺序。HsahMap的继承与实现HashMap 的 key 与 value 类型可以相同也可以
2021-12-09 14:48:29
80
13
原创 【JAVA集合篇 - HsahSet】你真的了解HsahSet吗?
JAVA集合篇 -HsahSet前言HsahSet的实现与继承HsahSet元素使用HsahSet 添加、判断、删除、计算元素,迭代等前言HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 允许有 null 值。HashSet 是无序的,即不会记录插入的顺序。HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。HsahSet的实现与继承pub
2021-12-09 13:21:46
463
原创 【JAVA集合篇 - LinkedList】你真的了解LinkedList吗?
JAVA集合篇 - LinkedList前言LinkedList对比ArrayList使用场景LinkedList 继承与实现LinkedList使用LinkedList 迭代数组列表LinkedList 常用方法前言链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表。一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。一个双向链表有三个整数值: 数值、向后的节点
2021-12-08 19:14:49
90
1
原创 【JAVA集合篇 - ArrayList】你真的了解ArrayList吗?
JAVA集合篇 - ArrayList前言ArrayList 添加、访问、修改、删除元素,计算大小ArrayList 迭代数组列表ArrayList E为对象,基本数据类型使用包装类ArrayList 排序Java ArrayList 方法前言1.用了这么多次Arraylist,真的理解ArrayList吗?ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接
2021-12-08 17:50:34
88
原创 PostgreSQL 常用函数分享
PostgreSQL 常用函数PostgreSQL 内置函数(聚合函数)PostgreSQL 数学函数PostgreSQL 字符串函数和操作符PostgreSQL 类型转换相关函数PostgreSQL 内置函数(聚合函数)COUNT 函数:用于计算数据库表中的行数。MAX 函数:用于查询某一特定列中最大值。MIN 函数:用于查询某一特定列中最小值。AVG 函数:用于计算某一特定列中平均值。SUM 函数:用于计算数字列所有值的总和。ARRAY 函数:用于输入值(包括null)添加到数组中。N
2021-12-08 12:59:59
4572
2
原创 Mybatis-plus + springboot 乐观锁的使用(工作实践)
目录场景解决步骤数据库加version字段DO和mapper加字段和注解加入MP插件配置将订单表抽取出来加上事务结果场景工作中一个商品的出库操作时,快速重复点击出库按钮,造成了多笔重复数据,撤回后使得库存数目变化,为了保证数据库的数据一致性,对订单表加上乐观锁。解决步骤数据库加version字段DO和mapper加字段和注解/** * 乐观锁积分 */ @Version @TableField(fill = FieldFill.INSERT) pri
2021-12-03 17:37:35
496
14
空空如也
layui框架新增表单报304
2021-02-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人