- 博客(27)
- 收藏
- 关注
原创 用户注册短信验证码(防刷)
用户注册短信验证码防刷1.使用场景注册验证信息变更: 修改密码、手机号等个人信息时,确保是用户本人操作,进行短信验证找回密码动态登录2.防刷目的防止被黑客利用进行短信轰炸,防止浪费短信余额3.防刷手段前端图形验证码前端滑动类前端点击类单个手机号请求限制单个ip请求限制手机号码真实性限制4.实战操作下面介绍一下图形验证码方式引入依赖 <dependency> <groupId>cn
2022-04-06 14:38:48 1673
原创 JSR303自定义注解校验
JSR303自定义注解校验1.常见校验注解@Null 带注解的元素必须为null,接受任何类型 @NotNull 带注解的元素必须为null,接受任何类型 @NotEmpty 带注解的元素不得为null或为空。 支持的类型有: CharSequence (评估字符序列的长度) Collection (评估集合大小) Map (评估地图大小) 数组(计算数组长度)@NotBlank 带注解的元素不能为null并且必须至少包含一个非空白字符。 接受CharSequen
2021-07-10 23:30:25 524 3
原创 SpingBoot2.x+Mockito+Junit5单元测试
SpingBoot2.x+Mockito+Junit5单元测试1.引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <e
2021-07-08 11:15:43 473 1
原创 RocketMQ同一Topic、消费组创建多个消费者失败问题
文章目录业务场景问题复现解决方式问题跟踪业务场景rocketmq建议一个服务对应一个topic,但是一个服务下会有多个不同的业务消息,同时rocketmq建议不同的业务消息对应不同的tag,当SpringBoot整合RocketMQ时,设置多个消费者发生报错问题复现RocketMQ创建多个消费者(同一个消费组)消费同一Topic的不同tag的消息发生报错2021-05-27 11:10:12.862 ERROR 7636 --- [ main] o.a.r.s.a.Listen
2021-05-27 11:27:39 8916 3
原创 RocketMQ的消息存储
RocketMQ消息存储官方文档说明1.消息存储整体架构tag:补充图示CommitLog作用:消息的存储文件存储路径:$HOME/store/commitlog/{fileName}ConsumerQueue作用: 可以看成基于Topic的CommitLog索引文件,记录了commitlogOffset/msgSize/tagsCode 保存了指定topic下的队列消息在commitlog的起始偏移量offset、消息大小size、消息的tag的hashcode值。
2021-05-26 16:53:19 151
原创 RocketMQ解决分布式事务案例
借鉴转载总结自原文链接订单服务 + 库存服务1.订单服务中前端请求创建订单,计算商品的价格、数量等信息存储到订单表中2.订单服务向库存服务发送扣减库存的请求(远程调用)transaction_log:事务日志表。记录扣减库存事务msg的事务Id和订单idOrderTransactionMQProducer:订单事务msg生产者OrderTransactionListener:订单事务msg监视器executeLocalTransaction:执行本地事务createOrder
2021-05-25 17:35:42 303
原创 RocketMQ事务消息的理解
RocketMQ事务消息的理解1.简述: 保证本地事务和发送消息的一致性,不保证后续消费者的一致性。2.原理:事务消息采用2PC+事务补偿机制来保证一致性2PC:提交回滚事务消息事务补偿机制:处理二阶段超时或者失败的消息,利用了事务回查来检查本地事务的状态,从而判断事务消息是提交还是回滚。3.事务消息的流程概要提交回滚事务消息1.发送half消息2.half消息回传ack3.MQ Server将消息持久化4.执行本地事务,根据本地事务的执行成功与否来决定事务消息的
2021-05-25 16:13:04 171
原创 1.2.java对象创建的过程
java对象创建的过程文章目录java对象创建的过程1.检查是否类加载完成2.给对象分配内存空间3.给对象初始化零值4.对象头设置一、Java对象内存布局二、Java对象访问定位5.执行\字节码指令1.检查是否类加载完成JVM执行一条字节码new指令时,先去检查这个指令的参数是否能在Class常量池里定位到一个类的符号引用,并且检查这个符号引用代表的类是否被加载,解析和初始化过,如果没有,则执行对应的类加载检查过程(ClassLoader)。2.给对象分配内存空间类加载检查通过之后,JVM会为新
2021-05-11 23:49:48 284
原创 1.3.Java OOM异常基本定位思路
Java OOM异常定位思路文章目录Java OOM异常定位思路1.概述2.发生OOM的内存区域有哪些?3.OOM可能的区域以及原因Java堆虚拟机栈、本地方法栈1.概述OOM:OutOfMemory(内存溢出),一般是内存不足导致。JVM规范规定了,除了程序计数器外,其他的运行时内存区域都有可能发生OOM。2.发生OOM的内存区域有哪些?Java堆虚拟机栈、本地方法栈方法区、运行时常量池直接内存3.OOM可能的区域以及原因Java堆原因堆是用来存放实例对象的,如果不断地
2021-03-22 23:35:20 575
原创 Keepalived入门(笔记用)
文章目录1.什么是keepalived?2.作用3.keepalived.conf配置文件real_server的健康检查方法4.安装、配置注意事项5.相关博客1.什么是keepalived?Keepalived是用C语言编写的路由软件。该项目的主要目标是为Linux系统和基于Linux的基础结构提供负载均衡和高可用性的简单而强大的功能。依赖于提供第4层负载平衡的Linux虚拟服务器(LVS)内核模块。Keepalived实现了一组健康检查器,以根据其运行状态,自适应地维护和管理负载平衡的服务器池(L
2021-03-18 15:58:36 523
原创 涉及工作中Linux常用命令详解
涉及工作中Linux常用命令&&Shell脚本案例一、Linux1.汇总lz按照自己实际工作中(类别是从一些教学网站上截取的)文件/目录操作磁盘操作网络通讯系统操作备份压缩其他命令catcdtelnetpstarbcfindpwdnetstattopzipheadgreplsifconfigfreeunziptailsedmkdirpingcrontabgzipxargscutrmdir
2021-03-04 23:29:18 2915 8
原创 linux常见命令以及shell入门编程(笔记总结记录)
linux常见命令以及shell入门编程(笔记总结记录)一、linux常见命令更多命令参考1.不常用mandifftouchwhichsshwcdateexitkillidpssleepunamepasswdpingdftelnettopsudosurebootshutdownfreerpmuseraddyumipsetexport2.常用cdcurlls/llcat
2021-02-28 15:36:23 4873 7
原创 32位/64位操作系统的最大支持内存的空间
32位/64位操作系统的最大支持内存的空间计算机能单独处理的最小内存单位为字节所以 32位操作系统最大支持:2^32Byte = 2^2 x 2^10 x 2^10 x 2^10Byte = 4GB备注:2^10 = 1024同理可换算出64位的最大支持内存空间。...
2021-02-23 16:21:27 890
原创 Java中几种锁的概述
Java中几种锁的概述乐观锁与悲观锁乐观锁与悲观锁是数据库引入的名词,JUC中引入了类似的思想(乐观锁:CAS/版本号,悲观锁:synchronized关键字)悲观锁概念:认为数据很容易被别人(其他线程或者事务)修改,所以在数据访问前对数据进行加锁(共享的数据每次只给一个人用,其他人阻塞等待)。实现:synchronized(JVM)、ReentrantLock(用户自定义)、mysql数据库中的表锁、行锁、读锁、写锁。举例:A会话mysql> select * from
2021-02-02 19:47:56 213
原创 java对象创建的过程
java对象创建的过程1.检查是否类加载完成 JVM执行一条字节码new指令时,先去检查这个指令的参数是否能在Class常量池里定位到一个类的符号引用,并且检查这个符号引用代表的类是否被加载,解析和初始化过,如果没有,则执行对应的类加载检查过程(ClassLoader)。2.给对象分配内存空间 类加载检查通过之后,JVM会为新生对象分配内存(为对象分配内存空间的大小在类加载完成后就能够确定),所以给对象分配内存空间就是把一块确定大小的内存块从Java Heap中划分出来。内存划分的两种方式:
2021-02-02 12:20:14 120 2
原创 1.1.Java内存区域
Java内存区域1.前提概要 在虚拟机自动内存管理机制下,Java不像C、C++程序开发那样需要手动开辟释放内存空间。不容易出现内存溢出(Out Of Memory)、内存泄漏(Memory Leak)。但并不代表就不会出现,了解了Java的内存区域布局,就能更清晰的去定位问题和解决问题2.运行时数据区域 不同的数据区域的生命周期各不相同,有的随着JVM Process启动而一直存在,有的则是随着用户线程的启动和结束而建立和销毁。 拓展: 用户线程和守护线程 用户线程:Thread.
2021-01-19 23:15:29 253
原创 并发编程-伪共享
并发编程-伪共享在学习什么是伪共享的前提下,我们先来了解一下计算机系统中的一些知识点CPU Cache(CPU 缓存)为了解决计算机系统中主内存和CPU之间运行速度的差距问题,在CPU和主内存之间添加了一级或者多级高速缓冲存储器(Cache),目前主流的大多数CPU都带有三级缓存(L1/L2/L3)。它们被集成到CPU内部,简称CPU Cache。(我个人的理解:就是我只和那些和我差不多优秀的人在一起玩,CPU和L1进行数据交互,L1和L2数据交互,L3和主内存数据交互,这样就能减少由于CPU和主
2021-01-15 00:06:34 199
原创 线程中断的三个方法的区别(interrupt/isInterrupted/interrupted)
线程中断的三个方法的区别(interrupt/isInterrupted/interrupted)-总结自Java编程之美方法定义void interrupt():中断调用该方法的实例线程对象。当线程A正在运行时,线程B调用了线程A的interrupt方法后,就会给线程A设置中断标志为true,并且返回。设置中断标志仅仅只是设置中断标志,线程A的运行并没有没中断,它会继续往下执行。如果线程A因为调用了wait系列函数、join方法或者sleep方法而被阻塞挂起,这时候线程B调用了线程A的inter
2020-12-28 14:39:01 489 1
原创 线程-线程池-异步编排
一、线程回顾public static final ExecutorService service = Executors.newFixedThreadPool(10); /** * 1.继承Thread * Thread01 thread = new Thread01(); * thread.start(); * * 2.实现Runnable接口 * Runnable01 runnable = new Runnable01(); * new Thread(
2020-12-22 16:22:57 556
原创 leetcode.389.找不同
389.找不同leetcode地址1. 题解/** * 给定两个字符串 s 和 t,它们只包含小写字母。 * * 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 * * 请找出在 t 中被添加的字母。 * * 输入:s = "abcd", t = "abcde" * 输出:"e" */ // 利用字符和的差值来识别差异字母 public static char findThe
2020-12-21 17:05:29 117
原创 线程池执行任务流程以及重用和无用非核心线程的销毁原理
ThreadPoolExexutor详解1. execute方法(方法的入口)图解三种情况:workerCountOf:工作(活跃)线程数isRunning:线程池状态是否处在运行 public void execute(Runnable command) { if (command == null) throw new NullPointerException(); /* * Proceed in 3 steps:
2020-12-03 17:48:16 2161
原创 简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用
简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用package com.zhuyz.foundation.juc;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class MyArrayBlockingQueue<
2020-12-01 16:39:58 5945 6
原创 自定义注解整合切面实现日志记录
自定义注解整合切面实现日志记录定义一个注解类package com.zhuyz.dubbo.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.
2020-11-24 15:50:25 273
原创 shiro+redis持久化session的问题
shiro+redis持久化session的问题问题场景:登录过后手动清除redis中存储的sessionId,再次发送请求时发生该问题
2020-04-28 22:28:57 376
原创 数据结构学习之路一: 稀疏数组
数据结构学习之路一: 稀疏数组记录每一天美好的学习生活,更多请移步 中国哔哩哔哩大学记录每一天美好的学习生活,更多请移步 中国哔哩哔哩大学(有更好的代码写法,欢迎指正,0101)package com.zhutz.sparsearray;import java.io.*;import java.util.*;public class SparseArray { // 将一...
2020-03-17 23:50:52 122
原创 springboot下的mybatis逆向工程
springboot下的mybatis逆向工程1.添加jar和plugin2.配置逆向工程xml文件3.edit configuration 中添加一个新的configuration关于generatorConfig.xml中属性的作用请参考:第一次写博客,如有错误请指正,欢迎讨论。1.添加jar和plugin1.1.在pom.xml文件的添加-数据库连接和mybatis依赖:1.2添加m...
2019-08-16 15:02:59 129 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人