自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 问答 (4)
  • 收藏
  • 关注

原创 面试常问的Linux之 I/O 复用

高效的I/O是指操作系统在进行输入输出(I/O)操作时,能够以最快的速度完成数据传输,同时减少CPU等其他资源的使用,提高系统的性能和效率。避免阻塞I/O:阻塞I/O会使得应用程序在等待I/O操作完成时一直处于等待状态,从而浪费CPU资源,降低系统性能。采用非阻塞I/O或异步I/O可以避免这种情况。减少上下文切换:I/O操作需要在用户空间和内核空间之间切换,这种切换需要消耗CPU资源。减少上下文切换可以提高I/O操作的效率。

2023-04-04 17:18:08 1012 11

原创 进程、环境变量和命令行参数

这是一篇关于进程特性、环境变量和命令行参数的博客,详细且生动地讲解了相关的知识,并且举出了基本的例子方便您更好理解

2023-03-30 14:48:47 604 7

原创 STL——list详解

这是一片关于list的详细介绍,并模拟实现了一个list类,帮助您更深入地理解和使用STL

2023-03-17 17:30:06 4140 7

原创 IO流在C++中的应用

一篇详尽的关于C++IO流的内容,或许你能在文章中收获一些知识。

2023-03-13 21:20:26 563 10

原创 vector你得知道的知识

通过vector的模拟更好的使用vector的接口,让您在编程时更上一层楼。

2023-03-09 16:55:27 845 9

原创 深浅拷贝——利用模拟实现basic_string深入理解

这是一篇关于深浅拷贝详尽的文章,参考了许多资料汇总得出的,值得关注的。

2023-03-08 15:25:49 603 10

原创 makefile简易教程

快速上手的makefile,帮您避免冗长编译选项的利器!

2023-02-17 15:04:31 1725 4

原创 git必会的知识点

-

2023-02-11 16:52:01 2947 6

原创 不成功欢迎到评论区骂我的mysql for mac安装教程

主页上边栏有个download,点击后找到页面最下方,有个MySQL Community(GPL) Downloads链接,进入后会发现非常多的链接,仔细找到MySQL Community Server,如果是Mac芯片,则选择arm版本的dmg文件,如果是intel芯片,则选择x86版的dmg文件。,按住下箭头到光标不动后,按$,在按a,在回车,这时候输入在系统设置左边栏最下方的mysql里看到的Base Directory路径,再在这条路径后加上/bin,之后按esc,按冒号,按w,按q,按回车。

2022-11-10 19:51:06 244

原创 我的“第一篇”博客

一个爱好折腾到一半的理工男(折腾到一半是因为有时候会因为不太好找资源而放弃,如果有好的完整的参考资料,我还是比较能坚持下来),比如了解显示器的参数,屏幕显示的原理,苹果生态以及其他数码产品的原理,尝试写一些学校不教的语言(Lua、swift…),折腾过GFW原理和翻墙原理(虽然买不起贵的机场和没搭建过VPS),了解一些Wi-Fi和蓝牙等无线电通讯原理。其次还喜欢看看最新的科技产品,当然不太会第一批去尝鲜,因为我要理性消费。其实没钱。

2022-10-26 15:50:46 1401 1

原创 MySQL之基础知识

mysql基础知识一图流

2022-06-05 21:03:24 163 9

原创 MySQL之数据类型

mysql数据类型

2022-06-05 20:59:47 91 2

原创 Linux软硬链接和动静态库详解

软硬链接🔗软链接的建立显示出inode软链接就是一个普通文件,有自己独立的inode,类似于一个桌面上的快捷方式。保存的是指向所链接文件的路径。硬链接的建立硬链接拥有与链接文件相同的inode,没有自己独立的inode,类似C++的引用&(别名)。本质是在该目录的数据块中创建了硬链接名与inode的映射关系,并没有创建新文件。第三列数字代表的是硬链接数,可以发现普通文件也至少会有一个,是当前目录的数据块中存放了一组文件名与inode的映射关系。为什么目录硬链接数默认就是2呢?

2022-05-11 20:49:41 767 1

原创 Linux文件系统与基础IO

文件的宏观理解1⃣️文件在哪里呢?“狭义”上在磁盘,“广义”上一切皆文件。主要研究“狭义”,磁盘为外设,那么对文件的所有操作,本质都是对外设的输入输出,简称IO2⃣️文件是什么?空文件占不占用磁盘空间?依旧占用。文件 = 属性 + 内容所有的文件操作,无外乎就是两种操作,对属性和对内容。3⃣️从系统角度看内存文件操作代码-》可执行程序-〉从磁盘加载到内存-》变成进程对文件的操作,本质都是进程对文件的操作!C语言提供的对文件操作接口是用户层的,真正起作用的是系统调用接口一些c文件接口

2022-05-07 08:26:23 196

原创 进程控制详解

进程控制进程创建1⃣️命令行启动命令(程序、指令等)。2⃣️通过自身程序fork出子进程。进程调用fork,内核分配新的内存块和内核数据结构给子进程,将父进程部分数据结构拷贝至子进程,添加子进程到系统进程列表中,fork返回,调度器开始调度。创建子进程,本质是系统多了一个进程,本质是多了一套进程相关的数据结构。(1)为什么fork有两个返回值?返回两次?(2)一个变量里面,怎么会有两个不同的值?从而让父子进入不同的业务逻辑fork执行完业务逻辑时返回时,已经创建好子进程了,又需要一个变量来接

2022-05-05 17:39:27 682

原创 优先级队列基本使用及用C++模拟实现

优先级队列优先级队列 priority_queue是一个容器适配器。不符合先进先出。push时随意,pop和top取优先级最高的。优先级由大小决定,默认大的优先级高,也可以通过仿函数来控制。基本接口使用通过示例:向priority_queue pq内push多个无规律的数字,取其top打印,再pop,直至其中没有数据。会发现结构是一个大堆,默认的top为最大值。每次出队都会将堆的结构调整,将右下方的最小值与最顶上的交换,再进行向下调整算法。如果是想要改变优先级priority_queue

2022-05-03 21:45:43 900

原创 进程的特性&环境变量&命令行参数

环境变量与命令行参数在Linux系统中,标识用户并不是通过用户名,而是uid。(可以类比QQ号码和QQ昵称)原因是计算机更善于处理数字而不是字符。进程的特性并行:多个进程在多个cpu下同时运行。并发:多个进程在一个cpu下采用进程切换的方式,在一段时间内使得多个进程推进。(进程切换时,保存进程上下文,每个进程开始在cpu上运行时,必须恢复上下文)独立性:多进程运行,独享各种资源并互不干扰。(fork出子进程,代码共享,数据各自私有一份)也是操作系统设计进程的一个原则。利用僵尸进程验证独立性

2022-04-30 19:19:34 246

原创 进程地址空间

进程地址空间曾经所学的c/c++内存分布空间并不是真正的内存,而是进程地址空间。进程地址空间究竟是什么?1、创建子进程让子进程修改全局数据,观察父子进程中全局数据的差别。 1 #include<stdio.h> 2 #include<unistd.h> 3 4 int g_val = 0; 5 6 int main() 7 { 8 printf("the g_val is %d\n", g_val); 9 pid_t id =

2022-04-30 19:08:44 265

原创 非类型模版参数、模版的特化、分离编译

模版进阶非类型模版参数泛型编程函数模版+类模版实现静态栈缺点类中的数组大小是固定值。可以通过定义数组大小的宏变量来快速修改大小。但比如第一个栈要100空间,第二个栈要200,那么第一个栈就会造成空间的浪费。C++提供了解决策略:提供非类型模版参数原来的template 中的T为类型模版参数。template <class T, size_t N = 10>class stack{ int _a[N]; int top;};stack<int, 10

2022-04-29 09:53:49 113

原创 如何调试Linux下vim编辑器写的代码?含实用快捷指令make和Makefile

Linux的gdb调试Linux中,程序默认生成的可执行程序是:release版本。默认动态链接,使用动态库。gdb 文件名 -g如上可以改为debug版本,进行调试。release和debug版本的区别1、debug可以调试,release不可调试。2、debug在生成程序的时候会加入调试信息,而release不会。为啥会有release和debug呢?项目开展的流程图:测试团队对高效的自动化调试的需求,便有了测试开发这个方向。常用命令gdb file -g l/list

2021-11-13 15:28:58 2186 2

原创 新手向C语言实现特殊数据结构——队列(含用两个队列实现栈)

目录前言一、易错接口详解1.1 出队1.2 入队二、 简单接口的实现2.1 队列的初始化2.2 队列节点计数2.3 队列的销毁2.4 判断队列是否为空2.5 返回队头数据2.6 返回队尾数据三、头文件引用、函数与结构体定义四、拾枝杂谈——队列接口调用方式前言使用单向无头不循环链表实现队列。队列:符合先进先出逻辑的特殊数据结构。不适合用数组来实现,虽然入队便捷但是出队时需要挪动队首后的所有元素,效率略低。单向不循环链表对于找尾的效率确实低,但是可以在结构体中定义出队首节点和队尾节点,分别管理使得入队

2021-10-06 17:21:52 745 18

原创 新手向C语言实现特殊的数据结构——栈(含用两个栈实现队列)

目录一、易错接口详解1.1 栈的初始化1.2 栈的销毁1.3 入栈1.4 出栈二、简单接口的实现2.1 有效数据个数2.2 返回栈顶数据三、头文件的引用,结构体和函数的定义一、易错接口详解1.1 栈的初始化涉及到结构体的定义,请先跳转至第三部分查看结构体的详情。算法实现:assert断言参数是否为NULL,即结构体指针不能为NULL。由于实现的是动态的栈,即会随着数据的增加不断增大栈的空间,所以需要给指向栈的指针初始化为NULL。最后把栈顶位置top和空间容量capacity初始化为0。voi

2021-10-04 15:26:09 534 18

原创 新手向超好理解的带头双向循环链表

目录一、易错接口详解1.1 链表初始化1.2 链表的销毁1.3 尾删1.4 在任意节点前插入二、简单接口实现2.1 打印函数2.2 尾插2.3 头插2.4 尾删2.5 计算链表有效节点个数2.6 通过值查找节点2.7 对任意节点(头节点除外)删除三、头文件和相关定义一、易错接口详解1.1 链表初始化初始化链表,即需要开辟一个头节点,这个头节点中的值没有意义,这个头节点的两个指针next和prev要指向自己。详情内容请跳转至第三大部分,即可查看结构体的定义。第一步需要开辟相应的空间,于是封装一个创建新

2021-10-03 10:49:45 316 23

原创 最好懂的C语言实现无头单向链表-新手向

目录一、易错的接口实现1.1 新节点开辟函数1.2 尾插1.3 尾删二、常见简单接口2.1 打印链表2.2 节点计数器2.3 判断是否为空链表2.4 通过值查找节点2.5 头插2.6 头删2.7 在任意节点后插入节点2.8 在任意节点后删除节点2.9 销毁链表三、头文件相关内容3.1 引用的库函数3.2 结构体声明一、易错的接口实现1.1 新节点开辟函数由于创建一个新节点是频繁的操作,所以封装为一个接口最佳。链表节点的属性有:(1)数值。(2)指向下一个节点的地址。(3)自身地址。static S

2021-09-25 12:13:14 625 12

原创 新手向超详细的C实现动态顺序表

目录一、各个函数接口的实现1.1 不太好‘’李姐‘’的“容量检测函数”1.2 在任意位置插入的函数"坑!"1.3 在任意位置删除数据的函数1.4 其余简单的接口函数初始化函数销毁函数打印函数尾插头插尾删头删通过数据查找下标二、顺序表结构体声明与定义三、头文件的调用一、各个函数接口的实现1.1 不太好‘’李姐‘’的“容量检测函数”对顺序表进行插入数据时,需要判断顺序表的容量是否充足,增加数据的同时需要反复地检测容量,所以推荐直接将以上步骤封装成一个函数。函数实现算法:若容量大小 == 有效数据大小,则

2021-09-21 11:35:34 192 12

原创 编译和链接到底隐藏着什么?

写目录一、预编译的花招1.1 所有的#define被删除,并且展开所有的宏定义1.2 处理所有的预编译指令1.3 #include包含的文件插入到.i 文件中1.4 删除所有注释或者批注1.5 添加行号和文件名标识二、编译才是大佬三、汇编是建设基层的好干部四、链接一、预编译的花招首先对在编译器下写好的文件hello.c进行如下指令$gcc -E hello.c -o hello.i-E 表示只进行预编译,这时候.c 文件全然已经变成.i 文件了。我们需要了解的是,在这个过程中,预编译究竟耍了哪

2021-08-25 09:59:34 68 5

原创 探索程序员高效学习方法之路——自律篇(干货向)

目录一、导言1.1 阅读须知1.2 关于作者1.3 鸣谢二、方法介绍2.1 克制诱惑 Away The Tempt2.1.1 强制阻断之限制时间2.1.2 强制阻断之外部监督2.1.3 强制阻断之强制卸载2.2 摆脱拖延 Avoid The Procrastination2.2.1 写日程安排2.2.2 两个原则2.2.3 当困难问题遇到了拖延症三、后记一、导言1.1 阅读须知本文适合想要变得更加自律的大多数人群,最核心的部分是自律方法的介绍,内容中所提及的方法主要来自于各种渠道上的方法分享以及经过

2021-08-09 17:04:21 727 4

原创 c语言实现通讯录-动态可存储版(新手向多图详细预警)

这是目录

2021-08-06 16:39:23 1252 10

原创 C语言自定义类型重难点总结(结构体、位段、枚举、联合)

一、结构体1.1 结构体的特殊声明(匿名结构体类型)struct{ int a; char b;}x;struct{ int a; char b;}y;上面的例子中省略了结构体标签x = y;//将y中的成员赋值给x中的成员尽管两个匿名结构体有相同的成员,但是编译器仍然将它们视为不同的两个构造体类型,因为它们是匿名的。匿名结构体类型只可以用一次,并且无法用其再次创建对象,因为没有标签。1.2 结构体的自引用问题引入:一个结构体中是否能包含一个由自身创建的

2021-07-22 10:38:34 396 7

原创 不得不看的字符串函数细节(strlen、strcpy、strtok)

首先接受挑战输入结果应该是多少呢?int main(){ char* str1 = "abcdef"; char* str2 = "abc"; if ((strlen(str2) - strlen(str1)) > 0) { printf("hehe\n"); } else { printf("haha\n"); } return 0;}答案是:hehe因为strlen函数的返回值类型是无符号整形,所以两个数相减得到的-3又因为类型转换变成了无符号整型,是一

2021-06-20 20:34:17 126 1

原创 C语言小白必看——操作符详解(操作符优先级)

这里是目录哟~一、操作符的优先级1.1 括号类操作符首当其冲一、操作符的优先级由于操作符很多,一般网上搜到的优先级会是一张特别大的表,非常不便于大家记忆,那今天我就大家来巧记操作符的优先级1.1 括号类操作符首当其冲() 和 []它们之间不太可能去争夺到底谁先谁后,只要比非括号类型的先操作就行了。而圆括号又分两种,一种就是普通的括号,一种是函数的参数列表。方括号的学名叫做下标引用操作符,在数组中出现。...

2021-06-14 13:26:51 3239 9

原创 爆肝!回调函数的实用案例,建议收藏~(计算器改良,qsort快排函数应用实例,冒泡函数核心理解,模拟qsort函数)

这里是目录哟~一、回调函数的实用案例1.1 简易计算器改良一、回调函数的实用案例1.1 简易计算器改良大多数初学者刚接触函数的时候一定写过简易的计算器,来实现加减乘除四则运算 , 虽然写得很繁琐 ,但依旧无法阻止我们产生学习编程的热情。#include<stdio.h>void menu(){ printf("*********************\n"); printf("****1.Add 2.Sub****\n"); printf("****3.Mul 4.D

2021-06-07 16:29:23 1315 8

原创 高级程序员必备知识——数据在内存中的存储(常量字符串、大小端、特殊指针、浮点型存储方式)

一、数据类型的基本分类整型家族 —— short char int long浮点数家族 —— float double构造类型(自定义类型)——(1)数组类型比如定义一个整形数组int arr[10], 去掉数组名arr, 剩下的就是数组类型,即int [10]。(2) 结构体类型 —— struct(3) 枚举类型 —— enum(4) 联合类型 —— union指针类型 —— int* char* float* void*二、简要介绍整形在内存中的存储原码 反码 补码2.

2021-06-03 23:26:48 788 10

原创 Lua语言历险记1.1——最简单最便捷的安装编译环境方式

第一天:安装编译环境(forWindows)使用choco(一个专门有很多Windows软件的网站)choco在里面找到Lua的安装包Lua的安装点击蓝色按钮复制接下来到你想要放Lua文件的地方创建一个专属文件夹,在这个文件夹里新建一个文本文档,将其后缀名改成.ps1注意:先要将后缀名显示出来,如下图操作才可以成功修改后缀名。接下来打开Windows PowerShell右击选择以管理员身份运行,然后将刚刚的文本文档拖到Windows PowerShell这个蓝色框框里,就会出现

2021-05-01 19:41:00 131

原创 还在用RTX3060玩扫雷吗?模仿了“原神”游戏的设计,我用C语言设计了一款不需要这么高配置才能玩的游戏。

1.设计复杂工程思想:TDDTDD-测试驱动开发简言之,其最核心的思想就是:将一个复杂工程分成若干个小的功能,每完成一个小的功能,就对其进行调试与校正。举一个栗子:我们玩的大多数游戏都有许多复杂的分支选项,让你进入到一个又一个界面,去实现你想要的功能。如下图是原神的PC端游,我们进去后会出现一个菜单栏,菜单栏最核心的功能是让你选择开始游戏还是退出游戏。...

2021-04-28 21:46:39 891 2

原创 参考了“崩坏3”,我用C语言写出了一个游戏(TDD测试驱动开发思想与艺术)

TDD测试驱动开发测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。————转自搜狗百科所以我们可以利用这种思路,一步一步地实现一个个的小功能,进而逐渐实现一款游戏的开发。首先我们建立两个源文件,一个名为test.c 主要就是游戏的一个框架,里面是游戏实现的大概.

2021-04-27 15:29:01 1303 7

原创 面试笔试经典问题:汉诺塔与青蛙跳台阶问题的解决策略与艺术。

汉诺塔问题由来及规则法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。——转自百度百科青

2021-04-21 13:41:22 360 4

原创 C语言:递归实现求n的k次方(包含指数为负数的情形和函数递归的注意事项)

//递归实现n的k次方double my_pow(double n, int k)//考虑到n可能为小数,但k为小数的时候就太复杂了,就不管了{ if (0 == k)//任何数的0次方都为1 { return 1; } else if (k > 0) { return n * my_pow(n, k - 1); } else if(k < 0)//次方(指数)为负数,底数变成倒数,指数变成相反数 { return 1.0 / n * my_pow(1.0 / n

2021-04-20 10:00:48 998 5

原创 如何出售自己的代码并且不让人看到自己的源码?

1.写出牛逼的函数代码包括函数的实现(放源文件)和定义(放头文件)2.更改文件的属性如下图:右击鼠标,选择属性,再选择红色方框的东西,即将自己的代码变成静态库。3.编译+运行代码会出现如下结果4.找到头文件和静态库文件并复制到买家的文件路径下找要卖出的静态库文件找要卖出的头文件找到头文件和静态库后拷贝到买家的“同样有源文件”的路径下!!!5.买家如何使用买到的函数代码注意#pragma comment(lib," ")双引号的内容和静态库文件名一样

2021-04-17 16:36:08 2522 2

原创 求素数的最优解法

1.试除法(最慢的算法)在这里插入代码片2.减半法在这里插入代码片3.开根号法在这里插入代码片4.开根号法的进一步优化在这里插入代码片

2021-04-13 14:48:42 923

空空如也

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

TA关注的人

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