自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux网络编程:I/O多路转接之epoll

本文介绍了Linux中的高效I/O多路复用机制epoll。相比select/poll需要遍历所有文件描述符,epoll采用事件驱动模式,只处理就绪的fd,显著提升了性能。文章详细阐述了epoll的核心组件:epoll_create创建实例、epoll_ctl管理监控列表、epoll_wait获取就绪事件;并比较了水平触发(LT)和边缘触发(ET)两种模式的特点,ET模式通过一次性处理所有数据可达到更高性能。最后通过餐厅服务员的比喻形象说明了epoll的工作原理,并给出了基于epoll实现的回声服务器代码示例

2025-12-04 12:23:39 692

原创 Linux网络编程:结合内核数据结构详谈epoll的工作原理

摘要:epoll通过三大核心数据结构实现高效I/O多路复用:1) eventpoll作为管理中心,维护红黑树(rbr)存储所有连接和就绪链表(rdllist);2) epitem作为每个连接的代理,存储关注事件和回调机制;3) file结构体关联被监视目标。其核心优势在于采用事件回调机制而非轮询:当连接就绪时通过回调函数直接通知epoll,将epitem加入就绪链表,使epoll_wait只需检查链表即可返回就绪事件,时间复杂度O(1)。这种机制避免了select/poll的全量遍历,配合红黑树O(logn

2025-12-03 15:01:08 667

原创 Linux网络编程:多路转接(多路复用)select

本文介绍了I/O多路转接技术select和poll的实现原理与应用。首先分析了非阻塞I/O轮询方式的缺点,引出I/O多路复用的必要性。详细讲解了select的系统调用、fd_set位图操作以及执行流程,并通过回声服务器代码示例展示了select的优缺点。随后介绍了poll接口如何通过pollfd结构解决select的文件描述符数量限制问题,并给出了将select代码改为poll的实现方案。文章最后指出将继续介绍epoll技术。核心观点是I/O多路复用技术能够高效监控多个文件描述符,避免轮询带来的CPU资源浪

2025-12-02 12:47:10 800

原创 笔试强训:Week-6

活动安排_牛客题霸_牛客网0位置相等的按1位置降序排,0位置不等的按0位置升序排,dp填表的时候往前找,如果0位置相等跳过,不等的时候就找有没有1位置比我的0位置小的。如果有直接等于该位置长度+1,贪心的break直接将效率最大化int n;cin>>n;i<n;i<n;i<=n;++i)j>=1;--j)break;return 0;或者不用动规,摘自别人的题解int n;PII arr[N];cin>>n;i<n;i<n;++i)

2025-12-01 14:09:46 948

原创 Linux网络编程:五种IO模型和非阻塞IO

本文介绍了五种I/O模型的核心概念:阻塞I/O、非阻塞I/O、I/O多路复用、信号驱动I/O和异步I/O。通过餐厅点餐的类比,形象说明了各模型的工作机制。重点分析了同步与异步通信的区别,以及阻塞与非阻塞调用的本质。特别详细阐述了非阻塞I/O的实现方式,包括设置非阻塞模式、轮询检查等关键步骤,并提供了代码示例。文章指出I/O性能优化的核心在于减少等待时间,而不同模型在编程复杂度、CPU利用率和系统扩展性等方面各有优劣。

2025-11-27 16:58:49 683

原创 Linux网络编程:NAT、代理服务、内网穿透和打洞

但如果局域网中的多台主机同时访问同一个外网服务,当路由器收到外网发来的响应数据时,路由器无法判断该响应数据应该转发给局域网中的哪台主机,因为该局域网中所有主机的数据包都由路由器代替发送了,因此发来的响应数据包的目的IP地址都是路由器的WAN口IP地址。此时当局域网中的多台主机同时访问同一个外网服务时,虽然外网发来的响应数据的目的IP地址都是路由器的WAN口IP,但发给局域网中不同主机的响应数据对应的目的端口号是不同的,此时路由器就能通过IP+Port的方式来区分发给不同主机的数据包。

2025-11-26 14:41:51 737

原创 Linux网络编程:数据链路层 以太网协议

本文主要介绍了数据链路层的工作原理和关键技术。首先说明了数据链路层解决的是相连主机间的通信问题,并介绍了三种常见局域网技术:以太网、令牌环网和无线LAN。重点阐述了以太网的通信原理,包括共享信道、碰撞检测与避免算法、MAC帧格式等内容。详细解析了ARP协议的工作流程,说明其如何通过广播请求和单播应答实现IP地址到MAC地址的映射。文章还讨论了MTU对IP、UDP和TCP协议的影响,比较了不同协议处理数据分片的差异。最后通过实例展示了ARP请求和应答的具体过程,解释了局域网通信中采用ARP协议而非直接广播的原

2025-11-25 23:45:33 916

原创 IP分片和组装的具体过程

摘要:IP协议报头通过16位标识、3位标志字段和13位分片偏移实现数据报分片管理。分片时根据MTU限制分割数据报,设置标识、偏移量和标志位(MF、DF),每个分片独立传输。接收方通过检查MF位和偏移值判断分片,当收到MF=0的分片且数据连贯时进行重组:按偏移量排序拼接数据,重构IP头部(更新长度、标志和校验和),最终将完整数据报递交上层协议。整个过程对传输层透明,由网络层完成分片与组装。

2025-11-25 14:05:59 698

原创 Linux网络编程:网络层协议IP

本文系统阐述了计算机网络中网络层和传输层的核心功能与技术原理。主要内容包括:1)网络层负责主机间的数据传输,通过IP协议实现路由选择;2)IP协议格式详解,包括版本号、首部长度、生存时间等关键字段;3)子网划分技术(CIDR)和特殊IP地址分类;4)私有IP与公网IP的区别及NAT地址转换原理;5)路由表工作机制与路由算法分类。文章通过生动的比喻和实例,深入浅出地解释了数据封装、路由选择、子网划分等网络核心技术,帮助读者理解互联网通信的基本原理和实现机制。

2025-11-25 00:15:04 1133

原创 Linux网络编程:报文理解与传输层协议TCP

本文摘要: 本文深入讲解了TCP协议的核心机制和工作原理。主要内容包括:1)TCP报文结构,包含报头和数据部分,以及不同网络层的不同称呼;2)Linux内核中描述报文的结构体sk_buff及其工作原理;3)TCP可靠性保证机制,如确认应答、超时重传、连接管理等;4)TCP性能优化技术,包括滑动窗口、流量控制、拥塞控制等;5)TCP连接建立和断开的三次握手与四次挥手过程;6)TCP异常情况处理;7)TCP与UDP协议的对比。文章通过大量实例详细阐述了TCP如何同时保证可靠性和高效性,是理解网络协议栈的重要参考

2025-11-23 15:33:16 641

原创 笔试强训:Week -5

本文整理了多个算法题目及解法,涵盖哈希、排序、动态规划、贪心、BFS等算法类型。主要内容包括:1) 笨小猴的质数判断与哈希统计;2) 主持人调度的区间排序解法;3) 分割等和子集的DFS与01背包实现;4) 空调遥控的二分与滑动窗口优化;5) 走迷宫的最短路径BFS解法;6) 最长上升子序列的贪心+二分优化;7) 动态规划解决最长公共子序列问题等。每个题目都提供了核心代码实现,涉及质数判断、二分查找、状态转移等关键算法思想,展示了不同场景下的算法应用与优化技巧。

2025-11-21 21:43:17 892

原创 Linux网络编程:传输层协议UDP

本文介绍了传输层与端口号的相关概念。传输层负责可靠性数据传输,通过端口号标识主机上的应用进程。五元组(源/目的IP+端口号+协议号)唯一标识一个网络通信。UDP协议采用定长报头(8字节),具有无连接、不可靠、面向数据报的特点,其接收缓冲区可暂存报文但无法保证顺序。UDP报文最大长度为64K,应用层需处理大数据分包。常见基于UDP的协议包括DNS、DHCP等。端口号范围0-65535,其中0-1023为知名端口号。一个进程可绑定多个端口号,但一个端口号只能被一个进程绑定。

2025-11-10 18:03:53 813

原创 Linux网络编程:应用层协议HTTP

HTTP协议学习摘要:HTTP协议是应用层协议,定义了客户端与服务器之间的通信规范。其核心包括请求/响应格式、URL编解码、状态码、Header字段等。请求包含方法、URL和版本号,响应包含状态码和内容。关键Header有Content-Type、Content-Length等。协议无状态,通过Cookie/Session实现用户状态跟踪。HTTPS在HTTP基础上增加SSL/TLS加密层提高安全性。文章还提供了TCP服务器实现代码框架,演示了HTTP请求响应处理流程。状态码如200、404等标识请求结果,

2025-11-09 18:31:37 1040 2

原创 笔试强训:Week-4

本文总结了多个算法题解,主要涉及数学、动态规划、双指针等常见算法技巧。包括使用欧几里得算法求最大公约数、路径DP解决礼物价值问题、双指针判断字符串对称性、贪心算法处理非对称字符串、FloodFill解决城市群问题等。还介绍了01背包、滑动窗口、前缀和等经典算法应用,涵盖了字符串处理、数学运算、图论等多个领域,展示了不同场景下的算法优化策略和实现方法。

2025-11-07 20:38:16 1227

原创 牛客101:双指针

本文汇总了多个经典算法问题的解决方案:1.合并有序数组采用逆向填充法;2.回文判断使用双指针;3.区间合并通过排序和边界比较实现;4.最小覆盖子串使用滑动窗口和哈希计数;5.字符串反转直接调用STL;6.最长无重复子数组采用滑动窗口;7.盛水容器问题用双指针和贪心策略;8.接雨水问题通过双指针从低端向内处理。这些解法涵盖了数组处理、字符串操作、滑动窗口、双指针等常见算法技巧,对于提升编程能力具有参考价值。

2025-11-05 16:06:50 433

原创 牛客101:字符串

本文介绍了四个字符串处理算法题解:1)字符串变形,通过遍历反转字母区间并转换大小写;2)最长公共前缀,通过固定首个字符串进行位置比较;3)验证IP地址,采用分割字符串方法分别判断IPv4和IPv6格式;4)大数相加,从末位开始逐位相加处理进位。每个问题都给出了C++实现代码,包含主要思路和关键处理步骤,如区间反转、前缀比较、IP格式验证和进位处理等技巧。

2025-11-02 15:52:40 289

原创 牛客101:递归/回溯

这个专栏写得很顺畅。

2025-11-01 16:55:20 296

原创 【递归、回溯、搜索】专题六:记忆化搜索

专栏完结撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

2025-11-01 15:09:39 834

原创 笔试强训:Week-3

本文整理了18道编程题目及解题思路,涵盖多种算法题型。主要包括:滑动窗口应用(最长无重复子数组、定长窗口问题)、贪心算法(重排字符串、组队竞赛)、动态规划(删除相邻数字的最大分数、01背包)、二分查找(分组问题)、拓扑排序、模拟题以及数学问题等。每道题都提供了核心解题思路和代码实现要点,涉及字符串处理、数组操作、哈希表应用等常见编程技巧。其中特别强调了数据类型选择(如long long防溢出)、边界条件处理等易错点,展现了从暴力解法到优化解法的思考过程。

2025-10-31 21:47:58 1424

原创 【递归、搜索、回溯】专题五:floodfill

边界入手,重复部分是答案,可以创建两个bool数组,两个都是true的时候push。遍历边界,遇到Odfs全部修改成.,最后嵌套for循环,O变X,.变O。如果栈溢出,思考是不是没有修改,或者忘记更新check。遇到岛屿,统计岛屿面积,然后取max。八连通,数组再拓展四个方位即可。

2025-10-31 12:44:52 265

原创 牛客101:哈希表

本文总结了五个经典算法题的解法:1.两数之和(哈希表);2.数组中出现次数超半数字(数组哈希);3.出现一次的两个数字(哈希表或位运算);4.缺失的最小正整数(哈希表或排序);5.三数之和(排序+双指针)。每个问题提供了核心解决思路和代码示例,涵盖哈希表、位运算、排序等多种算法技巧。

2025-10-30 17:01:44 308

原创 【递归、搜索、回溯】专题四:综合练习

本文总结了回溯算法在排列、组合和子集问题中的经典应用。通过多个力扣题目(如字母大小写全排列、N皇后、数独、单词搜索等),展示了如何构建决策树并进行剪枝优化。文章详细分析了每个问题的解题思路,包括:1)字母大小写排列的选择与改变;2)N皇后的行列与对角线检查;3)数独的行列和3×3格子判重;4)迷宫类问题的DFS实现。关键点在于理解回溯模板(选择-递归-撤销)和剪枝条件(如数字判重、边界检查),这些技巧可有效解决组合优化问题。

2025-10-30 15:29:38 655

原创 牛客101:堆/栈/队列

本文总结了8个常见栈与队列算法题解:1.用两个栈实现队列;2.实现包含min函数的栈(双栈法);3.有效括号匹配(栈);4.滑动窗口最大值(暴力+双端队列优化);5.最小k个数(大根堆);6.寻找第k大(快速选择);7.数据流中位数(大小根堆);8.表达式求值(递归+栈)。主要涉及栈和队列的基本操作及其应用场景,包括括号匹配、滑动窗口、堆的使用等典型问题,展示了使用栈和队列解决问题的多种思路。

2025-10-29 14:45:13 661

原创 【递归、搜索、回溯】专题三:全排列、子集、组合

本文系统总结了排列、子集、组合三类回溯问题的解题思路与实现方法。针对无重复元素的全排列,采用bool数组标记已选元素,并通过回溯恢复现场;对有重复元素的全排列,需先排序再结合check数组进行剪枝。子集问题可基于元素选/不选或按顺序分层两种方法实现。组合总和问题需注意无序性,通过排序和传参避免重复,对于重复元素还需特殊处理。当允许重复选取时,可引入记忆化搜索优化时间复杂度。文章通过力扣经典题目详细演示了各类问题的代码实现,强调解题时需先分析决策树结构再编码。

2025-10-29 12:13:31 594 1

原创 Linux网络编程:进程间关系和守护进程

文章摘要: 本文详细介绍了Linux系统中的进程组、会话和守护进程概念。进程组是多个进程的集合,拥有唯一的进程组ID(PGID);会话则由多个进程组组成,包含前台和后台进程组。守护进程是一种独立于控制终端的后台服务进程,通过fork、setsid等系统调用创建,并需要重定向标准I/O、更改工作目录以确保稳定运行。文章还提供了将普通进程改造为守护进程的具体代码实现,包括信号处理、会话创建和文件描述符重定向等关键步骤,最后指出系统已提供现成的daemon函数简化该过程。这些机制共同保障了服务端程序的持续可靠运行

2025-10-28 23:30:31 1193

原创 牛客101:二叉树

本文总结了二叉树相关的18种常见算法实现,主要包括: 三种基础遍历(前序、中序、后序)的递归实现 层序遍历及其变种(之字形打印) 二叉树深度、路径和、镜像等基础操作 二叉搜索树相关操作(验证、最近公共祖先) 二叉树序列化/反序列化 二叉树重建及右视图输出 每种算法均给出核心代码实现,涵盖递归、迭代、DFS、BFS等多种解法,并附有重点问题说明(如平衡二叉树判断的自顶向下/自底向上解法)。这些算法是二叉树相关面试题的常见考点。

2025-10-27 14:54:29 1047

原创 【递归、搜索、回溯】专题二:二叉树dfs

本文总结了六种二叉树相关算法解法:1)计算布尔二叉树值(后序遍历);2)求根到叶节点数字和(DFS累计);3)二叉树剪枝(递归判断零子树);4)验证二叉搜索树(中序递增特性);5)二叉搜索树第K小元素(中序计数);6)二叉树所有路径(先序遍历记录)。各解法均采用递归思路,充分利用了二叉树的结构特性,如后序/中序遍历、剪枝判断和路径记录等技巧。

2025-10-27 12:41:30 700

原创 【递归、搜索、回溯】专题一:递归

本文介绍了递归搜索回溯的经典应用案例。主要内容包括:1)汉诺塔问题的递归解法,通过分解为子问题实现盘子移动;2)合并两个有序链表,通过比较节点值递归拼接;3)反转链表的递归实现,改变节点指向关系;4)两两交换链表节点的递归处理;5)k个一组反转链表的递归方法;6)快速幂算法实现Pow(x,n)。这些案例展示了递归思想在解决分治问题时的应用模式:将大问题分解为相似子问题,通过递归调用来解决子问题,最终合并结果。

2025-10-25 17:52:13 741

原创 基础算法:多源BFS、BFS解决拓扑排序

本文介绍了多源BFS和拓扑排序算法在多道LeetCode题目中的应用。主要内容包括:1)多源BFS的实现方法,通过将多个起点同时入队来处理01矩阵、飞地数量、地图最高点等问题;2)拓扑排序在课程表问题中的应用,通过建立入度表和邻接表来判断课程安排的可行性;3)特殊应用如火星词典问题,通过比较字符顺序建立拓扑关系。文章提供了各题目的代码实现,强调算法实现中的关键细节,如边界条件处理、队列操作和环检测等。

2025-10-24 11:48:58 274

原创 Linux网络编程:应用层自定义协议与序列化

2025.10.24.0:45

2025-10-24 00:46:11 1114

原创 基础算法:BFS解决floodfill、最短路问题

本文介绍了BFS算法在图论问题中的应用,主要分为洪水填充和最短路问题两类。洪水填充部分通过图像渲染、岛屿数量和被围绕区域等问题,展示了BFS结合队列和标记数组的解法。最短路问题部分则讲解了迷宫出口、基因变化和单词接龙等题目,重点阐述了如何通过BFS计算最短路径。文章还提及了高尔夫砍树问题中多目标点的BFS优化策略。整体展示了BFS在解决网格遍历和最短路径问题中的通用思路和实现方法。

2025-10-23 12:30:44 557

原创 基础算法:优先级队列

本文总结了STL中优先级队列和关联容器的比较函数使用差异。优先级队列使用less创建大根堆(父节点小于子节点时交换),greater创建小根堆;而set/map中less对应升序,greater对应降序。通过四个LeetCode例题展示了应用场景:1)最后一块石头重量(大根堆处理);2)数据流第K大元素(小根堆维护前K大);3)前K高频单词(自定义比较函数处理同频次排序);4)数据流中位数(双堆法维护平衡)。重点解析了不同容器底层实现(堆与红黑树)导致比较行为差异的原因。

2025-10-22 14:47:21 814

原创 牛客101:二分查找/排序

本文总结了六种常见算法题型及解法:1. 二分查找基础模板,强调循环条件包含等号的情况判断;2. 二维数组查找的两种解法(逐行二分和线性查找);3. 寻找峰值的四种二分策略,分析不同判断条件下的边界处理;4. 逆序对问题的归并排序解法,提供升序和降序两种实现方案;5. 旋转数组最小值的二分查找,重点处理重复元素情况;6. 版本号比较的双指针解法。每种题型都配有代码示例和关键思路说明,涵盖二分查找、双指针、归并排序等常用算法技巧。

2025-10-21 16:02:16 845

原创 基础算法:队列+BFS

本文介绍了BFS在树结构中的应用,主要包含四道LeetCode题目解法:1. N叉树层序遍历(429题)通过队列实现分层处理;2. 二叉树锯齿形遍历(103题)使用标记位和reverse实现交替方向;3. 二叉树最大宽度(662题)通过节点编号计算宽度,注意溢出问题;4. 每层最大值查找(515题)在层序遍历过程中记录最大值。所有解法都采用队列实现BFS,针对不同问题调整处理逻辑,展示了BFS在树遍历中的灵活应用。

2025-10-21 13:07:56 611

原创 Linux网络编程:Socket编程TCP

本文介绍了基于TCP协议的服务器开发过程,包括套接字创建、绑定、监听和多线程处理等关键步骤。主要内容包括: 服务器初始化:创建套接字时选择AF_INET协议族和SOCK_STREAM类型,绑定IP地址和端口号,设置监听队列长度。 连接处理:使用accept函数获取客户端连接,分离监听套接字和服务套接字功能,实现多线程/多进程模型提高并发能力。 通信实现:通过read/write函数进行数据收发,实现简单的回声服务器功能。 性能优化:分析单线程模型的局限性,提出使用多进程、多线程和线程池方案解决并发问题。 安

2025-10-20 18:08:03 971 1

原创 牛客101:链表

本文总结了16种常见链表问题的解法,涵盖反转、合并、排序、判环、回文等经典题型。主要内容包括:1. 反转链表(双指针/递归);2. 区间反转(虚拟头结点);3. K个一组反转(递归+双指针);4. 合并有序链表(双指针);5. 判环与入口(快慢指针);6. 删除倒数第N个节点(快慢指针);7. 回文判断(数组/反转/栈);8. 奇偶重排(双指针);9. 删除重复元素(单/双指针)。每种解法都配有详细注释的代码实现,并强调了虚拟头结点、快慢指针等关键技巧,是系统学习链表算法的实用指南。

2025-10-20 13:06:19 1136

原创 基础算法:栈系列

本文介绍了栈在解决字符串相邻字符问题中的应用,通过5个LeetCode题目展示了具体实现:1)删除相邻重复项;2)处理退格字符串比较;3)基本计算器II的双栈解法;4)字符串解码的嵌套处理;5)验证栈序列的模拟方法。每个问题都给出了C++代码实现,展示了如何用栈或模拟栈结构解决问题。文章强调栈在处理这类问题中的优势,同时指出可以通过其他数据结构模拟栈行为。

2025-10-20 12:06:47 390

原创 基础算法:字符串系列

本文介绍了四种字符串处理算法:1. 最长公共前缀的两种解法(两两比较和统一比较);2. 最长回文子串的中心扩展和动态规划解法;3. 二进制求和的模拟加法实现;4. 字符串相乘的高精度乘法实现。文中提供了详细的代码实现和关键思路解析,包括处理进位、字符数字转换等常见问题。这些算法均来自LeetCode经典题目,涵盖了字符串处理中的常见技巧。

2025-10-19 13:15:28 305

原创 Linux网络编程:Socket编程UDP

本文介绍了UDP网络程序的实现过程,包括回声服务器和翻译服务器的开发。主要内容包括:1) 使用socket函数创建UDP套接字,通过bind绑定端口;2) 实现服务器与客户端通信,使用recvfrom接收数据,sendto发送响应;3) 处理IP地址转换,包括字符串IP与整数IP的相互转换;4) 实现INADDR_ANY绑定,使服务器可被外网访问;5) 扩展功能至翻译服务器和聊天室系统,引入线程池处理多客户端请求。文章详细说明了UDP网络编程的关键步骤和技术要点,展示了从基础通信到复杂业务功能的实现路径。

2025-10-18 20:45:56 1119

原创 基础算法:哈希表

本文总结了哈希表在算法题中的常见应用场景。首先介绍两数之和问题,通过哈希表存储数值和下标实现快速查找;其次是字符重排判断,利用数组模拟哈希表统计字符频率;接着是重复元素检测,通过哈希表判断元素是否存在;然后是限定距离的重复元素检测,在哈希表中存储元素及其最近下标;最后是字母异位词分组,通过排序字符串作为哈希键来分组。这些案例展示了哈希思想在解决查找、统计、分组等问题中的高效性,同时体现了数组模拟哈希表的技巧。

2025-10-18 12:41:13 391

北京林业大学数据结构题单

北京林业大学数据结构题单

2025-11-05

空空如也

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

TA关注的人

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