Loading

摘要: title: C++20中的字符串格式化方式format tags: - C/C++ categories: - [日积跬步] abbrlink: 3588259472 date: 2024-03-18 21:56:42 使用format格式化字符串 在初学C时大多数人写下的第一行代码应该都是hel 阅读全文
posted @ 2025-02-16 22:30 cwtxx 阅读(592) 评论(0) 推荐(0)
摘要: title: clang-format代码格式化 tags: - clang-format categories: - - 日积跬步 - [wtlog日志库开发笔记] abbrlink: 3480185746 date: 2024-12-18 20:39:59 # https://clang.llv 阅读全文
posted @ 2025-02-16 22:29 cwtxx 阅读(300) 评论(0) 推荐(0)
摘要: 注释 单行注释使用#,多行注释使用[=[开始,使用]=]结束,其中等号可以是任意数量的,但是开始和结束的等号数量必须一致。 指令 执行指令是CMake列表文件的基本功能,提供它的名称,后面跟着小括号,在小括号中可以包含一个以空格为分隔的参数列表,例如message("hello" world)。 指 阅读全文
posted @ 2025-02-16 22:29 cwtxx 阅读(223) 评论(0) 推荐(0)
摘要: 测试 CMake在命令行中使用ctest [<opetions>]命令执行测试,需要在构建完CMake项目后,在构建树中执行CTest。不过这种方式需要执行很多命令在多个工作目录间进行切换,为了简化流程,可以通过添加选项在构建时直接执行测试。 ctest --build-and-test <path 阅读全文
posted @ 2025-02-16 22:28 cwtxx 阅读(120) 评论(0) 推荐(0)
摘要: 构建项目时难免需要一些跟平台或环境相关的依赖文件或代码,这时候就需要在构建项目时能够识别出不同的环境。 检查操作系统 cmake_minimum_required(VERSION 3.20) project(cmake2 LANGUAGES CXX) if(CMAKE_SYSTEM_NAME STR 阅读全文
posted @ 2025-02-16 22:28 cwtxx 阅读(112) 评论(0) 推荐(0)
摘要: 单例类的定义和使用 class Singleton { public: static shared_ptr<Singleton>& instancePtr() { static std::shared_ptr<Singleton> instance(new Singleton); return in 阅读全文
posted @ 2025-02-16 22:27 cwtxx 阅读(21) 评论(0) 推荐(0)
摘要: ps: 书中一些条款已经不太适用于现代C++了,需要参考着看。 C++是一个语言联邦 C++是个多重范型编程语言,同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言。所以最好将C++视为一个由相关语言组成的联邦而不是单一语言。 次语言主要有四个: C风格:区块、语句、预处理、内置数 阅读全文
posted @ 2025-02-16 22:26 cwtxx 阅读(199) 评论(0) 推荐(0)
摘要: future 标准库中提供的future用于接收一个异步执行结果,常和async配合使用,async执行一个异步操作,并将结果封装成一个future对象,外部通过future提供的get方法来获取异步执行的结果。 int main() { cout << "call async\n"; auto s 阅读全文
posted @ 2025-02-16 22:26 cwtxx 阅读(36) 评论(0) 推荐(0)
摘要: Hello, CMake CMake是一个用于构建C++项目的编译链工具。通过编写CMakeLists.txt文件,完成项目的构建。 一个基本的CMakeLists.txt需要有版本要求,项目名称,和项目目标(可执行文件或库文件)组成。 cmake_minimum_required(VERSION 阅读全文
posted @ 2025-02-16 22:25 cwtxx 阅读(62) 评论(0) 推荐(0)
摘要: KMP 算法 KMP算法是一种用于快速找出匹配的子字符串位置的算法。通过记录要匹配的字符串各位置前面子字符串最长相同前后缀的信息,达到加速匹配过程的效果。 前缀字符串是指从前向当前字符串位置数的字符串;后缀字符串是指从后向当前字符串数的字符串。这里是不包含自身位置的。例如字符串"aaabaa",其相 阅读全文
posted @ 2025-02-16 22:25 cwtxx 阅读(19) 评论(0) 推荐(0)
摘要: PostgreSQL表中的系统字段 pgsql在创建表时,除了用户定义的字段外,还会有一些由系统自动创建的隐藏字段,这些隐藏字段无法通过“\d”命令展示出来。 因为表中已经有了这些隐含的字段,用户在创建表时,必须避免自定义的字段名称和这些隐含字段重复,这与字段名是否是关键字没有关系,即便使用双引号括 阅读全文
posted @ 2025-02-16 22:24 cwtxx 阅读(118) 评论(0) 推荐(0)
摘要: pg_stat_activity pg_stat_activity系统表记录了当前数据库活跃的连接信息,可以使用户清楚当前数据库系统正在做什么,包括使用的数据库和当前哪些用户是在连接和使用中。 例如通过查看pid,query_start,state_change,state,query几列,可以获取 阅读全文
posted @ 2025-02-16 22:23 cwtxx 阅读(137) 评论(0) 推荐(0)
摘要: postgresql安装 包管理器安装 如果使用官方的包管理器安装,默认情况下pgsql会被按照到/usr/local下,其配置文件可以在/etc下对应的文件夹中找到,其他文件一般可以在/var下的对应位置找到。 并且会创建一个名为postgres的数据库超级用户用于管理数据库,和一个同名的仓库。登 阅读全文
posted @ 2025-02-16 22:23 cwtxx 阅读(199) 评论(0) 推荐(0)
摘要: explain命令 在sql语句前加上explain关键字来显式SQL命令的执行计划。 pgsql中的explain语法格式如下: EXPLAIN [(option[, ...])] statement; 其中option有以下几个可选项: ANALYZE [boolean] VERBOSE [bo 阅读全文
posted @ 2025-02-16 22:21 cwtxx 阅读(240) 评论(0) 推荐(0)
摘要: 优化器行为 通过一个例子展示优化器是如何工作的。现在有三张表: CREATE TABLE t1(aid int, ...); --1亿行 CREATE TABLE t2(bid int, ...); --2亿行 CREATE TABLE t3(cid int, ...); --3亿行 每张表对id字 阅读全文
posted @ 2025-02-16 22:21 cwtxx 阅读(89) 评论(0) 推荐(0)
摘要: raft 算法 raft是一种分布式一致性算法,公司项目中使用到了,个人不是很了解,记录一下学习到的相关知识。 分布式一致性算法要解决的问题 多台服务器组成的一个集群,统一对外部提供服务,由于是多个服务器,那么服务器之间肯定要保证提供出去的数据都是一致的,不能从A服务器读出来的数据是一种,从B服务器 阅读全文
posted @ 2025-02-16 22:20 cwtxx 阅读(69) 评论(0) 推荐(0)
摘要: 数据库操作 redis默认有16个数据库,编号0~15,默认访问0号数据库。 操作 说明 select 数据库编号 选择指定数据库 dbsize 获取当前数据库键值对数量 flushdb 清空当前数据库 flushall 清空所有数据库 save 将数据保存到磁盘 bgsave 将数据异步保存至磁盘 阅读全文
posted @ 2025-02-16 22:17 cwtxx 阅读(19) 评论(0) 推荐(0)
摘要: RPC 远程过程调用 RPC(Remote Process Call),远程过程调用,常用作服务内部的通讯,让构建分布式计算更容易,在提供强大的远程调用能力时又不失本地调用的语义简洁性。为此,RPC框架需要提供一种透明调用机制,让使用者不必显式地区分本地调用和远程调用。 RPC初步 RPC是在上世纪 阅读全文
posted @ 2025-02-16 22:16 cwtxx 阅读(248) 评论(0) 推荐(0)
摘要: 什么是shared_from_this ? 从msvc上摘下来的memory中关于shared_from_this类的实现。还是比较好理解这个类在做什么的,内部有一个智能指针私有成员,不过是weak_ptr类型的,公有方法中提供了shared_from_this函数,如果调用这个函数,就会将weak 阅读全文
posted @ 2025-02-16 22:14 cwtxx 阅读(70) 评论(0) 推荐(0)
摘要: sql查询语句中主要包括select、where、order by、join、union、group by、having、limit等关键词。 语法顺序 sql查询书写顺序如下所示: select <字段名> from <表名> join <表名> on <连接条件> where <筛选条件> gr 阅读全文
posted @ 2025-02-16 22:14 cwtxx 阅读(128) 评论(0) 推荐(0)
摘要: 什么是事务 在数据库中,我们将一条SQL语句称为一次基本的操作。将若干条SQL语句“打包”在一起,共同执行一个完整的任务,这就是事务。 事务(Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成。 reference: https://zhuanlan.z 阅读全文
posted @ 2025-02-16 22:14 cwtxx 阅读(100) 评论(0) 推荐(0)
摘要: static和extern是C和C++中的两个关键字,常常会被用到,又容易在不经意间用错,总结一下使用方法和注意事项。 声明和定义 要想搞清楚这两个关键字,需要先搞懂声明和定义(或者说是实现)两个概念。 例如: void foo(); // 声明 void foo() { // 定义 std::co 阅读全文
posted @ 2025-02-16 22:13 cwtxx 阅读(110) 评论(0) 推荐(0)
摘要: UML类图 车是个抽象类; 小轿车和自行车派生自车这个抽象类,它们和车之间是实现关系,使用虚线和空心三角箭头表示; SUV派生自小轿车类,它和小轿车间的关系是泛化关系,使用实线和空心三角箭头表示; 小轿车由轮胎和发动机等组成,而轮胎和发动机不会脱离轿车存在,所以是组合关系,使用实线和实心菱形表示; 阅读全文
posted @ 2025-02-16 22:13 cwtxx 阅读(33) 评论(0) 推荐(0)
摘要: 基本命令 命令 说明 ls 列出目录中的文件和子目录。 cd 切换当前工作目录。 pwd 显示当前工作目录的路径。 mkdir 创建新目录。 rm 删除文件或目录。 cp 复制文件或目录。 mv 移动文件或目录。 touch 创建空文件或更新文件的时间戳。 cat 连接文件并打印到标准输出。 gre 阅读全文
posted @ 2025-02-16 22:11 cwtxx 阅读(46) 评论(0) 推荐(0)
摘要: 并查集 等价关系是满足下列3个性质的关系R: 自反性,对于所有的a∈S,有aRa。 对称性,aRb当且仅当bRa。 传递性,若aRb且bRc,则aRc。 如何判断a和b是否是等价的的呢?或者说如何将两个有等价关系的元素划入一个集合中? 一个满足a∈S的元素a,其等价类是S的这样一个子集:它包含了所有 阅读全文
posted @ 2025-02-16 22:10 cwtxx 阅读(13) 评论(0) 推荐(0)
摘要: I/O设备 系统架构 基本上可以分为三层,从上到下的速度依次变慢,最上层的内存总线是不对外暴露的,只用于内存和CPU间的传输,其速度也是最快的,其次是PCI类似的通用I/O总线,所有的外围设备都会通过这条总线与CPU进行信息传输,其中显卡直连在这条线路上,而其他设备还需要一条最慢的外设总线来作为中转 阅读全文
posted @ 2025-02-16 22:09 cwtxx 阅读(20) 评论(0) 推荐(0)
摘要: 创建文件夹和文件 std::filesystem::path path("directory"); if(!std::filesystem::exists(path)) { std::filesystem::create_directory(path); } std::filesystem::pat 阅读全文
posted @ 2025-02-16 22:08 cwtxx 阅读(52) 评论(0) 推荐(0)
摘要: 完美转发 我们知道,对于对象的传递可以是普通的引用X&,常量引用const X&,或者是右值引用X&&。 如果不使用模板编程想要将参数转发给其他函数,并区分这三者,就需要重载三个函数来实现。 void g(X&) { cout << "variable reference\n"; } void g( 阅读全文
posted @ 2025-02-16 22:07 cwtxx 阅读(19) 评论(0) 推荐(0)
摘要: 多态字面理解就是有多种形式和形态,编程中专门指一种可以将不同的行为关联到一个泛型符号的能力。 多态是面向对象编程的基石之一,C++主要通过类的继承和虚函数来实现多态。 多态又可以分为动多态和静多态,主要的区别是多态的表现形式是在运行期处理,还是在编译期处理。 动多态 动多态是在运行期处理多态行为,常 阅读全文
posted @ 2025-02-16 22:07 cwtxx 阅读(40) 评论(0) 推荐(0)
摘要: 二分法体现了一种“分治”的思想。 二分查找 当需要在一个数组中查找某个元素的时候,我们自然而然地想到遍历整个数组,找到想要的元素就停止查找。这种方法的时间复杂度是O(n),那么有没有一种更高效一点的方法呢?这时候就轮到二分查找登场了,二分查找的时间复杂度是O(logn),显然是更高效的做法。不过使用 阅读全文
posted @ 2025-02-16 22:05 cwtxx 阅读(22) 评论(0) 推荐(0)
摘要: 浮点数的表示方法 浮点数常采用符号+阶码+尾码的表示方法,单精度浮点数由1位符号位,8位阶码和23位尾码表示;双精度浮点数由1位符号位,11位阶码和52位尾码表示。 float f = 3.14; cout << bitset<32>(*reinterpret_cast<int*>(&f)) << 阅读全文
posted @ 2025-02-16 22:05 cwtxx 阅读(23) 评论(0) 推荐(0)
摘要: C++提供了std::thread对线程进行管理,但面对复杂的任务情况,往往有些捉襟见肘,我们希望可以对线程的整个生命周期进行管理,而不是放任其直到执行完成,理想情况下,能够将代码划分为更小的块,再通过并发执行。 另外,有时候我们还希望在线程启动后可以有方法“干预”其执行,比如某些情况下让其停止或者 阅读全文
posted @ 2025-02-16 22:05 cwtxx 阅读(53) 评论(0) 推荐(0)
摘要: 共享数据 避免恶性条件竞争 最简单的方式是对数据结构采取某种保护机制,比如上锁。 另一种方式是修改数据结构,保证修改后的数据结构能够完成一系列的不可分割的变化,从而保证了不变量的状态,也就是所谓的无锁编程。 互斥量 c++标准库提供了std::mutex,可以很方便的进行上锁操作。大部分情况下只需要 阅读全文
posted @ 2025-02-16 22:04 cwtxx 阅读(16) 评论(0) 推荐(0)
摘要: 初始化 git init: 初始化当前文件夹,会将当前文件夹初始化为一个空的git仓库。 git init不会清空当前的文件夹,只会在当前目录下创建一个空的.git文件夹,用于记录和管理当前仓库。 git config --global user.name "name"、 git config -- 阅读全文
posted @ 2025-02-16 22:03 cwtxx 阅读(28) 评论(0) 推荐(0)
摘要: gRPC是google开发的一个远程过程调用框架,搭配protobuf使用来实现从客户端调用服务器端对应程序的方法。 protobuf protobuf可以理解为一种传输协议或者传输格式,相比json等网络传输形式,具有更好的效率。gRPC使用这种协议来实现高效的网络传输。 proto 只需要编写p 阅读全文
posted @ 2025-02-16 22:03 cwtxx 阅读(33) 评论(0) 推荐(0)
摘要: 函数模板 写一个最简单的模板函数: template<typename T1, typename T2> T1 max(T1 a, T2 b) { return a < b ? b : a; } 比较两个数的大小,然后返回最大值。存在一个问题,返回的类型将会和第一个入参的类型一致。 cout << 阅读全文
posted @ 2025-02-16 22:01 cwtxx 阅读(25) 评论(0) 推荐(0)
摘要: 名称的分类 分类 说明 标识符(identifier) 由字母、数字和下划线组成,不能以数字开头 运算符函数id 关键字operator后跟运算符的符号,比如operator new和operator[] 转换函数id 表示用户定义的隐式转换运算符,比如operator int& 字面量运算符id 阅读全文
posted @ 2025-02-16 22:00 cwtxx 阅读(45) 评论(0) 推荐(0)
摘要: 对象和内存位置 C++中,对象仅是对数据块的声明,C++标准定义类对象是“存储区域”,但对象可以将自己的特性赋予其他对象。 位域 C/C++中可以指定数据在内存中的存储大小(如果有必要的话),最常见的是为了压缩数据的大小。使用位域需要遵循以下的规则: 显式指定了位域大小的变量,如果总的位域之和不超过 阅读全文
posted @ 2025-02-16 21:59 cwtxx 阅读(63) 评论(0) 推荐(0)
摘要: 冒泡排序 void bubble_sort(int arr[], int length) { for(int i = 0; i < length; ++i) //遍历数组,每次结束将最大元素依次放到最后 { for(int j = 0; j < length - i - 1; ++j) //开始冒泡 阅读全文
posted @ 2025-02-16 21:58 cwtxx 阅读(12) 评论(0) 推荐(0)
摘要: 奇妙递归模板模式 奇妙递归模板模式(curiously recurring template pattern)指的是将派生类作为模板实参传递给自己的某个基类。 template<typename Derived> class CuriousBase { }; class Curious : publ 阅读全文
posted @ 2025-02-16 21:57 cwtxx 阅读(66) 评论(0) 推荐(0)
摘要: std::allocator std::allocator是标准库提供的默认分配器模板,如果容器中没有显式指明分配器的话,就会使用这个分配器模板的实例为容器申请和释放内存。 std::allocator的使用方式也很简单: allocator<int> alloc; int *numptr = al 阅读全文
posted @ 2025-02-16 21:57 cwtxx 阅读(124) 评论(0) 推荐(0)
摘要: 散列(hash)是一种能够以常数平均时间执行插入、删除和查找的技术。但是散列无法做到元素间的有序。 基本想法 散列的基本想法就是将元素按照一定的规则处理后,映射到散列表中的某个位置,比如是0到tablesize - 1的某个数,这样就可以保证能够快速的找到元素位置。这种映射就叫做散列函数(哈希函数) 阅读全文
posted @ 2025-02-16 21:53 cwtxx 阅读(110) 评论(0) 推荐(0)
摘要: 总览 设计模式原则: 开闭原则 对扩展开放,对修改关闭。 单一职责原则 一个类只负责一个功能领域中的相应职责。 里氏替换原则 所有使用基类的地方必须能透明地使用其子类对象。 依赖倒置原则 面向抽象编程,而不要面向具体对象编程。 接口隔离原则 类之间的依赖关系应该建立在最小的接口上。 迪米特法则 一个 阅读全文
posted @ 2025-02-16 21:52 cwtxx 阅读(23) 评论(0) 推荐(0)
摘要: 参数化的声明 C++支持四种基本模板:类模板、函数模板、变量模板和别名模板,每一种都可以出现在命名空间的作用域中和类作用域中。 template<typename T> // 类模板的命名空间 class Data { public: static constexpr bool copyable = 阅读全文
posted @ 2025-02-16 21:50 cwtxx 阅读(29) 评论(0) 推荐(0)
摘要: 什么是MVCC? MVCC,全称为Multi-Version Concurrency Control,即多版本并发控制。主要的目的是为了提高数据库的性能,更好地处理读写冲突,即使出现了读写冲突也可以通过不加锁的方式来解决。 多版本是指数据库中的数据存在多个版本, 当前读和快照读 在介绍MVCC前,需 阅读全文
posted @ 2025-02-16 21:49 cwtxx 阅读(319) 评论(0) 推荐(0)
摘要: 使用chrono获取时间 chrono自C++11以后加入了标准库,提供了精度和时间计算的接口。其中包含三种时钟system_clock、steady_clock和high_resolution_clock,顾名思义,system_clock是系统时钟,始终和系统的时间保持一致,因此在使用的过程中如 阅读全文
posted @ 2025-02-16 21:47 cwtxx 阅读(115) 评论(0) 推荐(0)
摘要: 使用目标 最简单的CMake的项目是创建单个的二进制可执行文件,例如一个"hello_world.cpp",而随着项目逐渐复杂,可能会有成百上千的文件被加入其中。这时就需要有某种方式可以对文件进行划分,将其按照功能分成不同的单元,其中一个单元可能会依赖其他的单元,这样的单元就是目标。 概念 目标是个 阅读全文
posted @ 2025-02-16 21:46 cwtxx 阅读(244) 评论(0) 推荐(0)
摘要: 流程 使用git进行多人协同开发,依赖于git的创建分支功能,比如一个仓库下,main分支是主分支,然后需要在此基础上开发新的功能,就从main切出去一个新额分支,开发完成后,再rebase或merge回main分支。 每个开发者只需要关心以下几步: git pull拉取仓库; git checko 阅读全文
posted @ 2025-02-16 21:44 cwtxx 阅读(90) 评论(0) 推荐(0)
摘要: 加法 在二进制下,有异或操作、与操作、进位操作。异或操作是指两个数对应位置相同取0,不同取1;与操作是同为1取1,否则取0;进位就是各位置上的1或0左移若干位。 根据这些操作特性,加法可以分解成这样的过程,先是两个数异或,相当于得到了两个数没有进位的相加结果,然后两个数相与,相当于只有两个位置都是1 阅读全文
posted @ 2025-02-16 21:43 cwtxx 阅读(39) 评论(0) 推荐(0)
摘要: 定义 一张图G是由顶点的集合V和边的集合E组成的。每条边连接了两个顶点v和w,其中v,w∈V。图分为有向图和无向图,无向图也可以理解成双向图,就是通过一条边连接的两点都可以到达对方,而有向图的话就规定了只能从一个顶点到达另一个顶点。另外,每条边还可以拥有自己的属性,称为权。 图中的一条路径就是从一个 阅读全文
posted @ 2025-02-16 21:35 cwtxx 阅读(65) 评论(0) 推荐(0)
摘要: 前置知识 树是计算机中的一个抽象概念,形式上是递归的N个节点和N-1条边的集合,且每一条边都连接着一个相同的节点。这个特殊节点称为其他相连节点的父,其他相连节点是这个节点的子。特殊地,最开始的节点称为当前树的根节点,最终的没有子的节点称为叶。 从一个节点n1到另一个节点nk的路径定义为节点n1,n2 阅读全文
posted @ 2025-02-16 21:34 cwtxx 阅读(22) 评论(0) 推荐(0)
摘要: 使用特征 特征是一种机制,用于提供模板所需的必要信息,比如模板中变量的类型,初始值等等。简单的理解,特征是有关模板参数的额外属性,具体指的可以是与该模板相关的其他模板类中的字段或是常量等。在编译阶段就可以从这个额外属性中获取到一些模板实例中会用到的信息。 template<typename T> s 阅读全文
posted @ 2025-02-16 21:29 cwtxx 阅读(29) 评论(0) 推荐(0)
摘要: C++标准库为线程间同步提供了条件变量(condition variables)和future。并发规范中,为future添加了非常多的操作,并可与新工具锁存器(latches)和栅栏(barries)一起使用。 等待事件或条件 这节开篇的这个例子我觉得非常好,摘抄如下: 假设你正在一辆在夜间运行的 阅读全文
posted @ 2025-02-16 21:28 cwtxx 阅读(38) 评论(0) 推荐(0)
摘要: 大小端转换 #include <netinet/in.h> unsigned long int htonl(unsigned long int host); // 本地转网络字节序 32bit unsigned long int ntohl(unsigned long int net); // 网络 阅读全文
posted @ 2025-02-16 16:20 cwtxx 阅读(32) 评论(0) 推荐(0)
摘要: 申请了一个免费的ssl证书,现在可以通过https来安全访问自己的小网站啦。高兴之余,我忽然好奇为什么有了ssl证书就能保证网络访问是安全的了呢?以前只知道网页都是通过http协议来传输的,且http协议是明文传输,所以很容易被其他人截获和破解,所以浏览器直接访问http时,往往会报危险警告,如果有 阅读全文
posted @ 2025-02-16 16:17 cwtxx 阅读(46) 评论(0) 推荐(0)
摘要: 互斥量是一个强大的工具,可以在并发情况下保护数据,防止数据竞争的发生,但同时,使用互斥量难免会影响并发的性能。如果能写一个无锁安全的并发数据结构,就能更好地发挥并发。 原子量实现的简单自旋锁 class SpinLock { public: SpinLock() : m_flag(ATOMIC_FL 阅读全文
posted @ 2025-02-16 16:16 cwtxx 阅读(65) 评论(0) 推荐(0)
摘要: 线程管理 std::thread可以通过有函数操作符类型的实例进行构造。 #include <thread> class Task { public: void operator()() const { dosomething(); } }; Task task; std::thread mythr 阅读全文
posted @ 2025-02-16 16:14 cwtxx 阅读(19) 评论(0) 推荐(0)
摘要: 协程 协程 协程是能暂停执行以在之后恢复的函数。协程是无栈的:它们通过返回到调用方暂停执行,并且恢复执行所需的数据与栈分离存储。 C++20以后,可以通过co_await或co_yield去挂起一个协程,通过co_return真正结束一个协程。 co_await用于暂停执行,直到恢复; co_yield用 阅读全文
posted @ 2025-02-16 16:13 cwtxx 阅读(57) 评论(0) 推荐(0)
摘要: 在我们日常使用电脑的过程中,肯定不是只有一个程序在运行,比如一边打游戏,还可以一边听歌,然后再挂着一个浏览器、qq、微信等等,看起来它们都是同时在运行的一样。这每一个在操作系统中运行着的程序都可以理解成一个进程,然后通过分时共享CPU技术,让每个进程都只运行一个时间片,然后再切换到别的进程再运行一会 阅读全文
posted @ 2025-02-16 15:59 cwtxx 阅读(49) 评论(0) 推荐(0)
摘要: 早期的操作系统实际上就是一个库,存放在物理内存的0KB到64KB的位置,然后其他的进程将使用剩下的内存,这时的内存对应的就是物理内存上的地址,完全没有抽象的概念。后来随着程序越来越多,人们开始共享机器,并且程序间不应该存在影响,安全显得越发重要。这时候人们就开始考虑程序不应该直接获取物理内存上的位置 阅读全文
posted @ 2025-02-16 15:56 cwtxx 阅读(39) 评论(0) 推荐(0)
摘要: C++运算符优先级 有时在写判断条件时会忘记运算符的优先级,每次查完就忘了,索性在这里摘抄一下。 运算符说明 运算符 第1组优先级,无关联 范围解析 :: 第2组优先级,从左往右关联 成员选择(对象或指针) .或-> 数组下标 [] 函数调用 () 后缀递增 ++ 后缀递减 -- 类型名称 type 阅读全文
posted @ 2025-02-16 15:54 cwtxx 阅读(85) 评论(0) 推荐(0)
摘要: 抽象工厂 使用接口的多态特性来创建一系列的对象,而不是指定具体的类。 class AbstractProductA { public: virtual ~AbstractProductA() = default; virtual void eat() = 0; }; class AbstractPr 阅读全文
posted @ 2025-02-16 15:54 cwtxx 阅读(21) 评论(0) 推荐(0)
摘要: 意图 定义一系列的算法,把它们一个个地封装起来,并让它们可以互相替换。这样使得算法可以随时替换和变更,典型的比如超市的降价策略,同样的商品可能每天有不同的折扣。 示例 class DiscountStrategy { public: virtual void discount() = 0; }; c 阅读全文
posted @ 2025-02-16 15:54 cwtxx 阅读(10) 评论(0) 推荐(0)
摘要: 动机 观察者模式意图建立一种对象间一对多的关系,当一个对象中的状态发生改变时,所有依赖它的对象都会收到通知并自动同步更新。 示例 试想这样一种场景,有一组数据,可以通过不同的图表的方式被展示,比如柱状图、折线图、饼状图等等。虽然展示的方式不同,但数据应该是同样的一组,假设这组数据有一个数据对象关系, 阅读全文
posted @ 2025-02-16 15:46 cwtxx 阅读(20) 评论(0) 推荐(0)
摘要: 动机 在面向对象的设计中,鼓励将行为封装到各自的对象中,这就会导致如果一个动作涉及多个类对象之间的互动时,往往导致类与类之间的关系错综复杂。显然,这不利于后续的维护和扩展。 中介者类似于“加一层”的思想,将涉及多个类对象之间的动作封装到中介者类中,由中介者进行协调控制,而其他的类对象只需要知道中介者 阅读全文
posted @ 2025-02-16 15:42 cwtxx 阅读(12) 评论(0) 推荐(0)
摘要: 设计 职责链是行为型设计模式中的一种,关注的是请求发送对象和请求接收对象间的关系,目的是使一个请求被发出后,多个有关联的对象都可能有机会处理这个请求,避免了请求发送者和接收者间的耦合关系。让所有接收者连成一条链,然后请求在这条链上进行传播,直至有对象处理为止,而这些对象可以被动态地绑定。 示例代码 阅读全文
posted @ 2025-02-16 15:42 cwtxx 阅读(13) 评论(0) 推荐(0)
摘要: 意图 当一个对象的内部状态改变时,改变其行为。 适用于对象的行为由它的状态决定时,或是一个方法中有多个分支,这些分支都依赖于对象的状态。 示例 class ServerState { public: virtual void connect() = 0; }; class Established : 阅读全文
posted @ 2025-02-16 15:40 cwtxx 阅读(13) 评论(0) 推荐(0)