- 博客(91)
- 收藏
- 关注
原创 数据结构——绪论
算法评估和时间复杂度计算。摘要需简洁概括。注意字数限制。</think>本文介绍了数据结构的基本概念,包括数据元素、逻辑与存储结构,并讲解了算法评估标准,重点阐述时间复杂度的分类与计算方法,通过单层、嵌套及多层循环例题演示求解步骤,为后续学习奠定基础。
2026-08-31 19:02:00
223
原创 仿muduo的线程封装
本文介绍了基于"一个连接一个线程"模型设计的Connection模块实现。该模块通过LoopThread类封装线程与事件循环(EventLoop),每个线程运行独立的事件循环。LoopThreadPool类管理线程池,提供负载均衡的事件循环分配机制。系统采用主从Reactor模型,主线程(baseloop)负责连接管理,工作线程处理具体连接任务。用户通过TcpServer类整合这些功能,可设置线程数量并启动服务。该设计实现了高效处理并发连接,核心组件包括LoopThread、EventL
2025-10-12 20:41:18
892
原创 仿mudou的Acceptor模块(管理连接)
文章摘要: 该文介绍了Acceptor模块的设计与实现,作为TcpServer的子模块专门负责新连接管理。核心思路是将连接创建与业务处理分离,通过多线程提升效率。Acceptor模块包含Socket、EventLoop和Channel三个关键成员,利用回调机制(_accept_callback)将新建连接交由上层处理。重点说明了不能过早启动事件监控,需先设置回调函数避免资源泄漏。实现上通过CreateServer创建监听套接字,HandleRead处理新连接事件,最终将连接fd通过回调传递。该模块职责单一,
2025-10-11 09:00:00
360
原创 仿mudou——Connection模块(连接管理)
Connection是 muduo 网络库的核心类封装一次 TCP 连接的全生命周期及数据传输逻辑连接全生命周期管理建立连接:由TcpServer在subLoop(子事件循环)中构造,完成后向注册感兴趣的 IO 事件(如读、写),并维护连接状态。断开连接:通过shutdown分两步关闭(先关 “写” 端、保证数据发送完整,再关 “读” 端),同时清理资源(如取消事件注册、释放缓冲区)。资源生命周期:通过shared_ptr管理自身生命周期,避免回调时对象提前析构(配合延长生命期)。数据传输与处理。
2025-10-10 19:31:05
1160
原创 模仿muduo库——Eventloop
本文介绍了muduo网络库中EventLoop模块的设计与实现。EventLoop作为核心调度器,负责事件监控、分发和任务调度,采用单线程模型确保线程安全。模块包含Poller(IO事件监控)、TimerWheel(定时任务管理)、eventfd(事件通知)等关键组件。通过任务队列实现跨线程操作,利用eventfd唤醒epoll阻塞。文章详细阐述了EventLoop的构造函数、任务执行流程(事件监控-就绪处理-任务执行)以及线程安全机制,并以TCP服务器示例展示了实际应用场景。EventLoop通过整合多个
2025-09-29 23:17:17
1110
原创 muduo库eventloop所需模块设计
本文介绍了基于muduo库实现的OneThreadOneLoop主从Reactor模型,重点解析了其核心模块的设计与实现。主要包括:Buffer模块采用环形数组管理数据读写;Socket模块封装基础套接字操作;Channel模块作为事件处理器桥接描述符与Poller;Poller模块封装epoll实现事件监控;TimerWeel模块通过时间轮算法管理定时任务。文章详细阐述了各模块的架构设计、技术实现细节,特别是时间轮定时器和事件回调机制的关键技术点。整体架构采用Reactor模式,每个连接对应独立线程,通过
2025-09-28 00:25:13
745
原创 仿muduo库One Thread One Loop主从Reactor模型实践——介绍
本文介绍了一个基于C++实现的高性能服务器项目,采用主从Reactor模型和OneThreadOneLoop架构。项目核心包括SERVER模块(实现Reactor模型的TCP服务器)和协议模块(提供HTTP支持),具有多线程、非阻塞IO、连接管理等特性。通过Buffer、Socket、Channel等核心模块的设计,实现了高效的网络通信框架。性能测试显示在4核4G环境下可稳定处理上万并发连接。该服务器适用于API服务、实时通信等多种场景,未来计划进一步优化性能和扩展功能。
2025-09-26 01:49:14
965
原创 MySQL基本查询与数据操作全面解析
Create(创建):插入数据Retrieve(读取):查询数据Update(更新):修改数据Delete(删除):删除数据本文将通过丰富的代码示例,详细解析MySQL中CRUD的实现方式及注意事项。避免全列查询:减少数据传输量,提升性能。谨慎使用UPDATE/DELETE:操作前备份数据,或添加LIMIT限制。合理使用索引:WHERE和ORDER BY字段建立索引可加速查询。事务管理:批量操作时开启事务,确保数据一致性。
2025-04-22 19:49:32
863
原创 MySQL增删改查(CRUD)操作详解与实战指南
避免全列查询:使用SELECT *可能导致性能问题,明确指定所需字段。谨慎更新/删除:操作前务必确认WHERE条件,可先通过SELECT验证。索引优化:频繁查询的字段建议添加索引,但需权衡写入性能。事务处理:批量操作时使用事务,确保数据一致性。通过本文的学习,相信你已经掌握了MySQL的核心操作。建议结合实战题目(如LeetCode SQL题库)进一步巩固技能,提升解决复杂问题的能力。
2025-03-31 22:07:18
1475
原创 MySQL表的约束详解:保障数据完整性与业务逻辑
NULL:允许字段为空(默认值)。NOT NULL:字段必须有值,禁止为空。作用:避免空值参与运算时产生意外结果,强制业务必填字段。因为name设置了不允许为空,所以在让name为空时插入被约束;age默认值就是空,在缺省参数时,默认是空;为字段设置默认值,当插入数据未指定该字段时,自动填充默认值。注意:默认值字段允许为NULL时,未赋值会填充默认值;若同时设置NOT NULL,则必须显式赋值或依赖默认值。数据在插入的时候不给该字段赋值,就使用默认值。
2025-03-18 14:54:56
916
原创 MySQL——数据类型
通过理解各类型的特性及适用场景,开发者可以优化存储结构,提升系统性能,减少潜在zhzh。我们知道每个汉字占3个字节,那么在c语言中,6个字节就只能存2个汉字,但在mysql当中一个汉字就是一个char。char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。UTF-8下,VARCHAR最大长度为21844字符(每个字符占3字节)。GBK下,最大为32766字符(每个字符占2字节)。:4字节,精度约7位,适用一般科学计算。:8字节,精度约15位,适合高精度需求。
2025-03-17 23:11:39
1303
原创 MySQL库和表的操作详解:从创建库到表的管理全面指南
建议结合实践加深理解,例如在本地环境中模拟不同校验规则的查询场景,或尝试备份恢复真实项目数据。通过本文,您已掌握MySQL表的核心操作,从基础设计到高级优化均有覆盖。建议结合项目需求实践,例如设计一个用户管理系统,练习表关联、事务处理等复杂场景。:避免过度索引,优先为高频查询字段和 WHERE 条件列建索引。备份文件本质是SQL脚本,包含建库、建表及插入数据的语句。:监控当前数据库连接,识别异常请求(如未知用户连接)。:插入的数据在关联表中不存在。:表字符集与客户端不匹配。:删除数据或事务回滚导致。
2025-03-12 20:01:57
1177
原创 MySQL——基础知识
数据库特点MySQL最流行的开源数据库,并发性能好,适合电商、论坛等场景。Oracle功能强大,适合复杂业务逻辑,但成本高。SQL Server微软生态首选,适合中大型项目。SQLite轻量级嵌入式数据库,资源占用极低。PostgreSQL开源且功能丰富,支持复杂查询和自定义类型。
2025-03-12 15:56:31
807
原创 C++11——智能指针和function库
智能指针所有权拷贝/赋值性能开销适用场景unique_ptr独占只能移动无单一所有权,明确生命周期shared_ptr共享允许拷贝引用计数共享所有权,不确定生命周期weak_ptr无(仅观察)允许拷贝无计数解决循环引用,观察资源。
2025-03-02 17:48:45
1103
原创 网络ip协议
打破传统分类限制,灵活分配地址。禁止分片,若路由器发现数据包超过MTU,返回ICMP“需要分片”错误,发送方调整数据包大小。可容纳约1677万台主机(2^24 - 2),但仅有126个A类网络(如政府、大型企业)。就是当主机和路由器断开连接时,路由器将主机的ip回收,在下次连接网络时,重新获得新的IP。早期用于QoS(服务质量),如优先级、延迟、吞吐量等(实际使用较少)。用于自治系统(AS)之间的路由,基于策略选择路径(如运营商级路由)。用于扩展功能,如安全选项、时间戳、松散源路由等(实际极少使用)。
2025-02-19 19:27:58
787
原创 tcp首尾及总结
TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。它主要负责在应用程序之间提供可靠的数据传输服务,确保数据在传输过程中不丢失、不重复且按序到达。
2025-02-18 14:42:40
1147
原创 tcp传输协议机制
客户端发送 SYN 报文,携带自己的初始序列号(ISN)。目的是告诉服务器:“我想和你建立连接,我的序列号从 ISN 开始。
2025-02-12 20:13:22
1175
原创 C++11语法及库详解
C++11 引入了许多现代编程语言的特性,极大地提升了 C++ 的表达能力和开发效率。掌握这些特性可以帮助开发者编写更高效、更安全的代码。C++11 的标准库扩展极大地增强了语言的功能性,提供了更现代化的工具和组件。这些库组件与语言特性相结合,使得 C++11 成为一个更强大、更高效的编程语言版本。
2025-02-11 21:06:40
1326
原创 TCP协议报头及各个字段的作用
TCP报头通过精细设计的字段协同工作,实现了可靠传输、流量控制、拥塞控制及连接管理。理解各字段的作用是掌握TCP协议运作机制的基础,尤其在网络调试和优化中至关重要。
2025-02-11 18:50:27
1246
原创 Linux——网络(https)
对称加密:加密和解密使用相同密钥,速度快但密钥管理困难。非对称加密:使用一对密钥(公钥和私钥),公钥公开,私钥保密,主要用于密钥交换和数字签名。数字证书:由权威机构颁发,用于证明公钥持有者身份的文件。
2025-02-10 00:30:55
1686
原创 Linux——网络(http协议)
也就是我们数据是长链接还是短链接,当我们打开一个有100张照片页面时,长链接是我们一次性将照片和index页面加载过去;我们90%的方法都是GET和POST方法,其中GET方法占80%,那么这两个协议有什么区别呢?这里我们用的是post的方法,然后代码运行起来发现是在空行下面以正文的方式显示出来的;我们发现它是在url当中的,这就是两个方法的不同之处;返回的数据(如 HTML、JSON、图片等)。:资源的唯一标识符(用于缓存验证)。:请求正文的 MIME 类型(如。:通常是 URL 的路径(如。
2025-02-09 01:48:27
942
原创 linux——网络(服务器的永久不挂——守护进程)
Linux——网络(tcp)-优快云博客1、fork()功能:用于创建一个新的进程,这个新进程是调用进程(父进程)的副本,被称为子进程。在调用fork()之后,父进程和子进程会从fork()调用处开始继续执行,通过fork()的返回值来区分是父进程还是子进程。返回值在父进程中,返回子进程的进程 ID(PID),是一个正整数。在子进程中,返回 0。如果出错,返回 -1。示例代码return 1;// 子进程} else {// 父进程return 0;
2025-02-05 00:28:15
129267
原创 Linux——网络(tcp)
Linux——网络基础(1)-优快云博客Linux——网络(udp)-优快云博客TCP协议概述:简要介绍TCP协议的基本特性,包括连接建立、数据传输、流量控制、拥塞控制等。Linux网络编程基础:介绍Linux下的Socket编程接口,以及如何使用这些接口进行TCP通信。TCP服务器与客户端的实现:通过实际的代码示例,展示如何编写一个简单的TCP服务器和客户端程序。TCP协议的性能优化:探讨如何通过调整TCP参数、使用非阻塞I/O、多线程/多进程等技术来提升TCP应用的性能。
2025-01-27 23:25:06
1866
原创 Linux——网络(udp)
Linux——网络基础(1)-优快云博客一、upd函数及接口介绍1. 创建套接字 -socket函数domain:指定协议族,对于 UDP 编程,通常使用AF_INET表示 IPv4 协议族。type:指定套接字类型,对于 UDP,使用SOCK_DGRAM表示数据报套接字。protocol:指定具体的协议,一般设置为 0,让系统自动选择合适的协议(对于SOCK_DGRAM通常为 UDP)。返回值:成功时返回一个非负的套接字描述符;失败时返回 -1,并设置errno以指示错误类型。
2025-01-26 21:15:26
2060
原创 Linux——网络基础(1)
linux——网络基础-优快云博客一、文件传输协议这张图展示了 FTP(文件传输协议)通信过程中各层协议的交互逻辑,涉及应用层、传输层、网络层和数据链路层,以下是详细通信逻辑和过程:应用层FTP 客户发起请求:FTP 客户有文件传输需求,依据 FTP 协议向 FTP 服务器发送请求,比如请求下载或上传文件。此时,FTP 客户生成 FTP 协议数据单元(PDU),包含具体的操作指令(如读取文件列表、下载文件等)。传输层TCP 封装:FTP 客户的请求数据到达传输层后,TCP 协议对其进行封装。
2025-01-26 01:02:19
1969
原创 linux——网络基础
目录文章目录踏入网络世界:探索 Linux 网络的无垠天地一、网络发展早期单机处理模式网络发展的需求催生网络发展后的优势对比二、局域网or广域网典型局域网架构广域网连接多个局域网二者关系三、协议语言层与汉语协议通信设备层与电话机协议接口的作用分层与变更的好处四、OSI(Open System Interconnection)七层模型物理层数据链路层网络层传输层会话层表示层应用层五、TCP/IP 五层模型TCP/IP 四层模型发送端封装过程接收端解包过程总结在数字化浪潮奔涌的当下,网络已成为连接世界的无形纽带
2025-01-25 00:07:59
2506
原创 Linux——线程首尾(各个小知识及理解)
pthread_cp_1_21 · MFF的库/linux - 码云 - 开源中国 (gitee.com)环形队列,线程池及线程的封装。一、线程安全的单例模式是什么?单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在多线程环境下,实现线程安全的单例模式有多种方式,以下是几种常见的实现方式:饿汉式特点:在类加载时就立即创建单例实例,不存在线程安全问题,因为类的加载是由 JVM 保证线程安全的。
2025-01-23 00:53:06
928
原创 Linux——信号量和(环形队列消费者模型)
信号量(Semaphore)是一种用于多线程或多进程环境下实现同步和互斥的机制。一、信号量是什么?信号量本质上是一个计数器,用于控制对共享资源的访问。它的值表示当前可用的资源数量。当一个线程或进程想要访问某个共享资源时,它需要先检查信号量的值。如果信号量的值大于 0,则表示有可用资源,该线程或进程可以获取资源并将信号量的值减 1;如果信号量的值为 0,则表示没有可用资源,该线程或进程需要等待,直到其他线程或进程释放资源,使信号量的值大于 0。
2025-01-21 22:24:15
1480
原创 Linux——线程条件变量(同步)
上篇博客我们介绍基础的线程控制及线程的锁;还有互斥,那么有了互斥就有同步;我们介绍互斥是多个线程去抢占一个共享资源对其操作,从而导致共享资源的紊乱,为了解决这个问题我们引入了锁,对其加锁了以后共享资源的处理就不会出现同时进行处理了;那么对于一个共享资源我们想要同时对其操作有应该怎么办呢?那么我们就介绍一下同步机制。初始化等待条件变量唤醒线程销毁条件变量。
2025-01-19 23:54:11
1113
原创 Linux——多线程的控制
我们在上一篇博客中学习了单线程的基本控制,及创建、阻塞、终止等操作,这篇博客介绍多个线程的控制。一、线程函数的认识1、基本函数的回顾1、线程的创建pthread_create2、线程阻塞pthread_join3、线程退出pthread_exit线程锁是多线程编程中的一个重要概念,主要用于解决多线程并发访问共享资源时可能出现的竞态条件1、生活案例介绍锁。
2025-01-19 01:22:04
1071
原创 Linux——线程的慨念及控制
进程是资源分配的基本单位线程是调度的基本单位线程共享进程数据,但也拥有自己的一部分数据:线程ID一组寄存器栈errno信号屏蔽字调度优先级进程的多个线程共享 同一地址空间,因此Text Segment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:文件描述符表每种信号的处理方式(SIG_ IGN、SIG_ DFL或者自定义的信号处理函数)当前工作目录用户id和组id关系图。
2025-01-18 03:39:00
728
原创 Linux——信号的补充
Linux——信号的创建、保存和处理-优快云博客信号是 Linux 系统中一种强大的进程间通信和进程控制机制。通过kill命令或kill函数发送信号,通过signal或sigaction函数处理信号。信号处理函数需要考虑可重入性和信号屏蔽字,避免使用不可重入函数。信号可以是同步或异步的,根据不同的来源和情况进行处理。
2025-01-17 00:45:16
860
原创 Linux——信号的创建、保存和处理
上一篇博客讲解了3种创建信号的方式1、键盘输入的方式;比如ctrl+c等2、系统调用接口;abort这3个接口3、命令行;这篇再介绍最后两种方式一、创建进程的信号回忆前三种常见信号方式1、键盘输入方式在进程运行时,我们输入ctrl+c(2号型号)依次方式获得信号;2、系统接口3、指令获得信号在我们进程在运行时,我们输入指令加上所需要的信号再加需要接受信号的pid即可;现在我们学习信号获得信号方式。
2025-01-16 02:56:23
1220
原创 Linux——进程信号
信号是操作系统中用于进程间通信或者操作系统与进程间通信的一种异步事件通知机制。它就像是一种 “软件中断”,进程在运行过程中,不需要主动去检查某个事件是否发生,而是当事件发生时(信号产生),操作系统会将信号发送给相关的进程。信号有多种类型,每种类型代表不同的事件,如终止信号(SIGTERMSIGKILL)、暂停信号(SIGSTOPSIGTSTP)、继续信号(SIGCONT)等。
2025-01-14 03:07:52
824
原创 linux——进程间通信system V消息队列
在之前我们手搓管道时,我们知道进程和进程之间想要通信,我们得有一块公共的内存来进行数据的交互一、system V消息队列是什么?定义System V 消息队列是 System V IPC(Inter - Process Communication,进程间通信)机制中的一种。它提供了一种在不同进程之间传递消息的方式,这些进程可以在同一台计算机上运行。消息队列允许一个进程向消息队列发送消息,而另一个进程从这个消息队列中读取消息,从而实现进程间的异步通信。共享内存是在内存是唯一确。
2024-12-04 00:37:34
1135
原创 Linux——命名管道及日志
在我们循环创建子进程的时候,子进程回去拷贝父进程的页表,这样就会让下一个要创建的子进程指向上一个子进程。就会像图片中的这样。一、命名管道是什么?定义命名管道(Named Pipe)是一种进程间通信(IPC)机制。它可以在同一台计算机的不同进程之间,或者在跨越网络的不同计算机的进程之间进行通信。命名管道就像是一个管道,数据可以通过这个管道在进程之间流动,并且它有一个名字,就像文件一样可以被其他进程识别和访问。与匿名管道的区别。
2024-12-02 23:48:52
1570
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅