- 博客(133)
- 收藏
- 关注
原创 【C++笔记】AVL树的深度剖析
哈喽,各位小伙伴大家好!上期我们讲了map和set的深度剖析。今天我们来讲一下AVL树的深度剖析。话不多说,我们进入正题!向大厂冲锋。
2024-12-10 16:36:00
2979
92
原创 【C++笔记】数据结构进阶之二叉搜索树(BSTree)
哈喽,各位小伙伴大家好!上期我们讲了C++三大特性之多态。今天我们来讲一下二叉搜索树(BSTree)。话不多说,我们进入正题!向大厂冲锋。
2024-11-24 21:22:39
2813
73
原创 【算法笔记】滑动窗口算法原理深度剖析
哈喽,各位小伙伴大家好!上期我们讲了双指针算法原理,今天我们继续讲解滑动窗口算法原理。话不多说,咱们进入正题!向大厂冲锋!滑动窗口就是根据题目信息,在暴力枚举的条件下利用单调性优化,用同向双指针快速筛选掉一些不必要的遍历情况。在O(N)的复杂度下完成所有情况的枚举从而解题的算法。
2024-10-05 15:48:00
2247
77
原创 【C语言】基于C语言实现的贪吃蛇游戏
哈喽,各位小伙伴大家好!今天给大家带来的是使用C语言实现的贪吃蛇小游戏。也是检验C语言是否学好的试金石。话不多说,咱们进入正题!向大厂冲锋!本次实现贪吃蛇会使用到的⼀些Win32 API知识,接下来我们就学习⼀下什么是Win32 API。
2024-06-08 17:36:20
2499
104
原创 【数据结构】初识数据结构之复杂度与链表
哈喽,各位小伙伴大家好!今天我们开启全新的篇章,数据结构。简单来说数据结构就是数据在内存中的管理。今天给大家带来的是数据结构中的复杂度和链表的知识。话不多说,咱们进入正题!向大厂冲锋!
2024-06-08 17:24:32
2631
125
原创 【计算网络学习笔记】序列化和反序列化
本文介绍了计算机网络中序列化和反序列化的概念及其在应用层协议中的重要性。通过实现网络版计算器的示例,阐述了如何通过自定义协议实现结构化数据的传输。文章详细讲解了TCP套接字的封装过程,包括创建套接字、绑定端口、监听连接等核心操作,并强调了TCP全双工通信的特性。代码示例展示了如何通过Socket类实现TCP通信的基本功能,为构建自定义应用层协议提供了实践基础。
2026-01-03 16:04:08
1091
原创 【计算网络学习笔记】TCP套接字介绍和使用
本文介绍了TCP套接字的基本概念和使用方法。主要内容包括:1)TCP网络程序实现英译汉功能;2)详细解析socket API函数如socket()、bind()、listen()、accept()和connect()的功能参数;3)服务器程序结构示例;4)通过饭店拉客例子形象说明accept()工作原理;5)提供了NoCopy.hpp和TcpServer.hpp两个实用代码模板。文章以通俗易懂的方式讲解了TCP网络编程的基础知识,适合计算机网络初学者学习参考。
2025-12-17 16:47:11
1091
6
原创 【计算网络学习笔记】Socket编程UDP实现简单聊天室
本文介绍了基于UDP协议的Socket编程实现简单聊天室的方法。文章包含三个核心模块:Route类负责用户管理和消息路由,使用互斥锁保证线程安全;UdpClient实现客户端功能,采用双线程分别处理消息发送和接收;UdpServer实现服务器端功能。系统特点包括:1) 自动识别新用户并管理在线列表;2) 支持"QUIT"指令退出;3) 多线程并发处理消息。通过UDP的无连接特性,实现了简单的群聊功能,展示了网络编程的基本原理和实践方法。
2025-12-12 15:54:13
419
6
原创 【MySQL】使用C语言连接MySQL数据库
本文介绍了如何使用C语言连接MySQL数据库的基本步骤。首先需要下载MySQL Connector/C库,包含头文件和库文件。通过mysql_init()初始化连接,使用mysql_real_connect()建立数据库连接,并设置字符集为utf8。介绍了核心API:mysql_query()执行SQL命令,mysql_store_result()获取查询结果,以及mysql_num_rows()、mysql_num_fields()等函数处理结果集。文章还强调了使用完毕后需要释放结果集内存以避免泄漏。这些
2025-12-09 16:09:51
777
7
原创 【计算网络学习笔记】MySQL的视图特性和用户管理
本文介绍了MySQL中的视图特性和用户管理。视图是一个虚拟表,其数据来源于基表查询结果,视图和基表数据相互影响。讲解了视图的创建、修改和删除操作,以及视图的使用规则和限制。在用户管理方面,详细说明了用户信息存储位置、创建用户和删除用户的操作方法,强调了对用户权限进行精确控制的重要性。文章通过具体SQL示例演示了各项操作,并提供了密码设置相关问题的解决方案参考。
2025-12-01 17:47:17
1106
2
原创 【计算网络学习笔记】MySql的多版本控制MVCC和Read View
MySQL的MVCC(多版本并发控制)机制通过隐藏字段、undo日志和Read View实现了高效的读写并发控制。MVCC通过记录历史版本链,允许读操作访问事务开始前的快照数据,避免了读写阻塞。关键点包括:1)每条记录包含DB_TRX_ID、DB_ROLL_PTR等隐藏字段;2)修改前数据会拷贝到undo日志形成版本链;3)Read View根据事务ID判断数据可见性,实现不同隔离级别。这种机制提高了数据库并发性能,解决了脏读、幻读等问题,但无法处理更新丢失情况。MVCC是MySQL实现事务隔离性的核心技术
2025-11-28 16:24:44
1260
13
原创 【MySQL】MySql中的四种隔离级别
MySQL事务隔离级别详解:MySQL提供了四种事务隔离级别,分别是读未提交(Read Uncommitted)、读提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。其中读未提交级别最低,允许脏读;读提交可防止脏读但可能出现不可重复读;可重复读是MySQL默认级别,保证同一事务多次读取结果一致;串行化级别最高,通过强制事务排序解决幻读问题。每种隔离级别通过不同锁机制实现,开发者可根据业务需求选择合适的隔离级别。文章还演示了如何查看和设置隔离
2025-11-26 16:31:26
907
6
原创 【MySQL】MySQL的事务和隔离级别
MySQL事务是保证数据一致性的重要机制,由一组DML语句组成,具有原子性、一致性、隔离性和持久性(ACID)特性。InnoDB引擎支持事务,而MyISAM不支持。事务可以解决并发操作导致的数据问题,如重复售票场景。MySQL支持自动提交和手动提交两种事务模式,可通过autocommit参数设置。事务隔离级别包括读未提交、读提交、可重复读和串行化,用于控制并发事务间的可见性。
2025-11-22 16:26:53
838
12
原创 【计算网络学习笔记】初识Socket套接字和端口号
本文介绍了Socket套接字和端口号的基本概念。端口号用于标识主机上的进程,与IP地址共同构成套接字,实现网络通信。文章阐述了端口号的范围划分、与进程ID的区别,以及源/目的端口号的作用。同时讲解了TCP和UDP协议的特点、网络字节序转换函数,并简要介绍了Socket编程API和sockaddr结构体的作用。这些知识是进行网络编程的基础,理解IP+Port的组合以及套接字概念对后续深入学习TCP/UDP协议至关重要。
2025-11-20 17:50:28
1142
6
原创 【MySQL】B+树索引的理解和创建
本文主要介绍了MySQL中B+树索引的基本原理和创建过程。作者通过创建测试表并插入无序数据,发现数据在存储时自动按主键排序,引出B+树索引的作用。文章重点解释了MySQL采用Page(页)作为IO交互单位的原因:通过按页加载数据减少磁盘IO次数,提高查询效率。举例说明查找id=2记录时,按页加载相比逐条加载能显著降低IO开销。本文为理解MySQL索引机制提供了基础性介绍,适合数据库初学者阅读。
2025-11-15 17:05:43
762
11
原创 【MySQL】内外链接和数据库索引
本文介绍了MySQL中的内外连接和数据库索引。内连接通过WHERE子句筛选表间笛卡尔积,是最常用的连接方式;外连接分为左外连接(保留左表完整数据)和右外连接(保留右表完整数据)。数据库索引能显著提升查询效率,常见的索引类型包括主键索引、唯一索引、普通索引和全文索引。文章通过海量数据测试展示了索引的优化效果,并分析了磁盘存储结构与MySQL数据存储的关系,说明合理使用索引能平衡查询与写入性能。
2025-11-13 17:27:22
890
8
原创 【高阶数据结构学习笔记】高阶数据结构之B树B+树B*树
摘要:本文介绍了B树、B+树和B*树三种高阶数据结构,重点分析了B树的插入过程。B树是一种多路平衡搜索树,适用于外存数据存储,能有效降低树高和磁盘访问次数。文章详细讲解了B树的6个性质、节点结构,并通过示例展示了插入操作的分裂过程,最后给出了查找算法的伪代码实现。这些数据结构在大规模数据存储和高效检索场景中具有重要应用价值。
2025-11-07 19:26:41
895
6
原创 【计算网络学习笔记】网络基础之网络协议栈
本文介绍了计算机网络中网络协议栈的基础知识,重点讲解了局域网通信原理和IP地址管理。主要内容包括:1. 局域网通信通过MAC地址识别主机,采用碰撞检测机制;2. 数据在协议栈中的封装与解包过程,各层协议的报文结构;3. IP地址的作用与管理,IPv4地址的表示方法;4. IP地址与MAC地址的区别,IP地址用于路由选择而MAC地址用于局域网转发。文章还通过示意图展示了TCP/IP通信过程和数据传输流程,帮助理解网络分层协议的工作机制。
2025-11-05 16:19:29
759
8
原创 计算机网络学习笔记】初始网络之网络发展和OSI七层模型
计算机网络基础与OSI七层模型摘要 本文介绍了计算机网络的基础概念和发展历程,从独立计算机到局域网、广域网的演进过程。重点讲解了网络协议的必要性和分层设计思想,通过电话铃响约定的例子生动说明协议的本质。 详细解析了OSI七层参考模型,包括各层功能: 物理层(比特流传输) 数据链路层(数据帧处理) 网络层(路由选择) 传输层(可靠传输) 会话层(连接管理) 表示层(数据格式转换) 应用层(具体应用协议) 最后指出实际工程中多采用TCP/IP五层模型,因其更实用。文章通过图文结合的方式,帮助读者建立网络分层架构
2025-11-01 15:59:04
1381
12
原创 【MySQL】笛卡尔积和复合查询
本文介绍了MySQL中的复合查询和多表查询,包括基本查询回顾、多表查询、自连接和子查询等高级查询技巧。主要内容涵盖:1)基本查询语法回顾;2)多表联合查询(如员工与部门信息关联);3)自连接查询(同一表内数据关联);4)单行/多行/多列子查询;5)FROM子句中的子查询应用;6)合并查询方法。文章通过具体案例演示了如何实现复杂业务查询需求,适合需要提升MySQL查询技能的学习者参考。
2025-10-30 16:48:51
1029
6
原创 【Linux学习笔记】线程安全问题之单例模式和死锁
这篇文章主要介绍了Linux环境下的线程安全问题,重点讨论了单例模式和死锁两种常见场景。文章首先解释了单例模式的概念和特点,对比了饿汉式(立即加载)和懒汉式(延时加载)两种实现方式,并给出了线程安全的懒汉式单例模式代码示例,强调双重检查锁和volatile关键字的使用。随后,文章展示了如何将单例模式应用于线程池的实现,包括线程池初始化、任务队列管理、线程处理逻辑等关键功能。代码示例中使用了互斥量、条件变量等同步机制来保证线程安全,并提供了完整的线程池实现框架。这篇文章通过具体代码示例,为开发者解决Linux
2025-10-28 18:09:11
831
9
原创 【Linux学习笔记】日志器与线程池设计
本文介绍了Linux环境下日志器与线程池的设计实现。主要内容包括:1)采用策略模式设计日志系统,支持控制台和文件两种输出方式,包含日志等级、时间戳格式化等核心功能;2)通过互斥锁实现线程安全;3)日志格式规范设计,包含进程ID、文件名、行号等关键信息。文章详细展示了Log.hpp的实现代码,包含日志策略基类、控制台和文件两种具体策略类,以及时间格式化、日志等级转换等实用工具函数,为后续线程池设计提供了基础支持。
2025-10-25 16:05:44
1197
13
原创 【Linux学习笔记】基于阻塞队列和环形队列的生产者消费者模型
基于阻塞队列的生产者消费者模型 本文介绍了Linux中基于阻塞队列和环形队列的生产者消费者模型实现。阻塞队列(Blocking Queue)是一种特殊数据结构,当队列空时消费者线程会被阻塞,队列满时生产者线程会被阻塞。文章详细展示了C++实现的阻塞队列模板类BlockQueue,包含Push/Pop操作的线程安全实现,以及使用条件变量和互斥锁的同步机制。特别解释了pthread_cond_wait必须配合互斥锁使用的原因:防止解锁和等待操作之间的竞争条件导致信号丢失。该模型可有效处理多线程环境下的任务调度问
2025-10-23 16:56:11
853
8
原创 【Linux学习笔记】线程同步与互斥之生产者消费者模型
Linux线程同步与互斥:生产者消费者模型 本文介绍了Linux线程同步与互斥中的生产者消费者模型。主要内容包括: 条件变量:用于解决线程在特定条件下等待的问题,如队列为空时的等待机制。 同步概念:保证线程按特定顺序访问临界资源,避免竞态条件和饥饿问题。 关键函数: pthread_cond_init/destroy:条件变量初始化和销毁 pthread_cond_wait:等待条件满足 pthread_cond_signal/broadcast:唤醒等待线程 生产者消费者模型: 通过阻塞队列解耦生产者和消
2025-10-19 16:15:51
803
14
原创 【MySQL】数据库表的CURD(二)
本文介绍了MySQL数据库表的更新(Update)和删除(Delete)操作。Update部分讲解了如何通过SET子句修改特定列值,包括单列更新(如将孙悟空数学成绩改为80分)、多列更新(如修改曹孟德数学和语文成绩)以及基于原值的计算更新(如给总分倒数前三名的学生数学加30分)。Delete部分展示了如何删除特定记录(如删除孙悟空考试成绩)。文章通过具体SQL示例演示了语法使用,并强调了全表更新需谨慎操作。
2025-10-15 18:32:53
1155
22
原创 【Linux学习笔记】线程的同步与互斥(一)
本文介绍了Linux线程同步与互斥的基本概念,重点讨论了线程互斥的实现机制。通过售票系统的例子,展示了多线程共享资源时可能出现的数据竞争问题,并分析了其原因——非原子操作导致的多线程并发访问冲突。文章详细讲解了互斥量的使用方法,包括初始化、加锁、解锁和销毁等接口,并通过改进后的售票系统代码演示了如何正确使用互斥量保护临界资源。最后,文章简要探讨了互斥量的实现原理,强调原子操作在解决多线程并发问题中的重要性。 关键词:线程同步、线程互斥、临界资源、互斥量、原子操作
2025-10-12 15:42:45
815
13
原创 【MySQL】数据库内置函数
MySQL数据库内置函数摘要 本文介绍了MySQL中常用的日期函数和字符串函数。日期函数包括获取当前日期/时间(current_date/time)、时间戳(current_timestamp)、日期运算(date_add/sub)和日期差(datediff)等。字符串函数包含字符集获取(charset)、连接(concat)、大小写转换(ucase/lcase)、子串操作(substring)、替换(replace)和去除空格(trim)等。文章通过创建留言表、生日表等实际案例,演示了如何使用这些函数进行
2025-10-10 18:39:09
1181
12
原创 【Linux学习笔记】线程概念和控制(三)
本文介绍了Linux线程的终止、等待和分离操作。线程可通过return、pthread_exit或pthread_cancel终止,需要注意返回指针的内存管理。pthread_join用于线程等待,防止资源泄漏。pthread_detach可将线程设置为分离状态,自动释放资源。文章还分析了线程ID的本质,指出在NPTL实现中线程ID是进程地址空间上的一个地址,并解释了用户线程与内核轻量级进程(LWP)的联动机制。最后通过mmap系统调用和glibc源码,说明了线程栈的创建和管理方式。这些知识对于深入理解Li
2025-10-04 17:08:14
1187
10
原创 【Linux学习笔记】线程概念和控制(二)
本文主要介绍了Linux线程的相关概念和控制方法。首先分析了线程相比进程的优点(创建代价小、切换开销低、资源占用少)和缺点(性能损失、健壮性降低、编程难度高)。接着详细讲解了Linux中进程与线程的关系,包括线程共享的进程资源和线程独有的私有数据。然后重点介绍了POSIX线程库的使用方法,包括线程创建(pthread_create)、线程终止(pthread_exit)和线程取消(pthread_cancel)等核心函数。最后解释了为什么需要线程等待,以及主线程与其他线程的区别。文章通过代码示例和系统命令(
2025-10-01 19:22:59
1557
16
原创 【MySQL学习笔记】数据库的CURD(一)
MySQL数据库CURD操作笔记摘要 本文介绍了MySQL数据库的CURD基本操作,包括创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。重点讲解了表的创建和插入操作,以及SELECT查询的各种用法。主要内容包括: 插入数据:单行全列插入、多行指定列插入、主键冲突处理(ON DUPLICATE KEY UPDATE)和替换操作(REPLACE) 查询数据: 全列查询(不推荐)与指定列查询 查询字段为表达式(包含单字段或多字段运算) 为查询结果指定别名(AS关键字)
2025-09-25 17:27:20
1451
20
原创 【MySQL】数据库中表的约束(二)
MySQL数据库表约束详解(二) 本文继续讲解MySQL中的表约束,重点介绍了三种约束类型: 自增长(auto_increment):与主键搭配使用,自动递增生成唯一值,需注意必须是整数类型且每个表只能有一个自增字段。 唯一键(unique):保证字段值的唯一性但允许为空,适用于业务上需要唯一但不作为主键的字段,可与主键配合使用。 外键(foreign key):建立表间关联关系,确保从表数据必须在主表存在,支持设置为NULL,有效避免数据冗余。 文章通过学生-班级关系等实例演示了约束的实际应用,最后给出了
2025-09-23 18:16:00
1028
3
原创 【MySQL】数据库中表的约束(一)
本文介绍了MySQL数据库中表的约束条件,主要包括空属性(null/not null)、默认值(default)、列描述(comment)、zerofill和主键(primary key)等。空属性用于保证字段不为空,默认值可设置常用值,列描述用于字段说明但不影响数据,zerofill属性会在数字前补零显示但不改变实际存储值。主键约束确保字段唯一且非空,可以是单列或复合主键,并支持后期添加和删除。这些约束条件有助于保证数据的合法性和业务逻辑的正确性。
2025-09-20 17:03:20
1066
13
原创 【Linux学习笔记】线程概念与控制(一)
本文介绍了Linux线程的基本概念与控制。首先解释了线程是进程内部的执行序列,Linux中线程本质是轻量化的PCB。其次详细讲解了分页式存储管理机制,包括虚拟地址与页表的作用、物理内存管理方式、多级页表结构及其地址转换过程,并分析了TLB快表提升查询效率的原理。最后说明了缺页异常的处理机制,包括不同类型缺页中断的处理方式。文章通过图解和实例,系统性地阐述了Linux线程管理和内存管理的核心原理。
2025-09-17 16:43:03
847
13
原创 【MySQL】表的操作和数据类型
本文介绍了MySQL表的操作和数据类型。主要内容包括:1. 表的创建、查看、修改和删除操作,演示了字段添加、修改和删除等语法;2. 详细讲解了数值类型(如tinyint)、字符串类型、日期时间类型等常用数据类型的特点和使用场景;3. 通过案例展示了数值越界、bit类型显示等特殊情况的处理方法。文章还对比了float和decimal类型的区别,帮助读者根据实际需求选择合适的数据类型。
2025-09-12 18:27:52
1351
22
原创 Linux学习笔记】信号的产生和用户态和内核态
本文摘要了Linux信号处理机制的核心概念,包括信号递达、未决状态和阻塞状态的区别。重点介绍了信号在内核中的表示方式,通过位图存储未决和阻塞标志。文章详细讲解了信号集操作函数(如sigemptyset、sigaddset等)和关键系统调用sigprocmask(修改信号屏蔽字)与sigpending(获取未决信号集)。最后通过实验代码演示了信号处理过程,包括自定义信号处理函数的实现和信号状态的实时监控。这些知识是理解Linux进程间通信和异常处理机制的基础。
2025-09-10 18:54:55
909
22
原创 【MySQL】数据库的基本操作
本文介绍了MySQL数据库的基本操作,包括创建、修改、删除数据库的操作方法,以及字符集和校验规则的设置。重点讲解了如何创建数据库、指定字符集和校验规则,并通过示例演示了不同校验规则对数据库查询的影响。此外,还介绍了数据库的备份与恢复操作,以及查看数据库连接情况的方法。文章内容实用,适合MySQL初学者学习基础操作,帮助读者快速掌握数据库管理的基本技能。
2025-09-07 17:56:37
1532
20
原创 【Linux学习笔记】信号的深入理解之软件条件产生信号
Linux信号机制:软件条件产生信号分析 本文深入探讨了Linux系统中软件条件产生信号的机制,重点分析了alarm函数和SIGALRM信号的实现原理及实际应用。通过实验验证了软件条件产生信号的过程,包括: alarm函数设置闹钟触发SIGALRM信号 信号处理函数的注册与调用 硬件异常产生信号(如除零错误SIGFPE和野指针SIGSEGV) 子进程退出时产生core dump信号 文章通过代码示例展示了如何捕获和处理这些信号,并解释了操作系统底层定时器管理和异常处理机制。特别分析了CPU状态寄存器在异常信
2025-09-05 15:55:27
1319
24
原创 【MySQL】初识数据库基础
MySQL数据库基础入门:从存储需求到SQL分类 本文介绍了数据库的基础知识,包括MySQL的安装使用、架构设计和SQL分类。首先解释了为什么需要数据库而非文件存储数据,比较了主流数据库产品的特点,详细演示了MySQL的基本操作,包括数据库创建、表管理和数据查询。文章还分析了MySQL的架构特点和三种主要存储引擎(MyISAM、InnoDB、MEMORY)的对比,最后将SQL语言分为DDL、DML、DCL三类进行说明。通过具体案例帮助读者快速理解MySQL的基本概念和使用方法,为数据库学习打下基础。
2025-09-02 17:39:34
1331
21
原创 【Linux学习笔记】认识信号和信号的产生
Linux信号机制解析 本文介绍了Linux系统中的信号机制。信号是进程间异步事件通知的一种方式,属于软中断。文章从生活角度类比快递收发过程,解释了信号的基本概念:进程能识别信号、信号处理方法预先准备、信号处理时机可延迟等。通过示例代码演示了如何使用signal()函数自定义信号处理行为,验证了Ctrl+C发送的是SIGINT(2号)信号。系统提供了约34种标准信号(编号1-31),每种信号都有默认处理动作,用户可选择忽略、执行默认操作或自定义处理。信号机制使进程能异步响应外部事件,是Linux系统编程的重
2025-07-13 15:52:47
1379
17
原创 【计算机基础理论知识】C++篇(二)
本文系统梳理了C++核心概念:左值/右值区分、左值引用/右值引用特性及使用场景;深入剖析了移动语义、引用折叠与完美转发机制,解析其解决对象拷贝开销问题的原理;阐释了多态的实现机制(虚表与动态绑定)和内存对齐规则(包括对齐数计算及优化考量)。适合开发者巩固C++底层机制,提升编程效率与性能优化能力。
2025-07-10 18:31:01
998
31
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅