- 博客(57)
- 问答 (2)
- 收藏
- 关注
原创 装饰模式(decorator-pattern)
如何避免继承导致的类数量指数级增长?如何更加优雅地给现有的类动态增添新的功能?装饰模式或许称得上首选。
2023-01-19 18:53:24 1415 1
原创 C++关于初始化列表的细节(必须/不能使用初始化列表的情况、初始化列表的效率分析)
为什么有些变量必须在初始化列表中初始化,而有些变量写在初始化列表中会报错?为什么初始化列表有时候效率会更高呢?
2023-01-18 20:02:17 1289
原创 Git标签
标签用于标定某个提交版本,本质就是一个指向某个commit的指针,只是无法移动。如果通过commit索引操作版本,那么一个个十六进制的索引值会让人眼花缭乱!查看所有标签(字典序,而非按照时间排序)。将所有未推送的标签全部推送至远程仓库。将指定标签推送至远程仓库。标签的命名根据用户而定,标定指定索引的提交版本。删除本地仓库的标签。
2022-10-11 21:48:16 334
原创 使用Git管理远程仓库
远程仓库 一、远程仓库的意义 与集中式版本控制系统SVN相比,Git是分布式版本控制系统,即同一个Git仓库可以分布到不同的机器上,不同主机可以克隆该仓库,而这一切都需要远程仓库的参与。
2022-10-08 16:20:17 808
原创 Git并行开发「分支」
Git并行开发「分支」 一、分支的概念 git会在本地库创建之初默认生成一个master分支,即主分支,专用于保存项目已完成的功能代码。 但是,一个项目往往是由多个模块组成的,在工作中这些模块分别交由
2022-10-06 22:27:42 3180
原创 Git基本命令入门
Git基础 一、Git结构 git由三部分组成: 工作区:即普通文件,可以是代码类文本文件或是其它各种文件。 暂存区:临时存储待提交的代码,相当于一个缓冲区,方便之后一次性将它们提交至本地仓库。 本地
2022-10-03 19:51:55 596
原创 完美转发与底层原理剖析(引用折叠)
万能引用:即模板参数T&&,...它会开辟一块空间存放这个右值,对于自定义类型还会调用它的构造函数,因此可以说,。为了使一个函数既可以接受左值,又可以接受右值,C++11 之前的解决方案是将参数类型设为。但是。
2022-10-01 20:51:47 1010
原创 C++静态多态与动态多态的实现原理剖析
静态多态主要借助**模板和重载**。在编译期间,编译器通过类型来实例化模板或者选择合适的重载。因此,**静态多态在编译期间完成**。
2022-09-22 16:54:37 1417
原创 什么函数不能是虚函数?为什么析构必须是虚函数?
虚函数是为了依据不同的对象来产生不同的状态,但是前提是得有这个对象,而对象的产生必须依靠构造函数;static成员函数是类的所有对象共享的,而虚函数是针对不同对象构成多态,二者矛盾;其次,静态成员函数没有this指针,无法访问虚函数表。内联函数是在编译期间直接在调用位置展开代码,而虚函数是在运行时通过不同对象来判断函数的调用;如果基类的析构函数是用virtual修饰的虚函数,那么无论派生类的析构函数是否有virtual修饰,它都是虚函数。友元函数不属于类的成员函数,不能被继承,更不能声明为虚函数。
2022-09-17 23:03:46 540
原创 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 526
原创 STL六大组件与底层原理
STL,即标准模板库(Standard Template Library),是一些常用数据结构和算法模板的集合,主要由6大组成部分组成。
2022-09-13 20:54:08 1870
原创 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 1265 1
原创 水塘抽样算法与等概率证明
对于数据流中的数据,我们将其存储到容器中,并使用随机数取出[0, n)的任意一个元素,完成等概率抽样。该算法的时间与空间复杂度均为O(n)。水塘抽样算法用于:在数据流中以。对于数据流中的第i个数,它有。
2022-09-08 08:30:00 669
原创 redo日志、undo日志与事务隔离性
事务 一、事务及其特性 1、事务概念 在MySQL中,只有InnoDB和NDB两种存储引擎支持事务的功能。 2、事务的四大特性:ACID 原子性(Atomicity) 一件事情,要么没有做,要么做了且
2022-09-07 12:32:11 1292
原创 Redis持久化策略剖析
通过使用RDB-AOF混合持久化,用户可以同时获得RDB持久化和AOF持久化的优点,服务器既可以通过AOF文件包含的RDB数据来。在重写期间被修改,此时服务器就会将这个修改命令写入到重写缓冲区中,方便子进程实时修改重写的AOF文件。,生成对应的命令,后期恢复时可以通过该命令生成一个相同的键值对,达到恢复整个数据库的目的。Redis提供了RDB持久化、AOF持久化、RDB-AOF混合持久化三种持久化策略。在子进程重写AOF时,会创建一个AOF重写缓冲区,如果有的。,又可以通过AOF文件包含的AOF数据来。
2022-09-05 12:51:24 372
原创 MySQL表级锁、行级锁与多粒度锁(意向锁)
意向锁,包括意向共享锁(IS锁)与意向排它锁(IX锁)。意向锁用于标记整个表中行级锁的使用情况,可以快速判断当前表中是否有行级S锁和行级X锁。常见的锁为:S锁(共享锁Share)和X锁(排它锁Exclusive),可以理解为读锁和写锁。如果没有意向锁,则获取表级锁之前需要到表中遍历对应的行级锁是否存在,这样效率太低了。与其它存储引擎只支持表级锁不同,InnoDB存储引擎既支持表级锁,又支持行级锁。注:IS锁和IX锁是自兼容且互相兼容的,可以有多个线程给表加IS锁和IX锁。
2022-09-04 10:01:41 753
原创 C语言连接MySQL
其中用来获取一个MySQL实例,的参数介绍如下:mysql:mysql_init()函数的返回值host:主机IPuser:用户名passwd:密码db:要连接的数据库名port:mysql服务器端口unix_socket:一般设为空,表示不指定连接使用的套接字或管道;clientflag:一般设为0。RetVal:失败则返回NULL,成功则返回第一个参数。...
2022-09-02 08:30:00 711 1
原创 Redis三大缓存问题(穿透、击穿、雪崩)
常见的关系型数据库如MySQL对于大量并发请求的处理效率是很低的,因此可以使用Redis作为用户请求和数据库服务器之间的缓存。缓存雪崩:当Redis发生故障无法提供服务,或是大量数据在一个时间段同时过期,那么就会有大量请求涌入数据库服务器,致使其崩溃。缓存击穿:某一份热点数据过期,而此时又恰好有大量请求它,那么这些请求会直接击穿缓存到达数据库服务器,从而使其崩溃。注:布隆过滤器如果告知数据不存在,则数据一定不存在,但是告知存在的数据可能是不存在的。,而查询不到的数据不会被放入缓存。...
2022-08-31 09:35:29 232
原创 Redis发布订阅与原理
...,服务器到字典中找到频道的键并删除该客户端的信息。如果删除后链表为空,则将键一并删除。Redis服务器根据频道名到字典中查找对应的订阅客户端链表,然后将信息发送给所有的订阅者。......
2022-08-27 11:05:29 528
原创 五种系统IO模型以及select/poll/epoll原理与使用教程(附带Reactor介绍)
IO的本质就是等待数据+拷贝数据,而IO的高效体现在是等待的比重较小。网卡、键盘等硬件通过中断来通知CPU数据已到达。数据通过网线传输到网卡网卡将数据写入内存网卡通过中断信号告知CPU数据已到达。......
2022-08-26 09:00:00 979
原创 为什么emplace_back比push_back更快?快是有条件的
学习过C++STL的人都知道emplace比push更快,但是真的如此吗?什么条件下会更快呢?本文将带你深入探索!
2022-08-20 08:00:00 931
原创 详解MySQL索引与底层原理
从数据页到缓冲池再到索引的B+树,解析聚簇索引与非聚簇索引的优劣以及为什么不采取其它数据结构。最后,认识explain在分析索引有效性时的用处。
2022-08-19 08:00:00 3181
空空如也
缺省参数为什么必须从右往左连续定义
2021-07-28
有懂MFC的嘛 孩子实在不会了
2021-06-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人