自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis分布式锁在高并发环境下的超卖问题

当一个请求获取到锁时,处理业务时间由于超过了10s,还没有完成扣减库存,锁过了10s,自动释放了,由于高并发场景下,同时有源源不断的请求过来,其他请求就获得了锁,这时,又会导致超卖问题。假设:当多个请求同时执行到从redis缓存中取库存值的时候,stock=100,判断库存>0成立,然后进行下面的逻辑,当扣减1个库存时,都会把stock=99写回redis缓存的时候,这时,明明卖了2个,但是redis缓存中的数据stock却等于99,就超卖了。但是当服务器执行到中间,服务器挂掉了,锁还是不会释放,怎么办?

2024-07-12 01:20:52 1045

原创 mysql索引

因为B树,非叶子节点也存储了数据,假设一条数据的大小仍为1KB,那么一个16KB的磁盘页只能存放16个数据,如果想要存储2000w条数据,那么16的N次方 = 2000w,计算发现,树的高度N会非常大。数据库中的表,在我们看起来是一行紧挨着一行的,但是在硬盘中,都是以链表的形式存储的,不适用索引,我们一行一行的查找数据,每一行从硬盘从读取到内存中,比对是否是我们想要的。磁盘IO性能是比较慢的。查找数据的过程中有很多次的比大小,uuid是一个字符串,作为B+的非叶子节点里面的数据时,比大小,没有整型数字快。

2024-07-08 17:20:24 737

原创 gateway

局部过滤器和全局过滤器区别:局部:局部针对某个路由, 需要在路由中进行配置全局:针对所有路由请求, 不需要在配置文件中配置,一旦定义就会投入使用内置的全局过滤器:路由地址中带了lb的话,就会自动采用负载均衡策略,和上面第一个的全局过滤器对应这些全局过滤器 会自动判断,自动处理,不用我们管理记录所有访问过来的请求,保存成日志的形式,可以用自定义全局过滤器或者判断用户登录、权限方面也可以自定义全局过滤器自定义全局过滤器非常简单。

2024-07-07 22:35:33 881

原创 Feign-未完成

一般通过Feign去调用服务的时候,不会输出任何日志信息,这对于开发者想调试,修改bug来说很不方便1. 全局配置:通过定义一个配置类返回Feign日志类型的一个枚举,然后修改配置文件中springboot默认的日志级别注意:加上@Configuration注解就会对所有的服务提供方都生效。

2024-07-06 21:33:37 665

原创 Ribbon负载均衡

定义一个配置类,再定义一个Bean(方法名一定叫iRule,返回值也一般为IRule,多态的特性)返回上面的某个实现类,就修改成了这个类指定的负载均衡算法再在启动类上加上注解@RibbonClients指定对那个服务名称生效,这样我们可以针对不同的服务提供方,使用不同负载均衡策略配置类一定不能放在启动类上的注解能扫描得到的地方定义一个类,重写接口中的choose方法即可方法里前两步,获得了某个服务的所有可用实例,然后 定义一个策略,返回其中一个服务即可下图中的是随机策略。

2024-07-06 19:47:54 513

原创 dependencyManagement的作用、nacos的学习

SpringCloudAlibaba已经包含了适配的各组件(nacos、MQ等)的版本号,也是一个版本仲裁者,但是可能已经有了父项目Spring-Boot-Starter-Parent这个版本仲裁者,又不能加多个父项目,可以使用,dependencyManagement只是添加了一个版本仲裁者,当前项目没有添加SpringCloudAlibaba进来,依赖,子项目SpringCloudAlibaba里面的而dependencies中的依赖,子项目会直接继承。

2024-07-06 16:51:49 1186

原创 SpringBoot原理

有很多的第三方技术,它是没有起步依赖的,但是这个技术,在项目开发中又很通用,那么我们直接使用,使用起来就会比较繁琐我们需要引入对应的依赖,在配置文件中进行配置,还需要基于官方SDK示例来改造对应的工具类,然后在项目中我们才可以使用。例如,我们使用aliyunOss需要这么多的步骤,别的开发也需要这么多的步骤第一个是springboot官方提供的起步依赖下面两个是第三方提供的起步依赖,通常是命名方式是 功能在前, 一看就是mybatis或者pagehelper整合springboot所提供的起步依赖。

2024-07-05 23:59:26 1221

原创 Bean的管理

但是我们都是用Spring框架了,这样使用太麻烦了,我们可以把SAXReader交给IOC容器去管理,每次用的时候,直接注入就好了。,想交给IOC容器管理,,并且源码中没有加@Component注解,源码文件又只读不可写,我们也加不了,就要使用@Bean注解,放到配置类中,交给IOC容器管理。所以,我们使用第三方的bean对象,就不能像之前的做法,直接在类上加@component注解生成bean对象了。如果都加到启动类中,启动类就变复杂了,要保证启动类的纯洁,不建议加在启动类中写多余的代码。

2024-07-05 15:43:03 888

原创 RestTemplate、MockMVC、Swagger

硬编码的部分在实际开发中都是会替换成枚举对象SpringMVC会自动把json格式的post请求转化为对应接收的 对象响应请求时,也会自动把 对象转化为 json格式的。

2024-07-04 17:34:58 902

原创 Jackson与Json、Json和各种Java数据类型的互相转化

jackson是什么json是最常用的数据交换格式。

2024-07-04 17:04:12 434

原创 SpringBoot的热部署和日志体系

logback的log4j的log4j2的。

2024-07-04 10:48:00 380

原创 SpringBoot-第一天学习

约定大于配置SpringBoot是在Spring4.0基础上开发的,不是替代Spring的解决方案,而是和Spring框架结合并进一步简化Spring搭建和开发过程的。如何简化?就是通过提供默认配置等方式让我们更容易,集成了大量常用的第三方库配置,所有你想用的常用框架,它都有对应的组件支持大量的SpringBoot应用只需要非常少量的配置代码另外SpringBoot通过继承大量的框架使得不同依赖包的版本冲突问题得到解决。

2024-07-03 22:49:58 543

原创 redis缓存和数据库一致性的解决方案-延迟双删

我们如果等 查询数据线程 把旧的数据 重新缓存到了 redis中(即上图的第7步)完成后, 再删除缓存,就可以了,不过由于不知道 上图的第7步 多久会完成,所以需要延迟一段时间,这个过程也不会很久。如果不延迟,就直接二次删除缓存, 可能 第7步还没有开始(即查询数据线程 还没开始 把旧的数据 缓存到了 redis中)。(2)缓存中没有数据,去查询数据库获取数据,然后会把数据写入到缓存中,再结束。在并发情况下,这时,有一个更新数据的线程到了,还有一个查询数据的线程到了。方案:先删缓存,再更新数据库。

2024-07-01 21:06:37 280

原创 加密的三种方式(摘要加密、对称加密、非对称加密)

md5,sha1,sha256(固定算法加密)摘要主要就是哈希值,通过我们的散列的算法。摘要的概念主要是验证完整性和唯一性,不管我们的密码是多长啊,或者多复杂的啊,得到的值都是固定长度。摘要加密有一定的风险。比如:123456 用 md5 加密,得到的密码其实是固定的,大家用 md5 加密123456得到的加密密码都是一样的。大家也可以到一些网站有反解密。通过md5加密的密文,是不能通过反解密解密出来。

2024-07-01 13:47:26 331

原创 git使用教程

1.代码备份2.老旧版本回溯3.多人协同开发4.问题代码追责版本控制工具:每次的修改都认为是一个版本,就很明确,每次的修改都是谁写的,都加上一个版本号。

2024-06-26 16:31:11 846

原创 OSS文件上传、@Configuration和@ConfigurationProperties的区别

1.浏览器端点击“文件上传”后,把文件数据传到服务器端,用MultipartFile类接收,然后调用upload函数接口CommonService接口:CommonService接口的实现类CommonServiceImpl:2.在CommonServiceImpl的upload里面主要有2步:(1)获取图片file的 字节码 (即图片里面的具体内容)(2)为了防止上传到aliyun服务器,文件重名,覆盖掉已上传的文件,所以通过“UUID+文件后缀名”,构造新的名字3.

2024-06-22 21:15:16 297

原创 JVM组成

使用直接内存:这块内存,Java代码可以访问,操作系统也可以直接访问,把拷贝的数据放到这块区域,就减少了耗费的时间。常规的IO流程:操作系统先拷贝到 系统缓存区,然后再传到 Java缓冲区。jdk1.8之后叫元空间,存储在本地内存中,就是操作系统的一块内存区域中。Java是没有数据拷贝的功能的,Java底层也是调用的操作系统的方法。常量池:是编译后的字节码文件中的,在 .class文件中。运行时常量池:类被加载后,把常量池中的符号地址变为。方法区就是元空间,主要存储 类的信息 和 常量池。

2024-06-21 16:18:32 274

原创 synchronized工作原理、重量级锁、轻量级锁和偏向锁

​​​​​​​。

2024-06-21 11:38:50 209

原创 AQS、CAS、公平锁和非公平锁、悲观锁和乐观锁 、ReentrantLock、Synchronize和lock

AQS是一种锁的机制,是多线程中的队列同步器(重点:是一种机制,队列中存储着排队的线程)AQS可以实现公平锁也可以实现非公平锁。使用CAS保证原子性。

2024-06-21 11:03:00 263

原创 数据库相关知识点

进一步的,我们需要获取员工数量大于等于2的职位, 这是一个条件判断,根据前面的知识,条件判断应该加在where关键字之后。Database(数据库)和Schema是一样的含义,在命令中可以同等替换。“获取员工数量大于等于2的职位”, 这个条件是属于分组之后的过滤。可以将属性值替换的表达式,列名替换是用as关键字(as可以省略)数据库设计当中要重点关注:创建表(语法、约束、数据类型、设计)数据库设计当中要重点关注:创建表(语法、约束、数据类型、设计)日期时间类型(红色的是最常用的)

2024-04-22 17:41:08 385

原创 maven高级

注意:<dependencyManagement>只是统一指定了子工程中这个依赖jar包的版本号,而并没有把这个依赖的jar包加进来,在子工程中还是要重新加上dependency这个包,但是不用指定版本号了。只需在聚合工程中执行对应的操作,其中所包含的所有工程都会执行相应的操作,并且可以自动根据依赖关系构建。

2024-04-15 11:45:23 137

原创 事物管理和AOP

面向特定的方法编程,可以在不改动原始方法的基础上,针对于原始的方法进行编程,这个编程可以是原功能的增强,也可以是原始功能的改变,面向切面编程仅仅是一种编程思想动态代理技术是面向切面编程这种思想最主流的实现方式SpringAOP的底层就是动态代理技术。

2024-04-13 21:03:13 260

原创 javaweb后端-登录功能P156

过滤器用于完成一些通用的操作,例如登录校验功能,访问登录页面的时候要校验登录成功了没有,访问部门管理页面的时候也要校验登录成功了没,访问员工管理页面的时候也要校验登录成功了没,登录成功了就正常访问,没有登录成功,就跳转到登录页面。在用户登录完成之后,生成一个jwt令牌 ,然后将jwt令牌下发给客户端,客户端将这个令牌存储起来,在以后的每次请求中都会携带这个令牌,通过服务器端的统一拦截来认证有效性。http协议是无状态的,每次请求之间都是独立的,互相没有关联的。会话跟踪:一次会话的多次请求之间,共享数据。

2024-04-13 17:01:06 201

原创 spring三层架构+文件如何上传+yml配置文件+@ConfigurationProperties 与@Value的区别

注解指定配置文件sql语句中的哪个变量名来接收,sql语句中用于接收的变量名 全都 和 某个实体类的成员变量 相同时,可以不在 形参中指定 sql中的哪个变量接收。在项目开发当中,注入的属性特别多,而且想要复用,在多个类中,都要想获得注入进来的属性值,那么就可以直接注入这个对象就可以获得这些属性值了。(1)当sql语句中用于接收的变量名 全都 和 某个实体类的成员变量 相同时,可以不在 形参中指定 sql中的哪个变量接收。注释接收,value中的变量名指定接收的变量,必须和后面紧接着用于接收的变量名相同。

2024-04-12 11:58:09 308 1

原创 java-面向对象

Java中的封装和继承

2023-07-14 20:39:20 120

原创 Java基础语法

制表符补空格的时候只能前面的字符串有关系,跟后面的没关系,若前面的字符串有4个字符,则制表符会补4个空格;只有在byte,short,char参与运算时,会转换为int类型,不参与运算是不转换的。先新建项目,再新建模块,再新建包(包是多级文件夹,用点“.”隔开),包里面再建类。如果要定义long类型的变量,数值后面需要加一个L(大写小写都行,建议大写)因为如果不加后缀,整数数值默认是int类型的,浮点数默认为double类型的。下面这种情况,强制类型转换可能会造成数字的溢出,造成数据错误。

2023-07-10 18:40:52 107

原创 Java入门

每次打开QQ都要切换盘符,进入多层文件夹,太麻烦了,我们想在任何目录下都能执行QQ.exe命令,这时需要用到环境变量,当在当前目录下找不到QQ.exe时,会去环境变量中去找。将编写好的代码编译成class文件后,不再需要完整的JDK,只需要里面的部分工具(JVM,核心类库,部分运行工具)即可在另一部电脑上直接运行这个class文件。环境变量分为用户变量和系统变量,系统变量是所有用户通用的环境变量,然后将路径添加到Path中。先编译(带后缀的文件名)再运行(不带后缀的文件名)C和C++是编译型语言,

2023-07-07 12:24:21 140

原创 pycharm调用matlab函数

pycharm调用matlab函数

2023-03-29 17:11:27 1995 2

原创 pycharm安装scipy库

pycharm安装scipy库

2023-03-29 15:30:17 1068

原创 pycharm调用matlab函数的方法

pycharm调用matlab函数方法

2023-03-29 15:21:38 1567

原创 矩阵求导的学习

矩阵的求导公式

2023-03-09 15:05:45 63

原创 机器学习笔记

机器学习

2023-03-09 15:03:17 80

原创 无标度网络/幂律分布、小世界网络

无标度网络/幂律分布、小世界网络

2022-10-12 16:34:05 1615

原创 Python——面向对象开发基础

P1 面向对象的概念面向过程编程,在编写函数时,会出现你调用我,我调用你的情况,函数的参数也会出现不同和变化,在这种复杂情况下,使用面向过程编程,比较繁琐而面对对象编程,首先要明确不同对象和它们的职责,很少出现互相调用函数的情况,明确了各自的功能,再编写函数,调用自己的方法,简化了复杂项目的开发工作。P2、类和对象类就是制造飞机的图纸,不能直接使用,但是有属性和方法对象是这个图纸造出来的飞机,可以直接使用的,同时拥有了这类飞机的属性和方法一个类可以有很多个对象...

2022-05-14 16:17:46 534 1

原创 计算机网络——第一章概论

1.1 什么是Internet互联网?物理层:通过物理介质,例如电磁波、光纤、电信号,实现0/1的数字信号和电信号的相互转换,网卡就位于物理层数据链路层:实现点对点的相邻传输,只能实现相邻点对点的传输,只能是邻居,远了就不行了,远了,需要网络层,端到端的数据传输,例如交换机网络层:可以实现主机与主机之间的传输,通过IP地址,也叫端对端的通信,且是不可靠传输,例如路由器(IP协议)传输层:比主机更小的粒度,实现了进程与进程之间的通信,并且实现更可靠的数据传输,加强了网络层提供的服务,细分了..

2022-05-09 11:51:03 804

原创 Python中的函数基础

P133 确定目标模块就是提供函数的一个工具包,函数就是工具包中的一种工具P134 函数的概念将之前已经写过的功能封装起来,构成一个函数,在以后想使用的时候可以随时调用,不用重复的编写(也叫 重用)P136 函数的定义函数名要做到见名知义P137 函数调用注意:定义好函数之后,只表示这个函数封装了一段代码而已,如果不主动调用函数,函数是不会执行的调用函数很简单,通过“ 函数名()”即可完成对函数的调用P140 调试小技巧如果要执行的代...

2022-05-07 16:01:25 496

原创 Python语法学习

python中 * 还可以用于字符串(字符串要放在“”里面)的指定次数输出可以用()来调整计算的优先级P49 程序的执行原理P50 Python执行原理P51程序就是处理数据的P52 变量是用来保存数据的P53 变量的定义每个变量在使用前必须赋值字符串要用一对引号括起来...

2022-04-29 19:30:43 1203

原创 Python-了解

P1 Python的起源Python解释器是用C语言实现的,具有很好的可拓展性,并能调用C语言的库文件P2 解释器跨平台:一次编写的程序,既可以在Windows上运行,也可以在Linux上运行,也可以在Mac上运行,这叫跨平台解释型语言(Python):将源代码交给解释器,解释器对源代码读取一行>翻译一行>执行一行,依次进行每一行的工作,直到完成,一行一执行,执行速度慢,而对于不同的操作系统,安装不同的解释器,就可以执行这个源代码,一劳永逸,所以跨平台特性强)编译

2022-04-18 17:57:54 229

原创 C语言编程笔记——MOOC翁恺

第一章:程序设计与C语言1.编程:是告诉计算机去做什么,用编程语言写出来如何去解决问题,而不是去用编程语言和计算机交流,而是描述要求它如何做事情的过程和方法2.解释和编译的区别:解释:是用一种软件去帮你执行你的高级语言,例如python,与编译不同,它有执行的动作,帮你去执行了编译:是将你写的高级语言程序用一种编译器,变成计算机能理解的二进制代码——机器语言,而没有去执行这串二进制代码,需要进一步的去执行(注:C语言需要被编译才能运行,所以需要编辑器、编译器或者IDE集成开发环境)

2022-04-17 22:07:34 1107

原创 Linux-查询系统信息命令和其他命令

都是一些基本的查询命令P82 查询系统时间和日期P83 查询系统磁盘信息df-h 查询磁盘剩余空间时,重点应放在挂载点为根目录 / 的磁盘使用情况P84 进程信息1、查看进程的命令ps,后面带选项时不带 - ,选项aux可以任意组合,一般不带选项x,带x显示的进程太多了,每一个命令执行时,都可能是一个进程,在查询进程时,可能会看到这个命令的进程在运行2、top命令类似于windows系统下的任务管理器,会动态的显示运行中的进程,并且优先显示CPU和...

2022-04-17 21:52:06 800

空空如也

空空如也

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

TA关注的人

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