自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 三级缓存---解决 Spring 循环依赖

首先,什么是循环依赖?这个其实好理解,就是两个 Bean 互相依赖,类似下面这样:“”"“”"

2024-06-20 21:50:18 1687 2

原创 微服务:解决复杂业务的妙方

​ 分布式(Distributed)是指一个系统的组件分散在不同的网络节点上,这些组件协同工作以完成整个系统的任务。分布式系统可以提高可扩展性、容错能力和资源利用率。由于组件在物理上分隔,分布式系统需要处理诸如数据一致性、通信延迟和故障恢复等问题。​ 微服务是一种特定的分布式系统架构风格,它强调将应用程序拆分为许多较小的、松散耦合的、独立运行的服务。这些服务围绕特定功能或业务领域组织,并通过轻量级通信协议进行交互。

2024-07-26 20:47:13 222

原创 axios详解以及完整封装方法

”"

2024-07-25 22:35:58 710

原创 Nacos 高级详解:提升你的开发和部署效率

nacos 提供了3种方式,配置dataId的加载顺序A: 共享配置:(过时),使用 shared-configs 替代B: 加载多配置:(过时),使用 extension-configs 替代C: 内部规则拼接:配置 yml 文件中的 DataIdspring:name: config-service # 服务名cloud:nacos:config:server-addr: 127.0.0.1:8848 # nacos 服务地址。

2024-07-24 17:57:49 714

原创 SpringBoot实战:Spring Boot接入Security权限认证服务

引言Spring Security 是一个功能强大且高度可定制的身份验证和访问控制的框架,提供了完善的认证机制和方法级的授权功能,是一个非常优秀的权限管理框架。其核心是一组过滤器链,不同的功能经由不同的过滤器。本文将通过一个案例将 Spring Security 整合到 SpringBoot中,要实现的功能就是在认证服务器上登录,然后获取Token,再访问资源服务器中的资源。一、基本介绍登录验证:通过 JWT 为每个用户生成一个唯一且有期限的 Token,用户

2024-07-23 17:54:15 760

原创 RabbitMQ+redis+Redisson分布式锁+seata实现订单服务

(相关解释直接在代码注释上了)

2024-07-22 16:12:34 567

原创 前端快速处理数据的方式?

在前端处理大量数据时,可以采用以下几种方式来提高处理速度和性能:数据分页:将数据分成多个页面,并按需加载。只加载当前页面的数据,而不是一次性加载全部数据。这可以减少初始加载时间和内存占用,并提高用户体验。虚拟滚动:对于需要展示大量列表或表格数据的情况,可以使用虚拟滚动技术。虚拟滚动只渲染可见区域的数据,而不是全部数据,从而减少渲染时间和内存占用。数据分片:将大数据集分成多个小块来处理,可以使用分片算法将数据分成多个批次处理。这样可以避免一次性处理大量数据导致页面卡顿或崩溃。

2024-07-21 22:01:34 568

原创 优化API接口性能:解决前端反馈的接口响应慢问题

通过合理的分页加载、索引优化、数据缓存、异步处理、压缩数据等手段,可以有效地优化接口性能,提升系统的响应速度。以下是一些优化建议:分页加载数据: 如果可能的话,通过分页加载数据来减少每次请求返回的数据量。这样可以减轻服务器的负担,同时也减少了前端需要处理的数据量。使用索引: 确保数据库表中的字段上建立了合适的索引,这样可以加快查询速度。分析常用的查询条件,并在这些字段上建立索引,这样可以大幅提升查询效率。

2024-07-20 20:21:44 1094

原创 node.js全栈CRUD

Express是一个轻量级且灵活的Node.js Web应用程序框架,它提供了一组简洁而强大的工具,帮助开发者快速构建Web应用。Express的核心理念是中间件,通过中间件可以处理HTTP请求、响应以及应用程序的逻辑。

2024-07-19 16:45:18 384

原创 接口防刷!利用redisson快速实现自定义限流注解

如登录接口,当用户使用手机号+验证码登录时,一般我们会生成6位数的随机验证码,并将验证码有效期设置为1-3分钟,如果对登录接口不加以限制,理论上,通过技术手段,快速重试100000次,即可将验证码穷举出来。解决思路:对登录接口加上限流操作,如限制一分钟内最多登录5次,登录次数过多,就返回失败提示,或者将账号锁定一段时间。在日常开发中,一些重要的对外接口,需要加上访问频率限制,以免造成资��损失。ok,通过以上两步,即可完成我们的限流注解了,下面通过一个接口验证下效果。

2024-07-18 20:13:39 1330

原创 从Mybatis-Plus开始认识SerializedLambda

R get(T t);注意,这里必须要继承自接口,不然编译器不会为对应的Lambda表达式生成方法,也就无法获取到对象读者在看到上述示例代码后,可能存在疑惑,为何Getter这个函数式接口要这样定义,为什么有两个泛型参数T和R?R get();//参数改为InstanceGetter类型,其他不变try {//反射获取writeReplace方法//调用writeReplace方法//获取实现方法,也就是方法引用对应的方法名但在使用的时候,传递参数时就不能用。

2024-07-17 20:59:26 689

原创 js需要同时发起百条接口请求怎么办?--通过Promise实现分批处理接口请求

比如:其中的 cancelAll() 函数,若你的 http 取消请求的方式不同,那么这里取消请求的功能就需要相应的修改,若你使用的是 fetch 请求,那除了修改 cancelAll 功能之外,singleRequest 中收集请求任务的方式也要修改,因为 fetch 是不可取消的,需要借助 AbortController 来实现取消请求的功能,由于我的项目是uni-app这种,方便起见,我就直接贴上在 uni-app 的页面 vue 组件中的使用案例。如何通过 Promise 实现百条接口请求?

2024-07-16 20:43:58 863

原创 Springboot全局属性

【代码】Springboot全局属性。

2024-07-15 23:02:18 194

原创 Spring源码分析

Spring的强大之处不仅仅在于它为Java开发者提供了极大便利,更在于它的开放式架构,使得用户可以拥有最大扩展Spring的能力。我们在用xml定义spring信息时,默认的element只包含beans,bean,import,alias这四个,其它任何标签都属于自定义标签,均需要引入相应的命名空间,如:context,aop标签等。i++) {//处理默认的标签元素else {//处理自定义的标签元素else {

2024-07-14 21:44:27 932

原创 如何实现一个分布式锁

我们来定义一个锁续约任务,那我们需要什么信息呢?我们至少需要锁的 key,锁要设置的过期时间。这是两个最基本的信息。要判断在锁过期时间的三分之二的时间点及之后进行续约,那么我们还需要记录锁上次续约的时间点。此外,我们还可以为锁续约任务添加最大续约次数限制,这可以避免某些执行时间特别久的任务不断占用锁。所以我们还需要记录当前锁续约次数和最大续约次数。对超过最大续约次数的锁的线程,我们直接将其停止,因此我们也记录一下该锁的线程。/*** key*//*** 过期时间。单位:秒。

2024-07-13 21:57:39 1381

原创 日常工作中需要避免的9个React坏习惯

React是前端开发领域中最受欢迎的JavaScript库之一,但有时候在编写React应用程序时,可能陷入一些不佳的习惯和错误做法。这些不佳的习惯可能导致性能下降、代码难以维护,以及其他问题。在本文中,我们将探讨日常工作中应该避免的9个坏React习惯,并提供相关示例代码来说明这些问题以及如何避免它们。为组件的属性定义类型和解构属性是一种良好的实践,它有助于提高代码的可维护性和稳定性。在日常工作中,我们应该使用PropTypes或TypeScript等工具来为属性添加类型定义,并解构属性以使其更清晰。

2024-07-12 21:55:08 1912

原创 Mybatis-Plus最优化持久层开发

Mybatis-plus(简称MP)是一个Mybatis的增强工具,在mybatis的基础上只做增强不做改变;提高效率;自动生成单表的CRUD功能;提供了丰富的条件拼接方式;全自动ORM类型持久层框架;(不仅提供数据库操作的方法,还会提供sql语句的实现)如果我们需要自己定义一些sql语句:eg:批量查询、根据id查询......//步骤:1.直接在mapper接口中书写相应的 ” 方法名 “ (//按照mybatisX的方法命名规则)eg:批量插入:insertBatch。

2024-07-11 23:00:33 636

原创 一条SQL查询语句是如何执行的??

我想来跟你聊聊 MySQL 的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:mysql> select * from T where ID=10;我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。所以今天我想和你一起把 MySQL 拆解一下,看

2024-07-10 23:19:55 555

原创 SpringSecurity安全管理

在 Web 开发中,安全一直是非常重要的一个方面,因此从应用开发的第一天就应该把安全相关的因素考虑进来,并在整个应用的开发过程中。主要安全框架:Shiro,Spring SecuritySpring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它实际上是保护基于spring的应用程序的标准。Spring Security是一个框架,侧重于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring安全性的真正强大之处在于它可以轻松地扩展以满足定制需求。

2024-07-09 22:51:44 675

原创 redis学习笔记

AOF(append only file)持久化:以独立日志的方式记录每次写命令(读操作不记录,文件只允许追加,不允许修改),Redis重启时会重新执行AOF文。某种规则订阅的频道。启AOF方式持久化后每执行一条写命令,Redis就会将该命令写进 aof_buf 缓冲区,AOF缓冲区根据对。当RDB与AOF两种方式都开启时,Redis会优先使用AOF恢复数据,因为AOF保存的文件比RDB文件更完。Redis cluster:主要是针对海量数据+高并发+高可用的场景,如果是海量数据,如果你的数据量很大,

2024-07-08 22:45:59 1177

原创 Mysql

索引是存储引擎用于提高数据库表的访问速度的一种数据结构。

2024-07-07 21:36:02 1015

原创 Redis 高阶应用

虽然市面上有很多优秀的消息中间件如 RocketMQ、Kafka 等,但对于应用场景较为简单,只需要简单的消息传递,比如任务调度、简单的通知系统等,不需要复杂的消息路由、事务支持的业务来说,用那些专门的消息中间件成本就显得过高。Redis 本身就是就是以性能著称,因此完全符合高性能的要求,其次使用 Redis 的 incr 命令可以保证递增性,配合相应的分布式 ID 生成算法便可以实现唯一性和安全性,Redis 可以通过哨兵、主从等集群方案来保证可用性。对于上述的需求,早就有了成熟的开源方案。

2024-07-06 21:23:09 718

原创 Springboot+Shiro+Mybatis+mysql实现权限安全认证

Subject代表了当前用户的安全操作SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。Authenticator即认证器,对用户身份进行认证,Authenticator是一个接口,shiro提供ModularRealmAuthenticator实现类,通过ModularRealmAuthenticator基本上可以满足大多数需求,也可以自定义认证器。

2024-07-05 21:43:20 1256

原创 Rabbitmq的使用

特点:1.当有多个消费者时,无论消费者处理的性能是否相同,生产者的消费会平均分配给每一个消费者2.每个消费者处理的消息是否存在重复?不会重复解释:为什么开启多个消费者时,会出现有的消费者虽然处理的慢,但是也会收到相同的消息的个数?rabbitmq有消息默认的分配机制:平均分配(有多少个消费者,都将平均分配要处理的消息数)优化: 能者多劳在消费处理消息时,可以设置由队列每次分配给消费者的消息数量,不要一次性全分完。

2024-07-04 21:14:51 661

原创 Mybatis执行器

mybatis执行sql语句的操作是由执行器(Executor)完成的,mybatis中一共提供了3种ExecutorREUSEsqlBATCHSIMPLE另外,mybatis还提供了一个缓存执行器,该执行器实际上是以上三种执行器的装饰类,用以处理缓存相关操作,实际干活的还是以上三种执行器之一。Executor。

2024-07-03 19:32:23 932

原创 可重入锁思想,设计MQ迁移方案

如果你的MQ消息要从Kafka切换到RocketMQ且不停机,怎么做?在让这个MQ消息调用第三方发奖接口,但无幂等字段又怎么处理?今天小傅哥就给大家分享一个关于MQ消息在这样的场景中的处理手段。这是一种比较特例的场景,需要保证切换的MQ消息不被两端同时消费,并且还需要在一段消费失败后的MQ还可以继续重试。并且这一端消费的MQ消息,也要保证自身的幂等。我们知道一般通用场景下,MQ消息都会有一个业务唯一ID值,用于接收方做仿重处理。

2024-07-02 21:15:14 984

原创 jQuery

第一个参数为是否清除动画队列,true,清除动画队列,false不清除动画队列第二个参数为,停止当前animate动画,停止后动画的位置,true为,瞬间结束动画,动画停止后位置为当前动画的终点,false,停止动画值,元素停留在停止动画的位置div {top:100px;left:100px;</style>// 添加四个动画})})})})</script>

2024-07-01 19:52:07 773

原创 Vue - 入门

Vue(读音/vjuː/,类似于view) 是一套用于构建用户界面的渐进式框架与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合MVVM 是的缩写,它是一种基于前端开发的架构模式,是一种事件驱动编程方式Model:vue对象的data属性里面的数据,这里的数据要显示到页面中View:vue中数据要显示的HTML页面,在vue中,也称之为“视图模板ViewModel。

2024-06-30 20:59:30 375

原创 js脚本化css

这样的话,所有浏览器的值都是一样的,offsetLeft、offsetTop值是number类型的,可以直接参与运算,不需要parseInt()一个盒子的offsetWidth值就是自己的 width+左右padding+左右border的宽度(说白就是盒子的大小)一个元素的offsetLeft值,就是这个元素左边框外,到自己的offsetParent对象的左边框内的距离。无论自己是否定位,自己的offsetParent就是自己祖先元素中,离自己最近的已经定位的元素。

2024-06-29 22:33:04 945

原创 js定时器

同时只能执行一个任务,如果后面有任务,需要等到当前任务执行完毕,才能执行后面的任务i< 10000;i++){js的是单线程的也就是说上面的代码,无论for循环多么耗时,都必须先执行完,在打印2,这就会造成线程阻塞的问题。

2024-06-28 20:35:03 879 1

原创 前端 Array.sort() 源码学习

这里采取的是数量小于10的数组使用 InsertionSort(插入),比10大的数组则使用 QuickSort(快速)。我把一整坨源码码分成一块一块来看,让自己比较清晰的知道sort到底干了些啥,下面是阅读代码时,自己的思路梳理。使用JS函数将数组hole和未定义项移到末尾,该函数在访问器存在时是安全的。第一块内容判断,如果传进来的参数不可回调,则给一个默认的回调函数。这块代码里面的注释,讲的还是比较详细的,百度翻译也非常nice。大致意思是,把“掀开的东西,再盖上”源码中的第一句话就回答了我的问题。

2024-06-27 19:49:58 576

原创 Zookeeper安装部署

ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper的基本原理,数据模型,Session,Watch机制,一致性保证,Leader Election,Leader和Follower的工作流程和Zab协议。

2024-06-26 19:57:26 1372

原创 使用 Spring 实现控制反转和依赖注入

控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。与传统编程相比,传统编程中我们的自定义代码调用库,而IoC使框架控制程序的流程并调用我们的自定义代码。为了实现这一点,框架使用具有附加行为的抽象。如果我们想要添加自己的行为,我们需要扩展框架的类或插入自己的类。将任务的执行与其实现分离更容易在不同实现之间切换程序的更高的模块化更容易通过隔离组件或模拟其依赖项来测试程序,并允许组件通过契约进行通信。

2024-06-25 19:26:34 929

原创 K8s高可用集群二进制部署-V1.20

Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。

2024-06-24 20:05:50 1263

原创 查看CentOS系统信息

【代码】查看CentOS系统信息。

2024-06-23 18:13:17 235

原创 框架 - -> 配置

label: '当事人',props: {},class: {},style: { `对表格字段样式进行操作`},on: { `对字段触发点击事件`},}]/*vue*/title="查看事件管理"-- 内容 -->">"><fw-header title="事件信息" style="margin-top: 11px;" />"><fw-form</fw-form></div></div></div> --></div>/*js*/name: '短信提醒',

2024-06-22 15:27:17 698

原创 K-means聚类是一种非常流行的聚类算法

K-means聚类是一种非常流行的聚类算法,它的目标是将n个样本划分到k个簇中,使得每个样本属于与其最近的均值(即簇中心)对应的簇,从而使得簇内的方差最小化。K-means聚类算法简单、易于实现,并且在许多应用中都非常有效。

2024-06-21 17:31:11 924

原创 CSS 属性计算

你是否了解 CSS 的属性计算过程呢?上面的 CSS 代码中,p 是元素选择器,color 就是其中的一个 CSS 属性。但是要说 CSS 属性的计算过程,还真的不是很清楚。没关系,通过此篇文章,能够让你彻底明白什么是 CSS 属性的计算流程。

2024-06-19 22:13:29 572

原创 1-事件循环

如果程序需要同时执⾏多块代码,主线程就会启动更多的线程来执⾏代码,所以⼀个进程中可以包含多个线程。⼀个进程⾄少有⼀个线程,所以在进程开启后会⾃动创建⼀个线程来运⾏代码,该线程称之为主线程。默认情况下,浏览器会为每个标签⻚开启⼀个新的渲染进程,以保证不同的标签⻚之间不相互影响。我正在执⾏⼀个 JS 函数,执⾏到⼀半的时候⽤户点击了按钮,我该⽴即。我正在执⾏⼀个 JS 函数,执⾏到⼀半的时候某个计时器到达了时间,我。浏览器进程内部会启动多个。每个任务都有⼀个任务类型,同⼀个类型的任务必须在⼀个队列,不同类型。

2024-06-18 10:48:11 433

原创 微服务架构必备技术栈:万变不离其宗的奥义!

之前我们说过,微服务是一种软件设计、架构思想。当然,里面也包含了相关技术点要解决当前要务。学习微服务,我们不能空口而谈,一定要落实到具体的技术栈上。当今使用比较多两个技术体系,一个是Java,另外一个就是Net。废话不多说,今天我就把相关“微服务架构”所用到的技术栈罗列出来。(以下是微软相关技术栈的)这里也要说明一下,微服务架构里面的很多技术是和开发语言无关的。无论是 .Net 还是 Java 平台都可以使用。我们之前说过,微服务架构的轮廓大同小异,以后,一步一步的针对每项技术在做深入研究。

2024-06-17 14:01:58 799

通讯录真.cpp

通讯录真.cpp

2023-06-15

樱花漂落-网页源代码.html

樱花漂落-网页源代码.html

2022-11-30

空空如也

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

TA关注的人

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