自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 Nacos服务注册原理

Nacos是我们常用的服务注册中间件,了解原理有利于实际工作中对Nacos的使用

2023-04-30 22:20:15 431

原创 扣减库存(高并发更新数据库都可使用)

通过以上处理,基本可以保证下单扣减库存的准确性,但是对于“秒杀”,依然存在风险,例如两个用户同时抢购,都拿到了库存数量为10的商品,其中一个用户购买了5件商品,随后更新库存数量为5件;因为,“扣减”操作不是幂等的,如果接口设计的不够完美,没有考虑幂等性,那么在由于网络原因或者其他原因造成重试之后,会出现重复“扣减”,导致“超卖”,甚至库存为负数的情况。如果只是简单的一个扣减库存的操作,可以先将库存数量直接放到缓存中,然后利用分布式缓存,例如大名鼎鼎的Redis,去应对这种高并发情况下的系统挑战。

2023-04-15 22:15:12 595

原创 大流量下的流量高效管控

​ “秒杀”场景往往希望有大量用户关注活动,但是用户真正下单时,有不能讲这些流量全部放过。所以需要设计一套高效的管控方案,有效的控制请求流量以及过滤掉没必要的流量。

2023-04-15 16:26:06 170

原创 Map+函数式优化if-else

Map+函数式优化if-else需求最近写了一个服务:根据优惠券的类型resourceType和编码resourceId来 查询 发放方式grantType和领取规则实现方式:根据优惠券类型resourceType -> 确定查询哪个数据表根据编码resourceId -> 到对应的数据表里边查询优惠券的派发方式grantType和领取规则优惠券有多种类型,分别对应了不同的数据库表:红包 —— 红包发放规则表购物券 —— 购物券表QQ会员外卖会员实际的优惠券远不止这

2022-01-17 11:12:48 1371

原创 Docker + Spring Boot + FastDFS 搭建文件服务器

Docker + Spring Boot + FastDFS 搭建一套分布式文件服务器!首先说一下从零开始自己去搭一个fastdfs挺麻烦,后来看到有人把做好的 docker 镜像传出来了,那搭建起来就很容易了1.第一步安装docker:在 root 权限下yum install -y docker-io #安装docker yum install -y docker-io #安装dockerservice docker star #启动dockerdocker -v # 查看docker版

2022-01-11 09:44:34 162

原创 Nginx从安装到高可用过程

Nginx从安装到高可用!一、Nginx安装1、去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本2、上传nginx到linux系统3、安装依赖环境(1)安装gcc环境yum install gcc-c++(2)安装PCRE库,用于解析正则表达式yum install -y pcre pcre-devel(3)zlib压缩和解压缩依赖yum install -y zlib zlib-devel(4)SSL 安全的加密的套接字协议层,用于HTTP安全传

2022-01-11 09:38:21 135

原创 使用 SpringBoot2.X 实现 Quartz 动态任务的分布式调度

使用 SpringBoot2.X 实现 Quartz 动态任务的分布式调度见名知意,该篇番外主要是要解决如下几个问题:1、使用 SpringBoot2.x 版本集成 Quartz2、Quartz 的任务动态实现:调度任务可以通过页面进行新增、删除、启动、暂定等操作任务数据使用数据库保存任务之间实现简单的依赖3、Quartz 实现分布式调度,使用其本身提供的基于数据库的实现SpringBoot2 集成 Quartz1、SpringBoot 不同的版本对于 Quartz 的集成有一定的差别

2022-01-11 09:36:18 710

原创 IDEA 注释模板设置

IDEA 注释模板设置一、类注释打开 IDEA 的 Settings,点击 Editor-->File and Code Templates,点击右边 File 选项卡下面的 Class,在其中添加图中红框内的内容:/** * @author author * @date ${YEAR}年${MONTH}月${DAY}日 ${TIME} */在我提供的示例模板中,说明了作者和时间,IDEA 支持的所有的模板参数在下方的 Description 中被列出来。保存后,当你创建一个新的类

2021-11-11 16:31:16 231

原创 SpringBoot 全局日期格式化(基于注解)

SpringBoot 全局日期格式化(基于注解)使用教程根据官方文档 Custom JSON Serializers and Deserializers ,想要接管Jackson的JSON的序列化和反序列化,只需通过注解@JsonComponent来声明其静态内部类即可。首先根据项目要求提供自定义的日期序列化器和反序列化器,其中包括:DateJsonSerializer extends JsonSerializer<Date> 表示将Date格式化为日期字符串。DateJsonD

2021-11-11 10:26:33 400 2

原创 JVM笔记

GC和GC TuningJVM的基础知识GraalVM + JVM = 大多数语言的平台 js go python c c++ java ruby kotlin C# swiftGC的基础知识1.什么是垃圾C语言申请内存:malloc freeC++: new deletec/C++ 手动回收内存Java: new ?自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题:忘记回收多次回收没有任何引用指向的一个对象或者多个对象(循环引用)2.如何定位垃

2021-11-10 17:16:09 282

原创 Log4j2的使用

Log4j2的使用优点:更简化的配置更强大的参数格式化最优秀的性能使用步骤:引用log4j2的maven依赖log4j-api在log4j-core中已经有依赖了,直接依赖core即可<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>

2021-10-08 11:36:47 52

原创 for循环优化

for循环优化方法一:最常规的的写法for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i));}优点:较常见,易于理解缺点:每次都要计算list.size()方法二:数组长度提取出来int m = list.size();for (int i = 0; i < m; i++) { System.out.println(list.get(i));}优点:不必每次都计

2021-08-30 11:53:22 100

原创 Java 性能小细节

Java 性能小细节代码优化细节1、尽量指定类、方法的final修饰符2、尽量重用对象3、尽可能使用局部变量4、及时关闭流5、尽量减少对变量的重复计算6、尽量采用懒加载的策略,即在需要的时候才创建7、慎用异常8、不要在循环中使用try…catch…,应该把其放在最外层9、如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度10、当复制大量数据时,使用System.arraycopy()命令11、乘法和除法使用移位操作12、循环内不要不断创建对象引用

2021-08-27 11:46:19 371 2

原创 BigDecimal工具类

import java.math.BigDecimal;/** * 用于高精确处理常用的数学运算 */public class BigDecimalUtils { //默认除法运算精度 private static final int DEF_DIV_SCALE = 10; /** * 提供精确的加法运算 * * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */

2021-08-11 10:31:15 194

原创 SpringBoot 解决跨域

SpringBoot 解决跨域,3种解决方案!问题背景:本人在开发中遇到了跨域问题,在网上查询了许多解决方案,在此做一个总结。CORS简介:CORS是一个W3C标准,全称是"跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。CORS需要浏览器和服务器同时支持。它的通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源

2021-08-06 09:40:02 56

原创 Java8-lambda

感受 lambda 之美!一、引言java8最大的特性就是引入Lambda表达式,即函数式编程,可以将行为进行传递。总结就是:使用不可变值与函数,函数对不可变值进行处理,映射成另一个值。二、Java重要的函数式接口1、什么是函数式接口函数接口是只有一个抽象方法的接口,用作 Lambda 表达式的类型。使用@FunctionalInterface注解修饰的类,编译器会检测该类是否只有一个抽象方法或接口,否则,会报错。可以有多个默认方法,静态方法。1.1 java8自带的常用函数式接口。pub

2021-08-03 18:06:12 122

原创 自定义处理try...catch

自定义处理try…catch1 封装统一返回结果类源代码public class AjaxResult { //是否成功 private Boolean success; //状态码 private Integer code; //提示信息 private String msg; //数据 private Object data; public AjaxResult() { } //自定义返回结果的构造方法

2021-08-03 17:56:04 222

原创 线程并发协作

线程并发协作应用场景假设仓库中只能存放一定数量的产品,生产者将生产的产品放入仓库,消费者从仓库中取走产品消费。如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,知道仓库中的产品被消费者取走为止。如果仓库中有产品,则消费者可以将产品取走消费,否则停止消费并等待,知道仓库中再次放入产品为止。管程法利用缓冲区进行处理生产者:负责生产数据的模块消费者:负责处理数据的模块缓冲区:消费者不能直接使用生产者的数据,生产者将生产好的数据放入缓冲区,消费者从缓冲区消费数据。代码示例如

2021-06-23 16:19:06 54

原创 Lambda表达式

Lambda表达式避免匿名内部类定义过多其实质属于函数式编程可以使代码变得更简洁,只留下核心逻辑理解Functional Interface(函数式接口)是学习lambda表达式的关键所在。函数式接口的定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。//原始写法如下public class TestThread implements Runnable{ @Override public void run() {

2021-06-17 15:11:36 44

原创 多线程实现

Process与Thread说起进程,就不得不说程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位。通常在一个进程中可以包含若干个现成,当然一个进程中至少有一个现成,不然没有存在的意义。线城市CPU调度和执行的单位。注意:很多线程是模拟出来的,真正的多线程是指有多个CPU,即我们常说的多核,如服务器。如果是模拟出来的多线程,即在一个CPU的情况下,在同一个时间点,CPU只能执行一个代码,因为切换

2021-06-17 14:14:29 142

原创 Mybatis接口Mapper内的方法为什么不能重载?

Mybatis接口Mapper内的方法为什么不能重载?动态代理的功能:通过拦截器方法回调,对目标target方法进行增强。言外之意就是为了增强目标target方法。上面这句话没错,但也不要认为它就是真理,殊不知,动态代理还有投鞭断流的霸权,连目标target都不要的科幻模式。注:本文默认认为,读者对动态代理的原理是理解的,如果不明白target的含义,难以看懂本篇文章,建议先理解动态代理。1. 自定义JDK动态代理之投鞭断流实现自动映射器Mapper首先定义一个pojo。public c

2021-06-11 09:40:27 430

原创 JAVA八大排序

JAVA八大排序一、冒泡排序我想对于它每个学过C语言的都会了解,这可能是很多人接触的第一个排序算法。基本思想冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法描述冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元

2021-06-08 18:32:30 176

原创 SQL查询是否存在优化小技巧

SQL查询是否存在优化旧:统计有多少个号码存在于表中,需查询整个表中的数据。####SQLselect count(phone)from table_namewhere phone = "187****7862";####JAVAint nums = xxDao.countXxxByXxx(params);if(nums > 0){​ //存在时,执行此处代码}else{​ //不存在时,执行此处代码}新:select 1 查询到一条数据就会停止查询。###

2021-06-08 16:46:35 188

原创 Linux开通防火墙常用命令

firewall-cmd --zone=public --add-port=端口号/tcp --permanentfirewall-cmd --reload

2021-06-08 16:43:27 86

原创 JAVA位运算

JAVA位运算基础内容A = 0011 1100B = 0000 1101A&B = 0000 1100A|B = 0011 1101A^B = 0011 1101~B = 1111 0010重点面试题java中如何更快的计算2*8?//使用Java位运算机制,二进制运算System.ot.println(2<<3);计算机中:0000 0000 = 0;0000 0001 = 1;0000 0010 = 2;0000 0011 =

2021-06-08 16:41:13 30

原创 JAVA递归

JAVA递归递归就是A方法调用A方法!本身调用 本身利用递归可以用用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转换为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。递归结构包括两个部分:递归头:什么时候不调用自身方法。如果没有递归头,将陷入死循环。递归体:什么时候需要调用自身方法。//递归示例:计算某个数字的阶乘//递归只适用于偶尔使用

2021-06-08 16:30:53 45

原创 MarkDown语法学习,主要用于Typora

MarkDown语法学习标题:#空格+标题名字 回车##空格+二级标题 依次类推 最多六级标题字体粗体 :** 文本内容 **斜体:* 文本内容 *斜体并加粗:两边加上***引用箭头符号:>好好学习天天向上分割线三个—三个***图片路径可以用本地路径也可以使用网络路径超链接点击跳转百度列表数字排列A 数字+空格BC-+空格表格最快插入表格 Ctrl+T 此处注意快捷键冲突。代码三个`例如:public static v

2021-06-02 15:24:07 39

空空如也

空空如也

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

TA关注的人

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