自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 CMake笔记

CMake

2023-02-03 16:08:26 886 1

原创 Linux生产者消费者模型

我们可以看到刚开始的时候,生产者生产的快,消费者消费的慢,但是过了一段时间后,阻塞队列被塞满了数据,此时生产者要进行等待同时通知消费者来消费,此时消费者消费一个数据,然后生产者被唤醒进而继续生产数据。生产者和消费者彼此之间不直接通讯,而是通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。当阻塞队列当中存储的数据小于队列容器的一半时,再唤醒生产者线程进行生产。...

2022-07-24 17:00:12 649 2

原创 C++11

在C++98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。比如:但是对于一些自定义的类型,却无法使用这样的初始化。比如说:像这样的自定义类型就无法使用初始化列表去初始化,从而导致无法通过编译,因此每次定义vector时,都需要先把vector定义出来,然后使用循环对其赋值初始值,非常不方便。 注意: 列表初始化可以在{}之前使用等号,其效果与不使用=没有什么区别,但是为了代码的可读性建议加上=。标准库支持单个对象的列表初始化多个对象的列表初始化多个对象想要支持列表初始化,需要给该

2022-07-11 19:59:08 453

原创 高并发内存池

所谓“池化技术”,就是之所以要申请过量的资源,是因为每次申请该资源都有较大的开销,不如提前申请好了,这样使用时就会变得非常快捷,举个例子吧我们大家现在这个阶段大部分应该都还是学生,暂时还没有什么经济来源,所以生活费一般都需要找父母要。那假如说我们买个早餐要找父母要钱去买,买一本书一支笔找父母要钱去买,买一件衣服也找父母要钱去买,不管买什么都要去找父母要钱买。大家有没有觉得这种方式太低效了呢?即使你父母不觉得烦,你自己都可能觉得烦了。那为了提高效率,我们的父母一般会将每个月的生活费一起打给我们,我们要是要用钱

2022-06-30 19:35:02 623 1

原创 C++特殊类设计

我想大家对于这个问题第一步想到的肯定是运行结果:我们将构造函数私有之后,虽然不能在栈上创建对象,但是同样也不能在堆上创建对象了,这种就属于 那我们有没有什么办法可以让我们不能再栈上创建对象,但是可以在堆上创建对象呢?答案是有的。大家可能认为这样子就可以了,其实不是的,请大家仔细的想一想:调用一个类的普通成员函数是不是需要对象去调用,那我们在堆上申请的对象又正好需要调用这个函数来生成,可是我们选择都没有对象我们如何去调用这个函数呢?所以这就纯纯是为了解决这个问题,我们可以将这个成员函数运行结果:可以看到

2022-06-26 12:53:57 235 1

原创 Linux线程同步与互斥

Linux线程同步与互斥

2022-06-21 17:51:21 690 5

原创 C++多态

文章目录C++多态多态的概念多态的定义及实现多态的构成条件虚函数虚函数的重写虚函数的重写的两个例外C++11 override和final重载、覆盖(重写)、隐藏(重定义)的对比抽象类概念接口继承和实现继承多态的原理虚函数表多态的原理动态绑定和静态绑定单继承和多继承关系中的虚函数表单继承中的虚函数表多继承中的虚函数表继承和多态常见的面试问题概念考察问答题C++多态多态的概念多态的概念: 通俗来说,就是多种形态,具体点就是当不同的对象去完成同一件事时会产生出不同的状态。举一个生活中的例子,比如说:

2022-05-30 18:38:05 474 13

原创 Linux多线程

Linux多线程Linux线程概念什么是线程在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是"一个进程内部的控制序列"一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流一般在Linux教材里面线程是这样定义的:线程:是在进程内部运行的一个执行分支(执行流),属于进程的

2022-05-24 14:27:50 1097 8

原创 C++继承

文章目录C++继承继承的概念及定义继承的概念继承的定义定义格式继承关系和访问限定符继承基类成员访问方式的变化默认继承方式基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数构造函数拷贝构造赋值运算符重载析构函数继承和友元继承与静态成员菱形继承及菱形虚拟继承继承方式菱形继承菱形虚拟继承菱形虚拟继承解决数据冗余和二义性的原理继承的总结和反思笔试面试题C++继承继承的概念及定义继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基

2022-05-11 14:12:13 623 7

原创 Linux进程信号

文章目录Linux进程信号信号入门生活角度的信号技术应用角度的信号查看信号信号的常见处理方式产生信号通过终端按键(键盘)产生信号通过系统调用向进程发信号由软件条件产生信号硬件异常产生信号CoreDump阻塞信号信号其他相关常见概念信号的保存和发送信号在内核中的表示sigset_t信号集操作函数sigpromasksigpending捕捉信号内核态与用户态内核如何实现信号的捕捉sigaction可重入函数volatileLinux进程信号信号入门生活角度的信号第一个例子:取快递你在网上买了很多件商

2022-05-01 13:20:26 523 7

原创 Linux进程间通信

文章目录Linux进程间通信进程间通信介绍进程间通信的概念进程间通信目的进程间通信的本质进程间通信分类管道什么是管道匿名管道匿名管道的概念创建匿名管道匿名管道读写规则管道的特点命名管道命名管道的原理创建命名管道命名管道的打开规则使用命名管道实现server&&client通信命名管道和匿名管道的区别System V共享内存共享内存的原理共享内存的数据结构共享内存函数共享内存的创建共享内存的释放关联共享内存共享内存的去关联使用共享内存实现server&&client通信Syet

2022-04-18 21:40:08 632 10

原创 牛客网:手套

手套题目描述:在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组left,right,分别代表每种颜色左右手手套的数量。数据保证左右的手套总数均不超过26,且一定存在至少一

2022-04-15 00:11:50 234 2

原创 Linux基础IO

文章目录Linux基础IOC语言文件IOC语言文件操作库函数stdin&stdout&stderr系统文件IOopenclosewriteread文件描述符文件描述符的分配规则重定向输出重定向追加重定向输入重定向dup2FILEFILE中的文件描述符FILE中的缓冲区文件系统inode磁盘的概念磁盘分区与格式化软硬链接软链接硬链接Linux基础IOC语言文件IOC语言文件操作库函数C语言文件操作的库函数有很多,在前面的文章中已有介绍,如果不太清楚的小伙伴可以去看一下作者的这篇文章:

2022-04-11 13:14:25 1235 6

原创 Linux动静态库

文章目录Linux动静态库认识动静态库动态库静态库静态库的打包与使用静态库的打包静态库的使用动态库的打包与使用动态库的打包动态库的使用Linux动静态库认识动静态库我们先来看一段代码:#include<stdio.h>int main(){ printf("hello world\n"); return 0;}相信大家都应该知道这段代码的运行结果其实就是hello world在Linux下我们可以通过ldd指令来查看一个可执行程序所依赖的库文件这里的l

2022-04-05 20:05:10 4188 1

原创 Linux进程控制

文章目录一、进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因二、进程终止进程退出场景进程常见退出方法进程退出码进程正常退出main函数returnexit函数_exit函数总结进程异常退出三、进程等待进程等待的必要性进程等待的方法wait方法waitpid方法获取子进程status进程阻塞等待与非阻塞等待四、进程程序替换替换原理替换函数函数解释命名理解简易shell的实现一、进程创建fork函数初识在Linux中,fork函数是一个非常重要的函数,它从已存在进程

2022-03-31 14:30:20 1924 11

原创 Linux进程地址空间

文章目录Linux进程地址空间程序地址空间进程地址空间总结Linux进程地址空间程序地址空间大家在以前学习C/C++的时候可能见过下面这幅图:那么我现在有一个问题:这个是内存吗???这个根本就不是内存!!!你为什么说它不是内存呢?那它不是内存的话那它又是什么呢?不要着急,下面我们先来看一段代码,通过代码的运行结果来验证上面这幅图运行结果:可以看到我们这段代码的运行结果是和我们上面那幅图的地址分布是一致的。下面我们再来看一段代码:运行结果:我们惊奇的发现两个变量的地址是一样的,

2022-03-27 10:25:41 2821 12

原创 Linux环境变量

文章目录Linux环境变量基本概念常见环境变量查看环境变量的方法测试PATH测试Home测试SHELL与环境变量相关的命令环境变量的组织方式通过代码获取环境变量通过系统调用获取环境变量环境变量通常是具有全局属性的Linux环境变量基本概念环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。比如说:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序, 原因就是有相关环

2022-03-22 01:03:54 1615 1

原创 leetcode.502.IPO

IPO题目描述:假设 力扣(LeetCode)即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。给你 n 个项目。对于每个项目 i ,它都有一个纯利润 profits[i] ,和启动该项目需要的最小资本 capital[i] 。最初,你的资本为 w 。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资

2022-03-19 15:39:05 854

原创 Linux进程概念

文章目录Linux进程控制基本概念描述进程——PCBtask_struct——PCB的一种task_struct内容分类查看进程通过系统目录查看通过ps命令查看通过系统调用获取进程标示符通过系统调用创建进程——fork初识fork函数创建子进程父子进程实现分流,同时进入if与else两个分支Linux进程状态R-运行状态S-浅度睡眠状态D-深度睡眠状态T-暂停状态Z-僵尸状态X-死亡状态僵尸进程僵尸进程的危害孤儿进程进程优先级基本概念优先级 vs 权限优先级存在的原因?查看系统进程PRI and NI查看进

2022-03-15 22:17:19 2058 12

原创 初始操作系统

文章目录初识操作系统操作系统是什么操作系统是如何管理的如何理解管理**管理的精髓:先描述,再组织**为什么要有操作系统用户与操作系统之间的关系总结:初识操作系统操作系统是什么简单来说,在整个计算机软硬件架构中,操作系统是一个做管理工作的软件,做软硬件管理(硬件:冯诺依曼体系中所有设备。软件:1.安装软件,卸载。 2.在系统层面:文件、进程、内存、驱动)操作系统是如何管理的如何理解管理接下来我将会用两个生活中的例子来告诉大家如何理解管理。**示例一:**银行系统银行系统的管理工作分为了 硬件

2022-03-10 01:11:08 394 3

原创 C++进阶——AVL树

文章目录C++进阶——AVL树AVL树的概念AVL树的实现AVL树节点的定义AVL树的四个默认成员函数构造函数拷贝构造析构函数赋值运算符重载AVL树的插入插入的步骤平衡因子的调节旋转处理(父节点的平衡因子违法平衡树的性质)代码实现[]运算符的重载AVL树的查找AVL树的打印验证是否为AVL树AVL树代码实现C++进阶——AVL树AVL树的概念在前面的文章中我们学习了二叉搜索树,但是二叉搜索树虽然可以缩短查找的效率,但是 如果数据有序或者接近有序的情况下二叉搜索树会退化成单支树,查找元素相当于在顺序表中

2022-03-08 17:31:05 929 6

原创 冯诺依曼体系结构

文章目录冯诺依曼体系结构体系结构的工作原理木桶原理内存是如何充当缓冲区的关于冯诺依曼,必须强调几点你用QQ和朋友聊天时数据的流动过程冯诺依曼体系结构我想大家学计算机的同学或多或少应该都听老师提起过过冯诺依曼这个人,今天我们这篇文章主要来给大家讲解一下冯诺依曼体系结构以及帮助大家更加深刻理解冯诺依曼体系结构我们常见的计算机,比如笔记本电脑。我们不常见的计算机,比如服务器,他们大部分都遵守冯诺依曼体系。下面我们来看一张冯诺依曼体系结构的图片:截至目前,我们所认识的计算机,都是由一个个硬件组件而成

2022-03-06 16:14:14 629

原创 C++进阶——二叉搜索树

二叉搜索树这篇文章主要为大家介绍二叉树搜索树的概念、操作、实现以及它的应用。同时学习二叉搜索树也是在为我们后面学习map与set做铺垫,当我们了解了二叉搜索树的特性后,后面将有助于我们更好的理解map和set的特性二叉搜索树的概念(特征)二叉搜索树也称二叉排序树,它或是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有的节点值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树int arr[] = {5,3,

2022-03-03 15:17:18 957 1

原创 完成旅途的最少时间

文章目录完成旅途的最少时间题目描述:题目链接:[6010. 完成旅途的最少时间](https://leetcode-cn.com/problems/minimum-time-to-complete-trips/)解题思路:题目代码:完成旅途的最少时间题目描述:给你一个数组 time ,其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。每辆公交车可以 连续 完成多趟旅途,也就是说,一辆公交车当前旅途完成后,可以 立马开始 下一趟旅途。每辆公交车 独立 运行,也就是说可以同时有

2022-02-28 09:45:18 278 2

原创 Linux环境开发工具使用(yum、vim、gcc、g++、gdb、make/Makefile)

文章目录Linux环境开发工具使用(yum、vim、gcc、g++、gdb、make/Makefile)Linux软件包管理器 - yumLinux下安装软件的方式什么是软件包查看软件包如何安装软件如何实现本地机器和云服务器之间的文件互传如何卸载软件Linux编辑器-vimvim的基本概念vim下三种模式的切换vim命令模式命令集移动光标删除复制粘贴剪切替换大小写切换撤销更改vim底行模式命令集列出行号保存退出查找字符分屏指令执行指令vim的简单配置Linux编译器 - gcc/g++gcc/g++的语法预

2022-02-26 21:12:59 9159 16

原创 C++STL详解(七):stack、queue与priority_queue的使用及其模拟实现

文章目录stackstack的介绍栈的使用queuequeue的介绍队列的使用priority_queuepriority_queue的介绍优先队列的使用容器适配器什么是容器适配器STL标准库中stack、queue和priority_queue的底层结构deque的简单介绍(了解)stack的模拟实现queue的模拟实现仿函数priority_queue的模拟实现向上调整算法向下调整算法代码实现stackstack的介绍stack这种容器就像是手枪装填子弹然后开枪一样,先装进去的子弹会在下面然后

2022-02-19 11:04:44 790 3

原创 C++STL详解(六):list的模拟实现

文章目录list要实现的三个类以及各函数接口结点类构造函数迭代器类为什么要实现迭代器类?模板参数构造函数*运算符的重载->运算符的重载前置++运算符的重载后置++运算符的重载前置--运算符的重载后置--运算符的重载==运算符的重载!=运算符的重载list类默认成员函数构造函数拷贝构造赋值运算符重载析构函数与迭代器相关的函数beginend获取元素的函数frontback插入与删除函数inserterasepush_backpop_backpush_frontpop_front其他函数sizeclear

2022-02-16 12:25:14 707 1

原创 有序数组的单一元素

有序数组的单一元素题目链接:540. 有序数组中的单一元素题目描述:给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。示例1:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2示例2:输入: nums = [3,3,7,7,10,11,11]输出: 10提示:1 <= nums.length <= 1

2022-02-15 10:12:26 441 2

原创 C++STL详解(五)list的介绍及其使用

文章目录list的介绍及使用list的介绍list的使用list的四种初始化方式list迭代器的使用begin和endrbegin和rendlist的两种遍历方式方式一:迭代器遍历方法二:范围for遍历list的大小empty和sizelist的元素获取front和backlist的修改操作push_front与pop_frontpush_back与pop_backinserteraseswapclearlist的操作函数sortspliceremoveuniquereverseassinlist的迭代器失

2022-02-13 20:51:59 1359 4

原创 Linux权限篇

文章目录Shell命令以及运行原理Linux权限的概念如何实现root与普通用户之间切换身份如何实现临时权限提升Linux权限管理文件访问者的分类(人)文件类型和访问权限(事物属性)文件权限值的表示方法文件访问权限的相关设置方法如何改变文件的访问权限如何改变文件的拥有者如何改变文件或目录的所属组如何修改文件的掩码目录的权限粘滞位关于权限的总结Shell命令以及运行原理广义上,Linux发行版=Linux内核+外壳程序,而Linux在严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我

2022-02-10 21:57:05 1047 10

原创 C++STL详解(四):vector的模拟实现

文章目录vector各函数的接口vector的成员变量默认成员函数构造函数一构造函数二构造函数三拷贝构造赋值运算符重载析构函数与迭代器相关的函数beginend与容量和大小相关的函数resizereserveemptysizecapacity修改容器内容的相关函数push_backpop_backswapinserterase访问容器的相关函数operator[]vector的实现代码vector各函数的接口namespace mlf{ //模拟实现vector template<class

2022-02-05 22:04:50 1579 12

原创 和为K的最少斐波那契数字数目

和为K的最少斐波那契数字数目题目描述: 给你数字 k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。斐波那契数字定义为:F1 = 1F2 = 1Fn = Fn-1 + Fn-2 , 其中 n > 2 。数据保证对于给定的 k ,一定能找到可行解。题目链接:1414. 和为 K 的最少斐波那契数字数目示例1:输入:k = 7输出:2 解释:斐波那契数字为:1,1,2,3,5,8,13,……对于 k = 7 ,我们可以得到 2 + 5 = 7

2022-02-03 23:52:19 835

原创 C++STL详解(三):vector的介绍及其使用

文章目录vector的介绍及使用vector的介绍vector的定义vector的三种遍历方式vector的空间增长问题size和capacityemptyresizereservevector迭代器的使用begin与endrbegin与rendvector增删查改push_back和pop_backfindinsert和eraseswapoperator[]vector迭代器失效问题(重点)示例一:示例二:示例三:迭代器失效解决办法示例一解决方案:示例二解决方案:示例三解决方案:vector的介绍及使用

2022-02-02 15:10:53 1041

原创 C++STL详解(二):string的模拟实现

文章目录string的深浅拷贝问题浅拷贝深拷贝传统写法string类各函数的接口默认成员函数构造函数拷贝构造函数赋值运算符重载析构函数与迭代器相关的函数beginend与容量和大小相关的函数sizecapacityemptyreserveresize修改字符串的函数push_backappendoperator+=swapinserteraseclearc_str字符串访问与查找函数findoperator[]关系运算符重载函数<运算符重载==运算符重载<=运算符重载>运算符重载>=

2022-01-30 12:31:59 577 13

原创 面试题01.05一次编辑

文章目录一次编辑题目描述:题目链接:[面试题 01.05. 一次编辑](https://leetcode-cn.com/problems/one-away-lcci/)解题思路:代码一次编辑题目描述:字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。题目链接:面试题 01.05. 一次编辑示例1:输入: first = "pale"second = "ple"输出: True示例2:输入: fir

2022-01-28 21:29:09 6407 4

原创 Linux指令篇

Linux基础指令

2022-01-27 19:14:59 1513

原创 C++STL详解(一):string类的介绍以及基本使用

C++string类的介绍以及基本用法

2022-01-23 23:33:47 1335 6

原创 C++模板初阶——函数模板与类模板

C++函数模板与类模板

2022-01-20 20:41:04 744 4

原创 C/C++内存管理

C/C++内存管理

2022-01-18 21:25:23 419 10

原创 得到目标值的最少行动次数

得到目标值的最小行动次数题目链接:5194. 得到目标值的最少行动次数题目描述:你正在玩一个整数游戏。从整数 1 开始,期望得到整数 target 。在一次行动中,你可以做下述两种操作之一:递增,将当前整数的值加 1(即, x = x + 1)。加倍,使当前整数的值翻倍(即,x = 2 * x)。在整个游戏过程中,你可以使用 递增 操作 任意 次数。但是只能使用 加倍 操作 至多 maxDoubles 次。给你两个整数 target 和 maxDoubles ,返回从 1 开始得到 targ

2022-01-16 22:59:01 2887 1

空空如也

空空如也

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

TA关注的人

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