吴俊贤的博客

我干了什么 究竟拿了时间换了什么

正确修改Ceph集群IP地址

当我们需要把整个Ceph集群的网络地址修改为另一个子网地址(与ceph.conf的public addr等不相同)时,就需要更改Ceph Monitor,Ceph OSD,Ceph Manager的监听地址。其中,OSD和Manager的地址是根据ceph.conf文件中的配置项public addr与cluster addr等确定的,因此只需修改文件内容即可。而Ceph Monitor的地...

BBR——基于拥塞的拥塞控制算法

阅读了有关BBR的文章[1],感觉深受启发,遂写一篇总结的文章。 何为基于拥塞? 作者们取的这个题目(Congestion-Based Congestion Control)首先勾起了我的兴趣。我快速的在脑里面复习前段时间刚刚在TCP/IP卷一中学习的有关拥塞控制的机制和算法:快速重传,拥塞避免(Congestion Avoidance),记得就这俩。 快速重传基于3次或多次的重复AC...

只出现一次的数字2的设计过程

LeetCode题目137 又是这种完全不能按照算法课设计思路的题目,必须要找到一个操作的方法。之前已经遇到过类似的题目,一个数字出现1次而其他所有数字出现2次的时候,使用异或来消去其他数字。所以很自然的,我就想到有没有一种方法能够3次消掉,1次保留呢? 不过花了好长时间没有想出来,于是乎看了下讨论区Oxford大神的解答,思路跟我一样。不过我想的方向不太对。 大神的解法是,对每一个比...

双向BFS——有效降低内存消耗的搜索算法

问题描述 首先祭出本文所讨论的算法题:LeetCode 127 单词接龙 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则: 每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明: 如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度。 所...

装袋问题——二分搜索的另一种用途

题目描述 LeetCode 1011题目,我将这类型的题目称为装袋问题,他们的一般性描述如下 按顺序将i件货物装入到承重固定的袋子中,每一件的货物重量为weights[i],若袋子的数量是N,求出袋子承重量的最小值。 输入:int[] weights, N 输出:袋子最小承重量 解法 我们看到,weights数组不一定是排好序的,那何来的二分搜索呢? 这里的二分搜索,不是传统的在...

数组中两个不重合切片的和的最大值

这道题困扰了我一整天,有必要记录一下这个解题思路。 题目描述 原题地址:https://leetcode.com/problems/maximum-sum-of-two-non-overlapping-subarrays/ 在一个数组中,寻找一段长为L的切片,与一段长为M的切片,两个切片是不重合的,求两个切片的和的最大值。 输入:数组nums,整数L与M 输出:和的最大值 解题方...

彻底理清快速排序的分区算法

前言 每次做快速排序的时候,一直都有很恼人的bug出现在我的分区算法之中。写这篇文章的目的,就是要彻底让自己明白分区是怎么做的。 分区算法有多种的实现。简要说有 选择第一个为哨兵。第二个元素和最后一个元素分别为i和j。每次i先走,遇到大于等于哨兵的值时候停下来。然后到j,找到小于哨兵的停下来。然后交换ij。重复此过程。直到i超过j,交换j与哨兵的位置。简称为两边交换法。 选择...

CGO学习整理

Go调用C go文件编写 在Go文件中,需要有一个特殊的import "C"语句,在其前面是以/*和*/包含起来的注释,里面是C代码。注意不能有多的*号,否则会语法错误。 然后,在该C代码段中,就可以编写C的代码,以及调用C函数库。需要注意的是,代码段不能写C++的代码。 较为简单的示例如下 package main /* int add(int num1, int num2) ...

SSE指令集学习笔记

SSE 全称Streaming SIMD Extension,是x86上对SIMD指令集的一个扩展,主要用于处理单精度浮点数。Intel陆续推出SSE2、SSE3、SSE4版本。其中,SSE主要处理单精度浮点数,SSE2引入了整数的处理, SSE指令集引入了8个128bit的寄存器,称为XMM0到XMM7。正因为这些寄存器存储了多个数据,使用一条指令处理,因此称这项功能为SIMD。 处...

以字节为单位进行大小写转换

以小写转换大写为例子 字节操作 这个小写转换,很容易就知道,给每一位都减去'a'-'A'的值,也就是32即可。换成字节的话,直接减去0x20202020即可。 话说当初设计ASCII表的时候,故意把大小写字母的间隔调整为32的吗,这样子这个差值就只有一个bit是1了,做很多运算都非常方便,比如接下来的。 难就难在,我们不能把非小写的字母改掉,这就带来了问题,我们需要判断:每一个字节都...