自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 问答 (1)
  • 收藏
  • 关注

原创 Windows下使用cmake编译OpenCV

打开cmake,源码路径我们选择路径opencv-4.8.1/opencv-4.8.1/,生成文件夹路径选择新建的build文件夹所在路径。点击ALL_BUILD工程,然后编译,编译完成后,在点击INSTALL工程编译。选择编译器版本和平台位数,点击finish完成。出现下图,编译成功,如果失败,请检查步骤。点击Configure。点击generate。

2024-09-07 16:33:07 543

原创 Linux网络编程 --- HTTP协议

http协议Cookie为什么需要cookie?那cookie到底是什么?只用cookie有什么风险?cookie安全问题的解决(相对解决)HTTPShttp的缺陷https的推出对称加密非对称加密二级目录三级目录Cookie为什么需要cookie?HTTP的特点:HTTP本身是无连接的(底层是基于TCP协议的,http要发起所谓的http request的时候,不会先在http层建立链接)HTTP本身是无状态的(htto不会记录自己的发起http请求的上下文,不会对历史请求有任何记忆能力!)

2022-05-15 17:59:12 1290 6

原创 Linux多线程

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

2022-04-29 22:26:59 2833 12

原创 高并发内存池

高并发内存池项目介绍什么是内存池1.池化技术2.内存池3.内存池主要解决的问题4.malloc设计一个自己的定长内存池(自己开超市)高并发内存池框架整体设计高并发内存池--Thread Cache(第一层)哈希桶ThreadCache中的自由链表(FreeList)ThreadCache框架申请内存空间从中心缓存获取内存对象高并发内存池--Central Cache(第二层)CentralCache中的双向链表(SpanList)CentralCache框架从中心缓存获取一定数量的对象给Thread Cac

2022-04-04 23:38:28 2318 19

原创 C++11特性(详细版)

C111、C11优势2、列表初始化3、变量类型推导1、为什么需要类型推导2、decltype类型推导(了解)为什么需要decltypedecltype4、final 与 overridefinaloverride5、默认成员函数控制1、显示缺省函数2、删除默认函数(禁止调用)6、右值引用与移动语义1、左值引用和右值引用1、什么是左值?什么是左值引用?2、什么是右值?什么是右值引用?2、左值引用与右值引用比较3、右值引用使用场景和意义7、完美转发8、新的类功能1、C11优势  相比C++98/03,C++

2022-03-17 17:44:46 28749 16

原创 特殊类设计(C++面试常考)

C++面试常考,只在堆上找对象,只在栈上找对象!!!

2022-03-08 14:41:37 623 6

原创 进程信号(Linux)

Linux进程信号信号入门1、生活角度的信号2. 技术应用角度的信号三级目录信号入门1、生活角度的信号2. 技术应用角度的信号用户输入命令,在Shell下启动一个前台进程三级目录

2022-03-06 21:32:39 1490 12

原创 智能指针(解决你的内存泄漏)

智能指针,解决你的单身问题

2022-03-06 11:12:36 2516 16

原创 进程间通信

进程间通信进程间通信目的进程间通信发展进程间通信分类管道前言什么是管道?匿名管道匿名管道的特性进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。进程间通信发展管道System V进程

2022-02-28 22:25:25 505 11

原创 异常--常见处理方式,异常安全、规范

异常1. C语言传统的处理错误的方式2. C++异常概念3. 异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范4. 自定义异常体系5. 异常的优缺点1. C语言传统的处理错误的方式传统的错误处理机制:终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误C 标准库中setjmp和longjmp组合。这个不是很

2022-02-28 14:26:18 495 10

原创 基础 IO(细节感拉满)

Linux基础IO,学习Linux的一小步,进阶路上的一大步

2022-02-23 19:22:58 3282 23

原创 进程控制(Linux)

进程控制进程创建fork函数fork函数返回值写时拷贝fork常规用法fork调用失败的原因进程终止进程退出情况进程等待进程等待的必要性进程等待的方法获取子进程status1、wait进程创建进程创建有两种方式:1、命令行启动(程序、指令等)2、通过程序自身,fork创建子进程fork函数它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程#include <unistd.h>pid_t fork(void);返回值:自进程中返回0,父进程返回子进程id,出错返

2022-01-26 17:03:56 3196 42

原创 继承(C++)

继承什么是继承?继承的概念继承如何定义基类(父类)和派生类(子类)对象赋值转换继承中的作用域派生类的默认成员函数什么是继承?继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类(子类)。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。一、比如动物 Aniaml 具有的共性:吃饭、睡觉。狗会叫,但是狗也会

2022-01-22 18:21:54 796 13

原创 vector的模拟实现(C++)

vector1、vector容器介绍vector的存在形式2、整体框架3、begin 和 end4、size 和 capacity5、[ ] 重载6、reserve 容量大小7、resize 重新定义大小8、push_back 尾插9、pop_back 尾删10、insert 插入11、erase 删除迭代器失效问题inserterase删除所有的偶数12、构造函数无参构造有参构造拷贝构造析构1、vector容器介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存

2022-01-14 21:54:40 1348 9

原创 Linux环境变量和进程地址空间

Linux进程//查看进程pid和父进程[dy@VM-12-10-centos jincheng_12_5]$ ps ajx | head -1 && ps axj | grep 3669470 PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND3669469 3669470 3669470 3669439 pts/0 3681645 S 1001 0:00 -bash

2021-12-09 20:15:00 832 3

原创 C、C++内存管理

C/C++内存管理1、C/C++内存分布我们先来看内存区域的一个划分栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下)堆用于程序运行时动态内存分配,堆是可以上增长的。数据段–存储全局数据和静态数据。代码段–可执行的代码/只读常量。 常规描述:全局变量和静态变量都存储与数据段常

2021-11-17 14:08:50 285 4

原创 类与对象(下篇)

类与对象在谈构造函数二级目录三级目录在谈构造函数1、构造函数赋值问题前面我们谈到,构造函数赋值,都是通过有参函数来赋值的。虽然我们通过调用构造函数使对象已经有了一个初始值,但不能将其称为类对象成员的初始化。class A{public: A(){} A(int a) { _a = a; }private: int _a;};class Date{public: Date(int a, int b) { //函数体内初始化 _aa = A(a); _b =

2021-10-27 16:56:43 26161 23

原创 类与对象(中篇)

类与对象中篇类的六个默认成员函数构造函数和析构函数1、构造2、析构拷贝构造函数三级目录类的六个默认成员函数如果一个类中什么都没有,简称为空类。但空类里面会自动生成6个默认成员函数,因为这是由编译器生成的,我们看不到。空类:class Date {};构造函数和析构函数1、构造构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要注意的是构造函数的主要任务并不是开空间创建对象,而是初始化对象。函数名与类名相同。无返回值。对象实例化时编译器自动调用对应的构造函数。

2021-10-22 13:41:00 12273 30

原创 类与对象(上篇)

类与对象前言类的引入类的定义类的访问限定符及封装访问限定符封装类的作用域类的实例化类对象模型如何计算类的大小前言面向过程和面向对象的初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。这里要特别说明一下,C++是基于面向对象的,而不是面向对象,因为既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,以及面向对象的程序设计(只能说基于面向

2021-10-18 00:27:25 3207 18

原创 C++入门

C++入门命名空间命名空间的定义命名空间的使用缺省参数重载命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,有可能重名导致冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,利用关键字namespace可以解决重名问题。命名空间的定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{ }即可,{ }中即为命名空间的成员。{ }可以包含变量名,函数名,类名。//1. 普通的命

2021-10-06 17:11:33 1534 16

原创 排序总结篇:八大排序

数据结构八大排序前言排序的概念生活中常见的排序插入排序1. 直接插入排序2、希尔排序选择排序1、直接选择排序2、堆排序交换排序1、冒泡排序2、快速排序目录目录顺序表单链表(不带附加头结点)双链表(带附加头结点)栈(顺序表实现)队列(链式,不带附加头结点)二叉树二叉树的非递归遍历八大排序前言生活中有很多排序,比如排队做操,矮的在前,高的在后,再比如玩扑克牌,插入牌的例子。排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增

2021-09-30 20:01:24 2630 18

原创 二叉树的非递归遍历(面试常考)

二叉树的非递归遍历前言例子前序遍历(栈实现)中序遍历(栈实现)后序遍历(栈实现)层次遍历(队列实现)目录目录顺序表单链表(不带附加头结点)双链表(带附加头结点)栈(顺序表实现)队列(链式,不带附加头结点)二叉树二叉树的非递归遍历前言通常,对于二叉树的实现,面试官并不会去问你递归怎么实现,看了我前面写的二叉树,你就知道递归写起来比较简单。对于二叉树,面试官一般会问你非递归算法是怎么实现的,因为非递归算法需要用到栈、队列,所以问起来比较有意义,可以联系一

2021-08-19 21:53:18 1483 17

原创 Day6:数据结构之二叉树

二叉树前言树的基本概念1、树的定义2、树的相关术语二叉树的基本概念1、二叉树的定义2、二叉树的性质3、特殊的二叉树二叉树的实现方式二叉树的基本操作头文件1、先序建立二叉树2、先序遍历3、中序遍历4、后序遍历5、先序遍历(广义表)6、二叉树的深度(高度)7、二叉树的结点数8、二叉树的叶结点个数9、度为1的结点个数10、度为2的结点个数11、返回每条叶结点到根结点的路径12、交换左右结点13、双序遍历14、销毁树二叉树的注意事项目录目录顺序表单链表(不带附加头结点)双链表(带附加头

2021-08-16 17:34:55 4151 26

原创 Day5:数据结构之队列

队列前言1、队列的概念2、队列的实现方式3、队列的基本操作头文件1. 初始化队列2. 队尾入队列3. 队头出队列4. 获取队列头部元素5. 获取队列队尾元素6. 获取队列有效个数7. 判断队列为空8. 销毁队列4、队列面试题(结合栈)5、队列和栈的区别目录目录顺序表单链表(不带附加头结点)双链表(带附加头结点)栈(顺序表实现)队列(链式,不带附加头结点)前言这一节我们来学习队列,以及队列和栈的区别。1、队列的概念队列是另一种限定存取位置的线性表,只允许在

2021-08-14 18:41:25 905 10

原创 Day4:数据结构之栈

栈前言1、栈的定义2、栈的基本实现头文件1. 初始化2. 入栈3. 出栈4. 获取栈顶元素5. 检查站中有效个数6. 检查栈是否为空7. 销毁栈面试题扩展目录目录顺序表单链表(不带附加头结点)双链表(带附加头结点)栈(顺序表实现)前言大家好,上一次我们学习到了双链表,今天我们来学习栈的一些性质和注意事项。1、栈的定义栈是一种先进后出并且只能在末端进行插入和删除的线性表。允许插入和删除的一端叫栈顶(top),而不允许插入和删除的另一端叫栈底(bottom)。栈一

2021-08-12 15:51:25 990 8

原创 Day3:数据结构之带头双链表

带头双链表前言1、双链表的基本概念2、双链表的好处3、双链表的基本操作头文件定义1. 初始化2. 创建一个新结点3. 打印4. 头插5. 头删6. 尾插7. 尾删8. 查找9. 插入10. 删除11. 销毁总结目录目录顺序表单链表(不带附加头结点)双链表(带附加头结点)今天给大家讲的是双链表前言上一节,我们说到单链表,知道了单链表的一些缺点和注意事项,这一节我们来学习双链表,看看双链表是否能完美解决单链表的一些问题。1、双链表的基本概念在双链表中有两个指

2021-08-09 21:48:01 991 20

原创 剑指offer--缺失的数字

1、消失的数字数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?示例:输入:[9,6,4,2,3,5,7,0,1]输出:8思路一:异或,设置一个变量num,先将索引 0 - numsSize 与 num 异或,在将nums[ i ] 与 num 异或,最后在循环外,在将 num 与 numsSize 进行异或,num就是缺失的数字。int missingNumber(int* nums, int numsSize){

2021-08-07 23:42:22 386 2

原创 单链表面试题,看看你的链表是否过关

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。方法一思路:将值不等于val的结点重新链接成一条新链表struct ListNode* removeElements(struct ListNode* head, int val){ //为空,返回NULL if(head==NULL) return NULL; //创建一个新链表,将不是val的结点链接在一起

2021-08-05 23:09:57 453 11

原创 Day2:单链表的基本操作

单链表前言1、单链表的定义2、单链表的特点3、单链表的基本操作1、头文件2、初始化3、打印4、创建新节点5、尾插6、尾删7、头插8、头删9、插入10、删除11、查找12、销毁13、获取链表节点个数4、单链表的注意事项5、扩展6、源码目录目录顺序表单链表(不带附加头结点)前言上一节实现了顺序表的基本操作,这一节我们来学习单链表(不带头结点),实现单链表的一些基本操作以及注意事项。1、单链表的定义单链表是链表中最简单的链表表示,也叫线性链表。链表是不连续的,用指针表示

2021-08-05 20:49:30 925 7

原创 Day1:顺序表的基本实现

顺序表的实现1、头文件2、初始化3、销毁4、打印5、尾插6、尾删7、头插8、头删9、查找10、插入11、删除12、检查容量1、头文件我这里主要说的是动态的顺序表,当然静态顺序表的操作基本上是一样的,只是静态顺序表无法进行增容,数量是控制了的,会造成空间的浪费。静态顺序表#pragma once //防止头文件包含#include<stdio.h>#define MaxSize 100typedef int SLDataType;//利用typedef给int重命名为S

2021-08-01 18:28:44 549 11

原创 文件操作(图解)

文件操作1、文件是什么?1.1 程序文件1.2 数据文件1.3 文件名2、文件的打开和关闭2.1 文件指针2.2 文件的打开和关闭3、文件的顺序读写4、文件的随机读写4.1 fseek4.2 ftell4.3 rewind5、文本文件和二进制文件6、文件读取结束的判定6.1 被错误使用的feof7、文件缓冲区1、文件是什么?磁盘上的文件是文件。(比如硬盘,U盘等)但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。1.1 程序文件包括源程序文件(后缀为.c)

2021-07-28 22:09:23 701 4

原创 预处理详解

预处理详解1、预定义符号2、define2.1 #define定义标识符2.2 #define定义宏2.3 #define替换规则2.4 #和##2.5 带副作用的宏参数2.6 宏和函数对比2.6.1 命名约定3、#undef4、命令行定义5、条件编译6、文件包含1、预定义符号下面预定义符号的作用:在我们写日志文件的时候,需要备注该文件的路径,编写的日期、时间等等__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期

2021-07-25 17:41:38 246 1

原创 程序的编译

这里写目录标题1、程序的翻译环境和执行环境2、详解编译+链接2.1 编译环境2.2 编译的几个阶段2.3 运行环境1、程序的翻译环境和执行环境在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码2、详解编译+链接2.1 编译环境组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。

2021-07-23 23:06:21 597 9

原创 动态内存管理(一次过)

动态内存管理为什么存在动态内存管理?什么是动态内存函数?常见的动态内存错误常见的笔试题C/C++程序的内存开辟为什么会有柔性数组?为什么存在动态内存管理?学了C语言之前的知识,我们应该知道创建一个数组或者一个变量是在内存区固定开辟多少字节的大小,比如char [10];在栈空间开辟10个字节的连续空间,在比如创建一个变量int a;在栈空间上开辟4个字节。上述开辟的空间的方式的缺点:空间开辟大小是固定的。数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。有时候我们需要的空

2021-07-21 20:29:40 172 3

原创 结构体、枚举、联合(一次过)

自定义类型:结构体、枚举、联合结构体结构体类型的声明结构的自引用结构体变量的定义和初始化结构体内存对齐结构体传参结构体实现位段(位段的填充&可移植性)枚举枚举类型的定义枚举的优点枚举的使用联合联合类型的定义联合的特定联合大小的计算结构体结构体类型的声明什么叫结构体:结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。这是一个结构体的声明//tag是结构体标签struct tag{ member-list;}variable-list; //variabl

2021-07-08 21:20:24 604 2

原创 字符函数和字符串函数(一次过)

字符函数和字符串函数求字符串的长度strlen长度不受限制的字符串函数strcpystrcatstrcmp长度受限制的字符串函数介绍strncpystrncatstrncmp字符串查找strstrstrtok错误信息报告strerror字符操作内存操作函数memcpymemmovememsetmemcmp求字符串的长度strlenstrlen这个库函数是用来求字符串的长度的函数原型:size_t strlen ( const char * str );注意字符串已经 ‘\0’ 作为结束标志

2021-06-15 21:21:15 248 3

原创 一次性过指针!!!

指针详解初级指针1. 指针是什么2. 指针和指针类型3. 野指针4. 指针运算5. 指针和数组6. 二级指针指针的进阶1. 字符指针2. 数组指针3. 指针数组4. 数组传参和指针传参5. 函数指针6. 函数指针数组7. 指向函数指针数组的指针8. 回调函数9. 指针和数组面试题的解析初级指针1. 指针是什么指针是什么?在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说

2021-05-31 20:20:55 624 21

原创 深度剖析数据在内存中的存储

数据存储1.数据类型详细介绍2. 整形在内存中的存储:原码、反码、补码3. 大小端字节序介绍及判断1.数据类型详细介绍这里是CPU为32位的字节数char //字符数据类型 1字节short //短整型 2字节int //整形 4字节long //长整型 4字节long long //更长的整形 8字节float //单精度浮点数 4字节double //双精度浮点数 8字节类型的意义:

2021-05-27 21:00:29 657 2

原创 三子棋

三子棋实现(c/c++)c/c++版的三子棋直接上代码下面展示一些 具体代码。// 类的声明// An highlighted block#pragma once#include<iostream>using namespace std;class MyClass{public: // 游戏开始页面 void game();};// 实现方法展示// An highlighted block#include"game.h"#define ROW 3 /

2021-05-16 16:49:12 561 6

原创 关于xshell连接虚拟机(centos系统)被拒绝的问题

xshell连接虚拟机关于xshell连接虚拟机被拒绝访问的问题首先找到自己对应的网络名称,这里我的是ens32通过命令// 进入网络名称编辑界面 注意自己的网络名称 不一样vim /etc/sysconfig/network-scripts/ifcfg-ens32这里找到ONBOOT=no 改为下图 ONBOOT=yes 否则网络无法开启按Esc键 在按: 在按wq 保存退出 下面如此xshell连接虚拟机的时候为了方便我们一直连接,我们可以设置虚拟

2021-03-22 23:27:26 6377 9

空空如也

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

TA关注的人

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