当前位置: 首页 > news >正文

RabbitMQ2:介绍、安装、快速入门、数据隔离

欢迎来到“雪碧聊技术”CSDN博客!

在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目心得。

让我们一同在Java的广阔天地中遨游,携手提升技术能力,共创美好未来!感谢您的关注与支持,期待在“雪碧聊技术”与您共同成长!

目录

一、介绍和安装

1、介绍

2、安装rabbitMQ(使用docker)

①首先创建一个自定义网络,使容器根据名称通信

② 运行docker命令,创建、运行rabbitMQ容器(如果没有rabbitMQ镜像,会自动拉取)

③查看mq容器是否运行

3、访问rabbitMQ页面,并进行登录

4、rabbitMQ的整体架构、核心概念

①publisher:消息的发送者,发送消息给交换机。

②exchange:交换机,负责把消息传给队列

③queue:队列,用于存储消息

④consumer:消息的消费者,通过监听队列来获取消息。

 5、虚拟主机(virtual-host)的数据隔离功能

①为什么需要virtual-host?

②virtual-host的数据隔离功能

二、快速入门

1、案例介绍

2、具体操作

①创建两个队列

②找到默认交换机amp-fanout,与这两个队列进行绑定

③向默认交换机amp-fanout传一条消息

④查看那两个队列是否收到了该交换机转发的消息

3、总结

①交换机是负责转发消息的,而没有存储消息的能力。因此必须绑定队列,不然交换机收到的消息没地方转发,就会丢失。

②与amp-fanout交换机绑定的两个队列,都收到了该交换机转发的消息,证明amp-fanout交换机是以广播形式进行转发消息的。

③以上案例的流程

三、数据隔离

1、查看当前的虚拟主机有哪些?

2、案例介绍

3、具体操作

①创建一个用户hmall

 ②为hmall用户创建一个虚拟主机(virtual host)

③测试不同虚拟主机之间的数据隔离现象

4、总结


一、介绍和安装

1、介绍

        RabbitMQ是基于Erlang语言开发的开源消息通信中间件。

        官网地址:http://www.rabbitmq.com/

2、安装rabbitMQ(使用docker)

①首先创建一个自定义网络,使容器根据名称通信

② 运行docker命令,创建、运行rabbitMQ容器(如果没有rabbitMQ镜像,会自动拉取)

docker run \-e RABBITMQ_DEFAULT_USER=itheima \-e RABBITMQ_DEFAULT_PASS=123321 \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network hmall \-d \rabbitmq:3.8-management

解读上述的docker命令:

  • -e:配置了一些参数,令账号为itheima,密码为123321
  • -v:将数据卷mq-plugins挂载到容器的/plugins目录上
  • -name:令该docker容器名为mq
  • -hostname:主机名
  • -p:端口映射(宿主机、容器之间的端口映射)
  • --network:指定该容器处于哪个网络(此处是处于我们刚才创建的自定义网络hmall中)
  • -d:表示该容器后台运行(一般都加上这个)
  • rabbitmq:3.8-management:这是镜像名称。

③查看mq容器是否运行

3、访问rabbitMQ页面,并进行登录

4、rabbitMQ的整体架构、核心概念

①publisher:消息的发送者,发送消息给交换机。

②exchange:交换机,负责把消息传给队列

③queue:队列,用于存储消息

④consumer:消息的消费者,通过监听队列来获取消息。

 5、虚拟主机(virtual-host)的数据隔离功能

①为什么需要virtual-host?

        由于rabbitMQ的并发能力很强很顶用,公司为了省钱,会在不同的项目中重复使用同一套rabbitMQ服务,此时可能导致交换机、队列之间产生冲突。此时可以通过虚拟主机(virtual-host)来解决冲突。

②virtual-host的数据隔离功能

        举例:此时我们公司有3个项目,那么我就在rabbitMQ上创建3个虚拟主机(virtual-host),每个虚拟主机专门服务一个项目。

        这样一来,每个虚拟主机都有自己的交换机和队列,于是就不会产生冲突了。

二、快速入门

1、案例介绍

2、具体操作

①创建两个队列

hello.queue2队列同上。

创建后的结果:

②找到默认交换机amp-fanout,与这两个队列进行绑定

 绑定后的结果:

③向默认交换机amp-fanout传一条消息

④查看那两个队列是否收到了该交换机转发的消息

3、总结

①交换机是负责转发消息的,而没有存储消息的能力。因此必须绑定队列,不然交换机收到的消息没地方转发,就会丢失。

②与amp-fanout交换机绑定的两个队列,都收到了该交换机转发的消息,证明amp-fanout交换机是以广播形式进行转发消息的。

③以上案例的流程

  • 向交换机中传入一条消息
  • 交换机收到消息后,转发给绑定的队列
  • 队列收到交换机的消息。

三、数据隔离

1、查看当前的虚拟主机有哪些?

2、案例介绍

3、具体操作

①创建一个用户hmall

创建的结果: 

 ②为hmall用户创建一个虚拟主机(virtual host)

 创建的结果:

③测试不同虚拟主机之间的数据隔离现象

 

4、总结

假设以后公司只有一台rabbitMQ服务器,但是却要被很多项目使用。

那么此时,我们可以给每个项目,创建一个rabbitMQ用户,然后在每个用户中再创建一台自己的虚拟主机(virtual host),这样就能实现项目之间的数据隔离。

以上就是本篇文章的详细内容,想了解更多的rabbitMQ内容,请关注本博主~~

相关文章:

RabbitMQ2:介绍、安装、快速入门、数据隔离

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...

Docker Seata分布式事务保护搭建 DB数据源版搭建 结合Nacos服务注册

介绍 Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,旨在为微服务架构中的分布式系统提供事务管理支持。Seata 通过提供全局事务管理,帮助开发者在分布式环境中保持数据一致性 …...

elasticsearch7.10.2集群部署带认证

安装elasticsearch rpm包安装 下载地址 https://mirrors.aliyun.com/elasticstack/7.x/yum/7.10.2/ 生成证书 #1.生成CA证书 # 生成CA证书,执行命令后,系统还会提示你输入密码,可以直接留空 cd /usr/share/elasticsearch/bin ./elasticsearch-certutil ca#会在/usr/share/el…...

opencv-python 分离边缘粘连的物体(距离变换)

import cv2 import numpy as np# 读取图像,这里添加了判断图像是否读取成功的逻辑 img cv2.imread("./640.png") # 灰度图 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯模糊 gray cv2.GaussianBlur(gray, (5, 5), 0) # 二值化 ret, binary cv2…...

UVM 验证方法学之interface学习系列文章(七)高级 《bind 操作》(4)级联

在 SystemVerilog 中,bind 操作符用于将一个模块或接口实例绑定到另一个模块或接口的层次结构中。这在很多情况下非常有用,尤其是当你需要在不修改原始模块代码的情况下,添加或替换某些组件时。bind 操作符常用于仿真和测试平台中,以便灵活地组织测试环境。 前面的文章,我…...

08 —— Webpack打包图片

【资源模块 | webpack 中文文档 | webpack中文文档 | webpack中文网】https://www.webpackjs.com/guides/asset-modules/?sid_for_share99125_3 Webpack打包图片以8KB为临界值判断 大于8KB的文件:发送一个单独的文件并导出URL地址 小于8KB的文件:导出一…...

goframe开发一个企业网站 MongoDB 完整工具包19

1. MongoDB 工具包完整实现 (mongodb.go) package mongodbimport ("context""fmt""time""github.com/gogf/gf/v2/frame/g""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options" )va…...

从ES的JVM配置起步思考JVM常见参数优化

目录 一、真实查看参数 (一)-XX:PrintCommandLineFlags (二)-XX:PrintFlagsFinal 二、堆空间的配置 (一)默认配置 (二)配置Elasticsearch堆内存时,将初始大小设置为…...

Oracle JDK(通常简称为 JDK)和 OpenJDK区别

Java 的开发和运行时环境主要由两种实现主导:Oracle JDK(通常简称为 JDK)和 OpenJDK。尽管它们都基于同一个代码库,但在一些关键点上有所区别。以下是详细的对比: 1. 基础代码 Oracle JDK: 基于 OpenJD…...

格约减技术的工作原理

1. 格基约减的定义和目标 格基约简的目标是找到一组新的基,使得这些基向量的大小满足特定的不等式,并且这些基向量更加趋于正交。 2. LLL算法的基本原理 LLL算法通过一系列变换实现向量基底的逐步优化,最终到达一个“约减”基底。这个约减…...

M|横道世之介

rating: 8.0 豆瓣: 8.8 上映时间: “2013” 类型: M剧情爱情 导演: 冲田修一 Shichi Okita 主演: 冲田修一 Shichi Okita吉高由里子 Yuriko Yoshitaka 国家/地区: 日本 片长/分钟: 160分钟 M|横道世之介 横道世之介是一个热情、纯真的人,大家…...

el-select 和el-tree二次封装

前言 本文章是本人在开发过程中&#xff0c;遇到使用树形数据&#xff0c;动态单选或多选的需求&#xff0c;element中没有这种组件&#xff0c;故自己封装一个&#xff0c;欢迎多多指教 开发环境&#xff1a;element-UI、vue2 组件效果 单选 多选 组件引用 <treeselec…...

RocketMQ: Broker 使用指南

Broker 配置参数 获取 Broker 的默认配置 $ sh mqbroker -m Broker 启劢时&#xff0c;如何加载配置 ### 第一步生成 Broker 默认配置模版 sh mqbroker -m > broker.p ### 第二步修改配置文件, broker.p ### 第三步加载修改过的配置文件 nohup sh mqbroker -c broker.pBrok…...

ubuntu安装ros1

以Ubuntu 18.04为例&#xff1a; 1.如果源没有切换到国内的建议切换 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo vi /etc/sources.list删除原来的源切换到清华大学源 # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如有需要可自行取消注释 de…...

C++ 中的模板特化和偏特化

模版特化是为特定的模版参数类型提供提供专门的实现。 当需要为特定类型的模板参数提供不同的实现时&#xff0c;可以使用模板特化。模板特化允许你为特定的模板参数类型编写专门的代码&#xff0c;而不是使用通用的模板代码。 例如&#xff0c;对于一个通用的模板函数&#…...

CTFHUB--yeeclass-web

复现平台CTFHUB靶机为一个完整类论坛网页&#xff0c;题目给了服务端完整代码 代码审计 /src/submit.php Line56-63: 可以看到提交数据存入的时候将$_SESSION["username"]."_"作为前缀&#xff0c;生成了一个uniqid。uniqid的生成方式即{sec:08x}{usec:0…...

GM、BP、LSTM时间预测预测代码

GM clc; clear; close all;%% 数据加载和预处理 [file, path] uigetfile(*.xlsx, Select the Excel file); filename fullfile(path, file); time_series xlsread(filename);% 确保数据是一列 time_series time_series(:);% 归一化数据 min_val min(time_series); max_v…...

2022 年中高职组“网络安全”赛项-海南省省竞赛任务书-1-B模块B-1-Windows操作系统渗透测试

前言 本章节我将带领大家一起重新模拟操作一次Windows渗透测试模块&#xff0c;并加固的流程。 任务概览 环境部署 我的实验复现环境&#xff1a; 服务器Windows server 2008 R2 攻击机Kali Linux 场景操作系统Windows 7 额外还有台交换机支持&#xff1a; 这里我使用的是…...

【6】STM32·FreeRTOS·列表和列表项

目录 一、列表和列表项的简介 1.1、列表 1.2、列表项 1.3、迷你列表项 1.4、列表和列表项的关系 二、列表相关API函数介绍 2.1、初始化列表vListInitialise() 2.2、初始化列表项vListInitialiseItem() 2.3、列表插入列表项vListInsert() 2.4、列表末尾插入列表项vLis…...

嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)

引言&#xff1a;在我们的日常使用中&#xff0c;MOS就是个纯粹的电子开关&#xff0c;虽然MOS管也有放大作用&#xff0c;但是几乎用不到&#xff0c;只用它的开关作用&#xff0c;一般的电机驱动&#xff0c;开关电源&#xff0c;逆变器等大功率设备&#xff0c;全部使用MOS管…...

Leetcode 最长回文子串

目录 解法1&#xff1a;递归算法 解法2&#xff1a;Map取同字母位置法 解法3&#xff1a;中心扩展法 解法4&#xff1a;动态规划法 解法5: Manacher算法 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;&quo…...

使用ENSP实现NAT

一、项目拓扑 二、项目实现 1.路由器AR1配置 进入系统试图 sys将路由器命名为R1 sysname R1关闭信息中心 undo info-center enable进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为12.12.12.1/30 ip address 12.12.12.1 30进入e0/0/1接口 int g0/0/1将g0/0/1接口IP地址配置…...

Elasticsearch搜索流程及原理详解

Elasticsearch搜索流程及原理详解 1. Elasticsearch概述1.1 简介1.2 核心特性1.3 应用场景2. Elasticsearch搜索流程2.1 搜索请求的发起2.2 查询的执行2.3 结果的聚合与返回3. Elasticsearch原理详解3.1 倒排索引3.2 分布式架构3.3 写入流程3.4 读取流程4. 技术细节与操作流程4…...

计算机组成原理之DMA方式

1. DMA方式的基本概念与特点 基本概念&#xff1a;DMA&#xff08;Direct Memory Access&#xff09;即直接存储器存取&#xff0c;是一种计算机组成原理中的数据传输模式。在此模式下&#xff0c;硬件可以直接从外设&#xff08;如磁盘、网络设备等高速设备&#xff09;读写内…...

贴代码框架PasteForm特性介绍之query,linkquery

简介 PasteForm是贴代码推出的 “新一代CRUD” &#xff0c;基于ABPvNext&#xff0c;目的是通过对Dto的特性的标注&#xff0c;从而实现管理端的统一UI&#xff0c;借助于配套的PasteBuilder代码生成器&#xff0c;你可以快速的为自己的项目构建后台管理端&#xff01;目前管…...

Linux安装RabbitMQ

安装步骤 rabbitmq使用erlang开发&#xff0c;依赖于erlang&#xff0c;所以需要先下载erlang&#xff0c;且版本要兼容&#xff1a; 可在官网查看erlang与rabbitmq的版本对应关系 https://www.rabbitmq.com/docs/which-erlangCentOs7安装运行 下载 下载地址 https://www.rab…...

C语言:函数指针精讲

1、函数指针 一个函数总是占用一段连续的内存区域&#xff0c;函数名在表达式中有事也会被转换为该函数所在内存区域的首地址&#xff0c;这和数组名非常类似&#xff0c;我们可以把函数这个首地址&#xff08;或称入口地址&#xff09;赋予一个指针变量&#xff0c;使指针变量…...

阿里云 DevOps 资源安全扫描实践

随着企业上云进程的加速&#xff0c;云资源的使用量日益增长&#xff0c;云环境中资源的安全性和稳定性成为了企业业务运营的关键要素 面对多样化的云资源和复杂的应用场景&#xff0c;传统的安全管理手段已无法完全满足企业日益严苛的安全需求。为了确保云上资源的安全性&…...

038集——quadtree(CAD—C#二次开发入门)

效果如下&#xff1a; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.T…...

【Python · PyTorch】循环神经网络 RNN(基础概念)

【Python PyTorch】循环神经网络 RNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念2. 延时神经网络&#xff08;TDNN&#xff09;3. 简单循环神经网络&#xff08;Simple RNN&#xff09;3.1 BiRNN 双向循环神经网络3.2 特点记忆性参数共享图灵完备 3.3 网络结构3…...

在Ubuntu系统中制作系统启动u盘

2024-11&#xff1a;用Ubuntu系统一段时间后&#xff0c;编程体验很好&#xff0c;命令行尤其好用。时间一长&#xff0c;考虑到Windows系统里面丰富的软件生态&#xff0c;还是颇为割舍不下&#xff0c;本来想着再买个主机&#xff0c;但是考虑到成本问题&#xff0c;还是给笔…...

性能监控利器:Ubuntu 22.04 上的 Zabbix 安装与配置指南

简介 今天我们来聊聊如何在 Ubuntu 22.04 上安装和配置 Zabbix。我们会用到 PostgreSQL 作为数据库后端&#xff0c;Nginx 作为 Web 服务器&#xff0c;并用 Let’s Encrypt SSL 证书来保驾护航。 什么是 Zabbix&#xff1f; Zabbix 是一个开源的网络监控和管理解决方案&…...

【C语言篇】从字符海洋到整数大陆——atoi 的探险之旅

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…...

字符三角形

字符三角形 C语言代码C语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给定一个字符&#xff0c;用它构造一个底边长5个字符&#xff0c;高3个字符的等腰字符三角形。 输入 输入只有一行&#xff0c; …...

3.12MayBeSomeLinearAlgebra

X是M*(D1),XT为&#xff08;D1)*M Ω是一行D1列&#xff0c;X乘以欧米噶是M行D1列 行是说样本个数&#xff0c;列是特征数量 如果是小样本&#xff0c;那么可能会出现特征数量大于样本个数 如果MD*DM就是M*M&#xff0c;...

私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?

在当今数字化、网络化的时代背景下&#xff0c;视频监控技术已广泛应用于各行各业&#xff0c;成为保障安全、提升效率的重要工具。然而&#xff0c;面对复杂多变的监控需求和跨区域、网络化的管理挑战&#xff0c;传统的视频监控解决方案往往显得力不从心。 EasyCVR视频融合云…...

小程序24-滚动效果:scroll-view组件详解

在微信小程序中如果想实现内容滚动&#xff0c;需要使用 scroll-view 组件 scroll-view&#xff1a;可滚动视图区域&#xff0c;适用于需要滚动展示内容的场景&#xff0c;用户可以通过手指滑动或者点击滚动条滚动内容。 scroll-x允许横向滚动scroll-y允许纵向滚动 实现横向…...

概念解读|K8s/容器云/裸金属/云原生...这些都有什么区别?

随着容器技术的日渐成熟&#xff0c;不少企业用户都对应用系统开展了容器化改造。而在容器基础架构层面&#xff0c;很多运维人员都更熟悉虚拟化环境&#xff0c;对“容器圈”的各种概念容易混淆&#xff1a;容器就是 Kubernetes 吗&#xff1f;容器云又是什么&#xff1f;容器…...

分层架构 IM 系统之架构演进

在电商业务日活几百万的情况下&#xff0c;IM 系统采用分层架构方式&#xff0c;如下图。 分层架构的 IM 系统&#xff0c;整体上包含了【终端层】、【入口层】、【业务逻辑层】、【路由层】、【数据访问层】和【存储层】&#xff0c;我们在上篇文章&#xff08;分层架构 IM 系…...

公司金融期末考试题目

公司金融期末考试题 选择题 1.现金折扣和信用条件&#xff08;教材P253&#xff09; 题目类似&#xff1a; 下列不属于信用条件的是&#xff08;&#xff09;。 现金折扣 数量折扣信用期限 折扣期限 给定的信用条件为"1/10&#xff0c;n/40"&#xff0c;则其含义…...

Dev C++ 配置C99标准

这里写自定义目录标题 Dev C 配置C99标准 Dev C 配置C99标准 选择工具-编译选项-编译器-编译时加入以下命令-确定即可 -stdc99...

ubuntu安装Eclipse

版本 ubuntu16.04 64bitEclipse 2019-12 &#xff08;太高容易崩溃&#xff09;下载&#xff1a;wget https://archive.eclipse.org/technology/epp/downloads/release/2019-12/R/eclipse-java-2019-12-R-linux-gtk-x86_64.tar.gzjdk安装 将jdk1.8.0_211-linux-x64.tar.gz解压到…...

Android 网络请求(一)初识HTTP网络通信

学习笔记 代码样例 import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;public class HttpURLConnectionExample {public String getDataFromServer() {String result ""; // 存储请求返…...

AIOps案例剖析 | 告警收敛增强:相似告警由千化一

业务规模的指数级增长、稳敏双态共存以及云上云下架构复杂化是近几年企业客户运维部门的最大头疼点&#xff0c;其中告警风暴这一现象在传统AIOps的工作形式下尤难处理。 一、案例背景 某大型企业在过去一年中&#xff0c;业务规模实现了翻倍增长&#xff0c;伴随着业务的迅速…...

压缩感知理论

一、概念理解 压缩感知是什么 压缩感知(Compressed Sensing,CS)是一种基于稀疏表示的采样理论&#xff0c;是一种革命性的信号处理方法&#xff0c;它通过利用信号的稀疏性&#xff0c;在远低于传统采样要求的速率下捕获和重构信号。 信号的稀疏性和压缩感知的关系 信号的稀疏…...

深度学习实验十二 卷积神经网络(3)——基于残差网络实现手写体数字识别实验

目录 一、模型构建 1.1残差单元 1.2 残差网络的整体结构 二、统计模型的参数量和计算量 三、数据预处理 四、没有残差连接的ResNet18 五、带残差连接的ResNet18 附&#xff1a;完整的可运行代码 实验大体步骤&#xff1a; 先前说明&#xff1a; 上次LeNet实验用到的那…...

关于SpringBoot集成Kafka

关于Kafka Apache Kafka 是一个分布式流处理平台&#xff0c;广泛用于构建实时数据管道和流应用。它能够处理大量的数据流&#xff0c;具有高吞吐量、可持久化存储、容错性和扩展性等特性。 Kafka一般用作实时数据流处理、消息队列、事件架构驱动等 Kafka的整体架构 ZooKeeper:…...

windows C#-取消任务列表(上)

如果不想等待异步控制台应用程序完成&#xff0c;可以取消该应用程序。 通过遵循本文的示例&#xff0c;可将取消添加到下载网站内容的应用程序。 可通过将 CancellationTokenSource 实例与每个任务进行关联来取消多个任务。 如果选择 Enter 键&#xff0c;则将取消所有尚未完成…...

RabbitMQ4:work模型

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

《筑牢安全防线:培养 C++安全编程思维习惯之道》

在当今数字化飞速发展的时代&#xff0c;软件安全的重要性已提升到前所未有的高度。C作为一种广泛应用于系统开发、游戏制作、高性能计算等众多领域的编程语言&#xff0c;其程序的安全性更是关乎重大。培养 C安全编程的思维习惯&#xff0c;不仅是开发者个人能力提升的关键&am…...