- 博客(64)
- 收藏
- 关注
原创 浏览器输入URL之后究竟会发生啥???
本文通过浏览器访问百度的实例,详细讲解了网络数据包的传输过程。从浏览器输入网址触发DNS查询(遵循"从近到远"原则),到TCP三次握手建立连接,再到数据包经过路由器层层转发(涉及NAT转换和路由查询),最终与服务器建立HTTPS加密通信。文章完整呈现了请求响应全过程,包括数据封装、网络传输、服务器处理及连接释放等环节,展现了从用户输入URL到页面呈现的完整网络通信流程。如需了解具体协议细节,可参考前文相关内容。
2025-12-23 16:09:39
542
原创 深入解析网络层与数据链路层
本文系统讲解了TCP/IP协议栈中的网络层和数据链路层。网络层通过IP协议实现跨网络数据传输,核心功能包括路由选择、IP分片与重组;数据链路层负责同一局域网内的帧传输,通过MAC地址和ARP协议实现设备间通信。文章详细解析了IP协议格式、子网划分、NAT技术、路由表原理,以及以太网帧结构。同时探讨了ARP协议、DNS系统、ICMP协议的工作原理,并对比了NAT与代理服务器的区别。最后指出网络层负责全局路径规划,数据链路层执行具体传输,二者协同完成端到端通信。
2025-12-22 21:40:14
1130
原创 深入解析TCP/IP:从端口号到可靠性机制
本文深入探讨了TCP/IP协议栈中的关键概念,重点分析了传输层协议的核心机制。文章首先回顾了网络框架分层结构,强调协议学习的两个核心问题:解包和分用。详细讲解了端口号的分类与作用、UDP协议的不可靠特性及其应用场景。重点剖析了TCP协议的可靠性实现机制,包括确认应答、超时重传、连接管理(三次握手/四次挥手)、流量控制(滑动窗口)、拥塞控制等核心机制。同时解释了TCP粘包问题的成因及解决方案,对比了TCP与UDP在可靠性方面的本质区别。最后补充说明了listen系统调用中backlog参数的含义及其队列管理机
2025-12-22 18:30:00
1562
1
原创 HTTPS加密原理:安全传输全解析
HTTP协议采用明文传输数据,存在安全风险,而HTTPS通过TLS/SSL加密解决了这一问题。HTTPS采用非对称加密传输对称密钥,再使用对称加密传输数据,确保通信安全。CA机构通过数字证书验证公钥合法性,防止中间人攻击。虽然HTTP因历史遗留和成本问题尚未完全淘汰,但主流趋势已转向HTTPS。中间人攻击手段包括ARP欺骗、ICMP攻击等,需警惕公共WiFi等不安全网络环境。
2025-12-18 22:00:00
2150
1
原创 深入解析HTTP协议与应用层编程
本文系统讲解了网络协议栈的应用层和传输层核心知识。重点内容包括:1. 应用层协议设计:通过自定义网络计算器案例,详细说明结构化数据序列化、报文边界划分等关键问题;2. HTTP协议详解:包括URL编码、请求/响应格式、方法语义、状态码体系、头部字段等核心要素;3. 会话保持技术:深入分析Cookie/Session机制及其安全考量;4. 开发实践:给出C++实现的HTTP服务器框架代码;5. 调试工具:介绍telnet、Postman等实用网络调试工具。文章从协议设计原理到工程实践,全面解析了网络通信的核心
2025-12-18 18:00:00
1868
原创 SSH连接原理与守护进程实战
本文深入解析了SSH远程连接机制与守护进程原理。通过Xshell连接云服务器的过程展示了SSH协议的应用层通信本质:sshd守护进程监听22端口,Xshell发起TCP连接请求,经NAT转发后建立加密通信通道。详细阐述了守护进程的关键特性:脱离终端控制、后台持续运行、自成会话等。通过两次fork调用规避进程组问题,使用setsid创建新会话,重定向标准I/O到/dev/null。对比了前台/后台任务、普通进程与守护进程的区别,解释了Bash通过fork子进程执行命令的必要性。最后通过代码示例实现了自定义守护
2025-12-14 23:10:11
978
原创 TCP网络编程:从握手到挥手全解析
本文介绍了TCP协议网络编程的核心内容。首先讲解了TCP与UDP的关键区别:TCP需要建立连接、维护连接队列,而UDP是无连接的。重点分析了TCP编程中三个关键API:listen()用于服务器监听连接请求,accept()处理已建立的连接,connect()用于客户端发起连接。详细阐述了TCP三次握手建立连接和四次挥手断开连接的原理,解释了为何需要三次握手(确认双方收发能力)和四次挥手(独立关闭双向通道)。最后给出了简单的TCP服务端和客户端实现代码示例,展示了从创建套接字到建立连接、数据传输的完整流程。
2025-12-14 12:00:00
1005
原创 C++11(五):类型转换全解析
C++类型转换机制解析 C++作为强类型语言,提供了比C语言更规范的类型转换机制。C语言只有隐式和显式两种转换方式,存在可视性差、错误难追踪的问题。C++引入四种强制类型转换操作符: static_cast:用于相近类型的转换 reinterpret_cast:处理不相近类型的强制转换 const_cast:去除const属性 dynamic_cast:用于多态类型的安全向下转型 dynamic_cast通过虚表识别实际类型,仅适用于含虚函数的类。此外,C++还通过typeid运算符支持运行时类型识别(RT
2025-12-10 17:09:57
791
原创 C++11(四):特殊类与单例模式设计精要
本文介绍了C++中特殊类的设计方法及单例模式实现。主要内容包括:1)只能在堆/栈上创建对象的实现方式,通过禁用构造/拷贝构造并提供静态创建接口;2)不可拷贝类通过禁用拷贝构造和赋值运算符实现;3)不可继承类的两种实现方式(C++98私有构造和C++11 final关键字)。重点讲解了单例模式的两种实现:懒汉模式(使用时创建,需处理线程安全)和饿汉模式(启动时创建,无线程安全问题),分析了各自的优缺点。其中懒汉模式通过双检查锁机制解决线程安全问题,饿汉模式则利用静态成员变量在程序启动时初始化的特性。
2025-12-10 14:06:17
917
原创 C++11新特性全面解析(三):智能指针与死锁
本文系统介绍了C++智能指针的核心概念与技术要点。首先阐述了智能指针的必要性,通过RAII机制解决资源管理问题。重点分析了三种智能指针实现方案:auto_ptr(管理权转移)、unique_ptr(禁用拷贝)和shared_ptr(引用计数),并详细讨论了shared_ptr的线程安全问题及循环引用缺陷(通过weak_ptr解决)。文章还探讨了死锁问题与RAII锁管理机制(lock_guard/unique_lock),最后总结了内存泄漏的危害及检测方法。全文从原理到实践,完整呈现了C++资源管理的核心技术
2025-12-09 22:32:00
814
原创 C++11新特性全面解析(二):线程库+异常体系
本文摘要:本文系统介绍了C++11中的线程库和异常处理机制。线程库部分详细讲解了thread类的使用、线程函数参数传递、原子操作库(atomic)、互斥锁(mutex)和条件变量的应用。异常处理部分对比了C语言传统错误处理方式的缺陷,阐述了C++异常的概念、使用方法和安全规范,包括异常抛出与匹配规则、自定义异常体系设计等。文章通过代码示例展示了多线程编程中常见的竞争条件和资源管理问题,以及异常处理的最佳实践。最后分析了异常机制的优缺点,指出虽然存在执行流混乱等问题,但在现代编程中仍利大于弊,是错误处理的重要
2025-12-04 22:32:41
988
原创 C++11新特性全面解析(一)
C++11新特性摘要 C++11标准带来了140多项新特性,主要包括: 列表初始化:统一了内置类型和自定义类型的初始化方式,支持更简洁的初始化语法。 类型推导:auto和decltype关键字简化了复杂类型的声明。 右值引用:引入移动语义,通过移动构造和移动赋值减少不必要的拷贝,提升性能。 智能指针:unique_ptr、shared_ptr等帮助管理内存资源。 lambda表达式:提供匿名函数的简洁写法,支持闭包特性。 容器增强:新增array、forward_list等容器,改进unordered系列容
2025-12-03 12:08:10
792
原创 递归算法精讲:从汉诺塔到反转链表
本文讲解了递归算法的原理与应用,通过多个经典题目展示递归实现方法:1. 汉诺塔问题通过分治思想,将问题分解为移动n-1个盘子和最大盘子两个子问题;2. 合并有序链表通过比较节点值确定头节点,递归处理剩余部分;3. 反转链表采用后序遍历思维;4. 两两交换节点通过递归处理剩余链表;5. 快速幂利用分治思想降低复杂度。文章强调递归与循环的等价关系,指出递归本质是深度优先搜索,当问题呈现重复子结构时适用递归,并需明确递归出口和函数体的定义逻辑。
2025-11-16 21:00:00
1034
原创 递归与搜索:编程中的思维艺术
摘要:递归是函数自我调用的编程技巧,适用于分解为相同子问题的情况,如二叉树遍历。搜索是暴力枚举的递归实现,分为深度优先(DFS)和广度优先(BFS)。回溯本质上是DFS的一部分,用于退回错误路径。DFS常配合剪枝优化,跳过无效路径。理解递归需从宏观把握,将函数视为黑盒完成特定任务,不必纠结具体调用过程。
2025-11-16 18:00:00
772
原创 高并发内存池:从tcmalloc到实战
本文摘要:该项目基于Google开源项目tcmalloc,实现了一个高效的多线程内存池系统。内存池通过预申请大量内存资源并统一管理,解决了传统malloc/free存在的效率低下和内存碎片问题。文章详细介绍了内存池的工作原理,包括其作为程序与操作系统间的"内存中介"角色,以及如何通过brk和mmap系统调用管理内存分配。同时对比了不同内存分配器(如ptmalloc、jemalloc)的特点,分析了malloc底层实现涉及的缺页中断机制。该项目综合运用了C++、数据结构、操作系统内存管理等
2025-11-12 17:00:00
721
原创 分治-归并:高效解决逆序对问题
本文探讨了分治算法在排序和统计问题中的应用。通过归并排序和快速排序的对比,阐述了两种分治策略的区别:快速排序在分治过程中边分边解决问题,而归并排序则是先分治后合并解决。文章详细讲解了四道LeetCode题目的分治解法:912题复习归并排序,170题统计逆序对,315题计算右侧较小元素,493题处理翻转对。特别强调了493题中比较条件变化带来的处理差异,需要先统计再排序。最后总结指出,当问题可拆分为独立解决的子问题或可通过分区缩小规模时,分治算法是优先考虑方案。
2025-11-02 20:07:43
877
原创 分治思想之快排优化:三分区防退化与剪枝降复杂度
本文摘要:文章系统讲解分治算法在排序问题中的应用,重点分析快速排序的优化策略。通过LeetCode例题(75、912、215、面试题17.14)演示:1)传统快排通过三分区(<key/=key/>key)避免重复元素导致的时间复杂度退化;2)TopK问题采用剪枝策略,仅递归目标区间实现O(n)时间复杂度;3)关键实现包括随机基准选择(rand()%(r-l+1)+l)和三指针分区逻辑。相比简单二分区,三分区能高效处理重复元素,是解决LeetCode超时问题的核心技巧。
2025-11-02 19:00:00
543
原创 排序算法:高效数据处理的核心
本文系统介绍了7种经典排序算法,包括冒泡排序、选择排序(直接/堆)、插入排序(直接/希尔)、快速排序、归并排序等。重点讲解了每种算法的核心思想、实现原理和代码示例,分析了时间复杂度、空间复杂度和稳定性。其中快速排序综合性能最佳,平均O(nlogn)且常数因子小;归并排序稳定但需额外空间;堆排序适合空间受限场景;简单排序适用于极小数据量。文章特别强调快速排序通过三数取中避免退化,并对比了不同算法的适用场景,指出实际开发中快速排序应用最广,而归并排序适用于要求稳定性的场景。
2025-10-31 20:00:00
842
原创 轻松掌握模拟算法:从题目到代码
本文总结了模拟算法的解题思路和典型例题。模拟算法的核心是严格遵循题目要求,将描述过程直接转换为代码实现。文章通过LeetCode 1576、495、6、38、1419等例题,展示了不同场景下的模拟方法:包括字符替换、时间计算、Z字排列、字符串生成和状态跟踪等。对于复杂度较高的问题(如Z字变换),可以通过寻找数学规律来优化实现。模拟算法的关键在于仔细处理边界条件,确保代码正确还原题目描述的逻辑流程。解题时应先在纸上梳理清楚算法步骤,再转化为代码。
2025-10-31 18:00:00
1505
原创 位运算全解析:从入门到精通
本文系统介绍了位运算的基础知识、常见题型及其应用场景。主要内容包括:1)基本位运算操作(与、或、异或、位移、取反)的定义和记忆方法;2)六类典型位运算问题(位图操作、lowbit提取等)及其解题思路;3)LeetCode经典例题解析(如136、137、268等题),展示如何利用异或特性解决唯一出现/次数统计问题;4)位运算在算法优化中的优势,特别适合处理需要高效空间/时间复杂度的场景。文章强调位运算在状态表示、特征判断等方面的底层优势,是处理大规模数据的重要工具。
2025-10-28 18:00:00
997
原创 二分查找:二段性的秘密与实战技巧
本文系统讲解了二分查找算法的原理与应用,重点强调了二分查找的核心在于利用数组的"二段性"而非单纯的有序性。文章通过LeetCode 704、34、69、35、852、162、153等经典例题,详细分析了三种二分模板的实现细节:1)朴素二分查找;2)寻找区间左端点;3)寻找区间右端点。特别指出算法实现中的关键细节:循环条件的选择(left<=right或left<right)、中点计算的防溢出处理(left+(right-left)/2)、边界条件的特殊处理等。通过山峰数组、旋
2025-10-25 17:42:15
1030
原创 前缀和算法:高效解决区间和问题
文章摘要: 前缀和是一种高效的数组预处理算法,通过预先计算累加和将区间查询优化至O(1)时间。核心思想是"空间换时间",适用于一维/二维数组的区间和、子数组等问题。文章详解了前缀和的实现原理、边界处理技巧(如辅助空间和下标映射),并通过LeetCode 724(中心下标)、238(除自身乘积)、560(和为K子数组)、974(可被子数组)、525(01等长子数组)、1314(矩阵区域和)等例题,对比了暴力解与前缀和解法的效率差异,强调哈希表优化和动态滚动数组的应用。特别指出负数取模修正和
2025-10-25 17:41:28
1101
原创 栈与队列:数据结构中的双雄对决
本文介绍了栈和队列两种基础数据结构。栈遵循后进先出(LIFO)原则,可通过数组或链表实现,适用于浏览器历史记录、深度优先搜索等场景。队列遵循先进先出(FIFO)原则,通常用链表实现更高效,应用于进程调度、消息队列等场景。文章详细讲解了两种数据结构的实现方法,包括动态扩容、伪删除等技术细节,并提供了相关LeetCode例题。最后扩展介绍了环形队列的设计原理及其通过空间复用优化数组队列效率的特点。
2025-10-21 21:38:12
1059
原创 线性表实战:顺序表与链表的奥秘
本文介绍了线性表的两种主要实现方式:顺序表和链表。顺序表采用连续存储空间,支持随机访问但增容成本高;链表通过指针连接节点,插入删除高效但无法随机访问。详细讲解了动态顺序表和单链表的C语言实现,包括初始化、增删查改等操作。特别分析了带头双向循环链表的优势,并对比了两者的时间复杂度、CPU缓存命中率等特性。顺序表适合频繁随机访问场景,链表则更适合频繁插入删除操作。文章还提供了相关面试题和实现注意事项,为理解和应用线性表提供了全面指导。
2025-10-20 22:32:37
861
原创 揭秘Redis底层协议RESP:高效通信的秘密(redis-plus-plus API接口的使用)
【150字摘要】本文介绍了开发自定义客户端(如QQ、Redis等)需要了解其应用层协议,Redis使用RESP协议实现简单高效的通信。重点讲解了redis-plus-plus库的使用方法,包括set、get、exists等命令的参数设计和返回值处理(如OptionalString类型)。文章还比较了不同命令的参数形式,如输出迭代器与容器的选择,以及时间参数的两种表示方式。最后强调通过实践掌握常用命令,遇到不熟悉的命令可查阅文档。
2025-10-20 19:43:19
1177
原创 滑动窗口:双指针的高效应用
滑动窗口算法是双指针的一种具体应用,主要用于解决数组/字符串子区间问题。其核心思想是通过维护一个动态变化的窗口(由左右指针界定),将暴力解法的O(n²)时间复杂度优化到O(n)。窗口通过右指针扩大、左指针缩小来动态调整,满足特定条件(如和、计数、匹配等)。典型应用包括求最短子数组(LeetCode 209)、最长无重复子串(LeetCode 3)、最多翻转k个0(LeetCode 1004)等问题。该算法的关键在于利用单调性或特定条件(如正数数组的和递增)避免无效枚举,通过同向移动指针实现高效求解。
2025-10-19 14:49:51
718
原创 双指针算法:高效解决问题的利器
双指针算法是一种高效的编程技巧,通过在数组或链表中使用两个指针协同工作来优化时间复杂度。主要分为三种应用模式:相向指针(如两数之和)、同向指针(如滑动窗口)和分离指针(如合并有序数组)。该算法能将O(n²)暴力解法优化为O(n),尤其适合处理有序数据。典型应用包括283题移动零、15题三数之和、11题盛水容器等。关键是根据题目特性选择指针移动规则,确保每个元素只被访问一次,同时兼顾空间效率。判断是否使用双指针的步骤为:分析暴力解法复杂度、检查数据单调性、排除更优解法。
2025-10-15 16:10:39
634
原创 算法效率:时间与空间的较量
算法效率分析主要包括时间复杂度和空间复杂度。时间复杂度衡量算法运行速度,用大O表示法估算执行次数,通常关注最坏情况;空间复杂度衡量算法临时占用存储空间大小。随着计算机存储容量提升,空间复杂度关注度降低。时间复杂度的计算规则是:保留最高阶项并去除系数。空间复杂度也采用类似的大O渐进表示法,主要计算运行期间申请的额外空间。实际应用中,我们更关注算法的时间性能,特别是最坏情况下的表现。
2025-10-14 20:56:22
633
原创 数据结构与算法简介:充分理解二者关系
本文系统性地阐述了数据结构与算法的核心概念及其相互关系。数据结构作为计算机存储和组织数据的方式,主要包括线性结构(数组、链表、栈、队列)、树形结构(二叉树、堆)、图形结构和集合结构,其核心价值在于解决数据操作的效率问题。算法则是定义良好的计算过程,通过输入产生输出,具有输入、输出、有穷性、确定性和可行性五大特征。二者相辅相成:数据结构是算法的载体,算法是数据结构的灵魂。文章通过丰富的面试题示例和实际应用场景,深入分析了不同数据结构的特点及适用场景,并强调算法设计需结合具体数据结构特性进行优化。最后指出,掌握
2025-10-13 22:27:48
781
原创 Redis渐进式遍历:安全高效的键扫描术
摘要: Redis的SCAN命令通过渐进式遍历解决KEYS命令一次性获取所有key导致的服务器阻塞问题,每次只获取少量key,需多次执行完成全遍历。SCAN支持模式匹配、数量限制和键类型筛选,但遍历期间数据变更可能导致重复或遗漏。Redis默认提供16个隔离数据库(0-15),通常只使用0号库。重要提醒:FLUSHDB和FLUSHALL会删除数据,生产环境慎用,其中FLUSHALL会清除所有数据库内容。SCAN虽优于KEYS,仍需注意使用场景和潜在风险。
2025-10-12 21:18:36
452
原创 揭秘Redis五大不常用数据类型
Redis提供了五种高级数据类型:Streams(流式数据处理,支持持久化与多消费者)、Geospatial(地理空间坐标存储与查询)、HyperLogLog(基数统计,超低内存消耗)、Bitmaps(位图集合,节省空间)和Bitfields(精细位操作)。这些类型分别针对消息队列、地理位置、UV统计、整数集合和位操作等场景,在保证功能性的同时优化内存使用效率。其中Streams和HyperLogLog最具特色,前者实现了完整消息队列功能,后者仅用12KB内存即可统计上亿数据的基数,虽有0.81%误差但大幅
2025-10-12 20:40:47
579
原创 Redis5安装与核心命令详解
Redis是一个高性能的键值存储系统,支持多种数据结构。本文首先介绍了Redis5的安装配置方法,包括修改配置文件、启动服务等步骤。然后详细讲解了Redis的各种命令操作,包括全局命令和针对不同数据结构的专门命令。 Redis支持五种主要数据结构:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Zset)。每种数据结构都有其特定的命令集,如String的set/get命令、Hash的hset/hget命令、List的lpush/lrange命令等。文章还介绍了每种数据结
2025-10-12 17:23:50
607
原创 Redis:高性能内存数据库的六大核心优势
Redis是一个高性能的内存数据库,支持键值对存储和多种数据结构。它具有可编程性,支持Lua脚本实现原子操作;可扩展性,允许开发者自定义功能;持久化机制确保数据安全;集群功能实现水平扩展;高可用性通过复制和故障转移保障服务稳定。Redis采用单线程模型处理核心操作,避免了多线程竞争,加上内存操作和高效的数据结构,使其性能卓越。这些特性使其在分布式系统中广泛应用。
2025-09-29 23:09:34
1088
4
原创 Redis核心应用:从单机到分布式架构解析
Redis是一个开源的内存数据结构服务器,主要用于分布式系统中的数据库、缓存和消息队列。相比单机架构直接使用变量存储数据,Redis通过基于网络的进程间通信解决了分布式环境下的内存共享问题。Redis具有超高读写性能但存储容量有限,常与MySQL结合使用,MySQL负责数据持久化和复杂查询,Redis处理高频访问数据。随着系统规模扩大,通过负载均衡、读写分离、引入缓存和分库分表等方式提升性能,但架构复杂度也随之增加。Redis在分布式系统中发挥着数据缓存和共享的关键作用,是构建高并发应用的重要组件。
2025-09-29 13:15:21
590
原创 Docker镜像与容器:轻松理解与实战
Docker容器技术通过镜像打包应用及其依赖环境,实现快速部署和运行。镜像作为模板,实例化后成为容器,提供隔离的运行环境,解决环境不一致问题。Docker通过数据卷实现持久化存储,支持网络隔离和容器间通信。Dockerfile定义镜像构建步骤,Docker Compose简化多容器管理。关键命令包括:docker run(创建容器)、docker ps(查看容器)、docker build(构建镜像)。技术优势包括环境隔离、一致性保证和资源高效利用。
2025-09-27 21:09:47
645
原创 JsonCpp:高效序列化与反序列化指南
本文介绍了JSON数据格式及其在JsonCpp库中的实现。JSON包含对象、数组、字符串和数字等数据类型,通过键值对形式组织数据。JsonCpp库通过Value类提供了便捷的数据访问和操作方法,支持类型转换和数组操作。 重点解析了JsonCpp的序列化和反序列化接口设计,采用工厂模式实现多态扩展:1) 通过抽象基类定义接口规范;2) 使用嵌套工厂类实现具体方案;3) 通过虚函数重写实现多态。这种设计避免了代码臃肿,符合开闭原则,便于新增处理方案而不修改原有代码。 最后说明官方提供的序列化和反序列化配置方案已
2025-09-18 21:42:32
910
原创 Git版本控制完全指南
Git是一款分布式版本控制系统,由Linus Torvalds开发,用于代码版本管理和多人协作开发。与集中式版本控制系统不同,Git的每个用户都拥有完整的版本库,支持离线工作。本文介绍了Git的安装配置、本地仓库操作(包括初始化、提交、版本回退等)、分支管理(创建、合并、解决冲突)以及远程仓库的使用(SSH配置、推送拉取代码等)。重点讲解了Git工作流程中的工作区、暂存区和本地仓库的概念,以及如何通过.gitignore文件忽略特定文件。文章还提供了Gitee远程仓库的搭建和关联方法,帮助开发者实现代码的远
2025-09-15 13:20:57
992
原创 Socket编程入门:从IP到端口全解析
本文介绍了网络编程的基础知识,重点讲解了TCP/UDP协议、socket编程接口以及实现简单UDP客户端/服务器的方法。主要内容包括:1. 网络基础概念:IP地址、端口号、网络字节序,以及TCP/UDP协议的特点和适用场景;2. socket编程接口详解:sockaddr结构体、常见API如socket()和bind()的使用方法;3. UDP网络程序实现:服务端和客户端的完整代码示例,包括数据收发、地址转换等关键操作;4. 网络调试工具:ifconfig和netstat命令的使用说明。文章通过"
2025-07-24 23:18:23
1180
原创 计算机网络基础:从协议到通信全解析(大致框架)
本文系统介绍了计算机网络的基础知识,主要包括:1. 计算机网络发展背景及局域网/广域网概念;2. 网络协议的分层模型(OSI七层和TCP/IP五层);3. 数据传输过程中的封装与解包机制;4. MAC地址和IP地址的作用与区别。重点阐述了协议分层的必要性、各层功能特点,以及数据在网络中的传输过程,包括报头封装、路径选择等关键环节,为理解网络通信原理提供了系统框架。
2025-07-18 12:01:02
1068
原创 C++哈希表:冲突解决与高效查找
本文系统讲解了哈希表及其相关技术。首先介绍了哈希表的两种底层实现方式:闭散列(开放定址法)和开散列(链地址法),重点分析了它们的冲突处理机制,包括线性探测、二次探测和哈希桶设计。然后详细阐述了位图和布隆过滤器原理,说明位图适用于海量数据判重,而布隆过滤器通过多哈希函数降低误判率。文章还提供了哈希表的完整实现代码,包括迭代器设计、哈希函数优化等关键技术点。最后讨论了哈希在分布式系统中的应用,如一致性哈希解决节点动态变化问题。全文结合理论分析和实际应用,为理解哈希技术提供了全面的视角。
2025-06-02 15:37:10
947
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅