自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(137)
  • 问答 (1)
  • 收藏
  • 关注

原创 多线程-synchronized

Java的多线程允许同时做多件事情。但是,两个及两个以上的线程彼此互相影响的问题也就出现了。如果不防范这种冲突,就可能发生两个用户购买了同一个座位的火车票,且都购票成功的事情。

2023-07-25 21:54:58 300

原创 多线程同步异步

CompletableFuture提供了一种观察者模式类似的机制,可以让任务执行完成后通知监听的一方。

2023-07-21 10:06:57 184

原创 并发编程概述

悲观锁:悲观锁有点像是一位比较悲观(也可以说是未雨绸缪)的人,总是会假设最坏的情况,避免出现问题 (认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。乐观锁:乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源(也就是数据)是否被其它线程修改了(具体方法可以使用版本号机制或 CAS 算法)

2023-07-20 11:53:07 172

原创 spring框架-循环依赖问题(二)

两个或多个类之间存在彼此依赖的情况,形成一个循环依赖链代码:单例bean的循环依赖:先了解Bean的生命周期:1.实例化 2.初始化、3.使用 4.销毁详细了解Bean生命周期图示展示:流程:1.先创建A对象,判断spring容器中是否有对象,如果有直接赋值,没有还需要创建A对象2.先实例化A对象,给A对象开辟空间地址,因为类A中有属性B,因此需要在容器中获取B对象3. 如果容器中有A对象,那么就直接赋值,没有就创建A对象,进行循环。

2023-06-22 21:12:27 485

原创 spring框架-概述(spring特性、生命周期)(一)

Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器 ,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架。

2023-06-22 16:51:37 883

原创 springCloudAlibaba组件-Nacos-服务配置(四)

长轮询方式是指客户端发送请求给配置中心,如果配置文件有变更,则立即返回配置文件内容,并在一定时间内保持连接,等待下一次变更。在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。1.本地配置文件:Nacos客户端首先会检查本地是否存在缓存的配置文件,通常在启动时会将最近一次获取的配置文件保存到本地。如果本地存在缓存的配置文件,则直接读取缓存的配置文件内容,并使用该配置信息。本地缓存文件是在前一次从服务端获取最新配置时保存的,包含了最新的配置信息。

2023-06-17 18:03:24 480

原创 springCloudAlibaba组件-Nacos-服务发现与负载均衡(三)

如果项目使用微服务架构,如果A微服务需要访问B微服务,需要http请求进行调用,当然需要B微服务的地址与端口号,微服务可以向之前提到的服务中心进行获取B服务的ip地址和端口号,这就是服务发现。

2023-06-17 16:36:29 1190

原创 数据结构-各种树(二叉树、二叉查找树、平衡二叉树、红黑树、B树、B+树)

二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;特点:平衡二叉树:它具有二叉查找树的所有特点,同时增加了一个规则:”它的左右两个子树的高度差的绝对值不超过1“。特点:它具有二叉查找树的所有特点,同时增加了一个规则:”它的左右两个子树的高度差的绝对值不超过1“。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。(4)如果一个节点是红色的,则它的子节点必须是黑色的。(4)若根节点不是叶子节点,则根节点至少有两个孩子节点。

2023-06-17 10:45:25 2910

原创 springCloudAlibaba组件-Nacos-服务注册与心跳机制(二)

(微服务开启时自动会获取将所处的ip地址、端口号、服务名称,先开启心跳机制,并将这些信息注册到nacos的服务中服务列表中,通过服务中心来管理这些微服务)2)流程:服务启动后每隔5秒会向Nacos发送一个“心跳包”,这个心跳包中包含了当前服务的基本信息,Nacos接收到这个心跳包,首先检查当前服务在不在注册列表中,如果不在按新服务的业务·进行注册,如果在,表示当前这个服务是健康的。重要性较高的服务:如果服务对于业务运行的重要性较高,需要持久地注册和心跳发送,可以选择永久实例。注册后同时会发布服务变更事件。

2023-06-17 09:35:06 872

原创 springCloudAlibaba组件-Nacos-功能概述与配置(一)

一个更易于构建云原生应用的动态服务发现(所有的微服务都注册到nacos中,微服务通过nacos服务中心进行服务发现)、配置管理(主要将公共的服务配置(如连接redis、mysql)在一个配置文件中,可进行共享)和服务管理(提供一个可视化界面 动态管理服务、配置等功能) 平台主要目的:管理所有微服务、解决微服务之间调用关系错综复杂,难以维护的关系。

2023-06-16 22:00:10 1125

原创 spirngCloud框架-概述篇

Spring boot是Spring的一套快速配置脚手架,可以基于spring boot快速开发单个微服务,Spring Boot,看名字就知道是Spring的引导,就是用于启动Spring的,使得Spring的学习和使用变得快速无痛。不仅适合替换原有的工程结构,更适合微服务开发。Spring Cloud基于Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。1.这么多的微服务,我们如何管理它们。

2023-06-16 21:15:30 1632

原创 Redis高并发场景(九)—缓存雪崩

造成缓存雪崩的关键在于在同一时间大规模的key失效。与缓存击穿不同的是缓存雪崩针对的是多个热点key,而缓存击穿是一个热点key。

2023-06-03 16:23:12 673

原创 Redis高并发场景(八)—缓存穿透

将所有可能存在的数据哈希到一个足够大的bitmaps中,一个一定不存在的数据会被这个bitmaps拦截掉,从而避免了对底层存储系统的查询压力。布隆过滤器可以用于检测一个元素是否在一个集合中,它的优点是空间效率和查询的世界都远远超过一般的算法,缺点是有一定的误识别率和删除困难。缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。bitmap里面的id进行比较,如果访问的id不在bitmaps里面,则进行拦截,不允许访问。

2023-06-03 16:02:07 377

原创 Redis高并发场景(七)—缓存击穿

主播介绍商品,一款或多款冷门商品突然爆火,原本redis中冷门商品数据设置了定时过期,爆火后大量请求同时去redis中访问该商品数据,恰巧该数据过期了,于是大量并发请求查询数据库,会导致数据库运行压力过大,从而影响其他业务。redis中某个热点key(访问量很高的key)过期,此时大量请求同时过来,发现缓存中没有命中,这些请求都打到db上了,导致db压力瞬时大增,可能会打垮db,这种情况成为缓存击穿。缓存中拿不到数据的时候,此时不是立即去db中查询,而是去获取分布式锁(比如redis中的setnx),

2023-06-03 15:49:46 122

原创 Redis底层学习(六)—存储类型-ZSet篇

每个集合元素使⽤两个紧挨在⼀起的压缩列表节点来保存,第⼀个节点保存元素的成员( member ),⽽第⼆个节点则保存元素的分值( score )。根据某些score条件,升序展示zset中的元素: ZRANGEBYSCORE [key] [minScore] [maxS。根据某些score条件,降序展示zset中的元素: ZREVRANGEBYSCORE [key] [maxScore] [m。添加元素到zset中: ZADD [key] [score1] [member1] …

2023-06-03 10:59:49 460

原创 Redis底层学习(五)—存储类型-Set篇

当使⽤字典作为底层实现,每个键都是⼀个 字符串 对象,每个字符串对象包含了⼀个 集合元素 ,⽽字典的值则全部被设置为 NULL。它的内部实现相当于⼀个特殊的字典,字典中所有的 value 的值都为 NULL。集合set中添加元素: SADD [key] [value1] …intset:使⽤整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合⾥⾯。查询value是否在集合中: SISMEMBER [key] [value]取出集合中的⼀个元素: SPOP [key]

2023-06-03 10:25:12 480

原创 Redis底层学习(四)—存储类型-Hash篇

添加元素到key中: HSET [key] [field1] [value1] …批量添加元素: HMSET [key] [field1] [value1] …ziplist 编码底层使⽤压缩列表实现,当有新的键值对要加⼊到哈希对象时,会先将 key 值。1.哈希对象中所有键值对中, key 和 value 的⻓度均⼩于等于64字节。批量获取元素: HMGET [key] [field1] …查询key中field的价格: HGET [key] [field]查询key中元素个数: HLEN [key]

2023-06-03 08:50:17 588

原创 Redis底层学习(三)—存储类型-List篇

仅保留某区间的列表,其余元素全被删除: LTRIM [key] [start_index] [end_index]按范围查看队列信息: LRANGE [key] [start_index] [end_index]左侧插⼊元素: LPUSH [key] [value1] …右侧插⼊元素: RPUSH [key] [value1] …查询列表中下标为index的元素值: LINDEX [key] [index]左侧弹出元素: LPOP [key]右侧弹出元素: RPOP [key]适⽤场景:消息队列。

2023-06-03 08:25:28 153

原创 Redis底层学习(二)—存储类型-String篇

先说一下区别,embstr和raw都是用来存储string数据的,并且都是使用SDS(简单动态字符串(Simple Dynamic String))来存储,区别在于embstr是一块连续的内存,而raw是两个不连续的内存,因为raw是用来存长字符串的,所以SDS相对来说占用内存较大,而申请一块连续较大的内存是得不偿失的,embstr存数据时是只读的,如果需要改变embstr存储的value时,redis底层会将string的存储方式由embstr转换为raw,然后再去修改其value。

2023-06-02 21:55:33 717

原创 Redis底层学习(一)—概述篇

在哈希表中,先做哈希运算再取模,时间复杂度为O(1)3.使用单线程(避免线程之间的切换)4.底层高效的数据结构 (哈希表)2.Redis的IO多路复用机制。以key Value形式进行存储。Redis性能高的原因。在以下的几篇博客中讲到。

2023-06-02 20:15:10 46

原创 算法-堆排序

将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。

2023-05-30 20:11:12 30

原创 算法-直接选择排序

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

2023-05-30 15:26:13 25

原创 算法-希尔排序详解

希尔排序是把元素按下标的一定增量进行分组,对每组使用直接插入排序算法排序。随着增量逐渐减少,当增量减至 1 时,整个文件恰被分成一组,算法便终止。将整个无序列分割成若干小的子序列分别进行插入排序的方法。

2023-05-30 15:19:22 24

原创 算法-直接插入排序

一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。例如:将7插入序列中,比10小,比5大,因此放入5与10之间,抽取下一张牌也是如此放置。数据量不大,并且对稳定性有要求并且数据局部或者整体有序的情况。对一个数组5,3,2,8使用直接插入排序 从小到大排序。打扑克牌: 类似于将一张张扑克牌插入序列中。

2023-05-30 15:06:48 29

原创 开发工程师-常用算法基本思想 -分类-时间复杂度与空间复杂度概述

概述软件开发工程师常用算法思想与分类

2023-05-29 17:57:35 58

原创 2023年上半年-软考总结

在学习软考的过程中,我发现自己的算法相关内容掌握不是很熟练,设计模式的行为型模式自己也不是掌握的很牢固,我需要把算法相关的内容重新总结以及进行整理,以便于更好地软考,并且通过算法提高自己的逻辑能力。也可以不断地提高自己的业务能力水平。首先就是一个月的软考学习,软考学习我们有学习的软考计划,软考制定的计划帮我们执行学习计划的大方向,有了大方向,我们才能逐步的去落实软考计划的内容学习。

2023-05-28 20:07:54 100

原创 Windows系统使用命令提示符创建Vue3项目

1.在要创建的文件中输入 cmd。1.安装完成node.js。一个vue3的项目就做好了。5.输入项目名称等内容。6.一路选No 并回车。

2023-03-30 21:48:47 213 1

原创 Idea中解决 “Properties in parent definition are prohibited”问题

1.打开idea的 File --> settings -->点击Editor --> Code Style --> inspections。3.找到 incorrect injection point autowiring in Spring bean compoments。2.输入Usage of Android Wear BIND_LISTENER is deprecated。6.点击Ok,等待几秒钟或者重启就没问题了。4.将Error 改成Warnging。

2023-03-27 22:39:21 3306

原创 Idea中SpringBoot项目配置MybatisPlus框架

springBoot配置MybatisPlus框架

2023-03-27 22:19:27 267

原创 HbuiderX打包APP教程

打包app

2023-03-14 17:01:07 99

原创 uniCloud在线升级APP配置教程

使用uniCloud打包app

2023-03-14 16:58:08 611

原创 mysql百万级数量插入、删除、分组、分页、更新语句优化

sql语句优化

2023-03-13 22:06:01 1071

原创 Mysql创建五种索引

mysql索引

2023-03-06 21:29:21 91

原创 java语言使用多线程导出二维码

java语言使用多线程导出二维码提高速度

2023-03-04 20:33:52 148

原创 java语言批量生成二维码

java语言批量生成二维码

2023-02-21 19:38:53 632

转载 线程池技术

线程池技术

2023-02-10 17:43:21 63

原创 MySQL 存储引擎

mysql

2023-02-09 10:10:06 264

原创 SpringBean生命周期

springBean生命周期实验

2023-02-06 18:58:45 78

原创 在运行程序中报错该如何排查

运行过程中报错

2023-01-30 10:26:19 981

原创 关于“如何设计一个 70w 在线人数的弹幕系统”的总结

关于弹幕系统总结

2023-01-25 22:00:02 209

空空如也

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

TA关注的人

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