自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于C++的《Head First设计模式》笔记——蝇量模式

摘要:本文介绍了蝇量模式(Flyweight Pattern)的设计模式,通过田园游戏中大量树木实例的内存优化案例,对比了传统实现与蝇量模式的差异。传统方式实例化1亿棵树对象导致内存占用达95%,而蝇量模式通过将树的状态集中存储在TreeManager中,仅使用静态方法显示,使内存占用降至58%。文章阐述了蝇量模式的核心思想:通过共享相同状态来减少对象数量,适用于需要大量相似对象但实例间差异较小的场景。同时指出该模式的局限性是会牺牲单个实例的行为独立性。

2026-03-23 21:17:50 310

原创 基于C++的《Head First设计模式》笔记——责任链模式

本文介绍了责任链设计模式及其应用。责任链模式通过构建对象链来处理请求,每个对象依次检查请求并决定处理或转发。文章以请假审批流程为例,展示了如何用C++实现小组长、部门经理和总经理的三级审批链,说明了该模式解耦请求发送者和接收者、支持动态调整责任链等优点,同时也指出了可能存在的性能开销和循环引用风险。该模式适用于需要多个对象处理请求的场景,如窗体事件处理系统。

2026-03-21 14:34:03 323

原创 基于C++的《Head First设计模式》笔记——生成器模式

本文介绍了生成器(建造者)设计模式,通过组装电脑案例展示了该模式的实现。生成器模式将复杂对象的构造过程封装,允许按步骤构建并控制顺序。案例中定义了Computer产品类、ComputerBuilder抽象接口、GamingComputerBuilder和OfficeComputerBuilder具体构建者,以及Director指挥者类。该模式的优点包括封装构造过程、支持多步骤构建、隐藏产品内部实现等,但也存在需要更多客户领域知识的缺点。适用于构建组合结构的场景,如电脑由CPU、GPU等组件组成的情况。

2026-03-20 07:07:04 437

原创 基于C++的《Head First设计模式》笔记——桥接模式

本文介绍了桥接模式的设计思想及其应用。通过手机分类场景展示了类爆炸问题:当需要同时考虑操作系统和屏幕类型时,类数量会呈指数级增长。桥接模式通过将抽象(手机类)与实现(系统类)分离,使用组合关系替代多重继承,有效解决了这个问题。具体实现中,Phone类组合System类,各自形成独立的类层次结构,使得新增操作系统或屏幕类型时只需扩展相应层次,避免了类爆炸。该模式实现了抽象与实现的解耦,支持独立扩展,符合开闭原则。

2026-03-19 18:23:22 354

原创 C++的httplib库源码阅读笔记(2)

本文解析了cpp-httplib库的头文件设计,重点介绍了非Windows系统下的网络编程头文件(如arpa/inet.h、netdb.h等)及其功能,包括字节序转换、网络接口操作、DNS解析等。同时说明了跨平台处理机制,如针对不同操作系统(Windows/macOS)和加密库(OpenSSL/mbedTLS)的条件编译,以及压缩功能(zlib/Brotli)的可选支持。文章展示了该库如何通过灵活的头文件包含策略实现跨平台兼容性和功能扩展性。

2026-02-26 03:07:00 649

原创 C++的httplib库源码阅读笔记(1)

本文记录了作者对cpp-httplib库源码的阅读过程。首先介绍了库版本信息(0.31.0)和平台兼容性检查,强调该库不支持32位系统和Windows 8以下版本。随后详细分析了库中的配置宏定义,包括连接超时、缓冲区大小等参数设置。文章还特别说明了Windows平台下的特殊处理,如禁用安全警告、定义跨平台类型等。作者通过编写测试代码验证了平台特性和宏定义的实际效果。最后提到将在后续文章中继续介绍Linux环境处理和更多源码内容。全文采用边阅读边验证的方式,帮助读者深入理解这个轻量级HTTP库的实现细节。

2026-02-25 01:39:35 638

原创 C++socket网络编程——udp服务器

本文介绍了套接字编程的基础知识和UDP通信实现。主要内容包括:1)端口号与PID的区别,解释了端口号在网络通信中的必要性;2)套接字编程的三种类型及其统一接口设计;3)关键socket API函数说明;4)完整的UDP客户端和服务端代码实现,服务端采用面向对象封装,支持命令执行和消息回显功能;5)运行原理和细节说明,包括字节序转换、参数类型等;6)扩展思路,如实现多人聊天功能。文章提供了网络编程的基础知识框架和具体实现示例。

2026-02-10 00:52:07 917

原创 网络复习篇——网络基础(一)

本文探讨了网络通信的核心原理与实践应用。首先分析了同一数据链路中的数据传输机制,包括以太网的碰撞避免算法和令牌环网的工作原理。其次阐述了网络协议栈与操作系统的对应关系,从应用层到物理层的实现细节。文章还解析了网络设备(主机、路由器、交换机等)在网络协议栈中的功能定位。重点讨论了IP协议的屏蔽作用,它能统一不同底层网络的数据传输。最后对比了IP地址和MAC地址的特性差异,指出IP地址在路径选择中的稳定性以及MAC地址的局部性特征。全文揭示了网络通信本质上是贯穿协议栈的封装与解包过程。

2026-02-07 23:44:59 652

原创 《图解HTTP》笔记与读后感(下)

本文摘要介绍了《图解HTTP》中关于Web安全与功能扩展的核心内容。首先详细阐述了HTTPS的工作原理,包括HTTP的明文通信缺陷、SSL/TLS加密机制、公开密钥与共享密钥混合加密方式,以及数字证书的验证过程。其次说明了用户身份认证的常见方法,重点介绍了表单认证机制。接着概述了基于HTTP的功能扩展协议如Ajax和WebSocket。最后简要提及Web内容构建技术,并预告后续将深入探讨Web攻击技术。全文系统性地梳理了HTTP安全防护与功能增强的关键技术要点。

2026-01-27 15:54:13 1251

原创 《图解HTTP》笔记与读后感(上)

《图解HTTP》一书系统介绍了HTTP协议及其相关网络基础。主要内容包括:HTTP协议的分层结构(应用层、传输层、网络层和数据链路层),TCP/IP协议族的工作原理;HTTP协议特点(无状态、持久连接、Cookie技术);HTTP请求方法(GET、POST等)和状态码分类(2XX-5XX);报文结构、内容协商与范围请求;服务器协作机制(虚拟主机、代理、网关等);以及各类HTTP首部字段的功能与用法。该书采用图解方式讲解,但部分内容较简略,适合快速了解HTTP基础知识框架。

2026-01-27 12:36:03 606

原创 基于C++的《Head First设计模式》笔记——模式合作

本文介绍了如何通过C++实现《Head First设计模式》中的鸭子模拟器案例,展示了多种设计模式的协作应用。首先创建Quackable接口及各类鸭子实现,随后逐步引入适配器模式整合鹅类、装饰器模式统计叫声、抽象工厂模式管理鸭子创建、组合模式处理鸭群操作,最后通过观察者模式追踪个体行为。该案例演示了模式如何协同解决复杂问题,同时也指出实际开发中应灵活运用设计原则,不必刻意追求模式组合。虽然示例略显刻意,但清晰呈现了模式间的协作关系,为理解复合模式奠定了基础。

2026-01-21 11:17:47 1116

原创 基于C++的《Head First设计模式》笔记——状态模式

本文介绍了状态模式的设计与实现,通过糖果机案例展示了如何用C++实现该模式。文章首先定义State接口和具体状态类(NoQuarterState、HasQuarterState等),将每个状态的行为封装到独立类中,避免复杂的条件判断。糖果机类(GumballMachine)通过委托给当前状态对象来改变行为,实现了状态转换。文中还比较了状态模式与策略模式的异同,指出状态模式更关注内部状态驱动的行为变化。最后给出了完整代码示例,展示状态模式如何使系统更易扩展和维护,同时保持代码清晰性。

2026-01-21 04:50:55 1245

原创 基于C++的《Head First设计模式》笔记——组合模式

本文是基于《Head First设计模式》学习笔记的专栏文章,主要介绍组合模式。作者使用C++重写原书Java示例,详细讲解该模式的概念、应用场景和实现方法。组合模式通过树形结构处理部分-整体关系,使客户能统一处理单个对象和组合对象。文中以餐厅菜单系统为例,展示了如何创建组件接口(MenuComponent)、菜单项(MenuItem)和菜单(Menu)的继承体系,并实现了添加、删除、打印等功能。通过Waitress类统一操作整个菜单结构,演示了组合模式的实际应用。

2026-01-20 05:30:45 380

原创 基于C++的《Head First设计模式》笔记——迭代器模式

本文通过餐厅与煎饼屋合并的案例,探讨了如何用C++实现迭代器模式。作者首先分析了两种不同菜单实现方式(vector和数组)带来的遍历问题,然后详细展示了如何为两种菜单类分别实现迭代器,包括运算符重载等关键实现细节。通过迭代器模式,成功将遍历逻辑封装到迭代器对象中,简化了聚合接口并遵循单一职责原则。最终的女招待类通过统一的迭代器接口实现了菜单遍历,解决了代码重复和维护问题。文章还指出C++迭代器实现与Java的差异,并讨论了进一步抽象为统一接口的可能性。

2026-01-19 23:41:14 794

原创 基于C++的《Head First设计模式》笔记——模版方法模式

本文介绍了模板方法设计模式在C++中的实现。通过星巴兹咖啡订单系统中的茶和咖啡制作案例,展示了如何将共性步骤抽象到基类CaffeineBeverage中,并通过虚函数brew()和addCondiments()让子类实现特定步骤。文章详细阐述了模板方法的核心思想:定义算法骨架,将可变步骤延迟到子类实现。此外还介绍了钩子方法(如customerWantsCondiments())和好莱坞原则(“不要调用我们,我们会调用你”)的应用。

2026-01-16 22:38:07 702

原创 基于C++的《Head First设计模式》笔记——外观模式

本文介绍了外观模式及其应用,通过封装Jsoncpp库的序列化和反序列化操作,简化了接口使用。外观模式为子系统提供统一的高级接口,降低系统耦合度。同时阐述了最少知识原则,强调减少对象间不必要的交互,但需权衡其带来的额外包装类成本。最后对比了适配器、装饰者和外观模式的区别:适配器改变接口,装饰者扩展功能,外观简化接口。设计模式的选择应结合实际需求,权衡维护成本与性能影响。

2026-01-16 19:38:32 674

原创 基于C++的《Head First设计模式》笔记——适配器模式

本文介绍了适配器设计模式在C++中的实现与应用。作者通过将Java示例转换为C++代码,展示了如何使用适配器模式解决接口不兼容问题。文章首先以生活中的适配器类比,然后通过鸭子与火鸡的接口转换示例详细说明了对象适配器的实现方式,包括将Turkey接口适配为Duck接口的具体代码。此外还介绍了类适配器的多重继承实现方法,并比较了两种适配器的优缺点(组合优于继承)。最后指出适配器模式在STL迭代器等场景中的实际应用,并预告后续将讨论外观模式与其他模式的比较。

2026-01-14 22:41:15 997

原创 基于C++的《Head First设计模式》笔记——命令模式

本文介绍了命令模式的设计与实现,通过C++重写《Head First设计模式》中的遥控器案例。文章详细展示了如何将厂商类API封装成命令对象,构建支持多设备的遥控器系统。重点包括:1) 命令模式定义与类图;2) 具体命令类的实现;3) 使用lambda表达式简化代码;4) 撤销功能实现;5) 宏命令等扩展应用。该模式将请求封装为对象,实现调用者与接收者的解耦,支持撤销、队列和日志等功能,是行为型设计模式的典型应用。

2026-01-13 20:28:37 1091

原创 基于C++的《Head First设计模式》笔记——单件模式

本文是《Head First设计模式》学习笔记的C++实现版,重点解析单件(单例)模式。文章首先介绍了单件模式的特点:确保类只有一个实例并提供全局访问点,相比全局变量更节省资源。随后详细剖析了C++实现单件模式的两个关键点:类外初始化静态成员和访问私有构造函数。通过代码示例展示了懒汉模式(延迟实例化)和饿汉模式(启动即实例化)的实现方法,包括构造函数私有化、防拷贝构造等技巧。特别讨论了多线程环境下的线程安全问题,提出了“双重检查加锁”的优化方案。

2026-01-12 19:55:07 1136

原创 基于C++的《Head First设计模式》笔记——抽象工厂模式

本文通过披萨店的案例详细介绍了抽象工厂模式的设计与实现。首先分析了依赖性强的问题代码,引出依赖倒置原则(DIP),强调高层组件和低层组件都应依赖于抽象。然后展示了如何通过抽象工厂模式重构披萨店系统:定义PizzaIngredientFactory接口创建原料家族,实现NYPizzaIngredientFactory和ChicagoPizzaIngredientFactory两个具体工厂。在披萨类中通过工厂方法获取原料,使产品与具体实现解耦。

2026-01-10 18:13:53 1072

原创 基于C++的《Head First设计模式》笔记——工厂模式

本文基于《Head First设计模式》内容,使用C++重写了工厂模式示例。文章首先指出直接使用new创建对象违反"针对接口编程"原则,导致代码脆弱。通过披萨店案例展示了简单工厂模式,将对象创建封装到工厂类中。接着引入工厂方法模式,将createPizza()作为抽象方法,由子类决定具体实现,实现对象创建的延迟。文章详细对比了两种模式:简单工厂封装创建逻辑但仍是静态的,工厂方法通过子类化实现动态创建。最后给出工厂方法模式的正规定义:定义创建对象接口,由子类决定实例化哪个类。

2026-01-09 17:32:10 790

原创 基于C++的《Head First设计模式》笔记——装饰者模式

本文介绍了装饰者设计模式在星巴兹咖啡订单系统中的应用。文章首先分析了传统继承方式带来的类爆炸问题,随后引入开放-关闭原则,详细讲解了装饰者模式如何通过动态组合对象来灵活扩展功能。作者用C++实现了咖啡基类和调料装饰类,展示了如何通过层层装饰来构建复杂订单。代码示例演示了双倍摩卡豆奶加牛奶的订单实现过程,并分析了装饰链的调用流程。最后讨论了装饰者模式的优缺点,并扩展实现了按杯型定价的功能。该模式有效解决了类膨胀问题,使系统更易扩展和维护。

2026-01-06 22:47:28 838

原创 基于C++的《Head First设计模式》笔记——观察者模式

本文介绍了观察者模式在气象监测系统中的应用。作者使用C++和Qt框架重构了《Head First设计模式》中的Java示例,通过WeatherData类实现气象数据监测,并构建了当前状况、统计和预报三个显示组件。文章详细讲解了观察者模式的核心概念,包括主题(Subject)和观察者(Observer)接口的设计与实现,以及如何通过松耦合方式实现对象间通信。特别展示了Qt信号槽机制与观察者模式的关系,并通过lambda表达式优化代码结构等等。

2026-01-03 18:04:12 902

原创 基于C++的《Head First设计模式》笔记——策略模式

本文介绍了《Head First设计模式》中策略模式的学习笔记,通过C++重写Java示例。以鸭子模拟游戏为例,最初使用简单继承导致代码冗余和修改困难,如橡皮鸭错误继承飞行行为。通过识别变化部分(飞行和叫声行为)并将其封装为独立接口(FlyBehavior和QuackBehavior),使用组合代替继承,实现了行为的动态配置。最终定义了策略模式:将算法族封装为可互换对象,使算法变化独立于使用客户。该模式通过行为委托和多态提高了代码的灵活性和可扩展性,体现了“优先使用组合而非继承”的设计原则。

2025-12-17 01:27:30 1024

原创 【个人项目】C++基于websocket的多用户网页五子棋(下)

本文介绍了基于WebSocket的多用户网页五子棋系统的设计与实现。系统采用C++开发,包含session管理模块、玩家匹配模块和服务器封装模块。session管理通过定时器实现自动销毁,确保资源合理利用;玩家匹配模块根据天梯分数分级,采用队列机制实现智能匹配;服务器模块整合了用户注册、登录、对战等功能,提供RESTful接口。前端页面包括登录、注册、游戏大厅和房间界面,通过WebSocket实现实时通信。系统还支持局时/步时控制、棋谱保存和回放等功能,未来计划增加观战和人机对战等扩展功能。

2025-12-13 16:41:23 1104 1

原创 【个人项目】C++基于websocket的多用户网页五子棋(上)

本文介绍了一个网页版五子棋对战游戏的实现方案。项目采用C++后端和前端技术栈,核心功能包括用户管理、匹配对战和实时聊天。后端基于WebSocket++实现HTTP/WebSocket服务器,使用JsonCpp进行数据序列化,MySQL存储用户数据。系统模块包括数据管理、在线用户管理、游戏房间管理等,实现了用户注册登录、天梯分数匹配、五子棋对战和实时聊天功能。项目采用多线程架构,通过智能指针管理资源,确保线程安全。技术难点在于WebSocket长连接维护、实时对战同步和数据库并发访问控制。

2025-11-30 19:33:17 1398

原创 【个人项目】MyWeChat客户端开发——核心类编写

本文记录了个人项目在model模块的data.h中封装了路径处理、日志打印等实用工具函数,并定义了 UserInfo、ChatSessionInfo、Message 三类核心业务数据类(含工厂模式、UUID 唯一 ID 等设计),用于管理聊天场景的用户、会话及消息数据。

2025-11-30 01:03:16 890

原创 【个人项目】MyWeChat客户端开发——项目创建

本文介绍了使用QtCreator创建Widgets应用程序的过程。主要步骤包括:选择CMake作为构建系统(因其支持protobuf等第三方库扩展)、选用Widget而非MainWindow作为基础类、选择MSVC构建套件以获得更好的编译性能。文章简要说明了各选项选择的理由,并指出通过这几个简单步骤即可完成项目创建,为后续代码编写做好准备。

2025-11-29 16:31:17 305

原创 【个人项目】MyWeChat客户端开发——环境搭建

本文详细介绍了搭建多人聊天室客户端开发环境的过程。主要内容包括:1)Qt6的两种安装方式(官方安装和清华镜像源安装);2)使用Git克隆并安装vcpkg包管理器;3)通过vcpkg安装protobuf工具。文章提供了具体的安装步骤和参考文档,旨在完整记录开发环境配置细节,便于项目重现和参考。最终完成了客户端开发所需工具的安装配置,为后续项目开发做好准备。

2025-11-29 15:58:44 751

原创 Redis主从复制详解

主从节点在建⽴复制连接后,主节点会把⾃⼰收到的 修改操作 , 通过 tcp ⻓连接的⽅式, 源源不断的传输给从节点. 从节点就会根据这些请求来同时修改⾃⾝的数据. 从⽽保持和主节点数据的⼀致性.另外, 这样的⻓连接, 需要通过⼼跳包的⽅式来维护连接状态. (这⾥的⼼跳是指应⽤层⾃⼰实现的⼼跳, ⽽不是 TCP ⾃带的⼼跳).通过分析全量复制的所有流程,我们会发现全量复制是⼀件⾼成本的操作:主节点 bgsave 的时间,RDB 在⽹络传输的时间,从节点清空旧数据的时间,从节点加载 RDB 的时间等。

2025-08-05 10:49:35 1058

原创 Redis事务详解

本篇文章详细讲解了redis事务与使用,在redis++库中的使用也类似,另外我们也可以用lua脚本实现事务。本篇文章供大家和本人在日常开发中进行参考。

2025-08-01 18:29:37 674

原创 Redis持久化详解

Redis ⽀持 RDB 和 AOF 两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题,当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。

2025-07-31 21:43:54 681

原创 Redis C++客户端——命令使用

基于redis++库对redis服务的使用样例编写。

2025-07-28 21:57:38 447

原创 MySQL进阶学习与初阶复习第四天

在平时使⽤MySQL数据库时,经常进⾏查询操作,有些查询语句执⾏的时间⾮常⻓,当执⾏时间超过设定的阈值时,我们称这个查询为慢查询,慢查询的相关信息通常需要⽤⽇志记录下来称为慢查询⽇志,mysqldumpslow可以解析慢查询⽇志⽂件并汇总其内容,有关慢查询⽇志的内容我们在MySQL服务器配置与管理专题进⾏讲解.mysqladmin 的常⽤选项参考公共选项部分,可以在命令⾏中指定,也可以在选项⽂件中通过[mysqladmin] 和 [client] 组进⾏指定。MySQL 8.0.26 之前使⽤此命令。

2025-07-27 22:00:25 815

原创 Redis C++客户端——命令使用

使用了什么命令在每个单元测试函数中都有提示,下面直接展示。

2025-07-27 21:03:16 387

原创 MySQL进阶学习与初阶复习第三天

mysqldump客⼾端程序可以执⾏逻辑备份并⽣成⼀组SQL语句,其中包含原始数据库和表的定义以及表中的数据,以便实现对数据库的简单备份或复制。mysqlcheck有如下常⽤选项,可以在命令⾏中指定,也可以在选项⽂件中通过 [mysqlcheck]和 [client]检查的作⽤是检查表的完整性以及数据库表和索引是否损坏(⽀持 InnoDB,MyISAM,ARCHIVE,CSV)分析的作⽤是查看表的关键字分布,能够让 sql ⽣成正确的执⾏计划(⽀持 InnoDB,MyISAM,NDB)

2025-07-26 21:35:29 1077

原创 Redis C++客户端——通用命令

本篇文章主要是通过redis-plus-plus库使用通用命令。

2025-07-26 19:40:33 319

原创 MySQL进阶学习与初阶复习第二天

进阶学习第二天。

2025-07-26 05:28:31 1151

原创 第五章.Redis数据库管理

本文介绍了redis的数据库管理命令,供大家和别人在日常开发中进行参考。

2025-07-25 15:59:54 441

原创 MySQL进阶学习与初阶复习第一天

MySQL进阶学习与初阶复习第一天。

2025-07-23 17:42:22 1391

空空如也

空空如也

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

TA关注的人

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