自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

理解HWC与CHW的区别。

2023-06-17 19:02:59 2961

原创 装饰模式(decorator-pattern)

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

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

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

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

2023-01-18 20:02:17 1234

原创 策略模式(strategy-pattern)

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

2023-01-17 18:05:33 610

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

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

2023-01-16 14:30:48 839

原创 Git标签

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

2022-10-11 21:48:16 315

原创 使用Git管理远程仓库

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

2022-10-08 16:20:17 625

原创 Git并行开发「分支」

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

2022-10-06 22:27:42 2673

原创 使用Git进行版本控制

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

2022-10-04 15:03:00 1178

原创 Git基本命令入门

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

2022-10-03 19:51:55 452

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

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

2022-10-01 20:51:47 896

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

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

2022-09-22 16:54:37 1271

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

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

2022-09-17 23:03:46 382

原创 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 456

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

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

2022-09-13 20:54:08 1433

原创 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 1010 1

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

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

2022-09-09 15:23:36 516

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

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

2022-09-08 08:30:00 373

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

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

2022-09-07 12:32:11 786

原创 Redis持久化策略剖析

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

2022-09-05 12:51:24 268

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

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

2022-09-04 10:01:41 535

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

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

2022-09-03 10:42:23 470

原创 C语言连接MySQL

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

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

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

解决静态库找不到的问题

2022-09-01 09:30:30 1944

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

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

2022-08-31 09:35:29 215

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

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

2022-08-30 10:08:14 259

原创 Redis发布订阅与原理

...,服务器到字典中找到频道的键并删除该客户端的信息。如果删除后链表为空,则将键一并删除。Redis服务器根据频道名到字典中查找对应的订阅客户端链表,然后将信息发送给所有的订阅者。......

2022-08-27 11:05:29 501

原创 五种系统IO模型以及select/poll/epoll原理与使用教程(附带Reactor介绍)

IO的本质就是等待数据+拷贝数据,而IO的高效体现在是等待的比重较小。网卡、键盘等硬件通过中断来通知CPU数据已到达。数据通过网线传输到网卡网卡将数据写入内存网卡通过中断信号告知CPU数据已到达。......

2022-08-26 09:00:00 532

原创 什么是多线程“伪唤醒“以及为什么要用while循环进行wait判断

或许这篇文章真的把伪唤醒给说清楚了呢?

2022-08-25 10:00:00 587

原创 数据链路与MAC帧

认识MAC帧与局域网通信原理!进一步认识什么是MTU。

2022-08-23 08:00:00 2886

原创 IP协议与NAT/NAPT技术

不要囿于应用,程序员应该了解的网络层原理。

2022-08-22 09:16:24 1779

原创 HTTP与HTTPS

深入了解HTTP与HTTPS的概念与关联

2022-08-21 08:00:00 1220

原创 为什么emplace_back比push_back更快?快是有条件的

学习过C++STL的人都知道emplace比push更快,但是真的如此吗?什么条件下会更快呢?本文将带你深入探索!

2022-08-20 08:00:00 848

原创 详解MySQL索引与底层原理

从数据页到缓冲池再到索引的B+树,解析聚簇索引与非聚簇索引的优劣以及为什么不采取其它数据结构。最后,认识explain在分析索引有效性时的用处。

2022-08-19 08:00:00 2308

原创 Hiredis快速入门

快速学会使用Hiredis连接Redis数据库的基本方法

2022-08-18 09:00:00 459

原创 多线程并发编程

多线程互斥与同步的使用与案例讲解、搭配线程池与生产着消费者模型、分析死锁与一些特殊的锁结构。

2022-08-16 13:11:49 1508

原创 线程的概念与使用

初识线程,了解Linux下线程的相关概念以及线程的创建、终止与等待,理解什么情况下才应该使用多线程

2022-08-14 09:57:24 599

原创 系统I/O与底层

从I/O底层理解Linux下一切皆文件的原则、剖析用户缓冲区与内核缓冲区的意义、理解重定向的实现原理。

2022-08-13 10:22:14 445

原创 传输层协议之UDP

什么是UDP协议?协议格式?UDP缓冲区?

2022-08-12 11:14:03 727

原创 传输层协议之TCP

万字长文讲述TCP协议:三次握手、四次挥手?TCP的八大特性?重新理解网络编程的backlog?

2022-08-11 06:00:00 1293

空空如也

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

TA关注的人

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