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

原创 仿 RabbitMQ 实现的简易消息队列
在实际的后端开发中,尤其是分布式系统⾥,跨主机之间使⽤⽣产者消费者模型,也是⾮常普遍的需求。因此,我们通常会把阻塞队列封装成⼀个独⽴的服务器程序,并且赋予其更丰富的功能。这样的服务程序我们就称为消息队列(MessageQueue,MQ)。RabbitMQ是⼀个⾮常知名、功能强⼤且⼴泛使⽤的消息队列。
2025-02-09 17:34:35
1161
1

原创 负载均衡式在线OJ
负载均衡式在线OJ项目展示了一个完整的分布式系统设计,包含了高可用、高并发、安全性等多个重要方面的考虑,自动切换备用节点、最小负载优先、批量恢复功能等亮点
2024-12-23 14:51:29
1412
原创 深入理解MySQL事务(万字详)
事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。
2025-01-24 22:53:50
1244
原创 MySQL索引——让查询飞起来
MySQL索引,索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。
2025-01-24 09:45:16
622
原创 MySQL表的增删查改(下)——Update(更新),Delete(删除)
MySQL表的增删查改(下)——Update(更新),Delete(删除)
2025-01-07 16:11:54
1157
原创 MySQL表的增删查改(上)——Create(新增),Retrieve(查找)
MySQL表的增删查改(下)——Update(更新),Delete(删除)
2024-12-24 20:54:14
995
原创 动态规划之01背包
最后一块石头的重量 II思路转换看见字母前的±号我们就想到了上面那个题,转换为将数分为两堆,使a-b最小,我们已知a+ b = sum转换:在数组中选择一些数,使其和接近sum / 2dp[i][j]表示,从前i个元素中选,总和不超过j,此时的最大和状态转移方程:根据第i个元素,分类第i个元素不选,此时第i个元素选,意味要在前i - 1个元素中,选数凑其总和为,前提条件,所以初始化:计算每一行仅需知道上一行,所以只初始化第一行,即没有石头想凑成目标和j的最大和都是,所以填表顺序:从上往下。
2024-11-04 17:14:07
1304
原创 动态规划之两个数组的 dp(下)
区间内的所有的子序列中,公共子序列的。初始化:添加了一行和一列,注意下标映射。区间内的字符是否能够交错组成字符串。初始化:引入空串,注意下标映射。初始化:引入空串,注意下标映射。填表顺序:从左往右,从上往下;填表顺序:从左往右,从上往下;状态表示:选第一个字符串的。填表顺序:从上往下,从左往右。状态表示:选第一个字符串的。填表顺序:从上往下,从左往右。的最后一个位置,进行讨论。的最后一个位置,进行讨论。的最后一个位置,进行讨论。区间和第二个字符串的。区间和第二个字符串的。区间内的字符和字符串。
2024-11-01 23:26:40
1126
2
原创 动态规划之两个数组的 dp(上)
状态转移方程:根据根据最后一个位置的元素,来讨论。初始化时,将第一行和第一列的值都设置为。区间内所有的子序列中,最长公共子序列的长度。初始化:引入空串,注意下标的映射,初始化:引入空串,帮助我们初始化。阅读本题后发现和上题解法基本相同。,所以从上往下填,从左往右填。,所以从上往下填,从左往右填。前添加一个空字符,也就是说。区间内的子串中,能否匹配。区间以及第二个字符串。选取选取第一个字符串。
2024-11-01 23:12:37
963
3
原创 动态规划之子序列问题(下)
优化:通过哈希表实现,由于我们只需要遍历一次数组,并对每个元素在哈希表中进行查询和更新。可以连接在这个子序列后,形成一个新的、更长的等差子序列。位置为结尾的所有子序列中,等差子序列的个数。的下标时,可以在填表之前,将所有的。,一边保存离他最近元素的下标,返回值:dp 值中的最大值。状态转移方程:对于每个。绑定在一起放到哈希表中。初始化: 最坏情况为。,所以返回值需要判断。初始化: 最坏情况为。
2024-10-27 15:38:15
556
原创 动态规划之子序列问题(上)
排序: 首先,对数对数组按照每个数对的第一个元素进行升序排序。这是为了方便后续动态规划的处理。位置为结尾的所有子序列中最长递增子序列的长度。返回值: 根据状态表达,返回整个。初始化:每个位置都可以构成长度为。初始化:每个位置都可以构成长度为。填表顺序:从左到右两个表一起填。填表顺序:从左到右两个表一起填。位置为结尾的所有子序列中。初始化: 全部初始化为。的递增子序列,因此将。的递增子序列,因此将。填表顺序: 从左往右。
2024-10-26 15:25:37
1184
原创 动态规划之子数组系列(下)
状态转移方程:根据最后一个位置的情况来分析,设最后一个单词起始位置为。初始化:前两个位置的元素无法构成等差数列,因此初始化。,这样就没有下标的映射关系的问题了,同时还能处理。表中所有元素的和,但这里需要去重。初始化:每一个元素都能构成湍流数组,所以将。区间内的字符串,能否被字典中的单词拼接而成。当两个区间都满足条件时,即成立;返回值: 返回两个数组中的最大值。填表顺序:从左往右两个表一起填。的数组,统计所有字符结尾的最大。个字母,我们统计以其为结尾的。,此时结尾会有两种状态。,表示空串能够拼接而成。
2024-10-26 08:30:00
1788
原创 动态规划之简单多状态 dp 问题(下)
天结束后,处于某个状态的最大利润,我们可以细分为,处于“买入”、“可交易”、“”三种状态。天结束后,所能获得的最大利润,这一天有两种状态,“买入”、“卖出”返回值:返回“卖出”状态下最后一天的最大值收益。状态表示:以某个位置为结尾,使用两个数组表示。状态表示:以某个位置为结尾,使用两个数组表示。两个状态,并加上一维表示交易次数。两个状态,并加上一维表示交易次数。返回值:卖出状态下的最大值。填表顺序:从上往下,从左往右。填表顺序:从上往下,从左往右。(防止减法发生越界)(防止减法发生越界)
2024-10-24 19:58:27
1370
原创 动态规划之简单多状态 dp 问题(上)
通过分类讨论,将一个环形问题转化为一个。填表顺序:两个表从左向右一起填写。填表顺序:两个表从左向右一起填写。将每个数字的出现的和记录在。当第一个位置不偷的时候,即。当第一个位置偷的时候,即。
2024-10-23 23:00:52
734
原创 Leetcode198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 2 + 9 + 1 = 12。偷窃到的最高金额 = 1 + 3 = 4。输入:[2,7,9,3,1]输入:[1,2,3,1]位置有两种选择,偷或不偷。
2024-10-23 23:00:28
408
原创 动态规划之路径问题
初始化:我们在 dp 表的最后一行和最后一列分别添加一行和一列。位置时,此时的最小的下降路径和。位置时,此时的最小的下降路径。填表顺序:从上往下,从左往右。填表顺序:从上往下,从左往右。到达终点,所需的最低健康点数。填表顺序:从下往上,从右往左。初始化:添加了一行和两列,表中最后一行的最小值。
2024-10-22 22:35:23
959
原创 动态规划之斐波那契数列
动态规划(Dynamic Programming,简称DP)是一种通过将原问题分解为相互重叠的子问题并仅仅解决每个子问题一次,将其解存储起来,避免重复计算,从而提高效率的算法优化技术。它通常用于求解最优化问题。动态规划的基本思想是利用之前已经计算过的结果,通过递推关系式来计算当前问题的解。
2024-10-22 00:08:59
788
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人