设计模式——基于容器的分布式系统

【每周论文】Design patterns for container-based distributed systems(HotCloud 2016) 首先介绍下第一作者Brendan Burns,他2008-2016年在Google工作,是Kubernetes的首席工程师,k8s容器编排的主要创始人之一,他在2016年的7月份宣布加入了Microsoft。 第二作者David Oppenheimer,他参与了Google的三大数据中心管理系统的开发——Kubernetes、Omega和Borg的开发,同时也是论文Borg的作者之一。 那篇非... 阅读详情

20 世纪 80 年代末至 90 年代初,面向对象编程思想给软件开发带来了一轮技术革新,就像润物细无声的春雨那般,向全世界的程序员们快速普及了模块化构建应用程序的方法,一直流行至今。

当下,我们可以看到类似的革新出现在了分布式系统开发,具体特点如下:

  • 基于容器的微服务架构体系日益流行

  • 容器天然隔离的属性非常适合作为分布式系统中的基本对象

基于面向对象,四人帮基于经验提出和总结了对于一些常见软件设计问题的标准解决方案,其描述了一系列基于接口的模式,可以在各种环境中重用,这被称之为软件设计模式。历史一定程度上来说是重复的,随着这种架构模式的成熟,基于容器的分布式系统的设计模式也就自然而然地浮现了。

本篇主要阐述的是Brendan Burns在基于容器的分布式系统中发现的三种设计模式:

  • single-container patterns for container management:容器管理之单容器模式

  • single-node patterns of closely cooperating containers:容器协调之单节点(多容器)模式

  • multi-node patterns for distributed algorithms:分布式算法之多节点模式

基于容器分布式系统的设计模式会给分布式计算编码带来以下优势:

  • 最佳实践,给没有经验的程序员带来相对正确的使用方式

  • 简化开发

  • 提升系统可靠性

模式的价值

模式的目的是提供一般建议或结构来指导设计,这样做的好处有以下三点:

  • 站在巨人的肩膀上,对于经验不怎么丰富的开发者,可以通过模式来指引走在正确的道路上,从而少踩坑,提升项目质量

  • 提供通用的名称和定义,有共同的领域语言进行交流是一件很重要的事情

  • 方便识别并构建共享的通用组件

单容器模式

就像对象会定义边界一样,容器为定义接口提供了天然的边界;它不仅可以暴露特定应用的功能,还可以通过钩子函数来管理系统。传统的容器管理接口是极其有限的,如:

  • run

  • pause

  • stop

这些接口只能说满足基础的使用需求,但是就目前的现状来看,更丰富的接口可以为系统开发者与操作者提供更多的功能。鉴于HTTP和JSON的普及程度,可以考虑通过容器在特定的节点托管一个Web服务来实现。这样做的目的是什么,可以从下面两个角度来看待:

  • upward:容器可以暴露丰富的应用信息,比如:

    • 各类监控指标(QPS、应用健康等)

    • 一些开发人员感兴趣的信息如(线程、堆栈、锁、网络消息统计等)

    • 组件配置、日志等

  • downward:任何开发者在编写软件组件的时候,都可以使用容器原生支持的生命周期接口来进行管控。比如一个集群管理系统通常会给任务分配对应的优先级,高优先级的任务即使在集群被超额订阅的情况下也能保证运行,这种保证是通过逐出已经运行的低优先级任务来实现的,然后这些低优先级任务能否运行取决于后面是否还有资源分配过来;但是这样有个问题就是开发者需要承担一些没必要的复返,比如处理一些优先级比较低的任务被抛弃的情况。相反,如果在应用程序和管理系统之间定义了正式的生命周期,那么应用程序组件将变得更易于管理,比如k8s使用Docker 的graceful deletion功能,这就允许应用程序通过完成当前任务,把状态写入磁盘等等操作之后再终止,将这个功能扩展一下就可以使使有状态的分布式系统的状态管理更加容易。

单节点(多容器)模式

上面提到了单容器的接口,我们稍稍延伸一下,对于一个多容器组成的应用,会有怎样的设计模式呢?当然,此时我们仍旧有些限制条件需要讲清楚:

  • 容器都处于单节点下

  • 容器管理系统需要支持将多容器作为原子单元协调编排,这也侧面印证为什么k8s需要有Pod这个逻辑概念

边车模式(Sidecar pattern)

扩展和增强现有的应用容器

目前最常见的多容器部署模式就是边车模式,边车模式就是由两个容器组成的单节点模式:

  • 核心是应用程序容器,这个就是应用程序的轴心

  • 其次就是边车容器,作用就是改进和增强应用程序容器

边车模式

边车模式的一般方式如上图所示,可以看到应用程序容器和边车容器共享了许多资源:

  • 部分文件系统

  • 主机名

  • 网络

  • 其他

我们通过下面的例子来看一下边车容器存在的必要性以及好处,图示如下:

边车-示例

其中主容器是一个web服务,而日志处理边车容器的工作就是收集本地磁盘的服务器日志,并将其流式传输至存储集群,这样做的好处有:

  • 容器是资源计算和调度的基本单位,所以可以优先配置主Web服务器的cgroup使得其处理延时降低,而日志处理容器则在web服务器空闲时使用cpu时间片进行日志处理

  • 将模块化和可重用的组件封装成边车,可达到功能内聚,应用可被划分明确的边界进行解耦(方便接入、测试调试、状态处理等),最重要的是可以被不同主容器作为边车容器复用

大使模式(Ambassadors pattern)

改变和管理应用容器与外部世界的通信方式

第一次看大使模式,很可能会想这不就是另一种形式的边车模式吗?其实不然,首先第一点,大使模式下所有的请求响应信息交换全部是大使容器来完成的,应用程序容器只能和大使容器进行交流。

大使模式

这种模式主要利用的特性是同一Pod中的容器可以共享相同的localhost网络接口,而且可以从两个角度看大使容器:

  • 内到外:让我们以访问一个存储区域为例,假设该存储区域的大小不断增长,必须分成更多的子系统。在这种情况下,为了不干预主容器并且必须对所有受影响的服务实施相同的新访问逻辑,创建一个大使容器来调解对存储区域的访问是个不错的选择

  • 外到内:让我们设想一下,我们要测试微服务的新版本,可以通过大使容器控制请求量到相关部署

适配器模式(Adapter pattern)

确保应用程序实现统一的监控接口

真实世界的应用程序大概率会有出现下面列出的几种情况:

  • 一部分服务自行开发(可能有新老标准差异),一部分使用开源项目

  • 服务的编写语言多样,日志记录、监控也多样

假设我们需要有效地监控和运维应用程序,这就要求应用程序可以提供统一的通用接口来进行指标收集。这就是适配器发挥作用的场景了,对于不同应用容器提供的不同接口,可以使用适配器适配这种异构性并转化为一致的接口且原有服务代码不需要做任何改动。

适配器模式

主应用程序通过localhost或者volume与适配器容器通信,适配器经过一层处理提供统一的输出给外部使用者,一些常用的使用场景如下:

  • 监控:适配器将应用程序容器公开的监控接口转换为通用监控系统所期望的接口

  • 日志:适配器提供统一的日志记录输出

多节点模式

不要将模块化容器局限于单机容器协调上,其实模块化容器还可以使构建协调的多节点分布式应用程序变得更加容易。接下来将描述其中的三种分布式系统模,与前一节中的模式一样,这些模式也需要对 Pod 这个逻辑概念的支持。

领导选举模式

分布式系统中最常见的问题就是领导选举(Leader election)问题,副本被普遍使用在一个组件的多个相同的实例之间共享负载,副本的另一个更加复杂的作用就是使得某一特定副本作为整个部署集的leader,其他副本作为热备(这个区分过程比较复杂),当原本 Leader 宕机时可以快速被选举为新的 Leader,以恢复系统功能。系统甚至可以并行地进行领导者选举,例如多个分片均需要确定领导者。

领导选举模式

上图介绍了一个简单的分布式选举的例子:图中三个副本,任何一个副本都有可能成为主副本,首先第一个副本为主,若其不巧发生故障,第二阶段就会通过选举将第三个副本变成主副本,最后,第一个副本回复,重新加入集群,第三副本依旧作为主节点运行调度。

现在确实有许多类库可以进行领导者选举,但它们通常比较复杂并且难以被正确理解和使用,此外,它们还受到特定编程语言实现的限制。

所以本部分探讨的就是将领导者选举机制从应用程序中剥离至领导者选举专属容器中,我们可以考虑提供一组领导者选举容器,每个容器都与需要进行领导者选举的应用程序共同调度,这样就可以在这些领导者选举容器之间执行选举。

同时,它们可以在localhost上为需要进行领导者选举的应用程序容器提供一个简化的HTTP API (例如becomeLeader、renewLeadership 等)。

这些领导者选举容器只需要由这个复杂领域的专家进行一次性构建即可,然后不管应用程序开发人员选择何种编程语言,都可以复用其简化的接口。这种方式代表了软件工程中最好的抽象和封装过程。

工作队列模式(Work queue pattern)

一个简单通用的容器化工作队列图示如下:

工作队列

最左侧提供了一组需要被执行的工作项,然后工作队列管理容器接受输入工作项,将其分发给多个执行器进行消费,并且多个执行器中间没有任何交互,这样的好处是可以根据实际运行情况增加执行器数量来赢取时间。

虽然工作队列和领导者选举一样,是一个研究得很透彻的课题并且有很多框架对它们进行了很好的实现,但这些分布式系统设计模式仍然是可以在面向容器的架构中获益。在以前的系统中,框架将程序限制在单一的语言环境中(如Python中的Celery)。

对于一个容器,由于run()&mount()接口的实现,使得实现一个通用的工作队列框架变得简单直接,可以将任意的处理代码打包成一个容器,再结合任意数据就构建成了一个完整的工作队列系统。开发完整工作队列所涉及的所有其他工作都可以由通用工作队列框架处理,并且可以被任何有相同需求的系统复用,用户代码集成等细节让我们看看下面的图示:

工作队列

通用工作队列的图示,可重用框架容器以深灰色显示,而开发人员容器以浅灰色显示。

让我们结合上面的两张图一起看看,在我看来这就是一个从第一张图抽象出用户自定义代码从而形成第二张图的过程,且看我详细列出关键点。

源容器接口

用户定义的工作项由工作队列管理容器接收,此时涉及到一个论文中没有描述的点就是队列管理容器对于接收的工作项是默认进行了标准定义的,也就是说工作项都是定义好的标准输入。但实际情况并不可能让所有的输入项都有相同的输入标准,必须由一段用户自定义的处理代码来将输入标准化,不知机智的你是否想到了大使模式:

源容器接口
执行器容器接口

当工作队列管理容器获取了对应的工作项,接下来的工作就是下发给执行器进行处理,具体做法是调用一次性API触发工作流,并且在工作容器的整个生命周期是不会有其他调用产生的。

执行器容器接口

分散/聚集模式

最后一个我们要着重介绍的设计模式是分散/收集模式(Scatter/gather pattern),首先简单介绍一下这个模式:

分散/收集模式是一个树形模式,当外部客户端向根节点发送一个初始请求,根节点会将这个请求分发给大量服务器,每个服务器分片均返回部分数据,然后跟节点将这些部分结果组合起来形成一个针对原始请求的完整响应。

对于上面这样一个流程,实际上可以抽象出以下几个标准出来:

  • 分散请求(fanning out the requests)

  • 收集响应(gathering the responses)

  • 与客户端交互(interacting with the client)

  • ...

上述流程的大部分代码都是通用的,就像面向对象编程中一样,我们可以将这个一个个拆分实现并进行容器化。

分散/收集

值得一提的是要实现一个分散/收集系统,需要一个用户提供两个容器:

  • 第一种容器实现叶子节点计算,该容器执行部分计算并返回相应的结果

  • 第二种容器是合并容器,该容器需要汇总所有叶子容器的计算结果,并组织成一个单一的响应后输出给用户

说明

主体内容来自:

  • 论文《Design patterns for container-based distributed systems[1]》

  • 书籍《Designing Distributed Systems[2]》

不错的资料:

  • [译] 基于容器的分布式系统设计模式[3]

最近一直在了解低代码开发平台相关知识,就是前面提到的一站式机器学习云研发平台[4],其中关于资源管理这块离不开k8s的使用,因此花了不少精力在这上面,不出意外会出一个系列的学习笔记:

而且在学习分布式设计模式的同时也对分布式系统产生了一些兴趣,这一块后续会一起好好研究研究。

参考资料

[1]

Design patterns for container-based distributed systems: https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45406.pdf

[2]

Designing Distributed Systems: https://book.douban.com/subject/34844678/

[3]

[译] 基于容器的分布式系统设计模式: https://www.cnblogs.com/gaochundong/p/design-patterns-for-container-based-distributed-systems.html

[4]

一站式机器学习云研发平台: https://www.howie6879.cn/p/%E4%B8%80%E7%AB%99%E5%BC%8F%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%BA%91%E5%BC%80%E5%8F%91%E5%B9%B3%E5%8F%B0/

感谢花时间阅读,有什么想法可以留言一起交流,如果对你有帮助,欢迎转发分享,点个好看呗哈哈 ????

基于容器的分布式系统设计模式 Design Patterns for Container-based Distributed Systems 基于容器的分布式系统设计模式 立即下载

相关推荐

4 轴穿越机 Mark5 机架全解析:从历史演进到电机桨叶选型指南

本文围绕 4 轴穿越机 Mark5 机架展开,先介绍其发展历程(2018 年初代到 2023 年五代,迭代优化轻量化、刚性与兼容性),再明确其核心参数(轴距 220mm、兼容 4-6 寸桨等)对电机桨叶的约束。 详解电机(KV 值、尺寸、推力等)与桨叶(尺寸、螺距、材质等)选型要点及匹配原则(高 KV 配小桨、低 KV 配大桨),给出推重比、功率等理论计算公式,结合新手练习、花飞、竞速、航拍等场景提供具体选型案例,最后提及安全、成本、法规等注意事项,为爱好者提供全面选型参考。

bother3000的博客 1901

Design patterns for container-based distributed systems

基于面向容器的微服务架构的设计模式认识理解

多头注意力探索Now 457

HC32F460的GPIO重映射实战:如何用3步搞定SPI引脚冲突问题

本文详细介绍了HC32F460的GPIO重映射功能,通过三步操作解决SPI引脚冲突问题。文章解析了HC32F460的FuncGroup功能分组机制,提供了具体的寄存器配置步骤和验证技巧,并对比了与传统方案的性能优势,帮助工程师灵活配置引脚,优化硬件设计。

t4y5u6i7o的博客 921

容器技术在分布式系统应用

容器凭借着良好的外部隔离性,非常适合作为分布式系统的基本"对象"。容器屏蔽了底层的代码细节,抽象出了不同类型的应用的通用模式。不止容器的封装特性所带来的天然对象化,在更高层对容器的编排技术也能体现这种思想。从火热的容器编排(k8s)中的各类 API 对象我们处处都能看到"对象"思想的落地。 基于容器的分布式系统三种设计模式: 用于管理容器的单容器模式 单节点多容器协作模式 应用于分布式算法的多节点模式 单容器管理模式 ...

lovelife110的博客 3333

OCTA-500:用于光学相干断层扫描血管造影研究的视网膜数据集|文献速递-基于生成模型的数据增强与疾病监测应用

数据集提供了丰富的图像和注释,包括两种模态(OCT/OCTA体积)、六种投影类型、四种文本标签(年龄/性别/眼别/疾病)以及七种分割标签(大血管/毛细血管/动脉/静脉/2D FAZ/3D FAZ/视网膜层)。我们介绍了新的 OCTA-500 数据集,该数据集包含来自 500 名受试者的 OCTA 成像,并提供了丰富的图像和标注集。(C) OCTA-500 切片的人工标注示例。图 4. OCTA-500 数据集中文本标签的统计直方图:(a) 性别,(b) 眼别,(c) 年龄,(d) 疾病。

weixin_38594676的博客 1439

【XR技术介绍】深度解析|AI眼镜核心技术架构:从硬件层到端云AI全链路拆解

本文将逐层拆解AI眼镜完整技术架构,梳理硬件、感知、光学、端侧AI、软件云端五大核心层级,剖析核心数据流与行业技术瓶颈,同时附上标准化技术架构图,适合技术学习、方案汇报、行业科普使用。

houdou112358的博客 441

一文带你搞懂 Kubernetes 容器边车模式

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !Overview顾名思义,边车用大白话来讲就是加装在摩托车旁边,用来达到拓展现有功能的能力,可以让其坐上更多的人或物。边车很像软件工程里的代理模式,对服务进行包装,使其不改变原来的功能,拓展原来的服务。现在微服务盛行,技术栈五花八门,其中最让人头疼的就是服务治理了,而Sidecar模式的出现,正好为服务治理提供了...

easylife206的专栏 2519

【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具

针对以上文件及文件目录介绍其功能特性:Allclean:这是一个脚本或命令,通常用于清理(即删除)所有编译生成的临时文件和目标文件。执行后,可以将编译过程中生成的中间文件和已编译的程序删除,以便重新开始编译或者清理空间。Allwmake:这是一个脚本或命令,用于编译并安装ThirdParty-10目录中的所有软件包。执行此命令会遍历所有子目录,编译其中的软件包并将它们安装到指定位置。这是一个脚本或命令,用于编译和安装Libccmio库。

源代码杀手的博客 1998

分布式设计之边车模式(Sidecar)

如果我们前期的微服务没有相关的服务治理功能,要对所有的微服务做一些升级该如何下手?主要包括服务治理:监视、日志记录、限流、熔断、服务注册、协议适配转换等。下面介绍的边车模式就是很好解决该问题的一个方法之一。边车模式也叫搭档模式、伴侣模式或跟班模式。生活中的原型就是在原来二轮摩托车旁边增加一个座位成了三轮摩托车,增加的一部分称为边车,如图:边车(Sidecar)模式设计思想的核心是将控制和逻辑分离,常用于我们在分布式架构中的逻辑和控制分离设计。迁移到我们的分布式架构中就是:我们不需要在服务中实现控制面上的东西

日积月累,水滴石穿 1万+

超声波雷达探测车位及信号处理方法

在APA泊车中用到了超声波雷达,第一次接触,总结研究之。

周陽讀書 1230

RK3588 实战级 YOLOv5 Android 全解析:NPU 量化 + 多线程 + 跟踪算法,源码一次买齐

本文将带你完成一个完整的AI视觉项目:在搭载RK3588芯片的Android开发板上运行实时目标检测与跟踪应用。实战目标:成功运行官方YOLOV5摄像头实时检测案例技术深度:深入理解RKNN开发框架和源码实现核心技能:掌握NPU推理、多线程并发、目标跟踪等关键技术。

FJN110的博客 158

Kubernetes Pod深度解析:构建可靠微服务的秘密武器(下)

本文旨在全面而深入地探讨Kubernetes(K8s)中的Pod概念,为读者提供对其核心特性和应用场景的深入理解。Pod作为Kubernetes的最小部署单元,承载着容器化应用的核心功能,是构建云原生应用的重要基石。

博客虽小,世界尽在其中 1605

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

新的方案!容器化分布式系统的设计模式

容器凭借其边界隔离特性(如Docker、Linux……

让企业不再为算力成本焦虑,让每分钱都花在刀刃上 686

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

基于容器的分布式系统的设计模式

1. 介绍 在20世纪80年代末和20世纪90年代初,面向对象编程彻底改革了软件开发方法,普及了将应用程序作为模块化组件的创建方法。随着基于容器化软件组件的微服务架构的逐渐普及,现在在分布式系统开发中也发生着类似的革命。容器之间相互隔离的优点使得容器成为了分布式系统中合适的基本单元。随着这种架构类型的成熟,我们可以看到设计模型的出现,从容...

weixin_34190136的博客 203

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

容器在分布式集群中应该如何优雅的组合?

最近有幸拜读了Google在 2016年 发表的一篇论文,《Design patterns for container-based distributed systems》,这篇文章中描绘了几种在容器编排系统中使用容器的方式,即如何将不同服务的容器进行有机组合,并使得这些模式成为最佳实践方式,让整个分布式系统更加可靠和可维护,虽然已经过去5年之久,但文章中的思想仍然影响着对容器技术和分布式系统的发展。 有兴趣的话欢迎来我的公众号交流:packy的技术杂货铺 文章中将设计模式分成了三个大类: 用于容器

jimzbq的博客 329

Kubernetes与容器设计模式

目录贴:Kubernetes学习系列   在程序设计领域,面向对象设计和面向对象语言是大家最为熟悉和强大的工具,而面向对象除了其强大的核心特性之外,还有人们通过实践总结出来的一系列设计模式,可以用来解决实际应用设计中的一些复杂问题。   云原生应用运行的环境都是复杂的分布式环境,在这种情况下,一些有用的设计模式可以起到四两拨千斤的作用,而K8s社区推出的容器设计模式,则是结合了K8s集群的微服...

weixin_30603633的博客 82

设计模式之Singleton(单态)

设计模式之Singleton(单态) 板桥里人 http://www.jdon.com 2002/05/07 模式实战书籍《Java实用系统开发指南》 单态定义: Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在很多操作中,比如建立目录 数据库连接都需要这样的单线程操...

109

分布式系统设计模式

概述 这篇文章是对于【分布式系统设计模式】的个人理解和部分翻译。 文章探讨了关于《基于容器化软件组件的微服务架构》。 其实容器化编程的发展路径和面向对象编程有异曲同工之妙-- 都是将复杂的系统进行抽象、解耦,然后通过一定的方式组合起来。 既然我们要组合,肯定会有面对不同情况的不同组合方式。所以,这些不同的组合方式也会有几个常用的固定模式。 而这个正式我们要探讨的--分布式系统设计模式。 ...

芒果不是程序猿v: 的博客 506

分布式技术追踪 2018年第九期

分布式系统实践 1.阿里容器调度系统Sigma仿真平台Cerebro揭秘 https://mp.weixin.qq.com/s/1GFHE7cbwB02bfnKha8ybg 摘要:调度系统的仿真对于调度策略的研发非常重要, 相比于线上系统, 仿真系统的研发难度更大, 这篇文章介绍了阿里巴巴Sigma的调度仿真系统. 2.Design patterns for contain...

weixin_30815427的博客 262

总结2024年最全180道Java岗面试题,java面试编程题及答案

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)66个Java面试知识点架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)算法刷题(PDF)

2401_83641098的博客 1125

架构设计&分布式&数据结构与算法面试题(2020最新版)

文章目录架构设计请列举出在JDK中几个常用的设计模式?什么是设计模式?你是否在你的代码里面使用过任何设计模式?静态代理、JDK动态代理以及CGLIB动态代理静态代理动态代理cglib代理单例模式工厂模式观察者模式装饰器模式秒杀系统设计分布式分布式概述分布式集群微服务多线程高并发分布式系统设计理念分布式系统的目标与要素分布式系统设计两大思路:中心化和去中心化分布式与集群的区别是什么?CAP定理CAP...

ThinkWon的博客 13万+

java技术栈

java技术栈 参考了众多资料,这里就不再详细列举了,可以自行去搜索 1 java基础: 1.1 算法 1.1 排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序 1.2 二叉查找树、红黑树、B树、B+树、LSM树(分别有对应的应用,数据库、HBase) 1.3 BitSet解决数据重复和是否存在等问题 1.2 基本 2.1 字符串常量池的迁移 2.2 字符串KMP算法 2.3 equals和hashcode 2.4 泛型、异常、反射 2.5

Aliloke的博客 570

Java企业必备技术的学习要点

Java企业必备技术的学习要点涉及多个关键领域,这些领域对于在Java企业级开发中取得成功至关重要。

2401_87352036的博客 791

软件架构师终极指南:10大核心技能与设计模式实战应用

GitHub 加速计划 / so / openbrowser 是一个让 AI 智能体能够浏览网页的项目,它是一个基于浏览器的 AI 智能体自主工具包,为 AI 智能体在网页浏览方面提供了强大的支持。 ## 一、掌握系统设计基础 系统设计是软件架构师的核心能力之一。一个优秀的系统设计需要考虑性能、可扩展性、可靠性等多方面因素。在 GitHub 加速计划 / so / openbrowser 项目

gitblog_01050的博客 646
上一篇: k8s学习之路【03.容器持久化存储】
下一篇: k8s学习之路【04.配置应用程序】
老胡的储物柜
博客等级 码龄12年 1145粉丝 284原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值