- 博客(176)
- 收藏
- 关注

原创 MySQL-分库分表
分库分表的中心思想是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的
2024-08-04 20:25:18
2600
5

原创 MySQL-SQL优化
2.此时插入id为50的记录,不会再次开启一个页,写入新的页,按照顺序应该存储在47之后,但47所在的1#页已经写满,此时会开辟一个新的页3#,但不会直接将50存入3#页,而是会将1#页后一半的数据移动到3#页,然后在3#页插入50。在InnoDB引擎中,数据行是记录在逻辑结构page页中的,而每一个页的大小是固定的,默认16K,则一个页中所存储的行也是有限的,如果插入的数据行row在该页存储不小,将会存储到下一个页中,页与页之间会通过指针连接。
2024-07-31 21:06:26
1076

原创 MySQL-索引
MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种:不同的存储引擎对索引结构的支持情况:注意:平常所说的索引,如果没有特别指明,都是指B+树索引。
2024-07-31 16:49:00
1270
原创 SpringCloud7-Seata
引入Seata后只需要在最大的方法标注全局注解@GlobalTransactional即可。二阶:成功(所有人删除)/失败(所有人拿到自己的前镜像,恢复,删除undolog)一阶:本地事务提交(业务数据+undolog)
2025-03-29 21:28:33
343
原创 SpringCloud6-Gateway
从X-Forwarded-For请求头中解析请求来源,并判断是否来源于指定网络域。继承 AbstractRoutePredictFactory 类。如果没有则添加请求头,key:value方式。移除响应体中的某些Json字段,多个用,分割。请求来源于指定网络域(CIDR写法)设置请求大小,超出则响应431状态码。请求路径满足规则,是否匹配最后的/把某个请求头名字变为另一个名字。请求host必须是指定枚举值。包含请求头且必须匹配指定值。请求方式必须是指定枚举值。新建模块gateway。
2025-03-29 16:55:50
786
原创 SpringCloud5-Sentinel
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。
2025-03-29 15:26:35
929
原创 SpringCloud4-OpenFeign
远程调用超时失败后,还可以进行多次尝试,如果某次成功返回ok,如果多次依然失败则结束调用,返回错误。需要整合Seentinel才能实现。OpenFeign 是一个。Faback:兜底返回。
2025-03-26 16:20:06
335
原创 SpringCloud3-Nacos
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
2025-03-26 13:59:56
742
原创 SpringCloud1-分布式基础
A 服务调用 B 服务,A 服务并不知道 B 服务当前在哪几台服务器有,哪些正常的,哪些服务已经下线。如果某些服务下线,我们其他人可以实时的感知到其他服务的状态,从而避免调用不可用的服务。分布式系统中,A 服务需要调用 B 服务,B 服务在多台机器中都存在,A 调用任意一个服务器均可完成功能。在分布式系统中,各个服务可能处于不同主机,但是服务之间不可避免的需要互相调用,我们称为远程调用。设置服务的超时,当被调用的服务经常失败到达某个阈值,我们可以开启断路保护机制,后来的请求不再去调用这个服务。
2025-03-23 20:12:11
673
原创 设计模式4-行为型模式
在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。
2025-03-19 20:46:40
669
原创 设计模式3-结构型模式
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。结构型模式分为以下 7 种:代理模式适配器模式装饰者模式桥接模式外观模式组合模式享元模式由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的
2025-03-17 13:48:52
747
原创 设计模式2-创建者模式
创建型模式的主要关注点是“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为:单例模式工厂方法模式抽象工程模式原型模式建造者模式。
2025-03-15 20:58:38
726
原创 设计模式1-概述
类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。
2025-03-13 17:15:34
641
原创 Dubbo
Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。
2025-03-12 22:30:00
900
原创 LC-只出现一次的数字、多数元素、颜色分类、下一个排列、寻找重复数
交换后,我们需要保证后续的部分是最小的排列(即按升序排列),所以反转。,则说明当前排列已经是字典序最大,我们需要将其完全反转成为字典序最小。:我们可以利用数组元素的大小范围来缩小查找区间,通过统计数字小于等于。表示我们还可以通过交换来生成更大的排列。:接着,从数组的末尾再次向左查找,找到第一个比。,这意味着一定有至少一个重复的数字。的数组进行原地排序,使得所有的。的元素个数来判断重复元素的位置。:从数组的末尾开始,找到第一个。排在前面,接着是所有的。:给定的数组包含数字。
2025-02-26 13:02:24
1121
原创 LC-不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离
可以通过 动态规划 来解决。机器人每次只能向下或向右移动,因此问题的核心是计算从左上角到右下角的路径数。思路:边界条件:最小路径和这是一个典型的 动态规划 问题,要求在一个网格中找到一条从左上角到右下角的路径,使得路径上的数字总和最小。每次只能向下或者向右移动一步。我们可以定义一个二维数组 ,其中 表示从左上角 到 的最小路径和。动态规划步骤:初始化:状态转移: 对于其他的 ,可以选择从上方或者从左方过来。我们取两者中较小的路径和:其中 是从上方到达当前位置的最小路径和, 是从左方到达当前
2025-02-25 19:07:30
764
原创 LC-单词拆分、最长递增子序列、乘积最大子数组、分割等和子集、最长有效括号
定义状态:状态转移方程:初始化:目标:最长递增子序列动态规划:时间复杂度是 ,其中 是数组的长度。乘积最大子数组动态规划:我们使用动态规划的方法来解决这个问题。由于数组中有负数,可能会影响最大值和最小值,所以我们需要追踪当前位置的最大值和最小值。每次更新最大值和最小值时,都要考虑:状态转移:对于每一个元素 ,我们要更新当前的最大值和最小值:最终,我们需要返回所有 中的最大值。分割等和子集问题转化:动态规划:最长有效括号动态规划的方法通过定义一个状态数组 来表示以
2025-02-24 15:06:10
1060
原创 LC-划分字母区间、爬楼梯、杨辉三角、打家劫舍、完全平方数、零钱兑换
思路:问题分析:贪心策略:步骤:爬楼梯动态规划解法:定义状态:递推公式:初始化:目标:杨辉三角 打家劫舍定义状态:状态转移方程:其中:初始状态:最终结果:完全平方数动态规划思路:状态定义:状态转移方程:初始化:目标:零钱兑换这是一个完全背包问题,我们可以使用动态规划来解决。解题思路:状态定义:状态转移方程:初始化:目标:
2025-02-24 13:40:11
783
原创 LC-前K个高频元素、数据流的中位数、买卖股票的最佳时机、跳跃游戏、跳跃游戏II
我们需要找出。为了实现这一点,可以使用一个最小堆。堆的大小保持为k,每次插入元素时,如果堆的大小超过k,则弹出堆顶元素。这样,堆中的元素就是出现频率前k高的元素。通过维护一个大小为k的堆,保证了堆顶元素是频率最低的元素,而堆中的其他元素频率都较高。k。
2025-02-24 11:00:00
754
原创 LC-在排序数组中查找元素的第一个和最后一个位置、搜索旋转排序数组、寻找旋转排序数组中的最小值、寻找两个正序数组的中位数、有效的括号
思路:二分查找基础:我们可以使用二分查找来快速定位目标值。由于数组是有序的,二分查找可以在O(log n)时间内找到目标值的一个出现位置。查找开始位置使用二分查找,调整查找条件,使得找到目标值时,继续向左搜索,直到找到第一个出现的目标值。查找结束位置使用类似的二分查找,调整查找条件,找到目标值时,继续向右搜索,直到找到最后一个出现的目标值。= -1){//找到目标值,继续向左搜索//继续向左查找,寻找第一个出现的位置}else{//找到目标值,继续向右搜索。
2025-02-23 11:00:00
840
原创 LC-单词搜索、分割回文串、N皇后、搜索插入位置、搜索二维矩阵
我们可以从网格中的每个单元格开始,进行深度优先搜索(DFS),并通过递归逐个匹配单词中的字符。每次匹配时,我们需要检查当前位置是否符合条件,并标记访问过的单元格,避免重复使用。:可以使用递归的方式来进行分割,递归的过程中将字符串分割成多个子串。回溯法适合用于这种路径搜索问题,我们需要在网格中寻找单词,并且每个字符都只能使用一次。:我们可以使用回溯法来逐行放置皇后,确保每次放置时不会和之前放置的皇后发生冲突。:在递归过程中,如果某个子串不是回文串,则不继续往下搜索,直接回溯。
2025-02-20 15:58:51
978
原创 LC-全排列、子集、电话号码的字母组合、组合总和、括号生成
回溯算法的基本思想是:子集电话号码的字母组合可以使用回溯算法来穷举所有可能的字母组合。具体做法是:组合总和括号生成思路:有效括号的定义:一个有效的括号组合需要满足:回溯法:这个问题最常用的方法是回溯法(Backtracking)。我们可以构建一个递归过程,通过不断增加左括号 或右括号 ,并在每一步判断是否满足条件来生成有效的括号组合。解决步骤:需要两个参数:递归终止条件:递归选择:
2025-02-19 21:48:30
692
原创 LC-岛屿数量、腐烂的橘子、课程表、实现Trie(前缀树)
我们需要遍历整个网格grid,一旦遇到'1'(陆地),说明找到了一个新的岛屿,岛屿数量count++。找到'1'后,我们需要将这个岛屿的所有相连陆地全部标记为'0'每找到一个新的'1',并完成其搜索,就代表找到了一座完整的岛屿,因此count++。
2025-02-19 14:06:54
557
原创 LC-二叉树展开为链表、从前序与中序遍历序列构造二叉树、路径总和III、二叉树的最近公共祖先、二叉树中的最大路径和
前序遍历 + 递归思路 从前序与中序遍历序列构造二叉树路径总和III 我们可以从树的每个节点开始,进行 深度优先搜索。在遍历过程中,我们可以利用一个 前缀和的哈希表来记录从根节点到当前节点的路径和,帮助我们快速查找是否存在某一条路径的和等于 。具体步骤:二叉树的最近公共祖先递归定义:递归步骤:二叉树中的最大路径和可以使用深度优先搜索(DFS)递归遍历每个节点,计算包含该节点的最大路径和。具体思路如下:定义递归函数 :递归终止条件:时间复杂度:
2025-02-18 17:19:34
1000
原创 LC-二叉树的层序遍历、将有序数组转换为二叉搜索树、验证二叉搜索树、二叉搜索树中第K小的元素、二叉树的右视图
【代码】LC-二叉树的层序遍历、将有序数组转换为二叉搜索树、验证二叉搜索树、二叉搜索树中第K小的元素、二叉树的右视图。
2025-02-18 12:06:53
386
原创 LC-二叉树的中序遍历、二叉树的最大深度、翻转二叉树、对称二叉树、二叉树的直径
O(N) (每个节点访问一次)O(N) (最坏情况下递归栈深度为 O(N))
2025-02-16 20:28:58
455
原创 LC-随机链表的复制、排序链表、合并K个升序链表、LRU缓存
为了在时间复杂度内解决这个问题,并且使用A'B'C'ABCrandomrandomrandom。
2025-02-16 20:28:44
891
原创 LC-合并两个有序链表、两数相加、删除链表的第N个节点、两两交换链表中的节点、K个一组翻转链表
【代码】LC-合并两个有序链表、两数相加、删除链表的第N个节点、两两交换链表中的节点、K个一组翻转链表。
2025-02-14 20:32:40
646
原创 LC-搜索二维矩阵II、相交链表、反转链表、回文链表、环形链表、环形链表ll
方法:从右上角开始搜索 相交链表双指针法两个指针分别指向两个链表的头节点: 我们设立两个指针 和 ,分别指向链表 和链表 的头节点。同时移动两个指针:相遇: 如果两个指针相遇,则返回相遇的节点;如果两个指针同时指向 ,则说明链表没有交点。这种方法的核心思想就是“同步走,互相切换”,确保两个指针走过相同的路程,因此可以在 O(m + n) 时间复杂度内解决问题。设「第一个公共节点」为 node ,「链表 headA」的节点数量为 a ,「链表 headB」的节点数量为 b ,「两链表的公共
2025-02-14 18:20:24
1266
原创 synchronized关键字及锁升级
synchronized,俗称对象锁,它采用互斥的方式让同一时刻至多只有一个线程能持有对象锁,其他线程再想获取这个对象锁时就会阻塞住,这样就能保证拥有锁的线程可以安全地执行临界区内的代码,不用担心线程上下文切换。
2025-02-13 17:49:09
1266
原创 LC-除自身以外数组的乘积、缺失的第一个正数、矩阵置零、螺旋矩阵、旋转图像
对于每个元素nums[i],要求出nums[i]nums[i]nums[i]
2025-02-13 11:42:20
405
原创 操作系统-任务调度算法、银行家算法
主要从“公平”的角度考虑(类似于排队买东西)按照作业/进程到达的先后顺序进行服务用于作业调度时,考虑的是哪个作业先到达后备队列;用于进程调度时,考虑的是哪个进程先到达就绪队列非抢占式公平、算法实现简单对长作业有利,对短作业不利。排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好不会。
2025-02-11 16:35:14
854
原创 LC-三数之和、接雨水、无重复字符的最长子串、找到字符串中所有字母异位词
解题思路排序:遍历数组,固定一个数:双指针寻找满足条件的三元组:去重: 接雨水解法步骤定义左右双指针:移动较矮一端的指针:雨水计算:无重复字符的最长子串使用 滑动窗口(Sliding Window)来优化解法,避免 的暴力遍历,做到 O(N) 线性时间复杂度。定义双指针窗口:移动右指针 扩大窗口:继续移动 指针,直到遍历完整个字符串。找到字符串中所有字母异位词字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。解题思路:滑动窗口 + 哈希
2025-02-10 19:42:04
675
原创 Java-128陷阱、抽象类和接口的区别、为什么 hashCode()需要和equals()一起重写、封装继承多态
编译器执行的是:Integer a=Integer.valueOf(128);也就是调用了valueof()方法,进行了自动装箱。Integer 的 valueOf 方法当中,存储着一个 cache 数组,该数组相当于一个缓存,范围在 -128~127 闭区间。Integer 数据类型使用“==”比较时,分析以上代码运行的结果。
2025-02-06 18:05:59
789
原创 【SpringBoot2】2-入门
需求:浏览发送/hello请求,响应 Hello,Spring Boot 2。把项目打成jar包,直接在目标服务器执行即可。测试:直接运行main方法。
2025-02-05 22:00:00
314
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人