2024年大数据最全带你初识微服务_微服务耦合性还是很高(2),2024年最新太牛了

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

2.1 单体架构

​ 单体架构特征:将所有服务集中到一个模块里进行开发。

在这里插入图片描述

可以看出单体架构地特点:

  • 优点
    • 结构简单
    • 部署容易
  • 缺点
    • 耦合度高、可扩展性差、升级维护困难
2.2 分布式架构

​ 分布式架构特征:根据业务功能对模块进行拆分,极大限度保证一个功能一个模块,一个模块为一个服务

在这里插入图片描述

​ 可以看出分布式架构特点:

  • 优点:
    • 耦合度低
    • 服务易于升级和扩展
  • 缺点:
    • 整体架构复杂
    • 项目上线部署难度大

​ 既然微服务这么好用,降低了服务间的耦合度,那我们就不需要思考了嘛?不,微服务架构这么复杂,若是再没有一点规矩,那不是乱了套了嘛。正所谓家有家法、行有行规,微服务也有人家的一套准则,至于准则是什么,这章我们不来细说,我把微服务的服务拆分准则和远程调用的方法放在本专栏的下一篇文章中,这篇文章,风哥仅仅带大家了解下微服务,目的是为了提起大家的学习兴趣,如果这个章节太过繁琐,知识点过多,怕是会劝退很多小伙伴啊😂。

2 微服务初识

​ 首先,看了上边,相信小伙伴们对微服务有了一个整体上的了解,但是却有着不清晰的概念,接下来,风哥给大家梳理一下。

微服务的架构特征:

  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
  • 自治:团队独立、技术独立、数据独立,独立部署和交付
  • 面向服务:服务提供统一标准的接口,与语言和技术无关
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

在这里插入图片描述

​ 正是由于微服务这样的标准,才使程序间进一步啊降低了耦合度,实现了服务的独立性和灵活性,从而更好地做到了高内聚、低耦合。

​ 所以( ̄▽ ̄)*,我们可以认为微服务是经过了一个良好设计的分布式架构方案。

​ 但是,众所周知,每个方案的基石就是技术栈,而在中国乃至全世界,Java领域最引人注目的就是Spring公司提供的SpringCloud架构技术。

3 SpringCloud

​ SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。

​ 同时SpringCloud集成了很多微服务功能组件,并且它基于SpringBoot对这些组件实现了自动装配,从而能让各位在使用中有着良好的开箱即用的体验。

​ 其中常见的组件包括以下几个:

在这里插入图片描述

​ 另外呢,风哥提前给大家说一下哈,因为SpringCloud是基于SpringBoot实现自动装配,说明SpringCloud是依赖于SpringBoot的,因此,SpringCloud和SpringBoot就有着相应的版本依赖关系。

​ 具体依赖关系可到Spring官网SpringCloud部分来查看。

​ 为了节约小伙伴时间,风哥已经在下面罗列了写这篇博客时的版本依赖关系,大家按需选择版本即可。

在这里插入图片描述

4 初识总结

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

需要这份系统化资料的朋友,可以戳这里获取

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这道题目是要求我们实现链表的基本操作,包括创建链表、插入节点、删除节点、遍历链表等。以下是一个简单的链表实现代码示例: ```c++ #include <iostream> using namespace std; // 定义链表节点结构体 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; // 创建链表 ListNode* createList(int nums[], int n) { if (n == 0) return NULL; ListNode *head = new ListNode(nums[0]); ListNode *cur = head; for (int i = 1; i < n; i++) { cur->next = new ListNode(nums[i]); cur = cur->next; } return head; } // 插入节点 void insertNode(ListNode *&head, int pos, int val) { if (pos < 0) return; if (pos == 0) { ListNode *newNode = new ListNode(val); newNode->next = head; head = newNode; return; } ListNode *cur = head; while (cur && pos > 1) { cur = cur->next; pos--; } if (cur) { ListNode *newNode = new ListNode(val); newNode->next = cur->next; cur->next = newNode; } } // 删除节点 void deleteNode(ListNode *&head, int pos) { if (pos < 0) return; if (pos == 0) { ListNode *delNode = head; head = head->next; delete delNode; return; } ListNode *cur = head; while (cur && pos > 1) { cur = cur->next; pos--; } if (cur && cur->next) { ListNode *delNode = cur->next; cur->next = delNode->next; delete delNode; } } // 遍历链表 void traverseList(ListNode *head) { while (head) { cout << head->val << " "; head = head->next; } cout << endl; } int main() { int nums[] = {1, 2, 3, 4, 5}; int n = sizeof(nums) / sizeof(int); ListNode *head = createList(nums, n); traverseList(head); insertNode(head, 2, 6); traverseList(head); deleteNode(head, 3); traverseList(head); return 0; } ``` 在上面的代码中,我们定义了一个 `ListNode` 结构体作为链表节点,包括节点值 `val` 和指向下一个节点的指针 `next`。同时,我们实现了创建链表、插入节点、删除节点和遍历链表等基本操作。在使用链表时,我们可以先通过 `createList` 函数创建一个链表,然后对链表进行插入、删除和遍历操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值