自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java开发环境配置(Mac版)

这里选择dmg来进行下载.笔者是老mac是intel系列的(选择x64)3.笔者这里有工具.可以看到是成功了.(借助tab,自动补全来看看。下载完成后双击进行安装,不断下一步.(人家会自己找合适的位置)2.查看是否有.bash_profile文件,有就跳过3。选中macOS,然后选择你要的版本(笔者需要21)1.下载JDK安装包,选择MacOs对应的版本.这里是验证一下(看看我们写的值进去没)官方下载链接:(这里是oracle)4.打开文件(使用你爱的编辑器)这里可以看到.安装成功了.

2025-07-15 22:03:12 169

原创 33.最长等差数列(medium)

回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], ..., nums[ik] ,且 0 <= i1 < i2 < ... < ik <= nums.length - 1。示例 3:输入:nums = [20,1,15,3,10,5,8]输出:4解释:最长的等差子序列是 [20,15,10,5]。回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], ..., nums[ik] ,且 0 <= i1 < i2 < ... < ik。结尾的等差序列的样子。

2025-07-03 22:01:32 808

原创 32.最长的斐波那契子序列的长度(medium)

873. 最长的斐波那契子序列的长度 - 如果序列 x1, x2, ..., x2 满足下列条件,就说它是 斐波那契式 的: * n >= 3 * 对于所有 i + 2 <= n,都有 xi + xi+1 == xi+2给定一个 严格递增 的正整数数组形成序列 arr ,找到 arr 中最长的斐波那契式的子序列的长度。示例 2:输入: arr = [1,3,7,11,12,14,18]输出: 3解释: 最长的斐波那契式子序列有 [1,11,12]、[3,11,14] 以及 [7,11,18]。

2025-07-02 22:55:46 726

原创 Tinyc编译器(翻译)

`VT_JMP`、`VT_JMPI`:表示值是条件跳转的结果。- `VT_LVAL_BYTE`、`VT_LVAL_SHORT`、`VT_LVAL_UNSIGNED`:若 lvalue 是整数类型,这些标志提供其真实类型。- `VT_LLOCAL`:栈上保存的 lvalue,必须与 `VT_LVAL` 一起设置。- **计算型 goto**:`&&label` 返回指向 goto 标签 label 的 void * 指针,`goto *expr` 可跳转到 expr 结果的指针。

2025-07-01 22:59:37 670

原创 31.最长定差子序列(medium)

示例 1:输入:arr = [1,2,3,4], difference = 1输出:4解释:最长的等差子序列是 [1,2,3,4]。示例 2:输入:arr = [1,3,5,7], difference = 1输出:1解释:最长的等差子序列是任意单个元素。示例 3:输入:arr = [1,5,7,8,5,3,4,2,1], difference = -2输出:4解释:最长的等差子序列是 [7,5,3,1]。输入:arr = [1,5,7,8,5,3,4,2,1], difference = -2。

2025-07-01 22:34:25 949

原创 30.最长对数链(medium)

给你一个由 n 个数对组成的数对数组 pairs ,其中 pairs[i] = [lefti, righti] 且 lefti < righti。现在,我们定义一种 跟随 关系,当且仅当 b < c 时,数对 p2 = [c, d] 才可以跟在 p1 = [a, b] 后面。最长的数对链是 [1,2] -> [4,5] -> [7,8]。输入:pairs = [[1,2], [2,3], [3,4]]​。输入:pairs = [[1,2],[7,8],[4,5]]​。位置为结尾的最长数对链。

2025-07-01 21:12:06 420

原创 29.最长递增子序列的个数(medium)

有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。为结尾的最长递增子序列的「长度」是多少,我怎么知道最长递增子序列的个数呢?给定一个未排序的整数数组 nums , 返回最长递增子序列的个数。最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。在知道每一个位置结尾的最长递增子序列的长度时,我们来看看能否得到。为结尾的最长递增子序列的「个数」。具体操作情况看代码~​。结尾的最长递增序列的长度时,我们已经知道。输入: [1,3,5,4,7]​。

2025-07-01 00:58:18 638

原创 28.摆动序列

相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。示例 1:输入:nums = [1,7,4,9,2,5]输出:6解释:整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。,我们可以根据「子序列的构成方式」,进行分类讨论:​。

2025-06-30 21:48:22 869

原创 27.最长递增子序列

示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7,7,7,7]输出:1 提示: * 1 <= nums.length <= 2500 * -104 <= nums[i] <= 104 进阶: * 你能将算法的时间复杂度降低到 O(n log(n)) 吗?因此,我们仅需找到满足要求的最大的。

2025-06-29 21:17:40 602

原创 26.环绕字符串中唯一的子字符串(medium)

示例 2:输入:s = "cac"输出:2解释:字符串 s 有两个子字符串 ("a", "c") 在 base 中出现。示例 3:输入:s = "zab"输出:6解释:字符串 s 有六个子字符串 ("z", "a", "b", "za", "ab", and "zab") 在 base 中出现。解释:字符串 s 有六个子字符串 ("z", "a", "b", "za", "ab", and "zab") 在 base 中出现。解释:字符串 s 有两个子字符串 ("a", "c") 在 base 中出现。

2025-06-29 19:59:12 1158

原创 25.单词拆分(medium)

示例 3:输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]输出: false 提示: * 1 <= s.length <= 300 * 1 <= wordDict.length <= 1000 * 1 <= wordDict[i].length <= 20 * s 和 wordDict[i] 仅由小写英文字母组成 * wordDict 中的所有字符串 互不相同。区间内的字符串,能否被字典中的单词拼接而成。

2025-06-29 18:36:07 801

原创 24. 最长湍流子数组

示例 1:输入:arr = [9,4,2,10,7,8,8,1,9]输出:5解释:arr[1] > arr[2] < arr[3] > arr[4] < arr[5]示例 2:输入:arr = [4,8,12,16]输出:2示例 3:输入:arr = [100]输出:1 提示: * 1 <= arr.length <= 4 * 104 * 0 <= arr[i] <= 109。若 i <= k < j :当 k 为奇数时, A[k] > A[k+1],且 当 k 为偶数时,A[k] < A[k+1];

2025-06-29 17:39:14 521

原创 23.等差数列划分(medium)

例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。示例 1:输入:nums = [1,2,3,4]输出:3解释:nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。输入:nums = [1,2,3,4]​。

2025-06-28 19:44:01 998

原创 22.乘积为正数的最长子数组(medium)

表示「所有以 i 结尾的子数组,乘积为正数的最长子数组的长度」。乘积为正数的最长子数组是 [-1,-2] 或者 [-2,-3]。最长乘积为正数的子数组为 [1,-2,-3] ,乘积为 6。为正数的最长子数组」,还需要一个「乘积为负数的最长子数组」。结尾的所有子数组中,乘积为「正数」的最长子数组的长度;结尾的所有子数组中,乘积为「负数」的最长子数组的长度。输入:nums = [0,1,-2,-3,-4]​。输入:nums = [-1,-2,-3,0,1]​。为结尾的乘积为负数的最长子数组的长度,加上。

2025-06-28 18:43:28 759

原创 第二章:页表

kvmmap(kernel/vm.c:118)调用mappages(kernel.vm.c:149),它将指定范围的虚拟地址映射到一段物理地址.它将范围内地址分割成页(忽略页数),每次映射一页的起始地址.杜宇每个要映射的虚拟地址(页的起始地址),mapages调用walk找到该地址的最后一级PTE的地址.然后,它配置PTE,使其保持相关的物理页号,所需的权限(PTE_W,PTE_X,PTE_R),以及来标记PTE为有效(kernel/vm.c:161).这些对kfree的调用给了他一些内存管理.

2025-06-09 21:40:21 944

原创 1.操作系统组织

每个进程都有一个执行线程(简称线程),执行进程的指令.一个线程可以被暂停,然后再恢复.为了再进程之间透明地切换,内核会暂停当前运行的线程,并恢复另一个进程的线程.线程的大部分状态(局部变量,函数调用返回地址)都存储在线程的栈中.每个线程有两个栈:用户栈和内核栈(p->kstack).当进程在执行用户指令时,只有它的用户栈在被使用,而它的内核栈是空的.当进程进入内核时(因为系统调用或中断),内核代码在进程的内核栈上交替执行;例如,即使进程的数量多于硬件cpu的数量,操作系统也必须保证所有的进程都有机会执行。

2025-06-09 18:12:17 434

原创 21.乘积最大子数组

这里的推导比较绕,因为不断的出现「正数和负数」的分情况讨论,我们只需根据下面的规则,严。乘积为正数的最长子数组是 [-1,-2] 或者 [-2,-3]。表示「所有以 i 结尾的子数组,乘积为正数的最长子数组的长度」。最长乘积为正数的子数组为 [1,-2,-3] ,乘积为 6。为正数的最长子数组」,还需要一个「乘积为负数的最长子数组」。结尾的所有子数组中,乘积为「负数」的最长子数组的长度。输入:nums = [0,1,-2,-3,-4]​。输入:nums = [-1,-2,-3,0,1]​。

2025-06-08 19:42:04 474

原创 0.操作系统接口

从同一个原初文件描述符通过一系列fork和dup调用产生的文件描述符都共享同一个文件偏移,而其他情况下产生的文件描述符就不是这样的了,即使它们打开的都是同一个文件。管道右端可能也是一个带有管道的指令,如a|b|c,它fork两个新进程(一个b,一个,c),因此,shell可能要创建一个进程树。它的实现在第7850行。在这段代码的结尾,绑定在文件描述符1的文件有数据“hello world”,父进程的write会从子进程write结束的地方继续写(因为wait,父进程只在子进程结束之后才运行write)。

2025-06-07 21:37:33 567

原创 20.环形子数组的最大和(medium)

示例 1:输入:nums = [1,-2,3,-2]输出:3解释:从子数组 [3] 得到最大和 3示例 2:输入:nums = [5,-3,5]输出:10解释:从子数组 [5,5] 得到最大和 5 + 5 = 10示例 3:输入:nums = [3,-2,2,-3]输出:3解释:从子数组 [3] 和 [3,-2,2] 都可以得到最大和 3 提示: * n == nums.length * 1 <= n <= 3 * 104 * -3 * 104 <= nums[i] <= 3 * 104。

2025-06-07 17:38:30 658

原创 19.最大子数组和(medium)

示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23 提示: * 1 <= nums.length <= 105 * -104 <= nums[i] <= 104 进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。连续子数组 [4,-1,2,1] 的和最大,为 6。

2025-06-07 16:40:41 708

原创 18.买卖股票的最佳时机Ⅳ(hard)

在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4。在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能。上述两种情况,我们需要的是「最大值」,因此 f 的状态转移方程为:​。天的时候,手里「没有股票」,并且交易了。

2025-06-07 15:36:20 905

原创 17.买卖股票的最佳时机Ⅲ(hard)

你最多可以完成 两笔 交易。示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。示例 2:输入:prices = [1,2,3,4,5]输出:4解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。输入:prices = [3,3,5,0,0,3,1,4]​。

2025-06-06 23:48:06 970

原创 16.买卖股票的最佳时期含手续费(medium)

714. 买卖股票的最佳时机含手续费 - 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格;注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。我们选择在「卖出」的时候,支付这个手续费,那么在「买入」的时候,就不用再考虑手续费的问题。输入:prices = [1, 3, 2, 8, 4, 9], fee = 2​。输入:prices = [1,3,7,5,10,3], fee = 3​。天结束后,处于「卖出」状态,此时的最大利润。

2025-06-01 17:20:17 847

原创 15.买卖股票的最佳时机包含冷冻期

设计一个算法计算出最大利润。处于「买入」状态的时候,我们现在有股票,此时不能买股票,只能继续持有股票,或者卖。对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]​示例 2:​。天的时候,手上没有股票,也不在冷冻期,但是依旧啥也不干到第。根据「状态表示」,我们要三个表一起填,每一个表「从左往右」。:此时要想处于「买入」状态,必须把第一天的股票买了,因此。天结束后,处于「可交易」状态,此时的最大利润;天结束后,处于「冷冻期」状态,此时的最大利润。天结束后,处于「买入」状态,此时的最大利润;

2025-05-28 18:30:07 505

原创 14.粉刷房子(medium)

LCR 091. 粉刷房子 - 假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。示例 1:输入: costs = [[17,2,17],[16,16,5],[14,3,19]]输出: 10解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。

2025-05-28 15:07:44 587

原创 13.删除并获得点数(medium)

示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。示例 2:输入:nums = [2,2,3,3,3,4]输出:9解释:删除 3 获得 3 个点数,接着要删除两个 2 和 4。之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。删除 4 获得 4 个点数,因此 3 也被删除。输入:nums = [2,2,3,3,3,4]​。输入:nums = [3,4,2]​。

2025-05-28 14:32:24 803

原创 12.打家劫舍Ⅱ(medium)

示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。示例 2:输入:nums = [1,2,3,1]输出:4解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。上一个问题是一个「单排」的模式,这一个问题是一个「环形」的模式,也就是首尾是相连的。偷第一个房屋时的最大金额。

2025-05-28 11:31:01 793

原创 11.按摩师(easy)

注意:本题相对原题稍作改动 示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:输入: [2,7,9,3,1]输出: 12解释: 选择 1 号预约、 3 号预约和 5 号预约,总时长 = 2 + 9 + 1 = 12。示例 3:输入: [2,1,4,5,3,1,1,3]输出: 12解释: 选择 1 号预约、 3 号预约、 5 号预约和 8 号预约,总时长 = 2 + 4 + 3 + 3 = 12。输入: [2,7,9,3,1]​。

2025-05-28 10:39:05 711

原创 2.Redis常见数据类型(字符串篇)

只是原则上命令的执行顺序是不确定的,但一定不会有两条命令被同步执行,如图 所示,可以想象 Redis内部只有一个服务窗口,多个客户端按照它们达到的先后顺序被排队在窗口前,依次接受 Redis 的服务,所以两条 incr 命令无论执行顺序,结果一定是 2,不会发生并发问题,这个就是 Redis 的单线程执行模型。如果某个命令执行过长,会导致其他命令全部处于等待队列中,迟迟等不到响应,造成客户端的阻塞,对于 Redis 这种高性能的服务来说是非常严重的,所以 Redis 是面向快速执行场景的数据库。

2025-05-27 22:46:14 767

原创 10.地下城游戏(hard)

其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑士将增加健康点数)。示例 1:[https://assets.leetcode.com/uploads/2021/03/13/dungeon-grid-1.jpg]输入:dungeon = [[-2,-3,3],[-5,-10,1],[10,30,-5]]输出:7解释:如果骑士遵循最佳路径:右 -> 右 -> 下 -> 下 ,则骑士的初始健康点数至少为 7。位置出发,到达终点时所需的最低初始健康点数。

2025-05-27 20:08:17 577

原创 9.最小路径和(medium)

像这种表格形式的动态规划,是非常容易得到「状态表示」以及「状态转移方程」的,可以归结到「不同路径」一类的题里面。根据「状态转移方程」的推导来看,填表的顺序就是「从上往下」填每一行,每一行「从左往后」。在本题中,「添加一行」,并且「添加一列」后,所有位置的值可以初始化为无穷大,然后让。位置两种情况,并且我们要找的是最小路径,因此只需要这两种情况下的最小值,再加上。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]​。根据「状态表示」,我们要返回的结果是。位置之前的一小步,有两种情况:​。

2025-05-27 19:36:01 785

原创 8.下降路径最小和(medium)

置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1)。关于这一类题,由于我们做过类似的,因此「状态表示」以及「状态转移」是比较容易分析出来的。给你一个 n x n 的方形整数数组 matrix ,请你找出并返回通过 matrix 的下降路径的最小和。输入:matrix = [[2,1,3],[6,5,4],[7,8,9]]​。输入:matrix = [[-19,57],[-40,-5]]​。

2025-05-27 19:17:22 685

原创 7.礼物的最大价值(medium)

拿取珠宝的规则为: * 只能从架子的左上角开始拿珠宝 * 每次可以移动到右侧或下侧的相邻位置 * 到达珠宝架子的右下角时,停止拿取注意:珠宝的价值都是大于 0 的。示例 1:输入:frame = [[1,3,1],[1,5,1],[4,2,1]]输出:12解释:路径 1→3→5→2→1 可以拿到最高价值的珠宝 提示: * 0 < frame.length <= 200 * 0 < frame[0].length <= 200。根据「状态转移方程」,填表的顺序是「从上往下填写每一行」,「每一行从左往右」。

2025-05-27 18:21:40 451

原创 6.不同路径Ⅱ(medium)

示例 1:[https://assets.leetcode.com/uploads/2020/11/04/robot1.jpg]输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。本题为不同路径的变型,只不过有些地方有「障碍物」,只要在「状态转移」上稍加修改就可解决。根据「状态转移」的推导,填表的顺序就是「从上往下」填每一行,每一行「从左往右」。向右 -> 向右 -> 向下 -> 向下​。3x3 网格的正中间有一个障碍物。

2025-05-27 17:58:27 752

原创 5.不同路径(medium)

62. 不同路径 - 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下 -> 向右 -> 向下示例 3:输入:m = 7, n = 3输出:28示例 4:输入:m = 3, n = 3输出:6 提示: * 1 <= m, n <= 100 * 题目数据保证答案小于等于 2 * 109。根据「状态转移方程」的推导来看,填表的顺序就是「从上往下」填每一行,在填写每一行的时候「从左往右」。

2025-05-27 17:43:01 937

原创 4.解码方法(medium)

91. 解码方法 - 一条包含字母 A-Z 的消息通过以下映射进行了 编码 :"1" -> 'A'"2" -> 'B'..."25" -> 'Y'"26" -> 'Z'然而,在 解码 已编码的消息时,你意识到有许多不同的方式来解码,因为有些编码被包含在其它编码当中("2" 和 "5" 与 "25")。示例 3:输入:s = "06"输出:0解释:"06" 无法映射到 "F" ,因为存在前导零("6" 和 "06" 并不等价)。它可以解码为 "AB"(1 2)或者 "L"(12)。

2025-05-27 17:29:54 680

原创 Java基础-牛客面经28问(前五)

引用类型(如类,数组,接口)存储对象内存地址,实际对象存储在堆内存,默认值为null,两者核心区别在于存储方式和分配机制。在Java中,接口(Interface)和抽象类(Abstract Class)都是实现多态和代码复用的核心机制,但它们的设计目的和使用场景有显著差异。在Java中,static关键字用于修饰类的成员(变量、方法、代码块、嵌套类),表示这些成员属于类本身,而非类的某个实例。Java有8种基本数据类型,直接存储具体的数值,内存分配在栈(Stack)中,速度快但功能简单。

2025-05-27 15:27:31 1011

原创 1.初识Redis

站在数据冷热的角度,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据,例如对于视频网站来说,视频基本信息基本上在各个业务线都是经常要操作的数据,而用户的观看记录不一定是经常需要访问的数据,这里暂且不讨论两者数据规模的差异,单纯站在数据冷热的角度上看,视频信息属于热数据,用户观看记录属于冷数据。如果将这些冷数据放在 Redis上,基本上是对于内存的一种浪费,但是对于一些热数据可以放在 Redis 中加速读写,也可以减轻后端存储的负载,可以说是事半功倍。目前最新的版本是 7 版本。

2025-05-26 23:23:11 1246

原创 服务端高并发分布式结构演进之路

想象一下,银行管理的账户金额,如果收到一笔转账之后,一份数据库的数据修改了,但另外的数据库没有修改,则用户得到的存款金额将是错误的。,但是这只是一个逻辑的数据库整体,数据库里不同的组成部分是由不同的组件单独来实现的,如分库分表的管理和请求分发,由Mycat实现,SQL的解析由单机的数据库实现,读写分离可能由网关和消息队列来实现,查询结果的汇总可能由数据库接口层来实现等等,这种架构其实是MPP(大规模并行处理)架构的一类实现。从库的所有数据全部来自主库的数据,经过同步后,从库可以维护着与主库一致的数据。

2025-05-26 00:03:10 505

原创 Redis Java使用

要想本地主机能访问redis,需要把redis的端口通过云服务器后台页面的“防火墙/安全组"放开端口到公网上。注意:在代码中另起一个线程,直接通过jedis这个连接插入数据是不行的,必须另起一个jedis连接。因此我们可以使用端口转发的方式,直接把服务器的redis端口映射到本地。Java操作redis的客户端有很多,其中最知名的是jedis。此时,访问本地的8888,就相当于访问对应服务器的6379.需要在创建实例的时候,把多个节点的地址,都设置进去。将远程服务器上的某个端口转发到本地机器的某个端口。

2025-05-25 21:48:16 1257

空空如也

空空如也

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

TA关注的人

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