自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

编程语言与设计

yet idot who loves computer programing

  • 博客(71)
  • 收藏
  • 关注

原创 发帖子需要设计两张表吗?

在设计一个发帖平台时,(一个供读者查看,一个供用户操作)。

2025-03-02 14:31:15 240 1

原创 不停机数据库迁移方案

这个东西, 主要利用一些工具, 比如 gorm 的 conn pool 这种工具, 利用这种装饰器模式封装两个数据源, 每次执行语句的时候, 根据标记位来执行对应的双写逻辑。将原来的表的数据给迁移过去, 这一步我们可以借助 mysqldump 这种工具, 直接把数据迁移过去, 下面一部就是执行一次校验。双写校验+ 增量校验: 也就是一边进行双写, 然后一边进行增量校验, 主要还是根据对应的 uptime 来做这个件事情。第一次校验的方式主要有两种,

2025-02-24 00:36:18 128

原创 数据库迁移的几个概念

增量校验这种校验方式只对数据集中新增或者修改的部分进行校验。它通常基于某种时间戳、版本号或者其他标识来确定哪些数据是需要校验的。例如,在一个数据库系统中,可以利用更新时间字段来标记最近被更新的记录,并且只对这些记录进行校验。全量校验是指对数据集中的所有记录进行完整的校验。这不考虑数据是否被修改,而是检查整个数据集的完整性、正确性等。例如,审计过程中对一个财务数据系统进行全面的数据一致性检查,就需要对所有账目记录进行全量校验。二、校验粒度增量校验校验的粒度相对较小,因为它只针对特定的部分数据。

2025-02-22 11:23:17 428

原创 什么是数据库代理

数据库代理是现代分布式系统中关键的“智能流量管理器”,通过解耦应用与数据库的直连依赖,显著提升了系统的可扩展性、稳定性和可维护性。选择适合的代理方案时,需结合业务规模、数据库类型及运维复杂度综合评估。数据库代理(DB Proxy)是一种位于应用程序和数据库服务器之间的中间件,充当两者之间的“中间人”。如AWS RDS Proxy、阿里云数据库代理,帮助用户管理云数据库的连接和扩展。每个微服务通过代理访问数据库,避免直连导致的配置分散和资源竞争。通过代理实现数据隔离,动态路由不同租户的请求到独立数据库实例。

2025-02-04 23:23:29 491

原创 深入理解MySQL 的 索引

B+ 树索引由根页面(Root)、分支页面(Branch)和叶子页面(Leaf)组成一棵树的结构。InnoDB 中,索引页面的大小由参数 innodb_page_size 控制,默认为 16K。: innoDB 对行的长度有一定的限制,每行记录的长度不能超过页面大小的一半。索引是一种用来快速检索数据的一种结构, 索引使用的好不好关系到对应的数据库性能方面, 这篇文章我们就来详细的介绍一下数据库的索引。在上面中我指定了对应的 primary key 为对应的 id 字段, 所以Id 就作为对应的默认索引,

2025-01-31 23:58:18 470 1

原创 QPS 值是怎样进行计算和应用的

QPS(Queries Per Second),即每秒查询率,指一台服务器每秒能够相应 的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。它表示系统在某一特定时间内能够处理的查询请求的数量,通常用于衡量 Web 服务器、数据库等系统的性能。

2025-01-30 19:27:59 976

原创 如何使用DDD 的思想规划对应的模块

DDD 也就是所谓的领域驱动设计, 强调设计对应的领域模型, 然后将对应的领域模型和我们的代码相关联, 这样可以构建一个防腐层, 来隔离我们的变化。

2025-01-26 21:48:36 310

原创 面试时、我把Go 的 chan 源码分析给面试官看

在 Go 语言并发编程中,“不要通过共享内存来通信,而应该通过通信来共享内存”是其核心理念之一。这句话体现了 Go 语言并发模型的设计哲学,即通过通信机制(如 channel)来实现数据共享,而不是直接操作共享内存。

2025-01-26 17:29:55 857

原创 字节一面, Go语言的Map 的扩容机制是怎样的?

在 Go 语言中,map 是一种内置的数据结构,用于存储键值对。它基于哈希表实现,具有高效的查找、插入和删除操作。当 map 中的元素数量不断增加时,为了保证操作的高效性,Go 语言的 map 会触发扩容机制。以下是关于 Go 语言 map 扩容机制的简单介绍。

2025-01-24 19:56:46 1031

原创 Kafka 源码分析(一) 日志段

关于这个LogSegment 是存在与之相关的方法的, 主要有三个方法, 分别是对应的 append 方法, read 方法, 以及对应的 recover 方法。和日志段相关的第三个操作是 recover 函数,在消息系统中, 日志被分成了多个日志段, 每个日志段包含一定数量的消息,这些日志消息被保存在磁盘上面,recover 方法的作用是确保在 Broker 启动时,能够正确地从磁盘加载日志段数据,并将其恢复到一个一致的状态,以便后续的读写操作能够正常进行。首先我们看一下对应的append 函数。

2025-01-21 14:12:15 681

原创 Go Map 源码分析(一)

当 map 处于扩容阶段,定位 key 到某个 bucket 后,需确保该 bucket 对应的老 bucket 已完成迁移,即老 bucket 中的 key 都已迁移到新 bucket(老bucket中的key会被分散到两个新bucket),之后才能在新bucket中进行插入或更新操作。bmap结构体:是哈希表中的桶,每个bmap能够存储8个键值对,并且设有一个指针,当某个bmap存满时,就会申请新的bmap进行存储,并与前一个bmap构成链表。因为扩容之后,key 的分 布发生了变化。

2025-01-19 22:54:14 790 3

原创 Go 语言的slice是如何扩容的?

Go 语言中的 slice 是一种灵活、动态的视图,是对底层数组的抽象。当对 slice 进行追加元素等操作导致其长度超过容量时,就会发生扩容。

2025-01-18 20:04:26 887

原创 redis 的 SDS 内存分配

最基础的就是一个 redis 对象。

2025-01-17 15:50:54 408

原创 C 语言的void*到底是什么?

通过我们上面的介绍, 我们发现void*第一个方案就是作为结构体的字段, 这样我们可以去表示对应的范型字段函数的参数, 或者返回值, 但是我觉得这种最好少用, 因为导致对应的接口不够明确各种内存相关的函数, 这其实就是一个很奇妙的东西, 因为在操作系统级别, 我们并不知道这块内存到底是什么类型的变量约定: 当我们在使用void*的时候, 我们最好弄清楚当前这个指针指向的信息, 可以通过明确的变量名来完成。

2025-01-17 09:29:43 2889 3

原创 defer 源码分析

在 deferreturn 函数的最后,会使用 jmpdefer 跳转到之前被 defered 的函数,这时控制权从 runtime 转移到了用户自定义的函数。在Go 语言中多个 defer 形成一个链表. defer 语句会首先调用一个 defer proc 函数, new 一个对应的结构体挂载到对应的G 上面调用new 之前会从 G 所绑定的 P 的 defer pool 里面取, 没有取到会从全局的defer pool里取, 实在没有的话才新建一个。

2025-01-02 10:33:25 280

原创 ssh 设置持久化连接

修改/etc/ssh/sshd_config文件,找到【ClientAliveInterval 0】和【ClientAliveCountMax 3】,并将注释符号【#】去掉。将ClientAliveInterval对应的【0】改为【60】,ClientAliveCountMax使用默认值【3】即可。【ClientAliveInterval 60】表示每分钟发送一次,客户端响应后,即可保持长连接。ClientAliveCountMax表示云服务器发出请求后,客户端响应的次数没有达到一定值,就会自动断开

2024-12-21 14:51:10 427

原创 设计模式之 abstract factory

对应的一个产品, 我们可以通过抽象工厂搞出来的两个东西。首先client这个东西可以接触到三个接口, 分别是。首先创建一个工厂接口。

2024-12-20 17:09:58 570

原创 eBPF底层结构

BPF MAP

2024-05-02 11:07:27 255

原创 js表达式的结果

的引用, 然后它可以作为下一个操作符号, 例如函数调用符号的左手端来使用, 于是有了对象方法调用运算。delete 其实只能删除一种引用, 即对象的成员。的属性时候, 那么就需要从当前环境中找到一个名为。看作一个表达式, 并尝试删除它的求值结果。这个引用就可以了, 而当它不是全局对象。, 就称为不同环境下绑定的标识符或名字。的引用, 找到这两种不同的引用。这个引用不存在, 所以会报一个。), 而是删除一种引用。

2023-01-02 13:45:02 197

原创 【编译原理】Java手写一个词法分析器

手写一个词法分析器

2022-10-31 21:58:41 323

原创 MySQL游记

我们根据条件来查询表中的内容,而条件就是where语句,这个where就相当于其它的语言中的if语句。在MySQL中最重要的就是表的概念。

2022-10-31 21:57:29 149

原创 redis的字符串是如何释放的

redis 字符串的释放

2022-10-28 23:50:40 144

原创 一起来学nginx(一)

一起来学nginx

2022-10-22 15:41:01 1392

原创 如何减少const的传染性?

如何减少const的污染性?

2022-10-19 18:29:57 256

原创 js中this的指向

函数作为构造函数调用时候, 在js中没有类的概念, 创建对象是用构造函数来完成。中没有类的概念, 创建对象是使用构造函数来完成或者直接使用json格式来写对象。指向, 不管函数位于哪一个位置, 只要关注函数调用的位置。,准确的说this为null, 但是被解释成。函数.call(对象, 参数1, 参数2)指向方法的调用者, 即该对象。作为对象的方法来调用,

2022-10-18 21:58:42 78

原创 初探七层网络协议

进入下一层mac层,主要是与网关相关的东西, 首先操作系统默在启动的时候,DHCP通信协议配置客户端IP地址以及默认的的网关IP地址192.168.1.1,进入下一层,传输层,面向传输的TCP协议,面向对象的UDP协议,存储的信息有两个,一个是浏览器监听的端口,另一个服务器监听的端口。首先是应用层,这个层主要是HTTP协议,将要发送的数据内容进行封装。操作系统通过ARP协议将IP地址发送给网关,网关的地址叫MAC地址。进入下一层, 网络层,主要是本地浏览器的地址,和服务器的地址。

2022-10-01 08:55:42 658

原创 【Git】删除文件(转载)

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本。这个时候, git知道你删除了文件, 因此,工作区域和版本库就不一致了,一般情况, 你通常在文件管理器中把没有用的文件删了,或者使用rm命令删了。先添加一个新的文件test.txt到Git并且提交。在Git中,删除文件也是一个修改操作。现在,文件就从版本库中被删除了。命令会告诉你哪些文件被删除了。

2022-09-06 16:20:02 2636

原创 【C/C++】C语言程序执行过程

通过链接处理,编译器会将所有程序目前需要的对象文件进行整合,设置好程序中所有调用函数的正确地址,并生成对应的二进制文件可执行文件。编译器会分析和优化源代码,并将其编译成对应的汇编格式代码,这部分代码中含有使用汇编指令描述的原始 C 程序逻辑。编译器会首先移除源代码中的所有注释信息,并处理所有宏指令。其中包括进行宏展开、宏替换,以及条件编译等。编译器会将这些汇编代码编译成具有一定格式,可以被操作系统使用的某种对象文件格式。

2022-09-03 14:40:47 415

原创 【C/C++】函数指针

来获取,注意(*print_ptr)一定要写在圆括号的里面,否则函数参数。上面例子中,变量print_ptr是一个函数指针,它指向函数。由上面的结论我们就可以得出下面几种函数调用的方式。有了函数指针,通过它也可以调用函数。本文摘录自阮一峰的C语言教程。

2022-09-03 13:37:09 289

原创 使用ecto进行数据库迁移

数据库迁移

2022-08-26 14:07:55 42

原创 【编译原理】编译器前端

首先构造根节点,代表整个程序,之后向下扫描 Token 串,构建它的子节点, 当它看到一个 int 类型的 Token 时,知道这儿遇到了一个变量声明语句,于是建立一个“变量声明”节点;最后,遇到“字面量”其值是 45。这棵树叫做抽象语法树, AST,树木的每一个节点是一个语法单元, 形成ast之后的好处就是,让计算机很容易去处理,一种非常直观的构造思路是自上而下进行分析。编译器的下一个阶段是语法分析,语法分析是在词法分析的基础上面识别出程序的语法结构,这个结构就是一个树状结构,是计算机容易理解和执行的。

2022-08-23 17:21:31 1131

原创 【PHP】构造函数和析构函数

将会把数据传送给构造方法, 然后构造方法用参数来影响对象, 然后返回给对象。析构函数在对象销毁的时候执行,销毁对象对象的方式有这样几种,当对象在创建的时候,将会自动调用构造方法。, 在PHP中构造方法不可以进行重载。

2022-08-20 19:43:39 126

原创 C语言(一)

在C程序编译的时候, 编译器并不会对C语言中的类型进行太多的检查, C语言是显示声明类型, 而且是弱类型甚至是不检查的编程语言, 这是因为C语言的时代, 资源比较匮乏, 所以过多的检查机制会对资源损耗。所以在C文件可运行之前, 必须要经过编译的过程, C文件在编译器编译的时间段, 我们称作程序的编译时, 当得到可运行程序, 去运行它时, 我们称作程序的运行时。对于C语言的函数我们还要考虑它的作用域, 所谓作用域就是它起作用的范围, 在默认的情下, C语言会把一个程序中所有的。

2022-08-20 19:09:03 78

原创 【PHP】无限级别分类之查找子孙树

现在我们继续对结果进行一下优化,因为上面打印出来的并不是很好看,我们可以将每一个答案设置一个级别,然后根据这个级别去输出答案。但是当我们在答案数组前面加上static关键字的时候,我们就可以得到我们想要的答案,这是因为static数组的会一直保留下来。但是这样会出错,这是因为在递归的时候,都会重新开辟一个新的数组, 这样导致了最终的结果,只是第一次调用的结果。其实上面还有一种方案,就是在递归调用的时候,直接在将上面的数组进行归并。无限级别分类牵涉到两个应用,无限级别分类牵涉到两个引用。

2022-08-20 00:03:55 373

原创 【PHP】文件操作

首先是打开文件的函数,我们将使用首先第一个参数$filename是文件的路径, 同时也可以是一个url,如果是url,PHP将检查并确认已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。fopen的第二个参数是模式,这里只介绍几种常用的,如果不清楚,请查手册fopen返回的是一个资源类型,资源类型就像当于是一个权限下面是具体的例子:当使用w模式,最终会将文件的内容给清空:如果文件路径不存在的话,那么将可能会创建一个新的文件,...

2022-08-17 17:24:14 171

原创 Yin的备份

当你一天之内可以变出好几种不同的语言特性来的时候,体会它们的优势和缺点,理解的越深入,一切语言就在自已的把玩之中了,而不是凌驾在自已之上的神,然后虚假的荣耀感也消失了,只剩下纯粹的乐趣和享受。并不是真正的核心,仍然是衍生物品,他们不明白海龟的下面还是海龟,并没有到底,掌握真正的核心知识的人是从容不迫的,因为不管什么新的衍生知识都万变不离其宗,一看就知道是怎么回事,掌握核心知识的人完全可以自已制造出这些衍生物品,所以对待它们就不再是一幅学习的姿态,而是一种鉴赏的姿态了。所以永远不要忽略短小的代码。

2022-08-17 14:29:56 152

原创 【PHP】单例模式

多人协同开发一个项目, 需要调用MySQL类的实例,原本只需要创建一个实例,就可以了,但是有一个开发者多创建了一个MySQL类实例,这样就导致重复的创建实例了。

2022-08-15 23:33:28 323

原创 【C++】面向对象(一)

引用存的是对象的地址,取出确是对象,而指针是存放对象的地址,传递引用很快,所以尽量传递引用, 如果你不想函数修改对象,可以加上const。当一个函数只是返回属性的值,而没有修改函数的值的时候,我们可以使用const关键字去修饰函数.因为封装了对象,所以我们不可以直接使用, 除了使用内部的函数外,我们还可以使用友元。当函数写在类的外面但是,某个对象想调用这个函数的时候,我们可以在这个函数前面加上。在创建对象的时候,传入的参数需要和构造函数的形参一致,除非构造函数写了默认值。各个class之间互为友元。...

2022-08-14 17:32:06 258

原创 一起来学模电

一起学模电

2022-08-06 22:22:16 95

原创 物理内存和虚拟内存

每一个电脑都有一个内存条,这块内存条插上电之后就可以存储数据了,它能容纳数据的大小就是计算机物理内存的大小。在早期向内存中存储数据和读取数据都是直接操作物理内存的。但是这样我们需要规定好哪一个数据放在哪一个位置,比如, 将放在这个位置,那么其它的变量就不可以放在这个位置了,当程序较大的时候,你很难确定这块内存是否被使用。这样会为我们制造很多的麻烦。那么有没有好的解决方案呢? 当然是有的,这种解决方案叫做局部性原理, 局部性原理有两部份内容, 第一部分是时间的局部性,另外一部分是空间的局部性。时间的局部性

2022-08-06 20:46:50 196

空空如也

空空如也

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

TA关注的人

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