自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(279)
  • 资源 (1)
  • 收藏
  • 关注

原创 【在线五子棋对战】四、MySQL API 使用

MySQL C API使用指南摘要 MySQL数据库采用C/S架构,客户端通过C语言API连接服务器。操作步骤包括: 初始化连接:使用mysql_init()创建句柄,通过mysql_real_connect()连接服务器,需提供IP、端口、用户名、密码和数据库名。 字符集设置:调用mysql_set_character_set()设置为utf8以支持中文。 数据库操作: 执行SQL:mysql_query()用于增删改查 查询结果处理:mysql_store_result()获取结果集,mysql_num

2025-06-10 13:27:42 396

原创 【在线五子棋对战】三、Json && JsonCpp的使用

JSON是一种轻量级的数据交换格式,采用独立于编程语言的文本格式存储数据,易于读写和解析。JSON主要有两种数据结构:数组([]表示)和对象({}表示),两者可以交叉嵌套使用。数组元素类型灵活,对象由键值对组成,其中键必须是字符串。使用JSON时需注意文件只能有一个根节点(对象或数组)。JsonCpp库提供了JSON序列化和反序列化功能,通过Json::Value类存储数据,并提供了丰富的操作接口。序列化步骤包括构建Json::Value对象、创建StreamWriter实例并输出JSON字符串。

2025-06-09 08:36:56 616

原创 【在线五子棋对战】二、websocket && 服务器搭建

WebSocket是一种基于TCP的双向通信协议,支持服务器主动推送消息,适用于即时通讯等场景。它与HTTP兼容,通过升级协议实现连接,具有轻量、高效、跨域等优势。WebSocket的握手过程通过HTTP请求头完成,报文格式包含FIN、Opcode、Mask等关键字段。 WebSocketpp是一个C++库,实现了WebSocket协议,支持客户端和服务器开发。它依赖Asio网络库,提供事件驱动接口,支持多种协议和线程安全。常用接口包括设置事件回调函数(如set_open_handler),server类继

2025-06-07 10:15:22 1155

原创 【动态规划:斐波那契数列模型】第 N 个泰波那契数

这篇文章介绍了如何计算第N个泰波那契数。泰波那契数列定义为T0=0,T1=1,T2=1,之后每个数是前三个数之和。文章使用动态规划方法解题,创建了dp数组存储中间结果,通过状态转移方程dp[i]=dp[i-1]+dp[i-2]+dp[i-3]逐步计算。同时给出了空间优化版本,仅使用四个变量替代数组,降低了空间复杂度。两种解法的时间复杂度均为O(n),空间优化版本将空间复杂度从O(n)降为O(1)。最后给出了示例代码实现这两种解法。

2025-05-29 21:27:06 395

原创 【在线五子棋对战】一、项目简介 && 环境搭建

本项目实现了一个基于网页的五子棋对战平台,主要功能包括: 用户管理模块:支持注册、登录、个人信息查看及天梯分数记录 游戏对战系统:基于玩家分数匹配对手,实现在线五子棋对战 实时聊天功能:支持对局中玩家交流 技术栈: 后端:C++11、Websocket++、JsonCpp、MySQL 前端:HTML/CSS/JavaScript/AJAX 开发环境:Linux(CentOS/Ubuntu)、GCC/GDB、Makefile 环境搭建: 基础工具:安装wget、lrzsz、Git、CM

2025-05-29 21:24:03 1024

原创 【分治】翻转对

本文介绍了使用归并排序和双指针方法解决LeetCode 493题「翻转对」问题。题目要求在数组中找到满足i < j且nums[i] > 2*nums[j]的重要翻转对数量。通过归并排序将数组分成子序列并递归处理,合并前利用双指针按降序计算翻转对数量,确保指针不回退以提高效率。关键步骤包括分治、双指针统计翻转对、合并有序数组。该方法时间复杂度为O(n log n),适用于大规模数据。

2025-05-28 16:34:34 486

原创 【网络编程】十八、Reactor模式

C/S 模型:服务端压力大P2P 模型:网络负载高 (可以看成 C/S 模型的扩展)2、服务器编程框架IO 处理单元:服务器管理客户端连接的框架,通常等待并接受新的客户端连接,接受客户端数据,将服务器响应返回给客户端. 但是数据收发不一定在IO 处理单元,也可能在逻辑单元中执行,取决于事件处理模式。逻辑单元:通常是一个线程或者进程,分析并处理客户端数据,然后把结果传递给 IO 处理单元或者直接发送客户端网络存储单元:数据库、缓存、文件等,非必须的请求队列:各单元之间的通信方式的抽象,通常被实现为

2025-05-28 16:33:04 967

原创 【分治】计算右侧小于当前元素的个数

本题要求计算数组中每个元素右侧小于它的元素个数,可通过归并排序的分治思想高效解决。由于归并排序会改变原数组元素顺序,需引入辅助数组 index 记录原始下标,确保排序过程中能正确累加结果到对应位置。 关键步骤: 创建辅助数组 index 存储元素原始下标。 归并排序采用降序处理,当左区间元素大于右区间时,计算右侧较小元素数量。 使用 tmp1 和 tmp2 分别处理原数组和 index 数组的归并过程。 通过 index 数组将结果累加到正确位置,保持时间复杂度为 O(n log n)。 该

2025-05-27 21:49:00 1033

原创 【网络编程】十七、多路转接之 epoll

epoll机制详解 epoll是Linux特有的高效多路复用IO机制,专为处理大规模并发连接设计。相比select/poll,epoll具有以下优势:1)支持大规模并发连接;2)采用高效的事件通知机制,避免无效遍历;3)内核管理事件表减少内存拷贝;4)支持边缘触发(ET)模式提升效率。 epoll系统调用包含三个核心函数: epoll_create() - 创建epoll实例,返回事件表文件描述符 epoll_ctl() - 管理事件表,支持添加/修改/删除监听事件 epoll_wait() - 等待

2025-05-27 21:46:14 903

原创 【分治】数组中的逆序对

本文介绍了两种基于归并排序的解法来计算数组中的逆序对数量。第一种思路利用升序排序,在合并过程中统计左区间大于右区间的元素个数;第二种思路通过降序排序,统计右区间小于左区间的元素个数。两种方法均通过分治策略将时间复杂度优化至O(nlogn),避免了暴力解法的O(n²)复杂度。代码实现中展示了升序合并时的关键判断逻辑,通过临时数组辅助完成排序与统计。该问题展示了归并排序在统计特定顺序对时的巧妙应用。

2025-05-26 13:16:32 1081

原创 【网络编程】十六、多路转接之 poll

select和poll都是POSIX标准的多路复用IO接口,核心区别在于: API设计不同:select使用fd_set集合,poll使用pollfd结构体数组 扩展性差异:select受FD_SETSIZE限制,poll无此限制 效率对比:poll通过链表管理描述符,效率略高 poll函数原型为int poll(struct pollfd *fds, nfds_t nfds, int timeout),其优势在于输入输出事件分离(events/revents)和突破描述符数量限制,但仍需

2025-05-26 13:12:32 683

原创 【分治】归并排序:递归版 && 非递归版

本文介绍了归并排序的递归和非递归实现方法,用于解决LeetCode上的“排序数组”问题。归并排序基于分治思想,递归版通过二分法将数组分为左右两部分,分别排序后再合并;非递归版则通过控制归并区间的大小,逐步将数组排序。两种方法都使用了辅助数组来存储中间结果,最终将排序后的数组返回。归并排序的时间复杂度为O(n log n),适用于大规模数据的排序。

2025-05-22 12:56:54 588

原创 【网络编程】十五、多路转接之 select

select 函数是一种用于多路复用输入/输出的系统调用,允许程序监视多个文件描述符的状态变化。它通过等待文件描述符的可读、可写或异常事件来实现,但本身不负责数据拷贝,拷贝工作由 read 或 write 等系统调用完成。select 函数的原型包括参数 nfds(监听的文件描述符总数)、timeout(超时时间)以及 readfds、writefds、exceptfds(分别表示可读、可写、异常事件的文件描述符集合)。这些集合通过位图表示,系统提供 FD_SET、FD_CLR 等宏操作位图。select

2025-05-22 12:54:59 1064

原创 【分治】最小的k个数

本文介绍了如何通过快速选择算法在整数数组中找到最小的k个数。与传统的排序或堆方法相比,快速选择算法的时间复杂度接近O(n),效率更高。算法的核心思想是随机选取基准值,并将数组分为三个区间:小于基准值、等于基准值和大于基准值。根据k与各区间的元素个数的关系,递归地在相应区间中寻找最小的k个数。最终,算法将前k个最小的数放在数组的最左边并返回。这种方法不仅高效,而且不需要返回有序数组,适用于大规模数据处理。

2025-05-21 10:16:40 884

原创 【网络编程】十四、五种常见IO模型详解

文章主要介绍了五种常见的IO模型,并通过钓鱼的例子形象地解释了这些模型的工作原理。五种IO模型分别是:阻塞式IO、非阻塞式IO、信号驱动式IO、多路转接式IO和异步IO。其中,前四种属于同步IO,进程或线程亲自参与IO处理;而异步IO则由操作系统处理完成后通知应用程序。文章还强调了IO的本质是“等待+数据拷贝”,提高IO效率的关键在于减少等待时间。此外,文章还介绍了高级IO中的重要概念,如同步与异步、阻塞与非阻塞的区别,并提到了一些高级IO技术,如非阻塞IO、多路转接等。最后,文章介绍了fcntl函数,用于

2025-05-21 10:14:11 1015

原创 【分治】数组中的第K个最大元素(快速选择算法)

本文介绍了如何在数组中找到第K个最大元素的两种方法。第一种方法是使用堆排序,通过维护一个大小为K的小根堆,遍历数组后将堆顶元素作为结果,时间复杂度为O(n log k)。第二种方法是快速选择算法,基于快速排序的分治思想,通过递归选择区间来找到第K个最大元素,时间复杂度为O(n)。文章详细解释了两种方法的实现思路,并提供了相应的代码示例。快速选择算法在时间复杂度上更优,适合处理大规模数据。

2025-05-20 09:24:10 933

原创 【网络编程】十三、DNS && ICMP && NAT/NAPT && 代理服务器

域名系统(DNS)是将域名转换为IP地址的应用层协议,基于UDP协议。最初通过hosts文件管理域名与IP的映射,但随着网络扩展,DNS系统应运而生,由组织管理机构维护数据库,自动查询域名对应的IP。域名解析过程包括查询浏览器缓存、操作系统缓存、本地hosts文件、本地DNS服务器,直至根DNS服务器和顶级DNS服务器。使用dig工具可以分析DNS解析过程。当在浏览器输入包含域名的URL时,会触发DNS查询,随后通过TCP/IP协议与服务器通信,获取并显示网页内容,包括静态资源和通过AJAX进行的异步请求。

2025-05-20 09:22:10 913

原创 【分治】快速排序

本文介绍了如何通过分治思想实现快速排序算法,以解决LeetCode上的“排序数组”问题。传统的快速排序在处理大量重复元素时效率较低,时间复杂度可能达到O(n^2)。为此,文章提出了一种改进方法,即将数组划分为左、中、右三部分,分别包含小于、等于和大于基准值的元素。这种方法在处理重复元素时效率更高。文章详细描述了如何随机选择基准值,并通过递归对左右两部分进行排序,直到区间缩小到无法再分。最终,通过这种改进的快速排序算法,能够高效地对数组进行升序排列。

2025-05-19 11:24:44 992

原创 【网络编程】十二、两万字详解 IP协议

网络层负责将数据从一台主机传输到另一台主机,主要解决数据路由问题。数据在传输过程中需要经过封装、路由和解包的过程,类似于从一栋楼到另一栋楼的路径选择。网络层通过路由器进行路径选择,路由器通过路由表找到最短路径。IP协议是网络层的核心协议,其报头包含版本号、首部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、首部检验和、源IP地址、目的IP地址等字段。IP协议通过定长报头和自描述字段的方式分离报头和有效载荷,并根据协议字段决定将有效载荷交付给上层的哪个协议。

2025-05-19 11:22:43 1168

原创 【分治】颜色分类

文章介绍了如何通过分治思想解决LeetCode上的“颜色分类”问题。该问题要求将包含0、1、2的数组原地排序,使得相同颜色的元素相邻,并按0、1、2的顺序排列。文章详细解释了使用三个指针(left、right、i)来维护数组的三个部分(0、1、2)的边界,并通过遍历数组将元素分类到相应的区间。具体操作包括交换元素和移动指针,最终实现数组的排序。文章还提供了C++代码示例,并强调了遍历时只需到right指针即可,避免重复交换。通过这种方法,可以在常数空间内完成一趟扫描的排序。

2025-05-17 16:01:16 638

原创 【网络编程】十一、四万字详解 TCP 协议

TCP协议是互联网中广泛使用的传输层协议,主要提供可靠性保证,广泛应用于HTTP、HTTPS、FTP等上层协议。网络中的不可靠性源于长距离数据传输中可能出现的各种问题,TCP协议通过复杂的机制确保数据无差错、不丢失、不重复且按序到达。相比之下,UDP协议简单但不保证可靠性,适用于允许少量丢包的场景。TCP的主要特点包括面向连接、可靠交付、全双工通信和面向字节流。TCP报文段的首部格式包含源端口、目的端口、序列号、确认应答号、首部长度、标志位、窗口大小和检验和等字段,这些字段共同确保TCP协议的功能实现。

2025-05-17 15:58:47 677

原创 【滑动窗口】最小覆盖子串

本文介绍了如何解决LeetCode上的“最小覆盖子串”问题,要求找到字符串s中包含字符串t所有字符的最短子串。通过使用哈希表和滑动窗口技术,结合计数器count来统计有效字符的种类,而不是次数,从而优化了算法的时间复杂度。具体步骤包括:初始化哈希表统计t中字符的出现次数和种类,使用双指针left和right遍历s,通过进窗口和出窗口操作更新哈希表和count,并在count等于t中字符种类时更新最小子串的长度和起始位置。最终,算法在O(n)时间内找到并返回最小覆盖子串。

2025-05-16 23:16:27 724

原创 【网络编程】十、详解 UDP 协议

传输层是网络协议栈中的关键部分,负责在主机之间提供可靠的数据传输服务。它通过端口号标识应用进程,实现数据的复用和分用。传输层协议如UDP和TCP,确保数据从源主机正确传送到目标主机。UDP协议以其简单性和高效性著称,适用于对实时性要求较高的应用。UDP首部包含源端口号、目的端口号、报文长度和检验和等字段,确保数据的基本传输需求。端口号的引入解决了进程标识符在网络通信中的不稳定性问题,使得网络通信更加可靠和高效。通过五元组(源IP、源端口、目的IP、目的端口、协议号)可以唯一标识一个通信会话,确保数据正确交付

2025-05-16 23:14:37 1425

原创 【滑动窗口】串联所有单词的子串

文章讨论了如何在字符串 s 中查找所有包含 words 数组中所有单词的串联子串的起始索引。words 中的单词长度相同,串联子串是指包含 words 中所有单词以任意顺序排列连接起来的子串。解题思路借鉴了滑动窗口和哈希表的方法,通过将字符串 s 按单词长度分段跳跃遍历,类似于希尔排序的跨步思想。具体步骤包括:使用哈希表统计 words 中单词的出现次数,滑动窗口的移动幅度为单词长度,执行次数为单词长度。代码实现中,通过哈希表记录窗口内的单词频率,并与 words 中的频率进行比较,找到符合条件的子串起始索

2025-05-15 16:23:21 979

原创 【网络编程】九、详解 HTTPS 加密原理

HTTPS 是在 HTTP 基础上加入 SSL/TLS 加密层,解决了 HTTP 明文传输的安全问题,如窃听、篡改和冒充风险。HTTPS 通过加密、校验机制和身份证书保障数据安全,其默认端口为 443,而 HTTP 为 80。HTTPS 在 TCP 三次握手后还需进行 SSL/TLS 握手,确保通信安全。加密和解密过程中,对称加密使用同一密钥,速度快但安全性较低;非对称加密使用公钥和私钥,安全性高但速度慢。数据摘要(如 MD5、SHA)用于验证数据完整性,不可逆且常用于文件比对和密码存储。HTTPS 的广泛

2025-05-15 16:19:22 1416 2

原创 【滑动窗口】找到字符串中所有字母异位词

本文讨论了如何在字符串 s 中找到所有与字符串 p 的异位词子串的起始索引。异位词指由相同字母重排列形成的字符串。文章提出了两种解题思路: 哈希表 + 暴力破解:通过哈希表记录 p 的字符频率,并在 s 中滑动窗口,逐个比较字符频率是否匹配。该方法时间复杂度较高,适用于小规模数据。 哈希表 + 滑动窗口优化:在暴力破解的基础上,优化了窗口滑动过程,避免重复计算。通过维护一个固定大小的窗口,减少不必要的回退操作,显著提升了效率。进一步优化通过引入 count 变量,记录窗口中有效字符的个数,减少哈希表的比较次

2025-05-14 13:02:33 1056

原创 【网络编程】八、Cookie && Session && 抓包原理

HTTP协议本质上是无状态的,每次请求或响应之间没有关联,导致服务器无法识别客户端身份,影响用户体验。为解决这一问题,引入了Cookie技术,浏览器通过保存用户信息(如账号密码)并在后续请求中自动发送,实现了会话保持功能。然而,Cookie存在安全问题,如信息泄露和伪造风险。为进一步提高安全性,引入了Session机制,服务器生成并管理Session ID,用户通过Cookie保存Session ID,服务器通过验证Session ID进行身份识别。尽管Session机制提高了安全性,但仍面临伪造攻击等风险

2025-05-14 13:00:44 1097

原创 【滑动窗口】水果成篮(经典题目)

本文介绍了LeetCode题目“904. 水果成篮”的解题思路。题目要求在一排果树上采摘水果,但只能使用两个篮子,每个篮子只能装一种水果。通过滑动窗口的方法,可以有效地解决这个问题。滑动窗口的核心在于确定窗口内的内容、如何移动窗口的起始和结束位置。具体实现时,使用哈希表来统计窗口内水果的种类和数量,通过左右指针的移动来调整窗口大小,最终计算出可以采摘的最大水果数量。代码实现中,通过遍历数组和调整窗口,不断更新最大水果数量,最终返回结果。

2025-05-13 13:19:30 1120

原创 【网络编程】七、详解HTTP && 搭建HTTP服务器

这个要从万维网说起!万维网WWW(World Wide Web) 是一个大规模的、联机式的信息储藏所,英文简称为 Web,而不是什么特殊的计算机网络。它提供了一种链接的方式,能够非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息,具体的细节我们这里不展开讲!​ 同时万维网也是一个 分布式的 超媒体(hypermedia)系统,它是 超文本(hypertext)系统的扩充。所谓超文本是指包含指向其它文档的链接的文本,也就是说,一个超文本由多个信息源链接成,而这些信息源可以分布在世界

2025-05-13 13:17:36 1285

原创 【滑动窗口】将 x 减到 0 的最小操作数

题目要求通过移除数组 nums 的最左或最右元素,将整数 x 减到 0,并返回最小操作数。若无法实现,则返回 -1。解题思路采用“正难则反”策略,将问题转化为求数组中间一段最长连续区间,其元素和等于 sum - x(sum 为数组总和)。通过滑动窗口技术,遍历数组,找到满足条件的最大区间长度,最终用数组长度减去该区间长度即为最小操作数。若无法找到满足条件的区间,则返回 -1。

2025-05-12 10:29:28 315

原创 【网络编程】六、序列化与反序列化 && 定制协议

文章主要介绍了协议、序列化与反序列化的概念及其应用,并通过自定义协议实现一个网络版计算器的案例进行说明。 协议:协议是计算机系统或网络设备之间通信的规范,定义了数据格式、传输方式、错误处理等,确保不同设备能够正确交换信息。常见的协议包括TCP/IP、HTTP、SMTP等。 序列化与反序列化:序列化是将对象转换为字节流以便传输或存储,反序列化则是将字节流还原为对象。序列化通常使用二进制格式,常见的序列化工具有JSON、XML、protobuf等。 自定义协议实现网络版计算器:通过自定义协议,实现了一个简单的网

2025-05-12 10:27:34 1123

原创 【滑动窗口】最大连续1的个数 III

文章摘要: 题目要求在一个二进制数组中找到连续1的最大个数,允许翻转最多k个0。通过滑动窗口算法,可以高效解决此问题。具体思路是:使用双指针维护一个窗口,记录窗口内0的个数。当0的个数超过k时,移动左指针直至窗口内0的个数不超过k。在此过程中,不断更新窗口的最大长度。最终,窗口的最大长度即为连续1的最大个数。此方法避免了直接翻转0的复杂性,通过记录0的个数来间接解决问题,时间复杂度为O(n)。

2025-05-10 09:16:32 552

原创 【网络编程】五、三次握手 && 四次挥手

本文详细介绍了TCP协议中的三次握手、通信过程以及四次挥手的机制。首先,三次握手通过客户端和服务端的SYN和ACK报文段建立连接,确保双方进入ESTABLISHED状态。接着,通信过程中,客户端和服务端通过send()和recv()函数进行数据传输,体现全双工通信特点。最后,四次挥手通过FIN和ACK报文段逐步关闭连接,客户端进入TIME_WAIT状态等待2MSL时间后释放连接,服务端在收到确认后直接进入CLOSED状态。整个过程确保了TCP连接的可靠性和有序性。

2025-05-10 09:15:18 1162

原创 【滑动窗口】无重复字符的最长子串

本文介绍了如何找到字符串中不包含重复字符的最长子串的长度。首先通过暴力破解方法,利用哈希表统计字符出现的频次,判断子串是否重复,但该方法时间复杂度较高,容易超时。接着提出了优化的滑动窗口算法,通过双指针(left 和 right)动态调整窗口大小,避免重复遍历。当遇到重复字符时,移动 left 指针直到窗口内不再有重复字符,同时更新最大子串长度。该算法的时间复杂度为 O(n),效率更高。代码实现中使用了哈希表记录字符频次,并通过滑动窗口机制确保窗口内字符唯一,最终返回最长子串的长度。

2025-05-09 07:39:01 1000

原创 【网络编程】四、守护进程实现 && 前后台作业 && 会话与进程组

守护进程(daemon)是一种在后台运行的特殊进程,通常在系统启动时启动,并在系统关闭时终止。它不与用户交互,也没有控制终端,通常以超级用户权限运行,用于执行特定任务或提供服务,如网络服务、系统监控等。守护进程的关键特点是能在系统崩溃或重启后自动恢复,确保服务连续性。会话(session)是一个或多个进程组的集合,包含一个前台进程组和多个后台进程组。会话中的进程组可以通过 shell 命令进行前后台切换,作业可以通过 fg 和 bg 命令在前后台之间转换。前台进程组负责与用户交互,而后台进程组则在后台执行

2025-05-09 07:36:55 1270

原创 【滑动窗口】长度最小的子数组

​ 暴力解法的思路比较简单,就是枚举所有的子数组,看看那些数组和满足要求的数组中长度最小的那个,那么无非就是套两层循环,用。​ 仔细想想,要是所有元素的值都是正的,那么在子数组中就不存在说遍历一个元素之后总和会变小的情况,也就是说,​ 切记,我们不要想着如何使用 “滑动窗口” 来解决问题,而是要思考,为什么要用 “滑动窗口”❓❓❓。​ 这样子通过双指针的移动,看起来就像是一个窗口在平移,所以才叫做 “滑动窗口”!​ 首先我们不去管其它解法,就单单暴力解法来说,我们也得先了解它是怎么走的!

2025-05-08 08:46:48 905

原创 【网络编程】三、TCP网络套接字编程

否则这个执行函数的第一个参数是隐藏的 this指针,就会报错!​ 但在线程的执行例程当中会调用。

2025-05-08 08:41:58 1226

原创 【卡特兰数】不同的二叉搜索树

的每个数依次插入二叉树,可以推断当确定了一个根节点之后,左右字数的节点个数就确定了!​ 一般这类动态规划,找状态表示比较难,都是通过 “举例 + 抽象出相同的子问题” 来表示状态!​ 难的是如何推导状态转移方程,因为它跟我们之前常见的状态转移方程不是很像。​ 而又因为二叉搜索树的左右子树个数问题其实是一个排列问题,就可以得到。​ 所以我们现在专门针对某个元素为根节点来研究一下会有多少。就相当于是没节点,其实这也属于一种二叉搜索树,所以。来说,我们可以按照以下规则来划分,分成不同的。​ 因此,我们只需要。

2025-05-07 22:56:35 1069

原创 【网络编程】二、UDP网络套接字编程详解

​ UDP相当于 TCP来说细节少了很多,所以我们先从简单的 UDP套接字编程下手,因为其涉及到的细节比较少,也很直接,就是面向报文,服务端拿到信息就直接丢给客户端,丢了也不管,无需我们关系太多细节,等我们把 UDP套接字编程稍微掌握了,其实 TCP的那套接口也是类似的,但是我们学 TCP的时候,需要去了解它的传输细节。​ 下面我们就从 UDP套接字编程开始,分为服务端和客户端,我们先讲服务端,客户端也就顺其自然了解了!

2025-05-07 22:52:38 1492

原创 【前缀和】矩阵区域和

​ 那其实这道题我们就可以用之前学过的二维前缀和来解决,大体思路都是一样的,虽然我们给过模板,但是切记不要死记硬背,要理解模板是怎么来的!,但问题是,有可能这个区间的一部分是越界的,但是我们只要有效区间,所以我们需要做处理而不能单纯的让 x1 = 中心坐标 - k。之后,问题就和二维前缀和模板题是一样的了,根据状态表示,我们要求的区间 [x1, y1],这样子一来一旦越界了,最后它们得到的值其实就是最后一行或者最后一列的坐标!语句进行判断的话,其实是比较麻烦的,所以我们这里借用最值函数 max()

2025-05-06 11:04:21 830

c/c++实现高并发内存池

项目介绍:参考了谷歌的开源项目 tcmalloc,实现了一个高并发的内存池。该项目利用了 ThreadCache、CentralCache、PageCache 三级缓存结构,基于多线程申请释放内存的场景,最大程度地提高了效率,解决了绝大部分内存碎片问题。 开发环境:Visual Studio 2022 项目技术:C++11、多线程、TLS 机制、单例模式、池化技术、桶锁机制、基数树、链表、哈希等。

2025-01-25

嵌入式软件服务器开发的毕业实习总结:温湿度监测系统的设计与实现

内容概要:本文详述了一位学生在嵌入式软件服务器开发的毕业实习中的经验。重点介绍了如何基于服务器-客户端模型构建温湿度监测系统。通过此项目,作者深入了解并掌握了Linux环境、C语言编程、多线程编程、网络编程以及SQLite3数据库管理等关键技能。文中详细记录了从项目初期的需求分析到最后的模块化编程实现的具体步骤和技术细节,展示了温湿度数据的生成、传输和存储的全流程。同时,也反映了实习过程中遇到的实际问题及解决方案,特别是随机数生成、Socket通信和数据存储等方面的难题攻克。 适合人群:对嵌入式系统和服务器开发感兴趣的计算机专业在校生、初入职场的研发人员。 使用场景及目标:适用于希望通过实际项目加深对计算机科学领域核心技术(如嵌入式开发、网络编程、多线程、数据库)理解和应用的学生群体,旨在帮助他们掌握项目规划与实施的方法论,培养解决复杂工程问题的能力。 阅读建议:该实习报告提供了详细的实践指南和技术要点解析,读者可以在研读时对照每个技术点进行实践,尤其是Linux环境配置、服务器架构设计以及各个功能模块的调试,有助于更好地理解理论背后的工程意义和应用价值。

2025-01-25

(校内课程设计)c/c++实现停车场管理系统

在该文档中总结了包括了一、实验目的 二、原理与方案 三、步骤 四、函数功能模块 五、数据记录与处理 六、结果分析 七、实验心得 八、源代码

2025-01-25

(校内课程设计)c/c++实现操作系统核心算法模块

进程管理模块、存储器管理模块、虚拟存储器管理模块、文件管理模块,全在文档内要图片和流程详解,包括源码也在文档中!

2025-01-25

c++实现在线版五子棋(包含Websocket++、JsonCpp、Mysql、c++11、BlockQueue阻塞队列、HTML / CSS / JS / AJAX等技术栈的使用)

直接在项目中使用make命令即可进行编译然后执行可执行文件即可!一些环境安装的方法可以私聊我的csdn博客来问我就行!

2025-01-25

C语言easyx图形编程小项目--飞机大战

1.运行环境为vs2022 2.此版本为入门版本,适合新手学习。

2022-02-10

空空如也

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

TA关注的人

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