自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (2)
  • 收藏
  • 关注

原创 现代C++ 实现单例模式

用DCLP实现的单例模式,单例对象的初始化顺序不确定。这种情况可能导致在一个线程中访问尚未初始化的单例对象,从而引发错误。 并不是线程安全,因为包含未定义行为。

2023-12-12 14:56:50 1046

原创 Linux下一切皆文件? -- 理解文件标识符fd

什么是文件标识符?最浅来看 文件标识符就是我们调用系统接口 open 打开文件时,open函数的返回值。但要深入理解它,我们得知道:1.文件打开的本质什么,操作系统如何管理被打开的文件?2.打开的文件与打开它的进程如何建立联系,也就是进程如何找到要操作的文件的?为什么它是访问文件的唯一凭证?

2022-10-25 18:22:15 1859 3

原创 彻底弄懂C++虚拟继承

为了解决普通继承的“数据冗余”和“二义性”的问题,C++引入了虚拟继承使得在多重继承下,基类成员只继承一份。这篇博客主要解析1.虚拟继承机制,如何做到的? 2.它和普通继承有什么区别?3.虚拟继承同时满足多态会怎样? .........

2022-07-27 11:41:41 10389 2

原创 C++ 类的大小 原理+详细计算示例

类的大小由:基类大小+成员+虚基表指针+虚函数表指针 组成。

2024-03-03 17:16:46 816

原创 Recv设置MSG_DONTWAIT依然阻塞

记录了服务器DEBUG,设置MSG_DONTWAIT依然阻塞的问题。使用gdb启动发现底层运行reactorIO模型的线程阻塞在了recv()上。ps aux |grep 发现进程还在,top 查一下发现cpu占用100%。还在调用recv时设置了MSG_DONTWAIT,用man手册说明查看,应该设置了便不会阻塞。当对端突然关闭连接,不会返回-1并且设置错误码。后来我只能耐心的把recv的说明仔细地看了一遍,终于发现了问题。每次遇到用户疯狂刷新,服务器就会瘫痪。

2024-01-17 22:20:04 866

原创 C++11 constexpr 常量表达式

本文讲解了C++11中引入的constexpr。讲解了它是什么,引入的原因以及使用的方法。更多的还需要在实际编程自己中体会。欢迎各位留言交流!

2023-12-11 17:35:13 407

原创 Linux man手册查找不到 常见问题总结

更新后man手册的pages路径变为 /opt/rh/devtoolset-XX(XX版本)/root/usr/share/man。1. cd /opt/rh/devtoolset-XX(XX版本)/root/usr/share。man手册的所有pages保存在 /usr/share/man。解决方案: 建立软连接即可重命名文件夹备份后建立软连接即可。

2023-05-17 11:55:42 997

原创 KMP算法 看这一篇就够了 图解刨析+代码

某一个位置出现匹配失败的时候,我们能否利用已知信息来免去不必要的比对?如图当指针分别指向 i,j处时,j之前的部分是完全一致的,能否挖掘这条信息的价值来提高效率?KMP算法的核心就是利用已知的信息来提高效率。

2023-01-14 18:07:14 1076

原创 Linux | 线程概念以及创建与等待

Linux操作系统并不是真线程操作系统,意味着没有专门描述组织线程的内核数据结构,所有线程都是通过进程PCB模拟的.进程是系统分配程序资源的基本单位,如虚拟内存,页表,文件描述符表,信号集...这些资源都是按照进程为单位来分配的!

2022-11-20 10:41:55 542 2

原创 什么是临界区 临界资源 原子性?

临界资源(Critical Resource): 一次只允许一个执行流访问的公共资源称为临界资源.比如在生活中,一个厕所隔间或者公交座位就是临界资源(常规情况下).临界区(Critical Section): 对公共资源进行访问的程序片段,也就是不加访问控制,会有安全问题的代码段.但在多线程的场景下,可能会出现多个执行流并发访问同一个公共资源的情况,这时候,我们就要通过各种方式,保证他是临界资源.如下这段代码下,全局变量ticket 被多线程共享,此时它时公共资源,但各线程并发对它读写,他就不是临界资源.

2022-11-18 17:31:10 434

原创 Linux | 进程信号 产生未决到递达

每个进程的PCB内都能找到3张表 block pending hander.不同的环境实现这三张表的方式可能略有区别,可以理解为block和 pending表示类似于位图的结构 hander表是指向信号对应处理方法的数组(指针数组).对于信号的理解就基于这三张表展开,从信号的产生,检测,到处理来逐步剖析

2022-11-15 19:04:58 480

原创 Linux系统中的管道通信

管道,是Linux下常用的进程间通信手段,具体的通信方法是 父进程打开管道文件,被子进程继承,通过文件描述符fd,并且,数据在管道文件中的读写是彻底的内存级别的,即不与磁盘交互,读和写皆是在内存中,效率也有一定的保证。以上三点机制,使得管道能像文件一样操作的同时,避同时免了使用普通文件进程间通信的 极度的 不安全性。需要注意的是,文件名只是用来标识唯一性,数据的传输更匿名管道一样,完全是内存级的。2.往管道中写入数据时,如果管道满了,或正在被读取,执行写入的进程会阻塞等待。

2022-11-06 15:57:41 1803

原创 Linux下C/C++动静态库

库就是方法们编译为二进制码后整合在一起。供程序链接。根据链接方式的不同又区分为动态库和静态库。它们的使用规则也个不相同。

2022-11-02 14:29:28 914

原创 带你从零编写shell解释器

自己写一个shell命令行解释器

2022-10-17 17:29:11 811

原创 gcc/g++中文乱码解决方案

有效解决 gcc g++编译出来中文无法正常显示的问题

2022-10-16 16:49:38 4023

原创 C++ 继承

inheritance)机制是面向对象程序设计的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用。.........

2022-07-23 16:12:51 1526 1

原创 C++ 模板

何为模板 模板相较当雕版印刷术中的雕版,定义好一个模板,编译器在编译代码时根据它生成对应的函数或者类。

2022-07-18 11:21:43 246

原创 C++类的初始化列表

初始化列表是类中构造函数的一部分,用于实例化类中变量时 赋初值。

2022-06-07 13:01:27 2287

原创 C++ 构造函数 (纯干)

构造函数是用于初始化对象的特殊成员函数,构造函数只能在类中定义,与普通成员函数的定义,传参,声明都不一样

2022-05-21 18:23:56 227

原创 C++ 日期类的实现

用C++类实现一个日期系统。支持常见对日期的操作。以及重载运算符实现日期间的运算。

2022-05-21 14:12:41 619

原创 C++引用的深解析

什么是引用所谓变量,其实是内存地址的一个抽像名字罢了,引用类型就是为一个变量创建一个别名。使得一个块地址空间可以有多个名字。好比关羽,关云长,关二爷,都是说的一个人。例有以下代码:#include<iostream>using namespace std;int main() { int a = 10; int& b = a;//b为a的别名。 cout << "a is " << a << endl << "b i

2022-05-11 12:26:38 233

原创 内联函数(Inline Function )

内联函数是给编译器的提议,在编译成汇编代码时,直接将函数的代码语句在调用处展开,用于优化程序的运行效率。若函数体代码过长或因其他原因不适合内联,编译器可能不接受内联提议,按照普通的函数规则编译。

2022-05-10 12:32:25 4422 1

原创 快速排序(分析,实现以及优化)

快排的排序思想快速排序的核心思路是 在待排区间(l,r)中选中一个关键元素(key),将他排到升序中应待的位置,过程中也使得它左边的元素都小于它,右边的都大于他。这样一次就称为单趟排序,经过一次单趟排序后待排区间就被缩小为了(l,key-1)和(key+1,r)。

2022-04-28 11:09:37 1179

原创 C语言实现堆排序

堆是一种特殊的二叉树数据结构,分为大根堆与小根堆,大根堆即二叉树即其子树都满足:根节点的值大于子树根节点的值。小根堆则相反。堆排序就是利用堆的性质将数据排序。

2022-04-18 12:46:54 1536 1

原创 C语言 | 如何用两个栈模拟队列

用两个栈,一个专门入数据,一个专门出数据 来模拟实现一个队列。

2022-04-03 14:41:31 2072

原创 C语言实现数据结构数组栈

栈是一种特殊的线性表,必须满足"LIFO"(last in fast out),也就是后进先出的原则, 类似于手枪弹夹,只能在栈顶添加或删除数据,用C语言中结构体和数组模拟实现的栈结构,能完成栈的各种操作,就称为 数组栈。

2022-03-25 16:01:36 2103

原创 C语言实现 柔性数组文件存储通版本通讯录

写一个通讯录 能实现对联系人信息的增删查改排序并用文件来存储联系人的信息。

2022-02-27 16:25:03 1238 5

原创 C语言 文件操作函数fopen解析

1.fopen的原型FILE *fopen(const char *filename, const char *mode);2.返回值fopen 返回指向打开文件的文件指针,若出错则返回NULL(空指针)。3.参数其两个参数均为字符串。第一个参数第一个参数为打开文件的文件名,文件名由 路径+主文件名+扩展名组成例如 H:\文档\Visual Studio 2019\C-program\test_2_22.txt第二个参数第二个参数为打开模式具体如图要注

2022-02-22 19:19:02 9637

原创 C语言结构体内数组成员与指针成员有何区别?

结构体中的数组成员的数组名和指向数组首元素的指针能划等号吗?数组名的值是多少?数组名和指针的区别到底是什么?

2022-01-24 16:18:11 2175 1

原创 几行代码判断出当前环境的大小端字节序

利用 联合体(共用体)的性质快速巧妙的判断出当前环境下的大小端字节序

2022-01-23 17:10:04 465

原创 详解 C/C++中的数组名到底是什么?

数组名的类型属性和值属性如何变化?

2022-01-18 20:12:15 1163 4

原创 C语言 |教你与AI对弈三子棋 从此不再孤单寂寞冷

创建 一个智能Al来陪我们对弈下棋,这篇博客将手把手教会你 自己解决孤独!

2021-12-06 19:59:26 7143 4

原创 C语言实现 扫雷游戏 | 简单项目

要写一个扫雷游戏,由于体量较大,我们打算分三个.c文件(源文件)来定义函数,实现代码,两个 .h 文件(头文件) 来实现我们.c文件中函数的声明和库函数头文件的引用。三个 源文件 : test.c , game.c , print.c两个头文件:game.h , print.htest.c 游戏主题框架 #define _CRT_SECURE_NO_WARNINGS 1#include "game.h"//这里引上我们编写好的头文件#include"print...

2021-12-03 11:29:31 3966

原创 字符类型 char 的值域

char 类型在内存中一个字节 8个比特位按有无符号位 分为 signed char 和 unsigned char要探讨他们的值域 我们一个一个来看:>signed char 类型组成:1符号位 + 7 有效位、符号位 1 2 3 4 5 6 7 我们知道 七个二进制1的值:127容易得出signed char的最大值就 1271 0 0 0 0 0 0 ...

2021-11-28 16:33:05 1907

暖心AI陪你下三子棋.zip

人工智能陪伴下棋,独单落寞时来一把,帮你找回自我。

2021-12-06

C语言实现扫雷-进阶.zip

适合 处于C语言初学或进阶阶段的人群 借鉴学习

2021-12-04

空空如也

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

TA关注的人

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