自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【解决案例】分布式锁Redission加锁无效

案例背景项目需求是生成一段自增的编号,由于编号涵盖不同字符,所以需要编写生成编号的逻辑1. 问题初解决,加锁在有该需求前提下,编写如下伪代码@Transaction(rollbackFor = Exception.class) public void test() { //获取当前数据库编号信息并做一定处理得到生成的编号 //省去业务操作 String baseNum = "xxxx03"; //新生成编号.

2022-01-21 17:32:07 4463 3

原创 【解决案例】使用Redis解决秒杀过程中超卖问题

最近打算写个专栏专门记录下遇到的一些案例解决,也算是记录一些成长的经验吧。本篇文章背景是在完善商城秒杀系统时发现秒杀时会出现超卖问题,然后在参考一系列解决方案后决定采用Redis记录库存数目来解决,但是在其中还是出现了一些问题。1. 初解出现问题的代码块://获取库存数目int stock = Integer.parseInt(redisTemplate.opsForValue().get("stock"));//库存数目大于零则减库存if(stock > 0){ int fi

2022-01-21 16:48:29 5473 1

原创 Redis缓存穿透,缓存雪崩,缓存击穿问题及解决方法

最近做项目用reids时对缓存的一个理解有了大幅度的上升,以前对这三个词懵懵懂懂的,今天终于搞清楚了,这篇文章总结一下这几个问题以及他们对应解决方法首先,介绍一下缓存:引用一下百科,缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。为什么使用缓存?在一个项目中,频繁的与数据库进行数据交互是非常耗费时间的事情,原因在于数据库是从硬盘中读取数据,在复杂业务场景中,如果时间耗费过长,难免会降低用户体验感。这个时候缓存中间件就出现了,由于直接将数据缓存在内存上,数据交互极快.

2021-08-30 11:10:55 328

原创 自定义添加校验注解

序: 最近项目用到了自定义添加校验注解,记录一下过程1. 校验注解使用校验注解一般是在后端实体类上进行定义,对参数数据类型进行核查,例如邮箱地址是否正确,首字母大小写等,javax.validation.constraints提供了一系列注解使用,常用比如:@Null 验证对象是否为null@NotNull 验证对象是否不为null, 无法查检长度为0的字符串@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.@NotEmpty 检查.

2021-08-17 14:42:04 339

原创 【错误解决】Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined.

序:最近使用spring cloud alibaba遇了几个大坑,记录一下1. 错误描述今天用openfeign,报了一个就是标题所示这个错误Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?翻了一小时资料,发现是由于SpringCloud Feign在.

2021-08-13 17:05:04 3666 2

原创 【错误解决】Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found

错误出现刚刚用了下IDea创建一个springboot项目,发现这两行爆红提示错误解决在网上看了一下发现是版本号需要指定(对应springboot版本)错误原因就挺纳闷的,之前建项目挺正常的,为啥突然就需要加了?是版本原因么,然后我打开了之前的项目,好家伙,也爆红了具体原因我也只能猜个大概,我之前用的是2018版的idea,现在换了2021的,猜测应该是idea编译器的问题。有大佬晓得具体原因也请多多指正一下哈...

2021-08-11 17:40:35 1350

原创 关于Docker容器不能正常启动几种情况与解决方法

序:本文主要记录了一下docker使用过程出现几种容器不能正常启动的情况及解决方法1. 代码打错首先得检察一下自己代码是否正确,特别是初学接触docker的小伙伴,更加需要注意一下这方面问题,系统会对明显错误抛出,但是小细节需要自己去注意,需要自己细细检察。例如在ES配置时通常会对内存进行设置:docker run -d --name elasticsearch01 -p9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JA.

2021-08-10 17:28:34 26623 1

原创 Docker命令大全(字母排序工具书)

序 : 本文主要记录常用docker语句,为个人工作学习所用,仅供参考attach : ##进入指定运行对象 [root@VM-0-9-centos ~]# docker attach 96763bc9ea4e build : ##通过Dockerfile定制镜像commit : ##提交当前容器为新的镜像cp : ##拷贝指定文件或目录到主机 [root@VM-0-9-centos ~]# docker cp 967.

2021-08-10 11:05:36 253

原创 详解Docker在云服务器安装

序: 本篇文章适合初次接触docker上云的小伙伴,关于云服务器购买既配置可以参考我之前这篇文章阿里云腾讯云服务器购买以及Linux基本使用1. 安装环境云服务器腾讯云远程连接工具Xshell操作系统CentOS7(自己选择,CentOS要求7以上)2. 安装步骤我的安装步骤是根据官方来的,这里放一下docker安装官方地址2.1 选择合适的安装版本根据自己操作系统来选择。我的是Linux随后根据官方文档来操作即可,如果觉得官方文档太过复杂的话可以参.

2021-08-06 15:10:35 1388

原创 详细理解JVM对对象的创建,内存分配及访问定位

前言都说Java是基于对象编程,那么在本文我们主要探讨一下关于对象在Java虚拟机中的一些创建以及内存的布局。1. 对象的创建JVM创建对象可以用流程图简单表示:在其中分配内存时牵涉到JVM对空间的分配策略,这取决于Java堆中内存是否规整,针对此JVM有两种不同的策略:指针碰撞:在Java堆中内存如果是绝对规整的,被使用过的内存放在一边,空闲的放在另一边,中间放着一个指针作为分界指示器,分配内存就是把指针向空闲方向挪动一段与对象大小相等的距离。空闲列表:如果 Java 堆内存不规整,虚拟机

2021-06-29 17:03:19 195

原创 Java内存区域

在Java程序运行过程中,JVM会将它所管理的内存区划分为不同的几个数据区域,其中又分为线程私有与共享,如下图所示:接下来对每个区域各自功能进行分析。1. 程序计数器程序计数器是一块较小的内存空间,它可以看作当前线程所执行字节码的行号指示器。字节码解释器工作时通过改变计数器的值选取下一条执行指令。它是一个指示器,分支、循环、跳转、线程恢复等功能都需要依赖计数器完成。是唯一在虚拟机规范中没有任何OOM(OutOfMemoryError)情况的区域。举个栗子,吃饭时,我们可以将吃饭分成几个步骤,拿筷子

2021-06-28 13:30:35 100

原创 JDK1.7后为什么Switch能对String字符串类型提供支持及原理

在JDK7之后,switch提供了对String字符串的支持,而在我们印象之中,Switch只提供byte,char,short,int类型的常量表达式的支持,为什么JDK7之中能对String字符串对象使用呢?抱着这个疑问,就有了本文。​ 首先,让我们看一下一般情况下Switch语句写法:int num = 1;switch (num) { case 2: System.out.println(2); break; case 1: Sy

2021-06-20 12:16:16 599

原创 Java多线程中使用If判断导致的虚假唤醒问题及解决方法

什么是虚假唤醒在一般条件下,当线程进入wait状态下,需要其他线程调用notify,notifyAll方法后,线程才会从wait方法中返回, 而虚假唤醒是指线程通过其他方式,从wait方法中返回。举一个例子:当购买车票时,线程A买票,如果发现没有余票,则会调用wait方法,线程进入等待队列中,线程B进行退票操作,余票数量加一,然后调用notify 方法通知等待线程,此时线程A被唤醒执行购票操作。如果是按照if(余票数<0)判断,程序按逻辑完全可行。那么此时线程A的状态应该如下:(1)释放锁.

2021-06-18 20:19:22 520

原创 Java中常见几种字符串拼接以及如何选择拼接方式

在Java编码过程中,经常需要将字符串拼接到一起,本文主要介绍Java中几种常见拼接方式。“+”​ 在java中,可以直接采用"+"进行字符串的拼接,例如:String name = "lby" + "dcy";​ 原理:有些人会认为这是运算符重载,但其实并不是,java中不支持运算符重载,这其实是一个语法糖。​ 上面代码反编译如下:String name = (new StringBuilder()).append("lby").append("dcy").toString();​

2021-06-18 12:29:56 5005

原创 Java中关于自动拆装箱

首先我们要了解基本数据类型与包装类型。包装类型​ Java 语言是一个面向对象的语言,但是 Java 中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。​ 包装类均位于 java.lang 包,包装类和基本数据类型的对应关系如下表所示基本数据类型包装类byteBytebooleanBooleans

2021-06-17 17:13:18 128

原创 什么POJO(实体类)中使用包装对象而不用基本数据类型?

​ 在阿里巴巴Java开发手册中,对于POJO中如何选择变量的类型时强制规定必须使用包装类:​ 举个例子,在做金融业务时,如果系统出现异常,返回的为系统默认值,那么在包装类中,会返回null,而基本数据类型,如double中,会返回0.0。那么,对于这其中来说,系统拿到null值会直接报错,阻断程序运行;但是如果是0.0,那么系统会继续运行返回错误值。...

2021-06-17 17:11:11 693

原创 《Redis设计与实现》中名词解释

最近在学习Redis,根据《Redis设计与实现》书本来学习,当中遇到许多未接触过的专业名词,统一记录一下·字典字典是Redis数据库的底层实现,所以搞清楚字典这一含义十分有必要。定义:字典又称符号表(symbol table)、关联数组(associative array),是一种保存键值对的抽象数据结构。举个例子,在维基百科上有一段话比较通俗的解释了字典:当你需要拨打张三的电话,首先,你需要去找到Z开头的字典开始,然后再通过比对后续拼音字典序来进行查找。·跳跃表跳跃表(skiplis.

2021-05-27 21:13:06 162

原创 【错误解决】No spring.config.import property has been defined.关于SpringCloud中对配置文件bootstrap报错解决方法

最近学习springcloud时遇到几个坑,写篇博客记录一下给大伙避避雷1. 错误:在学习springcloud的config这一块时,配置消费端时,服务启动直接报了下面这两种错误,搞了一个下午都没整明白,当时就直接放弃了(本篇完(开玩笑的>_<))。Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'config.info' in value "${config.info}"*.

2021-05-12 17:03:51 3523 3

原创 阿里云腾讯云服务器购买以及Linux基本使用

1. 阿里云服务器购买1.1 优惠地址(80左右一年)1.2 学生服务器(在校生可免费领取试用期),不过需要完成测验,很简单,每天学生机数量有限,上午8点开始。1.3 服务器购买后先配置安全组和实例密码(不配置后面连不上!!!),根据自己需要打开端口2. 使用Xshell远程连接服务器下载安装Xshell和Xftp(我是在联想软件管家下载安装的,省事,或者腾讯电脑管家好像是有网页版软件中心,也可以去那儿下载)连接服务器打开Xsehll,点击左上角新建连接接下来将用户名(一般是r

2021-04-30 16:54:11 1081 4

原创 string&&stringBuilder基本用法

//String的用法://java中String是只读的,没有办法进行变换,因此需要使用StringBuilder。String.length() //获取字符串的长度String.charAt(i) //获取第i个字符的内容String.subString(start) //获取[start,)的字符串String.subString(start,end) //获取[start,end)中的字符串char[] c = iniString.toCharArray() //将字符串转为cha

2021-04-27 20:07:11 211

原创 Zookeeper+Dubbo集成基本准备环境搭建

1. Zokeeper and DubboZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。RPC【Remote Procedure Ca

2021-04-22 20:21:35 97

原创 SpringBoot中关于参数基本注解

学习SpringBoot过程中,参数这几个注解一直傻傻搞不清,今天做一个总结!1. @PathVariable注解与@RequestParam注解这两个注解开始搞混了,报了400的错还一直找不到,就放一起,便于对比区分。@PathVariable:作用:接收请求路径中占位符的值,举个栗子:@RequestMapping("/user/{id}")//请求地址"localhost:8080/user/{id}"@PathVariable("id")Integer id//@PathVar.

2021-04-17 20:46:09 1301

原创 SpringBoot之@SpringBootApplication底层理解

@SpringBootApplication底层理解近期在学习SpringBoot,摸索了很久,结合几位老师的理解将自己对@SpringBootApplication的底层理解记录一下1. @SpringBootApplication的作用@SpringBootApplication来标注这是一个springboot的应用,被标注的类是一个主程序,运行SpringApplication.run(App.class, args)方法;传入的类App.class必须是被@SpringBootApplica

2021-04-09 20:47:57 485

原创 Typora快速调整代码块格式快捷键

查了好久发现没找到有相关博客,写下来记录一下:当代码块设置了语言后,可以使用 ‘Shift + Tab’ 快速格式化代码,就不用一行行空格调格式了

2021-04-09 15:18:08 12653 8

原创 tableSizeFor方法理解

tableSizeFor方法理解最近在学习HashMap的一些知识点,感觉tableSizeFor方法很巧妙,特意记录一下首先看一下tableSizeFor方法源码static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |

2020-12-10 16:09:37 2206

原创 学习树的一些算法

JAVA数据结构—树最近学习了树,总结一下树树的基础知识以及关于二叉树的一些算法一、树的一些基本定义节点的度:一个节点含有的子树的个数称为该节点的度;叶节点或终端节点:度为0的节点称为叶节点;非终端节点或分支节点:度不为0的节点;双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;兄弟节点:具有相同父节点的节点互称为兄弟节点;树的度:一棵树中,最大的节点的度称为树的度;节点的层次:从根开始定义起,根

2020-11-08 19:32:35 631

原创 学习一下链表算法(单双链表)

学习一下链表算法(单双链表)1.链表定义链表排序是由头结点连接子节点,子节点再依次连接而形成;下面两幅图片可能更加直观的能展示出来。相较于数组排序来说,链表的插入删除十分方便,只需要断开节点之间连接再建立新链接即可。2.参数对于链表而言,首先需要定义节点API,单向链表由头结点节节连接,所以只需要定义内部存储数据(item)和链接下一元素(next);而双向链表需要两头相连,所以多出来一个链接上一元素(pre)。对于单向链表,只需定义头结点(head),以及链表的总长度(N);双向链表则还需

2020-10-25 21:39:30 358

原创 Java数据结构--简单排序

Java数据结构–简单排序简单排序是最基本的三种排序方式,包括了冒泡排序、选择排序、插入排序;其中,优化插入排序之后得到了希尔排序。代码架构简单排序可通过三个方法都能够很好地实现代码运行,当然也能够直接在一个方法内部构建完毕,多个方法体会看起来更有层次感,简单易懂。函数名意义sort(Comparable[] a)sort函数用来排列数组A中数据,也是整个的核心代码块。greater(Comparable v, Comparable w)greater函数能够比较其

2020-09-27 17:05:54 146

原创 Java数据结构---大O记法

Java数据结构—大O记法一般采用大O记法计算一段程序时间复杂度大O记法原则:1. 算法函数中的常数项是能够忽略的,都记为1。2. 算法函数的最高次幂常数因子能忽略。3. 算法函数中最高次幂越小,程序运行效率越高。O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(ni)...

2020-09-27 16:13:47 133

空空如也

空空如也

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

TA关注的人

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