小猿努力搬砖
码龄8年
求更新 关注
提问 私信
  • 博客:3,495
    3,495
    总访问量
  • 28
    原创
  • 2
    粉丝
  • 11
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
加入CSDN时间: 2018-08-27
博客简介:

weixin_43077406的博客

查看详细资料
个人成就
  • 获得0次点赞
  • 内容获得4次评论
  • 获得2次收藏
  • 博客总排名1,184,275名
创作历程
  • 28篇
    2023年
成就勋章

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 0

TA参与的活动 1

创作活动更多

「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令

谁说嵌入式只会“Ctrl+C 调包”和“拿电烙铁焊板子”?2026嵌入式全栈技术征锋令正式启幕! 本次活动专为硬核硬件/软件开发者打造,无论你是刚玩转裸机外设的萌新,还是精通RTOS调度、死磕底层驱动的行业老手,亦或是执掌系统架构的大神,这里都是你证明实力的舞台! 拒绝表面功夫,每一行代码,都有撬动硬件的力量!晒出你的硬核工程实战,为嵌入式开发者的全栈硬实力正名!

210人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

数据结构之树结构

在PHP语言中,我们可以用类或面向对象的方法实现树,以下是几种常见树的原理和PHP代码实现。平衡树是一种自平衡二叉搜索树,在插入或删除节点后能够通过旋转操作使得所有节点的左右子树高度差不超过1,从而避免树退化为链表。其中最常见的平衡树是AVL树。二叉树是树的一种特殊形式,每个节点最多有两个子节点,左子节点小于父节点,右子节点大于父节点。红黑树也是一种自平衡二叉搜索树,与AVL树相比,其旋转操作较少,但是节点颜色的变化较多。以上是几种常见的树的类型和原理,对于其他种类的树可参考相关资料进行学习和实现。
原创
博文更新于 2023.05.06 ·
194 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数据结构之哈希表

getIndex方法用于计算key在哈希表中的索引位置,insert方法用于向哈希表中插入元素,search方法用于查找元素,delete方法用于删除元素。在PHP中实现一个哈希表,其本质是将关键字key映射到一个整数下标位置上,从而可快速搜索哈希表中的元素。哈希表是一种数据结构,它提供了快速的插入和查找操作,其基本原理是通过哈希函数将关键字映射到一下整数值,并使用散列表在该位置存储关键字。在存储位置上存储value,当哈希函数在不同的key中产生相同的哈希值时,选择后来的数据项,并将其添加到链表中。
原创
博文更新于 2023.05.06 ·
129 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数据结构之栈

在上述示例代码中,我们首先定义了一个Stack类,用于实现栈的基本操作。push方法用于向栈中添加元素,pop方法用于从栈中移除元素,peek方法用于返回栈顶元素,isEmpty方法用于检查栈是否为空。当用代码实现一个栈时,需要确保插入栈的数据不是无效值。入栈是指向栈顶添加元素,出栈是指从栈中移除元素。总而言之,栈是一个非常常用的数据结构,用于表示先进后出(LIFO)的序列,常用于算法和系统设计等许多场景。在PHP中实现一个栈,通过使用数组和指针来操作,在插入和移除元素时能保证时间复杂度为O(1)。
原创
博文更新于 2023.05.06 ·
141 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数据结构之链表

在上述示例代码中,我们首先创建了一个Node类,该类代表链表的节点,其包含了要存储的数据和指向下一个节点的指针。其中,addNode方法用于添加节点到链表,deleteNode方法用于删除节点,showLinkedList方法用于打印出整个链表的内容。链表是由一组节点组成的,每个节点包含一个值和一个指针,指向下一个节点。总而言之,链表是一种灵活的数据结构,其设计初衷是在程序运行时动态添加和删除节点,适用于许多编程问题。在PHP中实现链表,以对象和引用为基础,通过添加和删除节点和修改指针来操作链表。
原创
博文更新于 2023.05.06 ·
110 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数据结构和算法简介

常见的算法包括排序算法(如冒泡排序、快速排序、堆排序等)、查找算法(如二分查找、哈希查找等)、图形算法(如最短路径算法、最小生成树算法等)等等。通过合理的选择和使用数据结构和算法,可以大大提高程序的性能和效率,从而更快速、更安全地完成各种任务。此外,数据结构和算法是计算机科学的重要基础,在计算机领域的各个方面都有广泛的应用,也是从事计算机相关职业的必备知识之一。总之,掌握数据结构和算法是成为一名优秀的计算机程序员的重要步骤,可以帮助您提高编程技能、编写高效且易于维护的代码,并解决来自各种渠道的复杂问题。
原创
博文更新于 2023.05.06 ·
161 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之建造者模式(二十)

Product类定义了产品的属性,Builder接口定义了产品构造的抽象方法,ConcreteBuilder类实现了Builder接口的方法,从而实现了具体的产品构造过程。Director类负责构造过程的执行,即调用各个具体的建造者实现产品的构造,并且在产品构造完成后返回一个具体的产品实例。建造者模式(Builder pattern)是一种创建型设计模式,它的主要目的是将一个复杂对象的构造过程与其表示分离,从而使同样的构建过程可以创建不同的表示。
原创
博文更新于 2023.04.29 ·
88 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之原型模式(二十一)

我们还创建了一个EmployeeRegistry类,用于记录员工信息,并使用原型模式来复制员工对象。这个例子说明了原型模式的使用场景和作用,即在需要大量创建相似对象的场景中,使用该模式可以提高程序的性能并减少代码的重复。在该类中,我们使用Map来记录已注册的员工,并提供了addEmployee方法用于添加新员工,getEmployee方法用于获取员工信息。由于原型模式需要让对象实现Cloneable接口,所以在getEmployee方法中,我们使用clone方法获取新的员工对象。
原创
博文更新于 2023.04.29 ·
78 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

vue的实现原理

Vue.js 通过 Object.defineProperty()(ES5 特性)对属性进行劫持,当属性发生改变时,会触发响应式更新机制,即自动更新相关依赖的数据,从而自动更新视图。Vue.js 的模板是基于 HTML 的,当解析时,Vue.js 会解析指令(如 v-model、v-bind 等),并把它们转化成相应的数据绑定。Vue.js 采用虚拟DOM,比较真实DOM的变化,当数据发生变化时,会计算新旧虚拟DOM树的差异,然后通过打补丁的方式来更新真实DOM。
原创
博文更新于 2023.04.29 ·
229 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之命令模式(十四)

在这个例子中,Command是一个接口,ConcreteCommandA和ConcreteCommandB是具体命令类,Receiver是接收者类,Invoker是调用者类。当客户端(Client)执行命令时,它实际上是将一个具体的命令对象传递给调用者(Invoker)对象,并且调用者(Invoker)对象执行该命令。命令模式是一种行为型设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,同时将请求排队或记录请求日志,以及支持可撤销的操作。当需要支持撤销操作时。
原创
博文更新于 2023.04.28 ·
88 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之访问者模式(十六)

在上面的示例中,Product是商品接口,包含一个accept方法,该方法接收一个ProductVisitor访问者对象,用于实现对商品的访问。这种模式经常应用于解释器、编译器等场景中,例如我们可以使用访问者模式来实现XML或JSON数据的解析,针对不同类型的节点采用不同的操作方式。例如,我们可以考虑一个电商系统中的商品接口(Product),其中的商品可以是书籍、食品、服装等不同种类,而我们又需要对这些商品进行不同的操作(计算价格、打折、打印详情等等)。访问者模式是将数据结构与算法分开处理的一种方法。
原创
博文更新于 2023.04.28 ·
84 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之备忘录模式(十七)

在这个示例中,Originator类表示发起人,它可以设置和获取状态,并创建备忘录以存储当前状态。备忘录模式(Memento Pattern)是一种行为型设计模式,也叫做快照模式,它允许在不暴露对象实现细节的情况下保存和恢复对象的状态。备忘录模式将对象的状态保存到一个备忘录对象中,以便以后可以将其恢复到之前的状态。备忘录模式的使用场景包括:需要保存和回复一个对象的状态,以便在需要时恢复它;需要提供可以撤销的操作。在我们的示例中,我们设置了发起人的状态,然后将备忘录添加到管理者类中。
原创
博文更新于 2023.04.28 ·
99 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之中介者模式(十九)

中介者模式(Mediator Pattern)是一种行为型设计模式,也叫作调停者模式,它通过减少对象之间的直接通信来减少对象之间的耦合。在中介者模式中,所有对象的交互都是通过一个中介者对象来完成的,而不是直接进行交互。这个中介者对象负责协调不同对象之间的交互,从而降低了对象之间的耦合度,同时也使得对象之间的通信更加统一和简化。例如,一个公司的员工之间可能需要相互交流联系,而员工之间的关系可能非常复杂。这时,可以引入一个中介者,如公司的内部邮件系统,来协调员工之间的交互,降低对象之间的耦合度。
原创
博文更新于 2023.04.28 ·
110 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之桥接模式(十)

如果我们要在不同的品牌之间进行组合,如果直接使用继承的方式,就需要针对每一个品牌都去实现一个Car的子类,这样就会导致类的数量爆炸性增长,管理和维护都会变得非常困难。使用桥接模式,我们可以将品牌和车的类进行分离,将品牌作为一个实现部分,车作为一个抽象部分,这样就可以在运行时动态地组合不同的品牌和车的实现,而不需要改变类的数量,这样就可以更灵活地进行搭配。桥接模式将一个类的抽象部分与它的实现部分分离,利用组合的方式,可以让抽象部分和实现部分可以独立地变化,从而达到让两者可以自由的拼合的效果。
原创
博文更新于 2023.04.28 ·
88 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之组合模式(十一)

在组合节点 Composite 中,我们使用了一个 List 来保存其子节点 components,实现了 add() 和 remove() 方法。在组合模式中,我们拥有一个抽象的基类(Component),它定义了一些操作,例如 add() 和 remove() 等。叶子节点(Leaf)是不可再分的单独对象,而组合节点(Composite)则是由更小的组合节点或叶子节点构成,它们均实现了 Component 的接口。组合模式使得客户端能够统一地处理单个对象和对象组合它们的方式。
原创
博文更新于 2023.04.28 ·
100 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之代理模式(十二)

代理模式还可以实现远程代理、虚拟代理、安全代理等功能,非常灵活,是一种常用的设计模式。然后,我们定义一个代理类UserProxy实现UserService接口,并包含一个UserService对象作为属性,用来执行UserService对象的功能。UserProxy代理类可以在UserService对象的功能调用前或调用后,添加一些额外的功能,比如对用户的操作进行记录。代理模式是一种设计模式,它允许我们使用代理对象作为另一个对象的接口,以控制对该对象的访问。
原创
博文更新于 2023.04.28 ·
90 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之责任链模式(十三)

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它通过将请求沿着一个处理链进行传递,将发送者和接收者解耦,以避免将请求发送者与接收者之间的耦合关系硬编码在一起。在Main方法中创建了一个请求处理链,requests数组中的每一项请求都将被这个处理链处理。处理者之间的关系可以是链式结构,每个处理者都可以处理请求或选择将请求传递给下一个处理者。通过责任链模式,我们可以根据具体场景来定制链的形式和长度,实现对请求的自由处理。
原创
博文更新于 2023.04.28 ·
91 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之中介者模式(十八)

例如,在一个GUI界面中,当一个控件发生变化时需要更新其他控件的状态,这些控件可能在同一台电脑的不同位置,而且这些位置可能会发生变化,这时需要使用中介者模式来进行控制。具体中介者对象(ConcreteMediator)实现中介者接口,并保存一组被管理对象(Colleague),这些被管理对象需要在其中相互交互,但不需要彼此直接通信。中介者模式的核心思想是封装互相作用的对象之间的交互行为,从而使这些对象之间的耦合度降低,只与中介者对象进行交互。
原创
博文更新于 2023.04.28 ·
168 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之享元模式(十五)

内部状态是不变的,可以被共享,而外部状态是可变的,每个对象都需要独立维护。如果我们使用常规的创建墙壁对象的方式,每个墙壁将需要分配一块内存,这可能会导致内存占用过高和性能下降。使用享元模式,我们可以创建一个享元工厂类,它会维护已经创建的墙壁对象,并在需要时返回已创建的对象。在这个例子中,我们可以看到红色墙壁对象被共享了两次,虽然它们的坐标不同,但是它们实际上是同一个对象。在创建墙壁对象时,如果已经存在相同颜色的墙壁,它会返回已创建的对象。首先,需要定义场景中的墙壁类 Wall,它包含了墙壁的内部状态信息。
原创
博文更新于 2023.04.28 ·
94 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式之工厂模式(简单工厂、工厂模式、抽象工厂)(一)

工厂模式是一种常用的面向对象设计模式,它主要解决了对象创建过程中的复杂性和不稳定性问题。该模式将对象创建的责任交给一个工厂类,由工厂类负责根据参数来选择创建并返回正确类型的对象实例。这样做的好处在于,客户端不需要知道具体实现细节,只需通过接口与工厂交互即可获取所需对象,降低了类与类之间的耦合度,从而提高了系统的可扩展性和维护性。通常,工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式三种。
原创
博文更新于 2023.04.27 ·
268 阅读 ·
0 点赞 ·
1 评论 ·
1 收藏

设计模式之外观模式(九)

外观是客户端与子系统之间的中介对象,它封装了子系统的复杂性,为客户端提供统一的接口。而客户端则是使用外观对象的对象,它通过外观对象调用子系统的方法实现功能。外观模式(Facade Pattern)是一种结构型设计模式,它为复杂的子系统提供一个简单的接口,用于隐藏系统中的复杂性,并将其封装在一个单独的对象中。外观模式属于结构型模式,它降低系统的复杂度,提高了操作的便捷性。通过外观模式,我们可以将系统中复杂的子系统封装起来,从而达到简化系统操作过程的目的。这不仅提高了系统的易用性,也使系统更加易于维护。
原创
博文更新于 2023.04.27 ·
85 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多