自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入理解Docker:从基础概念到实用命令

Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。

2024-12-02 18:15:00 1393

原创 C++设计模式行为模式———访问者模式

在访问者模式中,数据结构(元素)与针对数据结构的操作/处理(访问者)被分隔开了,通过访问者子类来访问数据结构中的元素,对这些元素的处理交给访问者子类。当需要增加新的处理时,只需要编写新的访问者子类并让数据结构接受(Accept)访问者的访问即可,如果不进行这样的分隔,那么这些操作就得放人元素所属的类中。图):提供一个作用于某对象结构中的各元素的操作表示,便可以在不改变各元素类的前提下定义(扩展)作用于这些元素的新操作。也就是说,允许一个或者多个操作应用到一组对象上,使对象本身和操作解耦。

2024-11-30 13:00:00 879

原创 C++设计模式行为模式———模板方法模式

当你只希望客户端扩展某个特定算法步骤,而不是整个算法或其结构时,可使用模板方法模式。当多个类的算法除一些细微不同之外几乎完全一样时,你可使用该模式。但其后果就是,只要算法发生变化,你就可能需要修改所有的类。在将算法转换为模板方法时,你可将相似的实现步骤提取到超类中以去除重复代码。子类间各不同的代码可继续保留在子类中。工厂方法模式是模板方法模式的一种特殊形式。同时,工厂方法可以作为一个大型模板方法中的一个步骤。模板方法基于继承机制:它允许你通过扩展子类中的部分内容来改变部分算法。

2024-11-29 17:15:00 906

原创 深入理解MySQL事务并发与锁机制

锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发过程中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(如订单、金额等),我们需要保证这个数据在任何时刻至多只有一个线程访问,保证数据的完整性和一致性。在开发过程中加锁是为了保证数据的一致性。

2024-11-29 14:51:03 1341

原创 深入探讨 Redis 持久化机制:原理、配置与优化策略

持久化是指将Redis中的数据从内存存储转移到磁盘上的过程。由于Redis是一个内存数据库,所有的数据默认存储在内存中,若发生系统崩溃或重启,内存中的数据将会丢失。因此,持久化机制可以确保Redis中的数据在出现故障后能够恢复。数据恢复:通过持久化机制,Redis能够在重启后恢复数据,避免因宕机或故障导致的数据丢失。数据备份:持久化文件可作为数据的备份,方便灾难恢复。持久存储:对一些需要长期存储的数据,可以通过持久化方式将数据从内存中转移到磁盘中,节省内存资源,同时保证数据不丢失。

2024-11-27 21:00:00 2367

原创 C++设计模式行为模式———策略模式

策略模式中的若干个策略对象相互之间是完全独立的, 它们不知道其他对象的存在。当我们想使用对象中各种不同的算法变体,并希望能够在运行的时候切换这些算法时,可以选择使用策略模式来处理这个问题。以往利用增加新的f条件分支来支持新算法的方式违背了开闭原则,引人策略模式后,通过增加新的策略子类实现了对开闭原则的完全支持,也就是以扩展的方式支持未来的变化。

2024-11-27 15:39:59 1295

原创 C++设计模式行为模式———状态模式

如果对象需要根据自身当前状态进行不同行为, 同时状态的数量非常多且与状态相关的代码会频繁变更的话, 可使用状态模式。如果某个类需要根据成员变量的当前值改变自身行为,从而需要使用大量的条件语句时,可使用该模式。状态模式很好的遵守了单一职责原则和开闭原则。将与特定状态相关的代码放在单独的类中,并且无需修改已有状态类和上下文就能引入新状态。通过消除臃肿的状态机条件语句简化上下文代码。

2024-11-25 18:10:25 1407

原创 【MySQL】事务详解

事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统前溃而丢失。InnoDB 引擎通过什么技术来保证事务的这四个特性的呢? 持久性是通过 redo log (重做日志)来保证的。原子性是通过 undo log(回滚日志) 来保证的。隔离性是通过 MVCC(多版本并发控制) 或锁机制来保证的。 一致性则是通过持久性+原子性+隔离性来保证。

2024-11-25 09:00:00 1846 1

原创 【MySQL】索引详解

MySQL官方对索引I的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。索引的本质:索引是数据结构。可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法。数据库的索引好比是一本书的目录,能加快数据库的查询速度。索引底层的数据结构存在很多类型,常见的有:B树、B+树和哈希。在MySQL中,无论是Innodb还是MyIsan都使用了B+树作为索引结构。MySQL的索引和数据就是位于存储引擎中。MySQL

2024-11-22 20:59:13 1548 1

原创 C++设计模式行为模式———观察者模式

观察者设计模式也叫作发布-订阅()模式,如果用最通俗易懂的语言来描述,应该是这样:观察者(Fighter子类)提供一个特定的成员函数(),并把自已加人到通知器(Notifier子类)的一个对象列表中(订阅/注册),当通知器意识到有事件发生的时候,通过遍历对象列表找到每个观察者并调用观察者提供的特定成员函数(发布)来达到通知观察者某个事件到来的目的。观察者可以在特定的成员函数()中编写实现代码来实现收到通知后想做的事情。当一个对象的状态发生变化,并且需要改变其它对象的时候;

2024-11-21 02:30:00 1004

原创 C++设计模式行为模式———备忘录模式

当需要创建对象状态快照来恢复其之前的状态时,可以使用备忘录模式。备忘录模式允许复制对象中的全部状态(包括私有成员变量),并将其独立于对象进行保存。它在处理事务(比如需要在出现错误时回滚一个操作)的过程中也必不可少。可以同时使用命令模式和备忘录模式来实现 “撤销”。在这种情况下, 命令用于对目标对象执行各种不同的操作, 备忘录用来保存一条命令执行前该对象的状态。也可以同时使用备忘录和迭代器模式来获取当前迭代器的状态, 并且在需要的时候进行回滚。其独立于对象进行保存。

2024-11-20 10:45:00 1583

原创 C++设计模式行为模式———中介者模式

中介者将对象之间复杂的沟通和控制方式集中起来处理,将以往对象之间复杂的多对多关系转化为简单的一对多关系。让系统有更好的灵活性和可扩展性。中介者模式将同事对象进行解耦,同事对象之间不再是一种紧耦合关系,它们仅知道中介者,从而减少相互连接的数目。每个同事类对象都可以独立地改变而不会影响到其他同事类对象,更符合开闭原则,进一步增加了对象的复用性。

2024-11-19 21:00:37 1331

原创 C++设计模式行为模式———迭代器模式

当集合背后为复杂的数据结构, 且你希望对客户端隐藏其复杂性时 (出于使用便利性或安全性的考虑), 可以使用迭代器模式。迭代器封装了与复杂数据结构进行交互的细节, 为客户端提供多个访问集合元素的简单方法。这种方式不仅对客户端来说非常方便, 而且能避免客户端在直接与集合交互时执行错误或有害的操作, 从而起到保护集合的作用。声明迭代器接口。该接口必须提供至少一个方法来获取集合中的下个元素。但为了使用方便, 你还可以添加一些其他方法, 例如获取前一个元素、 记录当前位置和判断迭代是否已结束。

2024-11-18 20:47:54 1517 2

原创 C++设计模式行为模式———命令模式

命令模式最核心的实现手段,就是将对成员函数的调用封装成命令对象,也就是对请求进行封装,命令对象将动作和接收者包裹到了对象中并且只暴露出了一个Execute方法以让接收者执行动作。想一下C语言中支持的函数指针可以把函数当作变量传来传去。但是,在许多编程语言中,函数无法作为参数传递给其他函数,也无法赋值给其他变量。借助命令模式,可以将函数(Cook类中的cook_fish和cook_meat)封装成类(和)对象,实现把函数像对象一样使用月——对象使用起来非常灵活,例如通过函数参数来传递、存储、序列化等。

2024-11-14 20:07:30 949

原创 C++设计模式行为模式———责任链模式

责链模式应用的一个请求可能有多个接收者(扮演处理者角色),但最后只有一个接收者会处理该请求。此时,请求的发送者和接收者之间是解耦的。换句话说,请求的发送者只需要将请求发送到链上,并不关心请求的处理细节以及请求的传递,也并不知道最终会被哪个接收者处理,这种灵活性可以更好地应对变化。

2024-11-11 03:45:00 907

原创 C++设计模式结构型模式———代理模式

代理模式的使用方式有很多,延迟初始化 (虚拟代理)。如果有一个偶尔使用的重量级服务对象, 一直保持该对象运行会消耗系统资源时, 可使用代理模式。无需在程序启动时就创建该对象, 可将对象的初始化延迟到真正有需要的时候。访问控制:如果你只希望特定客户端使用服务对象, 这里的对象可以是操作系统中非常重要的部分, 而客户端则是各种已启动的程序 (包括恶意程序), 此时可使用代理模式。代理可仅在客户端凭据满足要求时将请求传递给服务对象。代理模式和装饰模式有类似之处,但是这两个模式要解决的问题不同或者说立场不同。

2024-11-09 19:45:52 1482 1

原创 C++设计模式结构型模式———享元模式

享元对象最重要的就是对“内部状态”和“外部状态”做出了明确的区分,这是享元对象能够被共享的关键所在。内部状态:存储在享元对象内部的,一直不会发生改变的状态,这种状态可以被共享。例如,对于BlackPiece类对象,它的内部状态就是黑棋子,它一直代表黑棋子,不会发生改变。而对于WhitePiece类对象,它的内部状态就是白棋子,它一直代表白棋子,不会发生改变。内部状态一般可以作为享元类的成员变量而存在。外部状态:随着着外部环境和各种动作因素的改变而发生改变的状态,这种状态不可以被共享。

2024-11-04 16:04:10 1224

原创 C++设计模式结构型模式———外观模式

外观模式定义一组高层接口或者说提供子系统的一个到多个简化接口让子系统更容易使用以及让操作变得更直接,让客户端和子系统实现解耦。当子系统发生改变时,一般只需要修改外观类而基本不需要修改客户端代码(虽然这种修改有点违背开闭原则)。外观模式提供的接口给客户端调用带来了很大的方便,使客户端无须关心子系统的工作细节,但这些接口也许缺乏灵活性,当然,如果客户端认为有必要对子系统进行最灵活的控制,那么依然可以绕过外观模式类而直接使用子系统。

2024-11-04 08:45:00 1266

原创 C++设计模式结构型模式———装饰模式

装饰模式是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。该模式展现出了运行时的一种扩展能力,以及比继承更强大和灵活的设计视角和设计能力,甚至在有些场合下,不使用该模式很难解决问题。

2024-11-02 18:40:34 1512

原创 C++设计模式结构型模式———组合模式

引人组合设计模式的定义:将一组对象(如文件和目录)组织成树形结构以表示“部分-整体”的层次结构(如目录中包含文件和子目录)。使得用户对单个对象(文件)和组合对象(目录)的操作/使用/处理(递归遍历并执行`ShowName`逻辑等)具有一致性。

2024-11-02 11:45:00 1214

原创 C++设计模式结构型模式———桥接模式

桥接(Bridge)模式也叫桥梁模式,简称桥模式,是一种结构型模式。该模式所解决的问题非常简单,即根据单一职责原则,在一个类中,不要做太多事,如果事情很多,尽量拆分到多个类中去,然后在一个类中包含指向另外一个类对象的指针,当需要执行另外一个类中的动作时,用指针直接去调用另外一个类的成员函数。

2024-10-31 19:10:04 1735

原创 C++设计模式结构型模式———适配器模式

适配器模式在软件开发中使用得比较广泛,但并不是总是最佳选择。过多地使用适配器模式可能会导致混淆,因为从外部看调用的是 A 接口,但内部却适配成了 B 接口。这种情况在项目后期重构时通常更常见,因此在可能的情况下,重构代码可能比使用适配器更好。然而,在软件开发中,发布新版本时常常会面临与旧版本的兼容性问题。完全抛弃旧版本并不现实,因此适配器模式可以帮助实现新旧版本的兼容。尤其在遗留代码的复用和类库迁移等方面,适配器模式发挥了重要作用。

2024-10-30 20:45:00 1850

原创 C++设计模式创建型模式———原型模式

原型模式与工厂方法模式在创建对象时的主要区别在于它们如何处理对象的创建过程和状态复制。原型模式通过复制现有对象(原型)来创建新对象,新对象的初始状态与原型对象相同,这避免了复杂的设置过程。当对象的内部数据复杂且多变时,原型模式比工厂方法模式更合适,因为它可以直接克隆当前状态,无需额外的设置代码。例如,在游戏中创建一个具有特定状态的怪物分身,使用原型模式可以快速复制这些状态。工厂方法模式和原型模式在创建对象时都不需要知道具体的类名,但它们的工作方式不同。

2024-10-30 14:48:23 1014

原创 C++设计模式创建型模式———生成器模式

相较于工厂模式,生成器模式同样用于对象的生成,但更侧重于构造细节,增加了额外的构建流程,以便处理复杂对象的构建需求。生成器模式也是一种创建型设计模式, 使我们能够分步骤创建复杂对象。 该模式允许使用相同的创建代码生成不同类型和形式的对象。 也就是说,生成器模式就是为了生成一个复杂的对象。

2024-10-29 17:37:55 1330

原创 C++设计模式创建型模式———简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂、工厂方法和抽象工厂是三种常见的创建型设计模式,它们各自有不同的特点和应用场景。代码实现复杂度上,简单工厂模式最简单,工厂方法模式次之,抽象工厂模式最复杂。简单工厂模式中的代码修改得符合开闭原则,就变成了工厂方法模式,修改工厂方法模式的代码使一个工厂支持对多个具体产品的生产,就变成了抽象工厂模式。从需要的工厂数量上。

2024-10-28 21:30:00 1264 2

原创 C++设计模式创建型模式———单例模式

懒汉式单例适用于需要延迟加载实例的场景,但在多线程环境下需要加锁。饿汉式单例简单且不需要考虑线程安全,但在不需要时也会占用内存。C++11静态局部变量单例实现方式最为简洁,并且在多线程环境下是安全的,是推荐使用的方法。懒汉模式的缺点是在创建实例对象的时候有安全问题,但这样可以减少内存的浪费(如果用不到就不去申请内存了)。饿汉模式则相反,在我们不需要这个实例对象的时候,它已经被创建出来,占用了一块内存。对于现在的计算机而言,内存容量都是足够大的,这个缺陷可以被无视。

2024-10-28 10:07:58 1207

原创 Git 完整教程:版本管理、分支操作与远程仓库解析

Git 是当今软件开发中不可或缺的版本控制工具,无论是个人项目还是团队协作,它都能够帮助开发者轻松地管理代码变更,追踪历史记录,提升开发效率。本篇博客将带你深入了解 Git 的核心原理,从 .git 目录的内部结构到常见的版本回退和修改撤销操作。此外,还会详细介绍如何与远程仓库进行交互,包含克隆、推送、拉取操作,以及标签的管理方法。分支操作也是 Git 的重要部分,本博客也将对其进行详细剖析,帮助你掌握分支管理策略以及如何在实际开发中高效利用分支来处理 bug 修复和功能开发。

2024-10-22 19:34:13 1791

原创 【计算机网络】数据链路层理解

即把第一次通过ARP获取到的MAC地址作为IP对MAC的映射关系记忆到一个ARP缓存表中,下一次再向这个IP地址发送数据报时不需再重新发送ARP请求,而是直接使用这个缓存表当中的MAC地址进行数据报的发送。也就是说,这个ARP请求包包括了主机B的IP地址。:若UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个IP数据报,任何一个IP数据报丢失,都会引起接收端网络重组失败,那么就意味着,如果 UDP 数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

2024-09-29 21:27:53 1538 1

原创 【计算机网络】网络层详解

当某个IP包到达路由器时,路由器首先查找其目标地址(IP包被转发到途中的某个路由器时,实际上是装入数据链路层的数据帧以后再被送出),从而再决定下一步应该这个数据包到达哪个路由器,然后再把包发送过去。因此,IP 层进行分片传输是很没有效率的。在进行 NAT 转换时,路由器会将源 IP 地址和端口号替换为它自己的公网 IP 地址+端口号,并在其 NAPT 转换表中记录转换信息,以便在接收到响应数据包时,能够将目标 IP 地址从公网 IP 地址转换为对应的私有 IP 地址,并将响应数据包发送回相应的局域网主机。

2024-09-26 20:02:34 1782

原创 【计算机网络】TCP的可靠传输机制、标记位以及编程结构

TCP 旨在构建在 IP 层之上的一种稳定的数据传输服务。IP层虽然能够将数据包从一端传输到另一端,但其服务性质是尽力而为,不保证数据的可靠到达。TCP的设计目标是在这样的基础上,提供一种确保数据完整性和顺序性的传输机制。也就是说,TCP 提供可靠数据传输服务保证接收方进程从缓冲区读出的字节数与发送方发出的字节流完全一样。TCP 使用了校验、序号、确认和重传等机制来达到这一目的。

2024-09-18 20:33:35 1789 1

原创 【计算机网络】TCP 协议——详解三次握手与四次挥手

TCP与UDP的区别相当大。它充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费(由于UDP没有连接控制,所以即使对端从一开始就不存在或中途退出网络,数据包还是能够发送出去。(当ICMP错误返回时,有时也实现了不再发送的机制。)) 。根据TCP的这些机制,在IP这种无连接的网络上也能够实现高可靠性的通信。

2024-09-16 20:26:44 1569

原创 【计算机网络】UDP 协议详解及其网络编程应用

在使用UDP的情况下,虽然可以确保发送消息的大小(例如,发送端应用程序发送一个100字节的消息,那么接收端应用程序也会以100字节为长度接收数据。这样,在进程能够读该套接字中任何已排好队的数据报之前,如果有多个数据到达该套接字,那么相继到达的数据报仅仅加到该套接字的接收缓冲区中。在UDP中,每个数据报文(数据报)都是独立的,不依赖于前后的数据报。:由UDP给某个特定套接字排队的UDP数据报的数目受限于该套接字接收缓冲区的大小,但是这个缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致。

2024-09-12 19:12:57 2776

原创 【计算机网络】网络通信中的端口号

在TCP/IP协议中,传输层有两个重要的协议:TCP和UDP。TCP用于提供可靠的数据传输,而UDP则适合用于广播或对细节控制要求不高的应用传输。为了确保传输层协议能够正确地将接收到的数据交给相应的应用程序,TCP和UDP都引入了的概念,用来识别目标应用。

2024-09-11 19:48:37 1811 1

原创 期末速成复习资料——操作系统

hrbnu操作系统复习大纲

2024-08-17 16:01:57 742 1

原创 力扣刷题记录——滑动窗口

滑动窗口的核心思想是通过维护一个窗口(即数组或序列的连续子集)在数据结构上滑动,以动态调整子集的范围,从而解决各种问题,如寻找最大/最小子数组、满足某些条件的子数组、最长无重复字符子串等。在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。我们可以发现,滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。:在一个数组中查找固定大小的子数组,使其和最大或最小。结尾的、满足条件的子数组的数量。

2024-08-17 15:48:52 1079

原创 深入理解HTTPS协议:CA证书的安全机制

本文探讨了CA(证书颁发机构)证书在HTTPS加密通信中的重要作用及其工作机制。HTTPS通过结合对称加密和非对称加密技术来确保数据传输的安全性。非对称加密用于安全地交换对称密钥,而对称加密则用于实际的数据加密。CA证书在这一过程中扮演了关键角色,它通过数字签名验证公钥的真实性,从而确认通信双方的身份,防止中间人攻击。文章还讨论了预下载的CA证书如何提高验证效率,避免了每次通信时重新下载证书带来的延迟,确保了通信的顺畅与安全。对CA证书和HTTPS的深入分析 。

2024-08-13 10:45:00 1752 1

原创 MySQL架构与数据库基础

本文详细探讨了数据库的基本概念及其与文件系统的关系,深入分析了SQL语言的四个主要组成部分:DDL、DML、DQL和DCL,并解释了它们在数据库管理中的作用。文章还对MySQL的架构进行了详尽解析,介绍了MySQL的客户端-服务器模型,重点阐述了各个核心组件的功能,包括客户端连接器、连接池、SQL接口、解析器、优化器、缓存、可插拔存储引擎、索引以及文件系统和日志。

2024-08-12 13:30:00 1400

原创 HTTP:从基础概念到协议机制,详解请求响应与状态保持

HTTP协议是目前应用最广泛的应用层网络协议。应用层协议HTTP协议是Web的核心。HTTP协议在Web客户端(浏览器)和服务器程序中得以实现。运行在不同系统上的客户程序和服务器程序,通过交换HTTP消息彼此交流。HTTP定义了请求和响应的消息格式,使得客户端和服务器能够进行有效的通信。Web页面(web page,也称为文档)是通过HTTP协议在客户端和服务器之间传输的基本内容,它通常由一个HTML文件和多个引用的对象组成。

2024-08-04 16:51:19 2829 2

原创 【计算机网络】TCP/IP四层模型

网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就协商出了一套。IP 头部中的接收方 IP 地址表示网络包的目的地,通过这个地址我们就可以判断要将包发到哪里,但在以太网的世界中,这个思路是行不通的。

2024-08-01 15:00:00 9202 3

原创 期末速成复习资料——计算机系统基础

本人整理的机组期末复习资料

2024-07-30 21:11:38 1562 10

空空如也

空空如也

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

TA关注的人

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