自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

软件开发工程师

软件开发工程师

  • 博客(63)
  • 收藏
  • 关注

原创 7种设计原则的详细讲解

一个类应该只有一个原因去改变,即一个类应该仅有一个职责。

2025-01-26 19:04:34 1221

原创 中介者模式Java实现

中介者模式定义了一个中介对象(Mediator),用于封装一系列对象之间的交互。中介者使得对象不需要直接相互交互,而是通过中介者来协调行为。通过这种方式,降低了对象之间的耦合性,提高了系统的灵活性和可扩展性。} // 注册用户到聊天室 public void addUser(User user) {// 消息发送给除了自己以外的所有用户 if(u!= user) {} } } }} // 注册用户到聊天室 public void addUser(User user) {

2025-01-26 19:02:05 811

原创 适配器模式Java实现

适配器模式允许一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。// 只能输出 110V 电压适配器模式是一种结构型设计模式,它能够帮助解决类或接口不兼容的问题,允许客户端通过适配器与不兼容的接口进行交互。通过适配器模式,系统可以更加灵活、可扩展,并且能够有效集成新旧系统。虽然它能够提供很多优点,但也需要注意增加了代码的复杂性和冗长性,因此在使用时需要权衡利弊。

2025-01-26 18:59:39 812

原创 观察者模式Java实现

Subject(主题):又叫做“被观察者”,是状态发生变化的对象。它负责维护一系列观察者对象,并在其状态变化时通知这些观察者。Observer(观察者):观察者是那些需要观察并响应主题对象变化的对象。当主题对象的状态发生变化时,观察者会得到通知并作出反应。ConcreteSubject(具体主题):具体的主题对象,负责保存主题的状态,并在状态改变时通知所有观察者。ConcreteObserver(具体观察者):具体的观察者对象,当被观察的对象(主题)发生变化时,它会根据需要更新自身的状态。

2025-01-26 18:58:20 845

原创 备忘录模式Java实现

Originator(发起人):负责创建一个备忘录来记录自身的状态,并可通过备忘录恢复其状态。Memento(备忘录):负责存储发起人对象的内部状态,但不允许直接修改这些状态。Caretaker(管理者):负责管理备忘录的保存和恢复,通常不操作备忘录的内容。备忘录模式的核心思想就是将对象的状态(如数据)保存到一个备忘录中,而不暴露对象的内部结构,然后根据需要恢复到之前的状态。// 创建一个备忘录,保存当前状态// 恢复状态。

2025-01-26 18:56:53 841

原创 微服务 MicroServices 学习笔记

微服务(MicroServices)架构是当前互联网业界的一个技术热点,圈里有不少同行朋友当前有计划在各自公司开展微服务化体系建设,他们都有相同的疑问:一个微服务架构有哪些技术关注点(technical concerns)?需要哪些基础框架或组件来支持微服务架构?这些框架或组件该如何选型?笔者之前在两家大型互联网公司参与和主导过大型服务化体系和框架建设,同时在这块也投入了很多时间去学习和研究,有一些经验和学习心得,可以和大家一起分享。

2025-01-25 10:48:39 739

原创 Spring Boot

import org} }} }} }} }参考资料:https://blog.csdn.net/tr1912/article/details/79217132。

2025-01-25 10:46:03 978

原创 Java集合详解

Java 集合类存放于java.util包中,是一个用来存放对象的容器。集合只能存放对象。例如,将int类型数据1存入集合时,会自动转换为Integer类型后存入。集合存放的是对象的引用,对象本身存放在堆内存中。集合可以存放不同类型、不限数量的数据类型。Set:无序、不可重复的集合。List:有序、可重复的集合。Map:具有键值对映射关系的集合。从 JDK 5 开始,增加了泛型功能,集合可以指定存储对象的类型。Java 集合是开发过程中不可或缺的工具。

2025-01-25 10:32:52 508

原创 Java 正则表达式使用详解

正则表达式在 Java 中主要用于字符串的匹配、查找、替换和分割操作。Java 提供了包,其中的核心类包括Pattern和Matcher。

2025-01-25 10:29:22 366

原创 Activity 和 Application 详解

是 Android 中的一个组件,表示单个屏幕。它提供了用户界面,用于与用户交互,是 Android 应用程序的基本构建块之一。

2025-01-25 10:25:39 1328

原创 盘点23种设计模式

设计模式是一套被广泛接受和使用的解决特定问题的经验总结和最佳实践。根据设计模式的用途和实现方式,通常可以将设计模式分为三类:1.创建型模式(Creational Patterns) 用于处理对象创建的机制,旨在通过控制对象的创建方式,帮助系统更加灵活地创建对象。创建型模式包括:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式等。2.结构型模式(Structural Patterns) 处理类或对象的组合关系,旨在帮助系统更好地组织代码结构,实现高效的代码复用。

2025-01-25 10:20:55 961

原创 基于C语言实现实现一个简易聊天室

实现一个基于 C 语言的简易聊天室,通常需要使用 TCP 套接字编程,支持多个客户端与服务器通信。以下是完整的实现过程,包括服务器端和客户端的代码。

2025-01-25 10:15:56 336

原创 基于UDP实现稳定传输协议(C++实现)

实现基于 UDP 的稳定传输协议,可以参考以下步骤。UDP 本身是无连接、无保证的传输协议,为了实现稳定传输,需要在应用层构建类似于 TCP 的可靠机制,包括数据分片、确认、超时重传、流量控制等。以下是一个简单的设计和实现方案。以下是一个基于 UDP 的稳定传输协议的 C++ 示例:2. 数据包结构3. 发送方4. 接收方5. 主函数示例特性和改进方向超时重传:发送方需要对未确认的数据包进行超时重传。滑动窗口:可以实现窗口控制,提高传输效率。数据完整性校验:可使用 CRC 或其他

2025-01-25 10:00:30 268

原创 进制转换算法详解(C++实现)

在数学中,进制是表示数字的一种方法,不同进制系统的差异在于每个位置所代表的权重不同。二进制(Binary,基数2):仅由0和1两个数字组成,广泛用于计算机的内部表示。八进制(Octal,基数8):由0到7组成,通常用于表示大于二进制的数字而不失去太多的精度。十进制(Decimal,基数10):我们日常生活中最常使用的进制,由0到9组成。十六进制(Hexadecimal,基数16):由0到9和A到F(即10到15)组成,常用于表示较大的二进制数据,尤其是在计算机编程中。

2025-01-23 22:24:58 986

原创 C++模板语法

C++ 模板是泛型编程的核心,能够帮助程序员编写高效、灵活、可重用的代码。通过理解模板的基本语法、模板参数、特化、SFINAE 和类型萃取等高级特性,程序员可以更好地利用模板机制来解决复杂的编程问题。在实际应用中,模板不仅能够简化代码,还能通过静态类型检查提供更高的安全性。

2025-01-23 22:15:19 501

原创 迷宫求解与路径规划

本篇文章实现了深度优先搜索(DFS)和广度优先搜索(BFS)两种经典的迷宫求解算法,并通过 C++ 代码实现了迷宫的路径规划。在实际应用中,DFS 通常用于寻找路径的深度探索,而 BFS 更适用于寻找最短路径的场景。

2025-01-23 22:12:37 786

原创 简述 Bloom Filter,及它的使用场景是什么

Bloom Filter(布隆过滤器)是一种空间效率非常高的概率型数据结构,它可以判断一个元素是否在一个集合中。快速判断:可以以常数时间复杂度O(k)判断一个元素是否在集合中,其中k是哈希函数的数量。可能会误判:对于一个不在集合中的元素,Bloom Filter 可能误判它在集合中(即产生“假阳性”),但绝不会产生“假阴性”。不支持删除:标准的 Bloom Filter 只能添加元素,不能删除元素,但有一些扩展可以支持删除。

2025-01-23 22:10:19 896

原创 C++ 数据结构图的定义与实现:链表实现

图(Graph)是一种重要的数据结构,用于表示对象之间的关系。在计算机科学中,图广泛应用于各类问题的解决,比如网络路由、社交网络、推荐系统、地图路径规划等。本篇博客将详细介绍图的定义、常见类型,以及基于 C++ 和链表的实现方式。文章将通过代码讲解和示例,帮助你深入理解图数据结构的设计和使用。我们首先定义链表节点类,该类表示邻接表中的一个节点,其中存储相邻顶点的索引和边的权重。然后定义Graph类,包含图的结构和基本操作。// 定义邻接表中的节点public:int dest;// 目标顶点。

2025-01-22 20:56:36 888

原创 C++ STL学习笔记

C++ STL 是一个非常强大且灵活的工具集,它为我们提供了许多高效的数据结构和算法。通过学习和使用 STL,我们可以大大提高代码的可读性和开发效率。在这篇学习笔记中,我详细介绍了 STL 的容器、迭代器、算法和函数对象。希望通过代码示例和详细解释,能够帮助你深入理解 STL 的核心概念,并能在实际开发中充分利用 STL 提供的功能。

2025-01-22 20:06:12 552

原创 赫夫曼树与赫夫曼编码详解(C++实现)

赫夫曼树(Huffman Tree)是一种最优二叉树,它广泛应用于数据压缩领域,比如文件压缩、通信系统等。赫夫曼编码是一种前缀编码,用赫夫曼树的左右路径(0 表示左,1 表示右)生成每个字符的二进制编码。以下代码实现赫夫曼树的构建与赫夫曼编码。是从根节点到该叶节点的路径长度。是第 ii 个叶节点的权值,

2025-01-21 17:02:41 405

原创 树和二叉树知识点总结

树是一种非线性数据结构,它由一个根节点和若干子树构成。节点的度:一个节点的子节点个数。树的深度:从根节点到某一节点的最长路径上的节点总数。树的高度:树的最大深度。满二叉树:所有叶子节点都在同一层,且每个非叶子节点都有两个子节点。完全二叉树:除最后一层外,其它层节点数达到最大,且最后一层从左到右连续排列。// 节点类定义int data;// 数据域// 左子节点// 右子节点// 构造函数。

2025-01-21 16:55:39 132

原创 队列(Queue)与双端队列(Deque)

队列(Queue)和双端队列(Deque)是常见的数据结构,主要用于顺序存储和操作数据。队列遵循“先进先出”(FIFO,First In First Out)的原则,而双端队列允许在队列的两端进行插入和删除操作。在 C++ 中,队列和双端队列可以通过链表来实现。下面是基于链表的队列和双端队列的实现示例。队列遵循先进先出的原则,常用的操作有:代码说明节点定义(Node): 结构体定义了队列的每个节点。每个节点包含一个 字段用于存储数据,还有一个指针 指向下一个节点。队列类(Queue):

2025-01-21 16:51:55 826

原创 基于链表实现队列的 C++ 实现

为了实现队列,我们需要一个基本的单链表结构来存储队列中的元素。每个节点都包含一个数据部分和一个指向下一个节点的指针。我们可以通过定义一个Nodeintdata;//存储队列元素的值Node*next;//指向下一个节点的指针//构造函数,初始化数据和指针data:存储数据的值。next:指向下一个节点的指针。在实现队列时,我们需要定义一个类来表示队列的行为。该类应当包含对队列的常见操作,例如入队、出队、查看队头元素等。

2025-01-20 15:47:39 480

原创 克鲁斯卡尔算法的C++实现

克鲁斯卡尔算法是一种基于边的排序来构建最小生成树的算法,适用于稀疏图的最小生成树求解。它的核心优势在于每次都选择最小的边并检查是否形成环,确保最终得到的生成树是最优的。

2025-01-20 15:47:07 717

原创 迪杰斯特拉算法的C++实现

迪杰斯特拉算法是一种高效的算法,能够在带权无向图中找到源点到其他所有顶点的最短路径。通过使用优先队列(最小堆),可以有效地选择当前最短的未处理节点,保证每次更新最短路径的操作都能以最小的代价完成。该算法适用于图中的所有边权为非负数的情况。

2025-01-20 15:46:23 909

原创 requests库使用笔记

requests是一个功能强大且易于使用的HTTP请求库,适用于日常的Web数据抓取、API请求、测试等任务。通过上述示例和功能,你可以轻松掌握requests的基本用法及高级技巧,提高你处理HTTP请求的效率。你可以访问官方文档了解更多详细内容。

2025-01-19 13:54:18 537

原创 字符串匹配算法之暴力匹配、KMP算法、BM算法

字符串匹配问题的关键是如何在最短的时间内找到模式字符串在文本中的出现位置。不同的匹配算法有不同的时间复杂度和适用场景。最直观的思路是通过逐字符比较来查找匹配,但这可能导致效率低下。因此,许多优化过的字符串匹配算法应运而生。我们将在本文中介绍三种经典的字符串匹配算法:BF算法、BM算法和KMP算法。字符串匹配是计算机科学中一个基础且重要的问题,解决该问题的算法多种多样。本文介绍了三种经典的字符串匹配算法——BF算法、BM算法和KMP算法。BF算法:简单直观,适合小规模匹配。BM算法。

2025-01-19 13:45:30 920

原创 基于链表实现队列的 C++ 实现

为了实现队列,我们需要一个基本的单链表结构来存储队列中的元素。每个节点都包含一个数据部分和一个指向下一个节点的指针。我们可以通过定义一个Nodeintdata;//存储队列元素的值Node*next;//指向下一个节点的指针//构造函数,初始化数据和指针data:存储数据的值。next:指向下一个节点的指针。在实现队列时,我们需要定义一个类来表示队列的行为。该类应当包含对队列的常见操作,例如入队、出队、查看队头元素等。

2025-01-19 13:40:20 714

原创 常见算法思想

算法是解决特定问题的一组规则或步骤,它是计算机科学的核心内容之一。通过算法思想,我们可以将复杂的问题分解成多个小问题,从而逐步解决。掌握常见的算法思想,不仅能帮助我们高效解决问题,还能在面临新的问题时,快速选择合适的策略进行求解。暴力穷举是一种简单而直接的算法思想,它通过枚举所有可能的解,逐个检查是否满足问题的条件。暴力算法不考虑优化,通常是最简单的实现方式,但在处理大规模数据时效率较低。递归是一种通过将问题分解为更小的子问题来解决问题的方法。

2025-01-19 13:34:25 660

原创 8种查找算法详解

跳跃查找是一种通过跳跃一定步长来缩小查找范围的查找算法。通过跳跃一定的步长(通常是数组长度的平方根),减少查找次数。它从数据集合的第一个元素开始,逐个检查每个元素,直到找到目标元素或遍历完所有元素。通过比较目标值与中间元素的大小,逐步缩小查找范围,直到找到目标元素。插值查找类似于二分查找,但它基于线性插值的思想来估计目标元素的可能位置。分块查找通过将数据划分为多个块,并在每个块内顺序查找目标元素。它是二分查找的变种,适用于有序数组。哈希查找通过哈希函数将元素映射到哈希表的索引位置,从而实现常数时间的查找。

2025-01-19 13:31:02 383

原创 10种排序算法详解及其代码实现

排序算法是计算机科学中的经典算法问题之一。排序算法根据不同的排序原理和实现方式有着不同的时间复杂度、空间复杂度和适用场景。以下是常见的10种排序算法的详解和代码实现,涵盖了从简单的交换排序到更高效的归并排序、快速排序等算法。

2025-01-19 13:27:39 994

原创 C++ 实现链表

链表中的每个节点包含数据和指向下一个节点的指针。//定义节点数据类型为int//数据域//指向下一个节点的指针在上述定义中,可以根据实际需求替换为任何类型,例如intfloatstring等。链表是一种常见的动态数据结构,适用于需要频繁插入和删除操作的场景。通过使用不同类型的链表(如单向链表、双向链表、循环链表等),我们可以灵活应对各种需求。本文介绍了如何使用C++实现单向链表,并提供了常用操作的代码实现。

2025-01-19 13:21:08 453

原创 node.js项目依赖关系分析工具 Depazer 的使用

Depazer是一个用于的工具。它可以帮助开发者快速了解项目的依赖结构、模块关系,以及可能存在的问题,从而优化代码架构和依赖管理。

2025-01-16 15:34:06 481

原创 nodejs进程管理工具 pm2的使用

PM2是一个功能强大的,用来运行和管理 Node.js 应用程序。它提供了和功能,特别适合在生产环境中部署 Node.js 应用程序。

2025-01-16 15:29:36 448

原创 nvm使用 nodejs版本管理工具的使用

nvm(Node Version Manager)是一个管理 Node.js 版本的工具,它允许你安装、切换和管理多个 Node.js 版本。以下是nvm。

2025-01-16 15:23:16 377

原创 Ubuntun搭建并行计算环境

程序将随机点生成和圆内点的计数分配给多个进程,每个进程独立计算局部结果,并将其汇总到主进程以得到最终 π 值。这里的实验将并行计算所有可能的亲和数组合数量,通过划分数据范围来分配到不同的计算节点,并验证这些组合满足的特定亲和条件。为奇数,则把它乘以 3 再加 1,得到一个新的数。主程序中,各个 MPI 进程会分配到一个范围的数字,分别验证这些数字是否满足角谷猜想。的值(例如,增加至 500000 或更大),从而增加计算复杂度和运行时间。:当一个数达到了 6174,打印步骤,结果,以及这个数所需的步骤数。

2024-11-07 14:56:28 1059

原创 使用 Docker 安装 Redis

安装命令参考:https://blog.csdn.net/qq_25482375/article/details/126253645。

2024-10-31 11:33:05 411

原创 Docker安装MinIO

在 Docker 中部署 MinIO 非常简单。,使用你在第二步中设置的访问密钥和秘密密钥登录。替换为你希望存储 MinIO 数据的实际路径。: 使用以下命令启动 MinIO 容器,替换。为你自己的访问密钥和秘密密钥。: 打开浏览器,访问。

2024-10-31 11:29:53 233

原创 Docker 在ubuntu上安装docker

如果你希望在使用 Docker 时不每次都加。然后退出当前会话并重新登录,或者使用。

2024-10-31 11:22:53 248

原创 MySQL系列博客更新计划

介绍MySQL的用途与安装方法(Windows、Linux、Docker)。搭建博客系统数据库设计并实现一个博客系统的数据库。项目部署与云数据库使用使用AWS RDS、阿里云等云数据库服务。总结与下一步学习方向总结教程重点,并推荐深入学习方向(如MariaDB、Percona等)。

2024-10-30 15:50:36 399 1

空空如也

空空如也

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

TA关注的人

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