自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 问答 (2)
  • 收藏
  • 关注

原创 图像数据格式:HWC与CHW的区别

理解HWC与CHW的区别。

2023-06-17 19:02:59 2327

原创 装饰模式(decorator-pattern)

如何避免继承导致的类数量指数级增长?如何更加优雅地给现有的类动态增添新的功能?装饰模式或许称得上首选。

2023-01-19 18:53:24 1021 1

原创 C++关于初始化列表的细节(必须/不能使用初始化列表的情况、初始化列表的效率分析)

为什么有些变量必须在初始化列表中初始化,而有些变量写在初始化列表中会报错?为什么初始化列表有时候效率会更高呢?

2023-01-18 20:02:17 1138

原创 策略模式(strategy-pattern)

从简单的情景入手,认识策略模式的核心:接口(算法)的封装与解耦。

2023-01-17 18:05:33 589

原创 简单工厂模式(simple-factory-pattern)

从一份简单的计算器代码认识简单工厂模式。示例摘选自《大话设计模式》,作者程杰。

2023-01-16 14:30:48 830

原创 Git标签

标签用于标定某个提交版本,本质就是一个指向某个commit的指针,只是无法移动。如果通过commit索引操作版本,那么一个个十六进制的索引值会让人眼花缭乱!查看所有标签(字典序,而非按照时间排序)。将所有未推送的标签全部推送至远程仓库。将指定标签推送至远程仓库。标签的命名根据用户而定,标定指定索引的提交版本。删除本地仓库的标签。

2022-10-11 21:48:16 299

原创 使用Git管理远程仓库

远程仓库 一、远程仓库的意义 与集中式版本控制系统SVN相比,Git是分布式版本控制系统,即同一个Git仓库可以分布到不同的机器上,不同主机可以克隆该仓库,而这一切都需要远程仓库的参与。

2022-10-08 16:20:17 601

原创 Git并行开发「分支」

Git并行开发「分支」 一、分支的概念 git会在本地库创建之初默认生成一个master分支,即主分支,专用于保存项目已完成的功能代码。 但是,一个项目往往是由多个模块组成的,在工作中这些模块分别交由

2022-10-06 22:27:42 2569

原创 使用Git进行版本控制

版本的查看、回退策略以及不同版本的对比。

2022-10-04 15:03:00 1146

原创 Git基本命令入门

Git基础 一、Git结构 git由三部分组成: 工作区:即普通文件,可以是代码类文本文件或是其它各种文件。 暂存区:临时存储待提交的代码,相当于一个缓冲区,方便之后一次性将它们提交至本地仓库。 本地

2022-10-03 19:51:55 445

原创 完美转发与底层原理剖析(引用折叠)

万能引用:即模板参数T&&,...它会开辟一块空间存放这个右值,对于自定义类型还会调用它的构造函数,因此可以说,。为了使一个函数既可以接受左值,又可以接受右值,C++11 之前的解决方案是将参数类型设为。但是。

2022-10-01 20:51:47 849

原创 单调栈应用——矩形最大面积问题

每个柱子彼此相邻,且宽度为 1。因此,当我们确定某一根柱子为矩形的高时,只需要知道左边第一个矮于它的柱子下标。求在该柱状图中,能够勾勒出来的矩形的最大面积。如此,本题又被抽象成了。的二维二进制矩阵,找出只包含。,右边第一个矮于它的柱子下标。的最大矩形,并返回其面积。,那么此时矩形的面积就等于。如果第i根柱子的高度。

2022-09-25 16:00:00 780

原创 模板类型萃取与模板的优缺点分析

模板 一、类型萃取type traits 类型萃取,就是通过模板的特化获取模板参数的类型,比如: 在获取了模板类型的情况下,就可以通过IsPodType.Get()查看它是否是内置类型(POD)。 如

2022-09-24 20:16:39 561

原创 搜索旋转排序数组[特殊二分]

简单来说,旋转就是将一个原本升序的数组,从某一个点pivot断开,将后半部分整体移至前面:

2022-09-23 13:22:23 350

原创 C++静态多态与动态多态的实现原理剖析

静态多态主要借助**模板和重载**。在编译期间,编译器通过类型来实例化模板或者选择合适的重载。因此,**静态多态在编译期间完成**。

2022-09-22 16:54:37 1197

原创 BFS实际应用题[思维扩展]——双向BFS与A*启发式搜索

BFS,即广度优先搜索(Breadth-First-Search),是一种计算无权最短路径的常见算法。本文基于常见题型介绍BFS的变种与应用

2022-09-21 16:11:11 438

原创 集合划分问题:思路与剪枝[回溯]

当我们尝试将第idx个球放入第i个集合时,说明将它放入前i-1个集合都已经失败了。那么此时如果第i个集合的元素和与第i-1个集合的元素和相等,则说明第idx个球再放入第i个集合,依然会失败。对于第idx个元素,我们可以选择将其放入K个子集中的任意一个。由于划分成K个不同的非空子集,因此我们不妨使用一个数组记录K个子集的元素和分别是多少。如果第idx个元素已放入,则递归到下一层,选择将第idx+1个元素放入某一个子集。此时需要将第idx个元素从先前选择的集合中取出,同时在选择列表中重新选择一个集合。

2022-09-20 15:06:21 616

原创 字典树原理与实现

字典树(*trie*),又称前缀树,或单词查找树,是一棵专用于查找单词或单词前缀是否存在的树。

2022-09-19 15:56:16 352

原创 扫描线及其应用

当我们扫描到一个矩形的左边缘时,我们将其y方向上的线段加入线段树,当扫描到一个矩形的右边缘时,我们将其y方向上的线段从线段树中删除。每当扫描到一个矩形的边缘时,前后两条扫描线就可能与原来的不规则图形构成一个规则的矩形。如此一来,不管是不规则图形的面积还是周长,都可以通过这些规则的矩形算出。我们再看一眼上图,扫描线构成规则矩形时,都是在扫描到原矩形的某一条边缘时。最暴力的方式就是将所有矩形的面积加起来,再减去相邻矩形重合的面积。那么当扫描线扫描到边缘时,前后两条扫描线构成的规则矩形的。,可是高如何确定呢?

2022-09-18 16:38:02 477

原创 什么函数不能是虚函数?为什么析构必须是虚函数?

虚函数是为了依据不同的对象来产生不同的状态,但是前提是得有这个对象,而对象的产生必须依靠构造函数;static成员函数是类的所有对象共享的,而虚函数是针对不同对象构成多态,二者矛盾;其次,静态成员函数没有this指针,无法访问虚函数表。内联函数是在编译期间直接在调用位置展开代码,而虚函数是在运行时通过不同对象来判断函数的调用;如果基类的析构函数是用virtual修饰的虚函数,那么无论派生类的析构函数是否有virtual修饰,它都是虚函数。友元函数不属于类的成员函数,不能被继承,更不能声明为虚函数。

2022-09-17 23:03:46 376

原创 C++菱形继承问题与虚拟继承原理

B和C同时继承了A中的a,然后又派生出了D,因而D中存在两份a:一份是B::a,一份是C::a。因此,在D中直接访问a会导致错误,此时的a就具有二义性,需要指定类作用域才能访问。多个类继承了同一个公共基类,而这些派生类又同时被一个类继承,这种称为菱形继承或钻石继承。多个类继承了同一个公共基类,而这些派生类又同时被一个类继承,这种称为菱形继承或钻石继承。B和C同时继承了A的成员,此时D继承B和C,相当于获得了两份A的成员,造成数据冗余。注:公共数据的位置可能是D的开头,也可能是结尾,依编译器而定。

2022-09-16 22:34:19 427

原创 模板为什么不能分离编译

一个程序由若干源文件共同实现,每一个源文件单独编译并生成目标文件,最后进行链接形成可执行文件的过程称为分离编译模式。

2022-09-15 19:10:21 232

原创 RMQ类问题利器:线段树

(区间的最值)、区间的和,如果使用朴素算法,即通过遍历的方式求取,则时间复杂度为O(N),在常数次查询的情况下可以接受,但是当区间长度为N,查询次数为M时,查询复杂度就变成。注意:由于lazy变量的存在,使用子节点的值更新父节点时,需要加上父节点的lazy值,因为该值是由于"偷懒"而没有添加在子节点上的。,此时将这个节点的值进行修改,并按要求修改lazy,比如:对给定区间整体加4,则lazy加4,整体减3,则lazy减3。,则左孩子存储[start, mid]的和,右孩子存储[mid+1, end]的和。

2022-09-14 20:56:18 264

原创 STL六大组件与底层原理

STL,即标准模板库(Standard Template Library),是一些常用数据结构和算法模板的集合,主要由6大组成部分组成。

2022-09-13 20:54:08 1340

原创 区间贪心问题合集

看起来简单的贪心思想往往不是那么好想。

2022-09-12 16:00:55 243

原创 字符串匹配DP问题合集

四道题解,注释详解每种状态转移的意义

2022-09-11 20:26:24 247

原创 C++智能指针原理与实现

如果一块内存被shared_ptr和weak_ptr同时引用,当所有shared_ptr析构了之后,不管还有没有weak_ptr引用该内存,内存也会被释放。unique_ptr在auto_ptr的基础上直接禁用了拷贝构造和赋值重载(delete),从而避免了auto_ptr在使用上容易出错的问题,但是没有了这两个函数,对于用户非常不便。weak_ptr是一个弱引用,它是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命周期,也就是说,它。

2022-09-10 15:24:56 880

原创 Redis常用数据结构操作与底层原理

Redis下有16个数据库,分别名为0~15,彼此保存的值互不干扰。

2022-09-09 15:23:36 491

原创 水塘抽样算法与等概率证明

对于数据流中的数据,我们将其存储到容器中,并使用随机数取出[0, n)的任意一个元素,完成等概率抽样。该算法的时间与空间复杂度均为O(n)。水塘抽样算法用于:在数据流中以。对于数据流中的第i个数,它有。

2022-09-08 08:30:00 278

原创 redo日志、undo日志与事务隔离性

事务 一、事务及其特性 1、事务概念 在MySQL中,只有InnoDB和NDB两种存储引擎支持事务的功能。 2、事务的四大特性:ACID 原子性(Atomicity) 一件事情,要么没有做,要么做了且

2022-09-07 12:32:11 762

原创 字符贡献度问题

中抽取,但是必须保证[1, 1]中抽取的字符串必须以1结尾,因为它要与i=2处的A相连。同样的,[3, 4]中抽取的字符串必须以3开头,因为它要与i=2处的A相连。因此,对于字符串中的每一个字符,我们求出它能为多少个子串贡献只出现一次的次数,就相当于变相地求解了整个复杂的问题了!内的所有子串,字符c都能贡献一个只出现一次的次数,对否?,求出其中只出现一次的字符的个数如何求取?的所有子串,其中每个子串中只出现一次的字符个数之和如何求取?,然后对于每个子串,都使用哈希表计算只出现一次的字符个数。

2022-09-06 10:12:41 332

原创 Redis持久化策略剖析

通过使用RDB-AOF混合持久化,用户可以同时获得RDB持久化和AOF持久化的优点,服务器既可以通过AOF文件包含的RDB数据来。在重写期间被修改,此时服务器就会将这个修改命令写入到重写缓冲区中,方便子进程实时修改重写的AOF文件。,生成对应的命令,后期恢复时可以通过该命令生成一个相同的键值对,达到恢复整个数据库的目的。Redis提供了RDB持久化、AOF持久化、RDB-AOF混合持久化三种持久化策略。在子进程重写AOF时,会创建一个AOF重写缓冲区,如果有的。,又可以通过AOF文件包含的AOF数据来。

2022-09-05 12:51:24 246

原创 MySQL表级锁、行级锁与多粒度锁(意向锁)

意向锁,包括意向共享锁(IS锁)与意向排它锁(IX锁)。意向锁用于标记整个表中行级锁的使用情况,可以快速判断当前表中是否有行级S锁和行级X锁。常见的锁为:S锁(共享锁Share)和X锁(排它锁Exclusive),可以理解为读锁和写锁。如果没有意向锁,则获取表级锁之前需要到表中遍历对应的行级锁是否存在,这样效率太低了。与其它存储引擎只支持表级锁不同,InnoDB存储引擎既支持表级锁,又支持行级锁。注:IS锁和IX锁是自兼容且互相兼容的,可以有多个线程给表加IS锁和IX锁。

2022-09-04 10:01:41 497

原创 Redis事务操作与原理剖析

Redis通过`MULTI、EXEC、DISCARD、WATCH`等命令来实现事务的功能。

2022-09-03 10:42:23 458

原创 C语言连接MySQL

其中用来获取一个MySQL实例,的参数介绍如下:mysql:mysql_init()函数的返回值host:主机IPuser:用户名passwd:密码db:要连接的数据库名port:mysql服务器端口unix_socket:一般设为空,表示不指定连接使用的套接字或管道;clientflag:一般设为0。RetVal:失败则返回NULL,成功则返回第一个参数。...

2022-09-02 08:30:00 454 1

原创 关于-static静态链接报出/usr/bin/ld: cannot find -lxxx的问题

解决静态库找不到的问题

2022-09-01 09:30:30 1791

原创 下一个排列问题next_permutation

一、问题引入 全排列问题很常见,比如一个序列:1 2 3,它的全排列有6种: 1 2 3 、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1 但是如何根据一个排列求下一个排列?所谓下一个排列

2022-09-01 08:10:48 133

原创 Redis三大缓存问题(穿透、击穿、雪崩)

常见的关系型数据库如MySQL对于大量并发请求的处理效率是很低的,因此可以使用Redis作为用户请求和数据库服务器之间的缓存。缓存雪崩:当Redis发生故障无法提供服务,或是大量数据在一个时间段同时过期,那么就会有大量请求涌入数据库服务器,致使其崩溃。缓存击穿:某一份热点数据过期,而此时又恰好有大量请求它,那么这些请求会直接击穿缓存到达数据库服务器,从而使其崩溃。注:布隆过滤器如果告知数据不存在,则数据一定不存在,但是告知存在的数据可能是不存在的。,而查询不到的数据不会被放入缓存。...

2022-08-31 09:35:29 202

原创 构建高可用的Redis服务(主从复制/哨兵/集群底层原理)

本文基于原理介绍高可用Redis服务的构建

2022-08-30 10:08:14 249

原创 单调队列与应用

窗口右移时,判断左边出去的元素是否是队头元素,如果是,则将队头pop,最后将右边新增的元素入队列即可。

2022-08-29 10:10:21 413

空空如也

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

TA关注的人

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