自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 手撕数据结构 —— 顺序表(C语言讲解)

顺序表是一种用物理地址连续的存储单元 依次存储数据元素的线性结构。等等,物理地址连续的存储单元…… 这不就是我们在C语言中学习过的数组吗?是的,我们可以这样理解,顺序表的底层物理结构就是数组。需要注意的是,顺序表的底层物理结构是数组,并不是说顺序表就是数组。顺序表要求依次存储,也就是存储数据元素的时候,从第一个位置紧挨着存储,对顺序表进行增、删、改、查操作之后的顺序表也必须满足这一特性。

2024-10-08 22:48:20 671

原创 数据结构和算法简介

所谓算法,其实就是定义良好的计算过程,取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。一个算法所花费的时间与其中语句的执行次数成正比,但是算法中的语句往往比较多,所以,我们选择算法中的基本操作的执行次数,为算法的时间复杂度。空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时额外占用存储空间大小的度量。我们可以这样理解,解决同一个问题,可能有不同的算法, 但是不同的算法都不能避免解决该问题本身所需要的存储空间。

2024-10-07 15:43:52 569 26

原创 数据链路层协议 —— 以太网协议

当网络层IP协议被发明并投入使用的时候,我们发送的报文便有能力在整个网络世界中规划出到达目标主机的路径。当传输层TCP协议、UDP协议被发明并投入使用的时候,我们便能自主选择发送的报文是否需要可靠传输至目标主机。网络层IP协议和传输层TCP协议的配合,就能保证发送的报文。但我们需要明确的是,整个大的网络世界是由无数个小的子网构成的,报文发送的过程是基于一个个子网进行跳转的,子网之间通过路由器进行连接。所以,相隔多个子网的主机之间想要实现,首先要解决的问题就是—— 这就是数据链路层要解决的问题。

2024-09-23 20:01:42 961 18

原创 网络层协议 —— IP协议

对于网络层IP协议的学习,我们不能局限于IP协议本身,而应通过学习IP协议建立对整个网络的宏观认识。不同主机进行网络通信时,需要能够找到对方,网络层的IP协议便提供了这种能力,主要依靠IP地址。网络的世界是由一个个的子网组成的,子网是由一台台通信设备组成的,所以IP地址需要有能力标识不同的子网和子网中的主机,所以IP地址具有网络号和主机号。

2024-09-22 18:22:01 1271 30

原创 传输层协议 —— TCP协议(下篇)

由于TCP协议内容比较多,笔者我便将其分为上下两篇来进行讲解。上篇中的内容包括但不局限于:确认应答机制、超时重传机制、连接管理机制。传输层协议 —— TCP协议(上篇)通信双方使用TCP协议进行通信时,接收方处理数据的能力是有限的,如果发送方发送的太快,就会导致接收方的缓冲区很快就会被写满,如果这个时候发送方还一直发送数据,但是对方的接收缓冲区已经被写满了,那么接收方就会直接将报文丢弃掉。而对于发送方来讲,发送数据之后,并没有收到应答,就会启用超时重传机制,额…… 发送方就这样一错再错下去吗?

2024-09-21 10:05:16 1131 12

原创 传输层协议 —— TCP协议(上篇)

在网络通信模型中,传输层有两个经典的协议,分别是UDP协议和TCP协议。其中TCP协议全称为(Transmission Control Protocol),从名称就可以看出,TCP协议需要对数据的传输进行严格的控制。UDP协议具有的特点,而TCP协议恰恰相反,具有的特点。而其中,可靠性是TCP最著名的特点;也正因为TCP协议需要保证通信的可靠性,所以TCP协议才会有一系列保证可靠性的机制和策略,这也是我们需要重点学习的内容。

2024-09-19 16:40:53 1437 9

原创 传输层协议 —— UDP协议

首先,我们得明确一点,网络模型是分层的。自底向上分别是物理层、数据链路层、网络层、传输层、应用层。其中,应用层是用户直接使用的一层,也就是说,我们还需要明确一点,发送方从应用层发送的数据需要自顶向下贯穿TCP/IP 协议栈,到达物理的设备上,通过物理的线路(可能有线,也可能无线)到达对方的物理设备上,然后自底向上贯穿TCP/IP 协议栈到达接收方的应用层。发送方发送的消息自顶向下交付的时候,需要,接收方接收到的消息自底向上交付的时候,需要,再向上交付。

2024-09-18 20:37:23 805 1

原创 序列化和反序列化

序列化和反序列化操作在网络程序开发中是经常要使用的,如果每次编写网络程序都要自定义协议,然后进行序列化和反序列化操作,这是一件比较繁杂的事情,于是,有大佬写了一个专门用于序列化和反序列化的库,这个库就是Jsoncpp库。什么是Jsoncpp?Jsoncpp 是一个用于处理 JSON 数据的 C++ 库。它提供了将 JSON 数据序列化为字符串以及从字符串反序列化为 C++ 数据结构的功能。Jsoncpp的使用。

2024-09-14 16:04:58 938 11

原创 socket编程详解

网络通信的本质是进程间通信,是一种需要依靠IP地址和端口号的进程间通信,我们把这种基于IP地址和端口号的进程间通信叫做socket通信。socket的中文意思是插座,socket通信的模式类似于插板插座这样的模式,通信双方都必须要知道对方的IP地址和端口号就相当于把插板和插线接通,这样才能进行通信。而基于这种模式进行网络通信的编程就是socket编程。(Socket,通常也称为“套接字”)

2024-09-12 00:49:58 790 10

原创 基于UDP的简易网络通信程序

1.目标:使用UDP协议实现客户端程序和服务器端程序之间的通信。2.功能:客户端给服务器发送什么消息,服务器端就给客户端响应什么消息。3.效果:客户端效果:当用户根据提示Please Enter# 输入消息之后,按下回车键,发送给服务器端,立马就收到了服务器端发送过来的相同的消息。服务器端效果:服务器端接收到客户端发送过来的消息之后,会打印客户端的ip地址和端口号,以及用户发送过来的数据。服务器端给客户端发送的消息并不会在服务器端显示。

2024-09-10 20:29:11 1316 31

原创 网络传输的基本流程

不知道你有没有这样的疑问,为什么不同的设备之间能够进行数据的发送和接收?不同的通信设备之间到底是如何进行数据的发送和接收的?这似乎是一个很神奇不可思议的过程,但我相信,在这篇文章中,你会找到答案。

2024-09-08 23:02:58 1653 29

原创 网络协议详解

详解网络协议!

2024-09-08 00:26:31 1315 2

原创 MySQL数据库的基本使用

MySQL数据库中维护的是一个个的数据库,数据库中维护的是一张张的表,所以我们对MySQL数据库进行操作无非就是 操作库 和 操作表。操作数据库,需要我们能够和数据库进行对话。就好比人与人之间的对话依靠自然语言,人和计算机之间进行对话的时候需要依靠编程语言,同理,人和数据库进行对话的时候,就需要数据库语言;于是SQL语言就诞生了,SQL是一种结构化查询语言,用于对数据库进行操作。几乎所有的数据库系统都支持SQL语言。

2024-09-07 14:36:50 921 2

原创 MySQL数据库的介绍

众所周知,数据库的作用是用来存储数据的,但是在数据库被发明出来之前,人们是依靠文件来存储数据,相信你也有这样的疑问,存储数据用文件不是挺好的吗,为什么还要有数据库呢?因为,我们把数据存储起来,并不单单是为了存储数据,更重要的是,我们还需要使用数据,对数据做必要的增、删、改、查;一般的文件确实提供了数据的存储功能,但是并没有提供非常好的数据管理能力,使用文件存储数据有以下几个缺点。

2024-09-06 21:29:42 970 27

原创 C++11中的function和bind

概念:bind是 C++11 标准库中的一个函数模板,它定义在 头文件中。bind的主要作用是接收一个可调用对象,将可调用对象的参数进行绑定或重新排列后,返回一个新的可调用对象,这个新的可调用对象在调用时会将绑定的参数传递给原始的可调用对象。我们可以这样理解bind:将bind看做是一个通用的函数适配器,它接收一个可调用对象,生成一个新的可调用对象 来适应原对象的参数列表。function是对可调用对象的再封装。

2024-09-04 01:05:16 802 13

原创 如何处理海量数据

随着互联网的迅速发展,互联网已经深度融合进了人们的生活,随处可见互联网的影子,数据来源日益丰富;人们对互联网的依赖,这些数据源不断产生大量数据,形成了前所未有的数据规模。并且随着人口规模的增加,互联网中的数据增长只会越来越快,越来越多。并且,在大数据中隐藏着巨大的商业价值和社会价值。通过对海量数据的分析,企业可以洞察市场趋势、消费者行为、产品偏好等,从而做出更精准的决策,优化资源配置,提升竞争力。因此,这要求我们必须有高效的海量数据处理技术来应对。

2024-09-03 09:31:01 939 34

原创 原来这就是 布隆过滤器

什么是布隆过滤器通过上面的介绍可以看出,布隆过滤器是通过位图和哈希思想实现的数据结构,可以进行高效的查询操作。通过使用位图,大大降低了存储数据所需要的空间。通过使用哈希思想,大大提高了查询的效率。可以看出,布隆过滤器是一种兼顾时间复杂度和空间复杂度的数据结构。但是布隆过滤器也有不完美的地方,因为布隆过滤器其实是存在误判的。

2024-09-02 01:45:34 855 9

原创 位图 —— 哈希思想的产物

位图其实就是将计算机中最小的存储单位 bit位 和 哈希 思想结合实现的一种数据结构,用每一位来存放某种状态,适用于海量数据,数据无重复的场景,通常是用来判断某个数据存不存在的。

2024-09-01 01:37:42 1262 23

原创 lambda表达式

lambda表达式就是匿名的函数对象,要根据自定义类型的不同成员变量比较时,传仿函数 和 函数指针 比较麻烦,所以有了lambda表达式。lambda表达式 其实也是 新瓶装旧酒,底层是通过仿函数来实现的,如:定义了一个lambda表达式,编译器会自动生成一个类,并在类中重载operator()。lambda表达式的返回值只能通过 auto 来接收,这也是auto 最常用的场景之一,因为,lambda表达式的类型由编译器自动生成,在编译之前我们并不知道编译器的类型。

2024-08-29 10:41:53 1522 10

原创 模拟实现STL中的unordered_map和unordered_set

模拟实现小型的unordered_set和unordered_map!

2024-08-26 20:25:19 1024 30

原创 模拟实现STL中的map和set

带你实现一个简单的map和set!

2024-08-26 13:22:32 698

原创 如何实现一棵红黑树

详解红黑树!

2024-08-24 21:42:51 1357 10

原创 如何实现一棵AVL树

带你实现一棵简单的AVL树!

2024-08-23 23:59:58 1140 20

原创 快速上手 STL中 map 和 set 的使用

快速上手STL中set和map的使用。

2024-08-23 11:02:33 1430 3

原创 多态的原理

请问下面这个类的对象占多少字节的内存空间?答案: 8 字节这是因为一个类一旦有虚函数,那它的对象中就会,这个指针叫,这个指针指向了一张表,这张表叫,虚函数表中存的是虚函数的地址,所以,虚函数表的本质就是一个;

2024-08-20 17:12:03 878 23

原创 如何实现一棵二叉搜索树

带你从0到1实现一棵搜索二叉树!

2024-08-20 14:53:41 667 3

原创 辨析C++多态的概念

一文辨析多态中的概念。

2024-08-19 15:01:32 1027 8

原创 继承VS组合

如果类与类之间的关系更符合is a的关系,使用组合更合理,如果类与类之间的关系更符合has a的关系,使用继承更合理。因此,可以看出,使用组合的两个类,类与类之间并没有高度的耦合在一起,类与类之间是高内聚的;因此,可以看出,使用继承的两个类,类与类之间高度的耦合在一起,在实际开发中,我们并不希望类与类之间的耦合度过高;可以看出, Car这个类中组合了Tire这个类,当我们需要使用Tire类的时候,我们只需要关注其接口即可,不需要关注其内部的实现细节,因此,被组合的类应该提供良好的接口定义,便于被使用。

2024-08-19 11:50:56 418 2

原创 C++中的继承

讲解C++中的继承

2024-08-18 17:21:50 1023 12

原创 那些奇葩的类的设计

盘点一些特殊的类的设计

2024-08-17 19:39:59 646 4

原创 防止内存泄漏的神兵利器 — 智能指针

防止内存泄漏的神兵利器!!!

2024-08-17 16:22:02 1272 11

原创 C/C++中奇妙的类型转换

盘点C/C++中的类型转换

2024-08-16 12:01:49 960 6

原创 C++中的错误处理机制

一文带你了解C++中的异常处理机制

2024-08-15 17:34:48 949 20

原创 左值引用 VS 右值引用 —— 基础篇

左值引用就是 对左值的引用,本质上就是 对左值取别名,我们可以通过这个别名来操作这个左值。int main()//对const修饰的变量的引用需要加const//避免权限放大return 0;左值引用不仅可以引用左值,还可以引用右值,但是左值引用 引用右值的时候需要加 const右值则与左值相反,它们表示的是临时的、匿名的值通常不具有持久的存储位置,如字面常量表达式返回值函数返回的临时变量(这个不能是左值引用返回)。return ret;

2024-08-14 08:42:18 1236 21

原创 图解实现哈希表 —— 闭散列实现

图解实现属于自己的哈希表也泰裤辣!!!

2024-08-11 21:15:52 795 12

原创 哈希表的这些事儿

了解哈希的基本思想

2024-08-09 12:23:22 746 10

原创 C语言讲解归并排序

到temp数组,得到有序的子序列段,接着把有序的子序列段拷贝回原数组。然后把子序列段看成子序列,再两两归并到temp数组,得到更大的子序列段,再拷贝回原数组;,两两归并完之后得到的子序列段中有两个数据,再把两个数据组成的子序列段看成子序列,再次两两归并,就能保证子序列段有序了。归并排序有递归版和非递归版,在学习归并排序之前,我希望你对合并两个有序数组有一定的了解,这可以帮助你理解归并排序。,此时gap等于2,代表两个数据和两个数据归并,重复上述过程,控制。

2023-10-05 20:20:48 124 18

原创 详解冒泡排序(Bubble Sort)

冒泡排序的思想是相邻的两个数比较,符合交换条件就交换,如果在某躺比较中一次交换都没有发生,是不是意味着数据已经排好了?那后面的趟数是不是就可以不走了?由此,我们可以优化一下冒泡排序。冒泡排序的思想:相邻两个数据两两比较(假如我们要排升序),前一个数据大于后一个数据就两两交换,有n个数据就比较n-1躺,第一趟排完之后你会发现最大的数字排到最后的位置了,也就是说一趟冒泡排序可以确定一个数据到正确的位置;,第一趟比较n-1次,第二趟比较n-2次……,我们可以这样排,先排第一趟。

2023-10-02 15:35:24 109 4

原创 数据存储的真面目(上篇)

莫急,且听我娓娓道来,因为a是int类型,创建a变量的时候向内存申请了4个字节的内存空间,一个字节等于8个比特位,4个字节就是32个比特位,也就是32个0或1组成的二进制序列;例如:我们想把int类型的数字 0x11223344 存入内存中,有下面这些存法(只举出大概的例子,实际上可能有更多的存储方法)补充:一个内存单元的大小是一个字节,两个十六进制数字可以填满一个字节的空间,所以下面的11占用一个字节的空间,22 33 44也是各占用一个字节的空间。原码的符号位不变,数值位按位取反得到的就是反码;

2023-06-03 21:43:09 83 3

空空如也

空空如也

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

TA关注的人

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