自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】多线程

在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化,通过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。条件等待是线程间同步的一种手段,如果只有一个线程,条件不满足,一直等下去都不会满足,所以必须要有一个线程通过某些操作,改变共享变量,使原先不满足的条件变得满足,并且友好的通知等待在条件变量上的线程。这取决于其相对应的实现。对于一个退出了的线程,其空间并没有被释放,任然存在在进程地址空间中,创建新的线程并不会复用刚才退出线程的地址空间。

2023-11-13 15:58:44 104

原创 【C】文件操作

磁盘上的文件是文件,但是在程序设计中,我们一般涉及到的文件有:程序文件和数据文件两种。程序文件:包括源程序文件(后缀为.c格式的文件),目标文件(Windows环境下后缀为.obj格式的文件),可执行程序文件(Windows环境后缀为.exe格式的文件)。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,如,程序运行的时候需要从该文件当中读取相对应的数据,或者接收程序运行时输出的内容到该文件当中去。接下来我们讨论的内容都是数据文件。

2023-11-12 18:46:15 113

原创 C语言基础内容小总结

3. 位操作符。

2023-11-11 16:30:50 104

原创 websocket协议

websocket继承了tcp的全双工能力,且提供了解决粘包方案,适用于服务器和客户端大量频繁交互的大量场景,如网页或小程序游戏,网页聊天室等。

2023-10-12 16:26:29 115

原创 【Linux】进程

进程是系统进行资源分配的最小单位,每个进程都有自己独立的地址空间。

2023-09-20 16:42:03 43

原创 数据链路层典型协议--以太网协议

名词内容数据链路层负责数据之间数据帧的传送和识别数据链路层协议负责相邻设备之间的数据传输以太网协议内部描述了相邻设备的mac地址链路层典型设备交换机。

2023-09-17 13:03:23 83

原创 网络层典型协议--IP协议

网络层协议,提供地址管理与路由选择,描述了通信两台主机的IP地址。在复杂的一个网络环境中规划一个合适的路径。网络层,提供了地址管理和相关的路由选择,描述通信两台主机的IP地址,典型设备即路由器。

2023-09-15 16:26:07 75

原创 传输层典型协议--tcp、udp协议

在数据的封装与分用中,当数据到达每一层的时候,都会被封装或是被分用,传输层典型协议就是TCP、UDP。tcp/ip模型典型协议含义应用层不同程序间有不同的数据格式传输层TCPUDP提供两端进程间的数据传输,描述了通信两端端口网络层IP提供地址管理与路由选择,描述了通信两台主机的IP地址数据链路层ETH提供相邻设备的数据帧传输,描述了相邻设备的mac地址物理层以太网协议在物理层进行一些约定。

2023-09-10 16:38:05 77

原创 应用层典型协议--http协议

在数据的封装与分用中,当数据到达每一层的时候,都会被封装或是被分用,而应用层典型协议就是HTTP协议。tcp/ip模型典型协议含义应用层HTTP不同程序间有不同的数据格式传输层TCP、UDP提供两端进程间的数据传输,描述了通信两端端口网络层IP提供地址管理与路由选择,描述了通信两台主机的IP地址数据链路层ETH提供相邻设备的数据帧传输,描述了相邻设备的mac地址物理层以太网协议在物理层进行一些约定HTTP,超文本传输协议。

2023-09-05 17:33:22 42

原创 Linux网络编程套接字--socket编程

在IP数据包中,有两个IP地址,即源IP地址和目的IP地址。IP地址是一台主机的唯一标识,两个IP地址表示数据从哪个主机发送到哪个主机。五元组:网络中通信的数据都具备完整的五元组(源端IP,对端IP,源端端口,对端端口,协议)。网络通信通常是两台主机之间的通信,称为客户端与服务端之称。客户端指部署在用户的一端,是注定发起请求的一端;服务端指部署在应用服务提供商的一端,是被动接受请求,提供服务的一端。

2023-08-31 11:15:10 54

原创 Git--版本控制器学习(二)

git:版本控制器,记录每次的修改及版本迭代的一个管理系统,可以控制电脑上所有格式的文档,对于开发人员来说,可控制项目中的源代码文档。环境:Linux-centos7.6。

2023-08-28 18:35:14 87

原创 Git--版本控制器学习(一)

git:版本控制器,记录每次的修改及版本迭代的一个管理系统,可以控制电脑上所有格式的文档,对于开发人员来说,可控制项目中的源代码文档。环境:Linux-centos7.6。

2023-08-22 13:54:23 81

原创 C++类和对象-类的默认成员函数之拷贝构造函数与赋值运算符重载函数

int _month;int _day;//使用d1对象拷贝构造d2对象对象构造成功,编译器完成拷贝的工作。类中并未实现对应的拷贝构造函数,那编译器有自动生成一份默认的吗?转到反汇编查看一下。实际上,编译器并未生成默认的拷贝构造函数,而反汇编中实际上是完成值拷贝的工作。拷贝是逐字节拷贝,即将d1中的内容原封不动地拷贝到d2中。

2023-08-18 12:39:35 291

原创 常见设计模式设计及其相应实现

设计模式(Design pattern):是针对设计问题的通用解决方案。是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性,也使代码编制真正工程化。环境:vs2019。

2023-08-04 19:17:37 69

原创 C/C++内存管理

环境:vs2019class A {public :} ~ A() {int _a;free(ptr1);//3. malloc/free & new/delete 操作内置类型 int * ptr3 =(int *) malloc(sizeof(int));free(ptr3);free(ptr5);(1)malloc操作自定义对象malloc申请空间后,其空间内容是一个随机值。(2)new操作自定义对象申请内置类型的数据空间时,new和malloc并无不同;

2023-07-27 01:10:25 47

原创 【Linux】IO多路转接模型--select、poll、epoll

多路转接模型常用于高并发服务器中技术的使用,是针对大量的描述符IO事件进行就绪监控的技术。使进程可以仅针对就绪的事件描述符进行IO操作,提高任务的处理效率;避免进程因为对于未就绪描述符进行操作,从而导致阻塞情况的发生。其实现技术有:select模型、poll模型、epoll模型。对于select、poll、epoll来说,不论是哪一种模型,都针对大量描述符进行IO事件监控,但同一时间内少量活跃的场景,当活跃连接较多的情况下,得搭配多执行流来进行处理,充分利用系统资源。

2023-07-23 15:19:35 75

原创 【Linux】网络基础知识

实际的网络通信中,必然有一端主机的地址和端口是固定的,同时是让所有人都知道的,这端称为服务器端(为用户提供服务的一端),网络应用提供商,都会搭建自己的服务器,向外发布的客户端程序中都封装了自己的服务器地址信息在里面。IPv6,uint8_t ip[16],数据非常的大,但是并不向前兼容IPv4,即若直接使用IPv6进行通信,那么原来基于IPv4的设备程序都用不了,所以推广很慢,当前主要的网络通信还是基于IPv4的通信。其端口只有两个,即输入端和输出端,将输入的信号进行放大再发送出去。

2023-07-09 15:42:15 1518

原创 Linux环境下常用工具

Linux下安装软件, 一个通常的办法是下载程序的源代码, 并进行编译, 得到可执行程序,但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装。而更早期的语言,如汇编指令,写出来的代码效率很高,但是其开发代码复杂,另外,由于指定的硬件只能用指定的指令来进行操作,故其跨平台移植性差。make是一条命令,Makefile是一个文件,两者搭配使用,完成项目的自动化构建。

2023-07-06 12:21:41 463

原创 C++中特殊类的设计

在C++类与对象中,C++98中,一个空类中编译器会默认生成六个成员函数,分别是构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、普通对象和const对象取地址重载函数;在C++11中增加了移动构造和移动赋值。而对于一些特殊的类,当用户未显式生成相应的方法时,我们也不希望编译器生成该方法。所以每当设计一个类的时候都得根据用户的需求来进行相应的设计。环境:vs2013。

2023-07-02 15:18:11 77 1

原创 Linux下的常用基础指令

这是为了云备份项目,即把电脑上需要备份的文件(新文件,被修改过的文件)上传给服务器备份起来,文件在服务器上占据磁盘空间,而磁盘空间有限且需金钱成本,所以服务器会将不常访问的文件给压缩储存。对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作,比如进入D盘的操作,我们通常是双击D盘盘符,或者运行起来一个应用程序。文件进行压缩存储,可节省磁盘空间,有多种算法将文件进行压缩,故而有了不同的压缩格式和其对应的压缩算法。

2023-06-29 21:50:46 62 1

原创 【C++11】C++11相关特性的简单介绍(二)

这是因为对于sum++的这个过程,首先是从内存中读取数据到寄存器,然后数据在寄存器中进行运算,最后再将结果数据加载到内存中,对于这个过程,两个线程所处的状态都是随机的,可能同时也可能一前一后等,即sum++的操作并非是原子操作和线程安全的。实际上,每次传入不同的参数,都得生成一份,多份的模板会造成可执行程序非常的大,从而使得效率低下。如上,我们可以看到,对于自定义类型,根据排序需求的不同,我们得实现很多的类,我们若想以商品中的评价来进行升降排序的话,又得实现两份类,这在代码上就显得十分的多余和不便。

2023-06-13 14:02:18 37

原创 哈希扩展应用--位图与布隆过滤器

布隆过滤器是哈希和位图的相结合,所以它也是0/1数字来表征数据是否存在的状态标志位,所以其针对的数据也是整型数据,其也是解决位图表示状态太少的情况,用多个比特位一起来表示数据信息。在将两字符串hello和world都用相同的哈希函数进行映射时,一些位置会产生冲突,对于一些字符串的查找可能会产生误差,这就是为什么说布隆过滤器可以用来告诉你”某样东西一定不存在或者可能存在“。布隆过滤器如果说某个元素不存在时,该元素一定不存在,如果该元素存在时,该元素可 能存在,因为有些哈希函数存在一定的误判。

2023-06-09 11:41:19 46

原创 【C++11】C++11相关特性的简单介绍(一)

定义函数to_string,将数字转化为字符串,string to_string(int value)函数,其中函数只能使用传值进行返回,而传值返回的过程至少得一次的拷贝构造,实际上为两次,有些编译器会进行优化。当进行新对象的构造的时候,不将原对象的空间释放掉,而是进行空间资源的转移,将原对象的空间给新对象使用,这就少却了空间的开辟和数据的拷贝工作,提高了程序运行效率。在如上的例子中,若函数的返回对象为一个局部变量,此变量在出了函数作用域就不存在,此时就不能使用左值引用返回,只能传值返回。

2023-06-06 18:05:25 32

原创 shared_ptr-循环引用问题

前文我们阐述了智能指针的思想和进行了简单的实现,当然最后提出了shared_ptr引用计数的线程安全问题,最简单的方式就是通过加锁来进行实现。智能指针内容:C++ 智能指针原理及简单实现那解决了引用计数的问题就可以了吗?其实不然,要使shared_ptr是线程安全的,就还得解决shared_ptr的循环引用的问题。编译环境:vs2013C++11和boost中智能指针的关系(1) C++ 98 中产生了第一个智能指针auto_ptr。

2023-05-28 20:20:26 753

原创 【C++】智能指针

智能指针可以帮助我们避免在申请空间后忘记释放造成内存泄漏的问题。实际上智能指针是一个类,而我们知道,类中的析构函数会在对象出了类作用域时调用析构函数进行资源的释放,所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。编译环境:vs20131 在最终的实现的shared_ptr,智能指针是线程安全的吗?

2023-05-21 12:49:48 1159

原创 unordered_set与unordered_map的模拟实现-哈希桶

在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到log2Nlog_2Nlog2​N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。这里我们对unordered_map和unordered_set进行介绍和简单的模拟实现。

2023-05-10 15:09:44 48

原创 哈希介绍及哈希桶的实现

我们知道,关联式容器里面以红黑树作为底层结构的map、set系列容器在元素的查询效率上可达到O(log2Nlog_2Nlog2​N) ,即最差情况下也只需要比较红黑树的高度次,但当树中节点非常多时,其查询效率也不是很理想。最好的查询是,进行很少的比较次数就能够将元素找到。以哈希桶为底层结构的关联式容器unordered_set、unordered_map等在元素的查找上面其效率可达到O(1)。实际上,哈希是采用空间换取时间的策略来提高元素查找的效率的。

2023-05-09 12:56:25 447

原创 内存操作函数介绍及其模拟实现

内存操作函数介绍及其模拟实现文章目录:前言:编译环境:vs2013memcpy文档作用:将num字节数的值从源指针指向的位置直接复制到目标指向的内存块。返回:返回目标指针指向的字符串。源指针和目标指针指向的对象的基础类型与此函数无关,结果是数据的二进制副本。该函数不检查源指针中的任何终止空字符 ,它总是准确地复制字节数。为避免溢出,目标和源参数指向的数组大小应至少为字节数,并且不应重叠(对于重叠的内存块,memmove 是一种更安全的方法)。memcpy模拟实现及测试:而当我们对自身进行元

2023-05-03 17:28:39 39

原创 字符串函数介绍及其模拟实现

C语言中对字符和字符串的处理是很频繁的,但是C语言中并没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数。编译环境:vs2013以上字符串函数所在头文件为:#include里面。

2023-05-02 15:25:49 77

原创 map与set的封装实现-红黑树

编译环境:VS2013map的底层结构就是红黑树,故在进行map的封装实现时,实质其实也就是将红黑树中的相应接口包装一下,当然,set同理。

2023-04-23 15:48:59 147

原创 数据结构-排序算法(C语言实现)

排序稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。编译环境:vs2013对于所有排序,统一以数组array[size-1]为待排序对象。

2023-04-17 17:46:39 586

原创 继二叉搜索树和AVL树后的红黑树

红黑树概念及其相关数据操作内容

2023-04-03 17:45:24 102

原创 继二叉搜索树后的AVL树

在map/multimap/set/multiset文档介绍中我们可以知道这几个容器有个共同点为:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,若往树中插入的元素有序或者接近有序,则二叉搜索树便会退化为单支树,其时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。编译环境:VS2013。

2023-03-31 11:55:24 50

原创 C++ 二叉搜索树

C++ 二叉搜索树

2023-03-16 14:39:50 62

原创 Linux虚拟机连接失败解决方案

Linux虚拟机连接失败解决方案

2023-02-14 14:16:47 3798

原创 C++类和对象-类的默认成员函数之构造函数与析构函数

C++类和对象-默认成员函数构造函数与析构函数

2022-11-23 14:22:49 461

原创 数据结构循环队列-设计循环队列

循环队列的提出及其设计

2022-11-18 15:45:21 381

原创 C++类与对象-类成员函数的this指针

C++类与对象-类成员函数的this指针

2022-11-14 11:11:11 1287

空空如也

空空如也

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

TA关注的人

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