- 博客(35)
- 收藏
- 关注
原创 bug 前端不报错获取不到内容
后端直接返回了分页数据对象,没有包装在 {code: 200, data: xxx} 这样的结构中。所以 res.code 是 undefined,导致进入了 else 分支显示错误信息。
2025-06-12 18:21:43
70
原创 mysql 索引失效有哪些
select * from t_user where name like '%林‘;如果在or前的条件列是索引列,而在or后的条件列不是索引列,那么索引会失效。查询结果可能是哪个索引值开始比较,于是就只能通过全表扫描的方式查询。InnoDB存储引擎根据索引类型不同,分为聚簇索引和二级索引。索引保存的索引的是索引字段的原始值,而不是经过函数计算后的值。二级索引:存放的是主键值,不是实际数据。聚簇索引:叶子节点存放的是实际数据。
2025-05-28 14:23:43
272
原创 订单重复扣款故障分析:如何保障支付系统的幂等性
1.为每个支付请求生成全局唯一ID,系统可以在执行操作前检查该ID是否存在,如果不存在,则执行操作行为存入系统,如果存在,则表示已执行过,避免重复处理。在扣减库存时,重复请求可能导致库存被多次扣减,从而出现超卖现象。如果因网络延迟重复提交订单请求,可能会导致创建多笔相同的订单。:检查请求是否已被处理,可以基于状态机,唯一性索引等进行判断。:使用redis分布锁,确保在处理请求时不会有其他请求干扰。用户可能会遭遇重复转账,扣款等情况,影响资金安全.:如果判断通过,执行数据更新操作,并在完成后释放锁。
2025-05-10 15:12:08
184
原创 TCP三次握手和四次挥手(简要版)
第三次握手,客户端收到SYN+ACK包,向咱们服务器发送确认包ACK,那此包发送完毕,咱们客户端和服务器端进入到ESTABLISHED(tcp连接状态)第二次挥手,服务器回复一个ACK确认包,表示接收客户端的关闭连接请求,但是服务器还不能马上去关闭连接,需要检查一下是否还有未处理完毕的数据。第二次握手是咱们服务器收到SYN包,同时自己也给客户端发送一个确认包,SYN和ACK包。第一次挥手,客户端发送一个Fin包,申请断开连接,并等待咱们服务器确认。第四次挥手,客户端回复ACK包,表示断开连接。
2025-05-02 17:51:07
212
原创 既然有HTTP协议,为什么还要有WebSocket?
1.TCP协议本身是全双工的,但我们最常用的HTTP/1.1,虽然是基于TCP协议,但他是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的WebSocket协议.2.在HTTP/1.1里,只要客户端不问,服务端就不答,基于这样的特点,对于登录页面这样的简单场景,可以使用定时轮询或者长轮询的方式实现服务端推送的效果。3.对于客户端和服务端之间需要频繁交互的复杂场景,比如网页游戏,都可以使用websocket协议。
2025-05-02 15:13:47
157
原创 既然有http协议,为什么还要有RPC
RPC 其实⽐ HTTP 出现的要早,且⽐⽬前主流的 HTTP/1.1 性能要更好,所以⼤部分公司内部都 还在使⽤ RPC。HTTP/2.0 在 HTTP/1.1 的基础上做了优化,性能可能⽐很多 RPC 协议都要好,但由于是这⼏年 才出来的,所以也不太可能取代掉 RPC。RPC 本质上不算是协议,⽽是⼀种调⽤⽅式,⽽像 gRPC 和 Thrift 这样的具体实现,才是协 议,它们是实现了 RPC 调⽤的协议。从发展历史来说,HTTP 主要⽤于 B/S 架构,⽽ RPC 更多⽤于 C/S 架构。
2025-05-02 14:37:42
198
原创 HTTP和HTTPS
http是超文本传输协议,信息是明文传输,存在安全风险的问题.HTTPS则解决HTTP不安全的缺陷。,在tcp和http网络层之间加入了SSL/TLS安全协议使得报文能够加密传输.,比如通信链路上可以获取通信内容,用户号容易没。:无法篡改通信内容,篡改了就不能正常显示。,比如强制植入垃圾广告,视觉污染。,比如冒充淘宝网站,用户钱容易没。:交互信息无法被窃取。证明淘宝是真的淘宝网。
2025-05-02 14:34:30
419
原创 HTTP缓存技术
对于一些重复性的HTTP请求,我们可以把这对请求-响应的数据都缓存在本地,那么下次就直接读取本地的数据,不必在通过网络获取服务器的响应了。只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边.返回的是200状态码,但在size项中标识的是from disk cache,就是使用了强制缓存。告诉浏览器可以使用本地缓存的资源,这种通过服务端告诉客户端是否可以使用。缓存的方式被称为协商缓存。
2025-05-02 13:31:24
235
原创 数据采集,埋点模型
RequestRecordFilter:请求记录过滤器,用来接用户发送的业务请求,其中会去除忽略路径,测试路径,文件上传路径。2.1灵活性强,使用者可以比较方便的自定义属性,时间,传递各种所需的数据到服务端,对业务层代码侵入性低,无需代理。首先,所有前端的所有请求都要经过网关的globalfilter过滤处理,这里处理两部分信息请求数据,返回数据。然后,通过decorator装饰器处理,处理时:获得请求参数数据,返回时:构建返回数据结构。LogSource:埋点数据传输生产者。
2025-04-30 09:44:19
185
原创 HTTP(超文本传输协议)详解
通过状态码和头部字段,HTTP实现了灵活、高效的网络通信,支撑了现代Web应用的发展。它是互联网数据通信的基础,定义了客户端(如浏览器)和服务器之间的通信规则。,超文本传输协议)是用于在计算机之间传输超文本(如网页、图片、视频等)的。:默认不记录之前的请求(需借助Cookie/Session维持状态)。计算机世界的“约定”,规范了通信双方(如浏览器和服务器)的行为。超越普通文本的内容,包含文字、图片、链接、视频等。:响应体的数据长度(解决TCP粘包问题)。:丰富的内容形式(文本、图片、链接等)。
2025-04-29 19:47:31
791
原创 从输入网址到网页显示,期间发生了什么?—— 简要概括
服务器拆包:校验 MAC → IP → TCP,确认序列号后,将 HTTP 请求交给 Web 服务(如 Nginx)。生成 HTTP 响应(如 HTML 页面),再通过 TCP/IP 层层封装返回客户端。网络层(IP)添加源/目标 IP 地址,根据路由表选择出口网卡(通过子网掩码匹配)。:应用层(HTTP)→ 传输层(TCP)→ 网络层(IP)→ 链路层(MAC)。检查目标 IP,匹配路由表,通过 ARP 获取下一跳 MAC,重新封装帧。:域名 → IP(DNS)→ MAC(ARP)。
2025-04-29 19:35:59
364
原创 gateway核心概念
路由配置和断言条件进行路由匹配,选择合适的路由进行请求转发.网关处理器还会依次应用配置的过滤器链,对请求进行处理和转换.基本构建块,定义了请求的匹配规则和转发目标,通过配置路由,可以将请求映射到后端的服务实例或者URL上。Spring Cloud Gateway提供了多个内置的过滤器,如请求转发,请求重试,请求限流等.过滤器用于对请求进行处理和转换,可以修改请求,响应以及执行其他自定义逻辑,:用于匹配请求的条件,如果请求满足断言的条件,则会应用所配置的过滤器,核心组件,负责将请求转发到匹配的路由上.根据。
2025-04-28 20:08:50
385
原创 MySQL 内存篇-Buffer Pool
让预读的页停留在Buffer Pool里的时间要尽可能的短,让真正被访问的页移动到lRU链表的头部,从而保证真正被读取的热数据留在Buffer Pool的时间尽可能长。所有页都替换出去,导致大量热数据被淘汰了,等这些热数据再次访问数据库时,由于缓存未命中,就会产生大量的磁盘io,MYSQL性能就会急剧下降。2.Buffer Pool空间不足时,需要先将一部分数据页淘汰,如果先淘汰的是脏页,需要先将脏页同步到磁盘。更新数据的时候,不是每次都要写入磁盘,而是将Buffer pool对应的缓存页标记为脏页,
2025-04-26 14:23:18
420
原创 MySQL日志 undo log,redo log,binlog有什么用?
是Innodb存储引擎层生成的日志,实现了事务中的,主要用于事务回滚和MVCC是Innodb引擎层生成的日志,实现了事务中的主要用于掉点等故障恢复;是Server层生成的日志,主要用于和;
2025-04-25 19:48:16
679
原创 MySql 加了什么锁导致死锁的
两个事务即使生成的间隙锁的范围是一样的,也不会发生冲突,因为间隙锁目的是为了防止其他事务插数据,因此间隙锁与间隙锁之间是相互兼容的.因为插入语句在碰到间隙锁时,会生成一个插入意向锁,然后插入意向锁和间隙锁之间是互斥的关系。如果两个事务分别向对方持有的间隙锁范围内插入一条记录,而插入操作为了获取到插入意向锁,在执行插入语句时,如果插入的记录在其他事务持有间隙范围内,插入语句就会被阻塞,
2025-04-25 14:45:16
245
原创 一次性支付
2.提取出必要的参数,转化为统一的TradingVo对象,对TradingVo对象进行解析提取出需要的交易参数,然后进行后续交易和处理。1.交易系统通过统一的数据格式来接受参数,这个数据格式需要适用于所有业务系统的订单。防止订单重复,使用交易号作为外部订单号,订单每次生成的交易号唯一.加分布式锁,防止同时支付的行为。找到不同的支付方式完成支付。
2025-04-25 14:32:00
147
原创 MVCC是什么?
查询的时候创建快照信息readview,readview决定了我是怎么样去寻找undolog中的数据的。MVCC是多版本并发控制,在事务隔离级别实现原理应用,事务隔离级别有四种。可以存储老数据的存储指针,一旦update操作需要回滚,就会回滚这个指针。MVCC有三个关键隐藏点,用来记录当前列被那个事务维护的id,事务的隔离级别是用来解决并发所产生额一些问题。历史数据存储在undolog。
2025-04-24 19:55:58
182
原创 spring-cloud-stream 消息代理门面和rabbitMQ
业务系统生成消息直接调用Source对象发送消息,Source对象会找到bindings的channel【通道】,channel【通道】会通过binder对象找到对应的MQ组件发送消息。保证不重复投递,消费过的存到redis中,能取到值说明消费过,判断是否同意消息:将消息里的多个字段组合加密成为一个字符串,只有同一个消息才能匹配上。2.进行配置,暴露端口号,rabbitmq的端口号,ip地址,账号,密码,虚拟主机。生产者:本地事务和消息发送,必须是同时完成的,mq打开持久化,消费者改成手动回应。
2025-04-22 20:13:56
278
原创 MySQL中的锁
在备份数据库之前先开启事务,会先创建Read View,然后整个事务执行期间都在用这个Read View,而且由于MVCC的支持,备份期间业务依然可以对数据进行更新操作。之后可以在出入数据时,可以不指定主键的值,数据库会自动给主键赋值递增的值,这是通过AUTO-INC的锁实现的.AUTO-INC是特殊的表锁机制,锁。然后对该记录加独占锁,而普通的select是不会加行级锁的,普通的select语句是利用MVCC。当执行插入,更新,删除朝左,需要先对表加上意向独占锁,然后对该记录加独占锁,
2025-04-21 18:12:16
138
原创 Mysql 事务隔离级别是怎么实现的?
在一个事务内多次查询某个符合查询条件的记录数量,如果出现前后两次查询到的记录数量不一样的情况,就意味着发生了幻读。在一个事务内多次读取一个数据,如果出现前后两次读到的数据不一样的情况,就意味着发生了不可重复读的情况.指一个事务执行过程中看到的数据,一直跟启动时看到的数据是一致的,Mysql InnoDB的默认隔离级别。会对记录加上读写锁,当多个事务对这条记录进行读写时,后来的事务要等先来的事务完成才能继续执行。事务是由Mysql的引擎来实现的,我们常见的innoDB引擎它是支持事务的。
2025-04-21 10:47:23
263
原创 MYSQL 有什么优化索引的方法
顾名思义就是使用某个字段中字符串的前几个字符建立索引,使用前缀索引是为了减小索引字段大小,可以增加一个索引页中存储的索引值,有效提高索引的查询速度。
2025-04-20 19:58:24
138
原创 MySQL 什么时候需要/不需要创建索引
3.经常用于group by和order by字段,这样在查询的时候就不需要再去做一次排序了,因为我们都以及知道了建立索引之后在b+Tree中的记录都是排序好的。3.会降低表的增删改的效率,因为每次增删改索引,B+树为了维护索引有序性,都需要进行动态维护.2.经常用于WHERE查询条件的字段,这样能够提高整个表的查询速度,如果查询条件不是一个字段,2.经常更新的字段不用创建索引,比如不要对电商项目的用户余额建立索引,因为索引字段频繁修改。的数据行中的百分比很高的时候,它一般会忽略索引,不需要创建索引。
2025-04-16 23:32:37
166
原创 MySQL 什么是哈希索引
基于哈希表实现,哈希索引通过hash算法将数据库的索引列数据转换成定长的哈希码为key,将这条数据的行的地址作为value一并存入Hash表的对应位置。在MySQL中,只有Meomory引擎支持哈希索引,Memory也支持B+树索引,如果多个列的哈希值相同,索引会在对应的Hash键下以链表形式存储多个记录地址.
2025-04-16 16:32:18
179
原创 MySQL 索引的分类
按数据结构分类: B+tree索引,Hash索引,Full-text索引按物理存储分类: 聚簇索引(主键索引),二级索引(辅助索引)按字段特性分类: 主键索引,唯一索引,普通索引,前缀索引按字段个数分类: 单列索引,联合索引主键索引的b+Tree的叶子节点存放的是实际数据二级索引的B+tree的叶子节点存放的是主键值,而不是实际数据所以,在查询时使用了二级索引,如果查询的数据能在二级索引里查询的到,那么就不需要回表,
2025-04-16 16:10:04
198
原创 MySQL 为什么MySQL喜欢B+树
MySQL的数据是持久化的,意味着数据(索引+记录)是保存到磁盘上的,即使设备断电了,数据也不会丢失,磁盘的io效率是很低的,所以我们需要仅可能少的磁盘io次数。B树是一种多路平衡树,用这种数据结构存储大量数据情况下高度会比正常的二叉树矮很多,减少io次数,但是在Ioondb采取的是一种增强的b+树。2.叶子节点中的数据使用双向链表的方式,查询的时候查两个节点就好了,而b树需要获取所有节点,b+树在范围查询上效率更高。1.B+树所有数据都存存储在叶子节点,非叶子节点只存储索引。
2025-04-16 11:16:45
120
原创 AI+若依框架开发入门(vue3+springboot+redis)
时代列车滚滚向前,还未通过copilot的学生认证时,八岁女孩用cursor仅花费45分钟搭出聊天网站的新闻便火遍业界。想来,更高效,更便捷的技术正在不断刷新我们的认知,鄙人不才,只能分享一点还算好用的框架和不成熟的小见解。技术选型:Spring Boot、Spring Security、MyBatis、Jwt、Vue3、Element-Plus。简而言之,若依框架能按照你的需求生成前后端以及数据库代码,从而用更少的代码量进行开发。选择菜单在那个菜单之下,设置页面路由等相关信息,便能确定你想要的页面信息。
2024-10-07 20:16:22
738
原创 ES6中的let和const
是函数级作用域,在函数内声明的变量在整个函数中都有效,甚至在声明之前也可以访问(但未赋值时为。是ES6引入的用于声明变量的关键字,它们在作用域、重新赋值、提升等方面有一些显著的区别。内声明后,只在该代码块内有效。: 声明时必须赋值,且不能重新赋值。声明的对象或数组,其内部内容是可以修改的,但引用本身不可变。: 变量提升到作用域顶部,在声明之前可以访问,值为。: 在全局作用域中声明的变量不会成为全局对象(如。: 不允许在同一作用域内重复声明同一个变量。: 允许在同一作用域内重复声明同一个变量。
2024-08-14 13:29:48
343
原创 vue3中的组件基础
当使用构建步骤时,我们一般会将 Vue 组件定义在一个单独的.vue文件中,这被叫做单文件组件</script><template>setup() {},</button>`// 也可以针对一个 DOM 内联模板:这里的模板是一个内联的 JavaScript 字符串,Vue 将会在运行时编译它。你也可以使用 ID 选择器来指向一个元素 (通常是原生的<template>元素),Vue 将会使用其内容作为模板来源。上面的例子中定义了一个组件,并在一个.js。
2024-05-05 18:56:48
843
2
原创 vue3中的计算属性和侦听属性
计算属性默认是只读的。当你尝试修改一个计算属性时,你会收到一个运行时警告。计算属性的主要特点是他们基于他们依赖的响应式数据进行计算的,并且只有在其依赖的数据发生变化时才会重新计算。若我们将同样的函数定义为一个方法而不是计算属性,两种方式在结果上确实是完全相同的,然而,不同之处在于。更重要的是,如果在模板中需要不止一次这样的计算,我们可不想将这样的代码在模板里重复好多遍。,需要循环一个巨大的数组并做许多计算逻辑,并且可能也有其他计算属性依赖于。一个计算属性仅会在其响应式依赖更新时才重新计算。
2024-04-13 21:01:51
315
原创 c++中stl库中的sort函数详解以及使用
在日常大家写代码时,或者刷算法题中,如果要对数组里面的数进行一个排序时,我们常常会写一个快速排序,或者是冒泡排序,但也许我们使用stl库中的sort函数,能减少不少代码量以及不容易出错。函数的底层代码涉及到快速排序算法的一些变种,例如经典的快速排序或者改进的版本(比如introsort,它在最坏情况下会退化为堆排序以保证性能)。例如,如果要对一个存储自定义结构体的容器按照结构体中某个成员变量进行排序,你可以编写一个自定义的比较函数,然后将其传递给。它的作用是将一个序列中的元素按照指定的顺序重新排列。
2024-03-23 21:01:09
1066
1
原创 Xshell连接不上虚拟机(VMware)的解决方法汇总
这可能包括阻止某些端口的通信或者禁止特定IP地址的连接,如果虚拟机使用NAT模式连接到主机,防火墙可能会影响NAT的正常操作。查询虚拟机ip地址的方法为,打开虚拟机终端,输入ifconfig,ens33行的下一行开头的inet 192.168.245.142为ip地址。虚拟机的服务支持可能会在每次的电脑关机后停止服务,导致我们连不上网从而无法连接,先win+r键打开服务,然后输入。若没有错误也可能是映射未生效的问题,将原先Xshell中建立的连接先删掉,将新建的主机名改为主机的ip地址。
2024-03-02 11:42:09
11768
2
原创 # [语言月赛202210] 配餐 java
对全部的测试点,保证 $2 \leq n \leq 1 \times 10 ^ 5, 1 \leq a _ i \leq 10 ^ 9, 1 \leq r _ i \leq n$ 且不存在一对 $(i, j)$ 使得 $r_i = r_j$。老师手里拿到了一份序列 $r _ 1 \cdots r _ n$,代表编号为 $i$ 的小朋友应该拿到从左向右数第 $r _ i$ 份午餐餐食($1 \leq r _ i \leq n$ 且 $r _ i$ 两两不同)。对第二个测试点,保证 $n = 2$。
2023-08-04 16:16:13
756
1
cp抢票脚本hhhhhhh
2025-05-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人