自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 幂等性的解决方案

1.幂等性概念顾名思义,所谓幂等就是对于数据的操作不论多少次,但始终操作的结果是一致的。也就是说,无论相同的查询操作多少次,得到结果始终只是一次的结果和影响。2.幂等性场景1、查询操作:查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作;2、删除操作:删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个) ;3、唯一索引:防止新增脏数据。比如:支付宝的资金账户,支付宝也有用户账户,

2021-12-03 18:02:24 4058

原创 Redis分布式锁

Redis分布式锁的实现以及出现的问题:对于分布式锁的实现其实大致可以这样描述,在我们分布式系统中,因为不同系统,不同模块,甚至细化到不同功能分开进行部署,这样就出现了很大的问题,在进行并发访问不同模块进行操作相同的资源时,就比如redis中的缓存资源会比较棘手,可能会出现数据不一致的情况。就比如在我们单机系统中如果并发操作同一个数据,这可能会发生数据不一致的问题,所以在分布式中更是如此。尤其对于redis操作我们,因为可能我们不同模块访问的是同一份缓存,所以在我们进行访问此共享资源时,我们可以设置分布式

2021-07-29 22:38:00 157

原创 线程的终止的4种方式

1:正常的运行结束指线程体执行完成,线程自动退出。2.使用退出标志进行退出在一般情况下我们都是等待线程中run方法完全执行完成之后线程终止,其实在很多场景下我们需要强制将线程进行终止,所以我在这里插入代码片们可以使用一些自定义的标识或者方法进行中断,上代码: new Thread(new Runnable() { private volatile boolean exit=false; @Override public void

2021-07-29 21:15:43 4129

原创 springcloud Fegin的使用

上一节我们使用原始的Ribbon来进行负载操作,这次直接上手Fegin,看看Fegin是怎样整合Ribbon,达到一个简单开发的效果。首先先解释一下我们为什么会使用到Ribbon负载均衡,因为在我们实际的分布式系统中,如果一个单一服务访问量很大,而服务只有简单单一部署(也就是说只有一个服务器部署了这个项目),可能这个服务就会承受不了这么大的访问量从而导致服务崩溃。所以分布式项目要使用负载均衡的目的就是为了避免访问量对同一个服务进行访问…所以其中就衍生出很多问题,比如各个服务之间是怎么进行通信的,请求访问怎

2021-06-10 19:10:32 258

原创 springcloud-Eureka集群和Ribbon配置本地部署

设计思路通过简单的本地设置配置出eureka集群,设置出多个服务提供者(这里也就相当于多个服务器相同项目部署)注册到eureka集群去,然后配置一个Ribbon消费(也就是配置出一个请求)同样注册到eureka集群中去,通过查看结果可以看出Ribbon负载均衡的作用以及查看eureka集群的作用。简单的maven创建出cloud项目,三个eureka项目,三个服务提供者项目。一个api项目(该项目是为了提供一些api接口或者是说实体类,这里我是写了一个实体类(做简单的查询),一个消费者项目进行远程访问

2021-06-10 14:06:16 341

原创 SpringIoc容器实例化创建底层详解

从该例子出手,底层源码法分析 ApplicationContext applicationContext= new ClassPathXmlApplicationContext(bean.xml);ioc实例化为何可以这样,首先我们来看看底层,如图为ApplicationContext为最底层接口,该接口以下的子接口或者实现类。由下图可知ApplicationContext的这么多的实现类都对应着不同的实现方法例如:有通过xml配置的获取的实现类,有通过Annotation(注解)获取的实现类

2021-04-24 21:19:45 110

原创 锁得实现原理

锁得实现原理锁在多线程中是必不可分得,他给多线程提供了同步的功能,让多线程可以互斥得执行同步代码块,并且互相具有可见性。本文将结合锁得happens-before关系首先我们先说说happens-before的使用规则:程序顺序规则:在一个线程中,前面的操作happens-before后面的操作锁规则:对同一个锁,解锁happens-before加锁传递性规则:A happens-before B,B happens-before C,那么A happens-before C这段代码看看ha

2021-04-24 10:46:58 145

原创 redis持久化(rdb和aof)

原因:由于redis储存的是内存数据,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务进程退出,那么服务器中的所有的数据状态都会消失!(断电即失)RDB(redis database)rdb保存的文件在dump.rdb1.触发机制1.save的规则满足的情况下,会自动触发rdb原则。2.执行了flushall命令,也会触发我们的rdb原则。3.退出redis,也会产生rdb文件!备份就会自动生成rdb文件!2.如何恢复rdb文件1.只要将rdb文件放在我们redis启动目录就可以,r

2021-03-21 22:16:57 86

原创 二分法查找算法

二分法查找算法又叫折半查找,要求待查找的序列有序,每次查找都取中间位置的值与待查关键字进行比较,如果中间位置比待查关键字大,则在序列的左半部分继续执行该查找过程,如果中间位置的值比待查关键字小,则在序列的右半部分进行查找,知道找到关键字为止,否则无关键字。package com.findNumsWays;//二分查找算法public class binarySearch { public static void main(String[] args) { int array

2021-03-18 15:21:18 1000

原创 IO与NIO

1、阻塞与非阻塞阻塞与非阻塞是描述进程在访问某个资源时,数据是否准备就绪的的一种处理方式。当数据没有准备就绪时:阻塞:线程持续等待资源中数据准备完成,直到返回响应结果。非阻塞:线程直接返回结果,不会持续等待资源准备数据结束后才响应结果。2、同步与异步同步与异步是指访问数据的机制,同步一般指主动请求并等待IO操作完成的方式。异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知。老王烧开水:1、普通水壶煮水,站在旁边,主动的看水开了没有?同步的阻塞2、普通水壶煮水,去干点别

2020-12-03 16:55:13 86

原创 mybatis的二级缓存机制

mapper.xml的文件配置<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.yin.mapper.TeacherMapper">//开启二级缓存

2020-11-26 16:26:13 120

原创 mybatis 一对多的关系模式设计

实体类学生@Datapublic class Student { private Integer id; private String name; private Integer tid; //学生要关联一个老师 多对一 private Teacher teacher; public Student(){ } public Student(Integer id,String name){ }}实体类老师@Data

2020-11-26 15:59:06 293

原创 mybatis 多对一的关系模式设计

**Mybatis的数据关系模式(1) 多对一**实体类@Data@Datapublic class Student { private Integer id; private String name; //学生要关联一个老师 private Teacher teacher; public Student(){ } public Student(Integer id,String name){ }}...

2020-11-25 20:30:07 122

原创 hashset存储不重复元素的基本实现

hashSet的实现原理:往Haset添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值 , 然后通过元素 的哈希值经过移位等运算,就可以算出该元素在哈希表中 的存储位置。情况1: 如果算出元素存储的位置目前没有任何元素存储,那么该元素可以直接存储到该位置上。情况2: 如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals方法与该位置的元素再比较一次 ,如果equals返回的是true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,如

2020-11-18 17:24:00 134

原创 关于重定向RedirectAttributes的用法

RedirectAttributes 是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的的工具类他有两种带参的方式:第一种:redirectAttributes.addAttributie(“prama”,value); 这种方法相当于在重定向链接地址追加传递的参数,例如:redirectAttributes.addAttributie("prama1",value1);redirectAttributes.addAttributie("prama2",val

2020-11-16 11:05:03 425

原创 SpringBootConfiguration详细介绍

@SpringBootConfiguration:Spring Boot 的配置类;@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM,

2020-09-28 16:34:24 4021

原创 spring-boot pom文件解析

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.3.RELEASE</version> </parent>spring-boot-starter-parent 副项目.

2020-09-27 21:58:26 198

原创 @ResponseBody详解

@ResponseBody详解@ResponseBody的作用其实是将java对象转为json格式的数据。@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。@ResponseBody是作用在方法上的,@Respons这里是引

2020-09-27 20:36:12 410

空空如也

空空如也

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

TA关注的人

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