- 博客(65)
- 收藏
- 关注
原创 Redis持久化与主从同步
expire是直接让key失效,而不能针对某个具体的元素,例如对hash的某个域设置过期里面有一个lruRedis.conf通常maxmemory填真实内存的一半,以便持久化fork子进程时,有足够的内存。
2024-08-29 20:26:58 922
原创 单线程Redis:Redis为什么这么快
Redis 使用后台线程执行耗时的 I/O 操作,以免阻塞主线程bio_close_file:后台 I/O 线程之一,异步关闭文件bio_aof_fsync:后台 I/O 线程之一,异步地将 AOF(Append Only File)日志同步到磁盘bio_lazy_free:异步释放内存,有些内存释放操作可能比较耗时,因此这些操作可以异步完成,以免阻塞主线程jemalloc_bg_thd:这是由 jemalloc 内存分配器产生的后台线程。
2024-08-29 15:01:49 1483
原创 Redis数据结构与连接
string的实现有多种字符串长度小于1M 时,加倍扩容;超过 1M 每次只多扩1M;字符串最大长度为 512Mstring是二进制安全字符串,可以存储图片,二进制协议等二进制数据。
2024-08-28 23:45:29 1174
原创 MySQL连接池
数据库连接池(Connection pooling):在启动时建立足够的数据库连接,组成一个连接池,后续程序可以对池中的连接进行申请、使用、释放。
2024-08-26 15:58:45 1275
原创 线程池原理及实现
线程池是预先创建一组线程,并维持一个固定的数量,在需要的时候可以直接提供给程序使用,而不是让程序自行创建和销毁进程,避免了在运行中线程创建和销毁的开销。
2024-08-13 15:55:26 958
原创 KCP协议(一)
KCP是一个快速可靠协议,能以比 TCP 浪费 10%-20% 的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。这里可以理解为KCP是一个水流更快,但流量略有降低的小溪。KCP协议是一种基于UDP的可靠传输协议,因此无需建立连接,可以即时发送,而不需要等待确认,同时,它可以根据网络状况自行调整发送速率,更适用于实时通信、在线游戏、流媒体传输等场景。
2024-08-11 21:22:42 439
原创 网络编程:Reactor模型和Proactor模型
主线程监听文件描述上是否有事件发生,有的话就立即将该事件通知工作线程。可以通过callback的方式来实现Reactor模型。reactor把IO的处理转化为对事件的处理。对一个未知接收连接的这件事感兴趣,先注册对这件事感兴趣,提供一个回调函数,未来检测到事件就绪了,主动调用这个回调函数。Reactor模型有多种情况,以上为单Reactor单线程模型,推荐阅读以下文章,了解更多。
2024-08-11 17:09:40 442
原创 网络编程:IO多路复用
(1)nfds:被监听的文件描述符的总数,通常被设置为select监听的所有文件描述符中的最大值加1(2)readfds:可读的文件描述符集合writefds:可写的文件描述符集合exceptfds:异常的文件描述符集合fd_set1024__NFDBITS8intsizeof__FDS_BITS->__FDS_BITS->fd_set结构体仅包含一个整型数组,该数组的每个元素的每一位(bit)标记一个文件描述符,fd_set能容纳的文件描述符数量由FD_SETSIZE指定。
2024-08-11 16:17:19 312
原创 代码随想录一刷心得
一刷过程中,我对树、回溯法、背包问题、DFS/BFS、并查集理解更深刻了,很多算法都有相关的模板,整个题目的安排也是层层递进的,让我更加清晰如何将不熟悉的题目转化为熟悉的问题,再套用模板去解决,收获很大!之后会对其中一些题进行二刷,一刷的时候为了跟上进度,很多题只是跟着题解敲了代码,只是理解了,但自己还写不出来,二刷会尽可能自己写,并且看看一题多解,让自己更深刻地掌握。2个月基本上每天刷3题左右,前期我在校内,很容易跟上,后期去实习了,就需要同时兼顾实习、刷题还有学校的事,经常容易跟不上。
2024-06-05 09:59:54 322
原创 Day60 柱状图中最大的矩形
个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。思路:使用left、right分别记录每个元素左边比它小和右边比它小的位置。求在该柱状图中,能够勾勒出来的矩形的最大面积。
2024-06-02 15:21:06 219
原创 Day59 下一个更大元素Ⅱ + 接雨水
给定一个循环数组nums的下一个元素是nums[0]),返回 nums中每个元素的。数字x的是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1。思路:把两个数组拼接在一起,即可转换为上一题,但本题并不需要真正拼接,只需要遍历两次nums即可。
2024-06-02 15:03:03 296
原创 Day57 每日温度 + 下一个更大元素Ⅰ
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。思路:本题为单调栈的经典习题,递减栈(区分递增还是递减可以模拟执行,看什么时候需要放数据),因此当前温度高于栈顶时,可给result赋值。
2024-06-01 16:20:40 388
原创 Day56 回文子串 + 最长回文子序列
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。思路:dp[i][j]表示[i,j]子串是否为回文串。因此,若s[i] == s[j],则dp[i][j]由dp[i + 1][j - 1]转换而来bool。
2024-06-01 16:17:52 221
原创 Day55 两个字符串的删除操作 + 编辑距离
给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。思路:本题与求最长公共子序列几乎相同,只是最终的答案是记录原字符串变为公共子序列的步数。int。
2024-06-01 16:15:30 326
原创 Day54 判断子序列 + 不同的子序列
给定字符串和,判断是否为的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?思路:本题可使用双指针分别遍历s、t来进行判断,这里不使用该方法,使用动态规划方法获取s和t的最长公共子序列长度,判断是否与s的长度一致。int。
2024-06-01 16:10:53 305
原创 Day53 最长公共子序列 + 不相交的线 + 最大子数组和
给定两个字符串text1和text2,返回这两个字符串的最长的长度。如果不存在,返回0。一个字符串的是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。"ace""abcde""aec""abcde"两个字符串的是这两个字符串所共同拥有的子序列。思路:本题和上题的区别是,上题的子数组是连续的,本题是可以不连续的。本题仅转移方程存在一些区别。int。
2024-05-29 21:37:32 456
原创 Day52 最长递增子序列 + 最长连续递增序列 + 最长重复子数组
题目链接:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。思路:dp[i]为考虑到第i个元素的最长子序列。只需要遍历i之前比nums[i]小的,进行更新即可。本题需使用一个result记录下最长的,否则输出5,而是6。
2024-05-29 21:35:38 296
原创 Day50 买卖股票的最佳时机(冷冻期 + 手续费)
给定一个整数数组prices,其中第prices[i]表示第_i_天的股票价格。设计一个算法计算出最大利润。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。思路:本题与之前股票题类似,但本题在买入的时候需要考虑i-2天为不持有的状态。int。
2024-05-25 23:05:28 373
原创 Day49 买卖股票的最佳时机 3 & 4
给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成交易。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。思路:使用dp数组,表示不同的状态,具体看代码。int。
2024-05-25 22:53:20 314
原创 Day48买卖股票的最佳时机1&2
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。思路:使用动态规划方式,0表示不持有,1表示持有,写出递推方程即可。int。
2024-05-23 09:54:50 214
原创 Day47 打家劫舍123
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。int本题也可以使用一维dp。
2024-05-23 09:37:52 519
原创 Day46 单词拆分
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。若存在j(j < i),使得[j,i-1]出现在字典中,则dp[i]转换为dp[j]。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。另外,本题是排列,因此需要先遍历背包,后遍历字典。dp[i]:遍历到第i个字符是否能被字典拆分。思路:本题的关键就是如何定义dp和如何递推。
2024-05-23 09:35:24 259
原创 Day45 零钱兑换 + 完全平方数
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。思路:本题是完全背包问题,dp[i]表示凑成i的最少的硬币个数。
2024-05-20 09:46:40 662
原创 Day43 零钱兑换Ⅱ + 组合总数Ⅳ
给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。思路:本题与494目标和转换出来的背包问题类似,只是本题是完全背包问题,遍历改为正序即可。
2024-05-19 17:03:08 685
原创 Day42 最后一块石头的重量Ⅱ + 目标和 + 一和零
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。
2024-05-19 16:04:17 599
原创 Day41 分割等和子集
但使得总和恰好为sum/2,有点不清楚dp数组怎么转移了,其实本题中总和既是weight,也是value,因此,判断dp[sum/2]是否等于sum/2即可。本题很容易想到,先获取数组总sum,然后sum/2,从原数组中选数,使得总和恰好为sum/2。因此,原问题就变为01背包问题。给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。本题使用了一维dp,建议先学习。
2024-05-16 16:14:46 911
原创 Day40 整数拆分 + 不同的二叉搜索树
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积。思路:对于任意一个数,可被拆为2个及两个以上的情况。i被拆分后最大的整数乘积对于dp[i],我们可以分别从j开始拆分,每个需判断拆分为2个和2个以上哪个更大。同时,对于一个数,最大的是拆分为多个尽可能差不多的数字,因此,拆分为2个,最大的j为i/2,而更多的拆分比i/2更小,因此j只需遍历到i/2即可。
2024-05-16 14:38:48 514
原创 Day39 不同路径 + 不同路径Ⅱ
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?思路:二维dp,第一行和第一列均为1,其余为int。
2024-05-14 13:36:54 638
原创 Day38 斐波那契数 + 爬楼梯 + 使用最小花费爬楼梯
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n)。
2024-05-13 13:52:21 749
原创 Day36 单调递增的数字 + 监控二叉树
题目链接:https://leetcode.cn/problems/monotone-increasing-digits/description/当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增。从右向左不断找不满足递增条件的数字,将不满足的数字-1,最后一个数字后面的数字都改为9。例如332,分别变为322、222、299。
2024-05-10 15:32:04 291
原创 Day35 无重叠区间 + 划分字母区间 + 合并区间
给定一个区间的集合intervals,其中。返回需要移除区间的最小数量,使剩余区间互不重叠。思路:本题与上一题452类似,首先对区间排序,排序后需判断是否重叠,需进行移除,对于重叠的,保留右区间最短的,这样后续可以更少移除。
2024-05-10 14:21:23 711
原创 Day34 柠檬水找零 + 根据身高重建队列 + 用最少数量的箭引爆气球
在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单bills支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付5美元、10美元或20美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付5美元。注意,一开始你手头没有任何零钱。给你一个整数数组bills,其中bills[i]是第i位顾客付的账。如果你能给每位顾客正确找零,返回true,否则返回false。思路:使用map记录每种零钱的个数,并试图找零即可,若找不开,就false。
2024-05-09 10:51:20 1806
原创 Day33 K次取反后最大化的数组和 + 加油站 + 分发糖果
给你一个整数数组nums和一个整数kinums[i]-nums[i]重复这个过程恰好k次。可以多次选择同一个下标i。以这种方式修改数组后,返回数组。思路:将原数组排序,所有的负数都变为正数。若此时k为奇数,则选择最小的变为负数。
2024-05-08 13:43:36 571
原创 Day32 买卖股票的最佳时机Ⅱ + 跳跃游戏 + 跳跃游戏Ⅱ
给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。思路:对于,最大利润为5 - 1,等于(5 - 4) + (4 - 3) + (3 - 2) + (2 - 1)。故只需要加上所有大于0的。
2024-05-07 16:57:11 416
原创 Day31 分发饼干 + 摆动序列 + 最大子数组和
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果,我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。思路:将s和g排序,从右到左遍历,依次满足各个孩子的胃口,不满足的时候去胃口更小的孩子判断。
2024-05-07 13:55:44 396
原创 Day30 重新安排行程 + N皇后 + 解数独
给你一份航线列表tickets,其中表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从JFK开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。思路:本题有点难,主要是学习了代码随想录的方法。使用记录(出发机场,目的机场,次数)。
2024-05-06 18:32:36 364
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人