第十五届蓝桥杯(Web 应用开发)模拟赛 3 期-大学组(被题目描述坑惨了)

目录

1.创意广告牌

2.原子化css

3.神秘咒语

4.朋友圈

5.美食蛋白揭秘

6.营业状态变更

7.小说阅读器

8.冰岛人

9.这是一个”浏览器“

10.趣味加密解密

总结


1.创意广告牌

这个题目不多说了,只要知道这些css应该都能写出来,不会的平时多查查文档就记住了。

代码:

.billboard {position: relative;background-color: #8e6534;color: #fff;padding: 20px;box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.3);background-size: cover;/* TODO:待补充代码  设置圆角 10px,背景图片为woodiness.jpg  */border-radius: 10px;background: url('../images/woodiness.jpg');
}.top-sign {position: relative;width: 200px;height: 100px;background-color: #a87f4a;display: flex;justify-content: center;align-items: center;font-size: 1rem;/* TODO:待补充代码   上面两个角是圆角 15px,下面两个角是直角  元素 x 轴倾斜 20度*/border-top-left-radius: 15px;border-top-right-radius: 15px;transform: skewX(-20deg);
}

2.原子化css

这个题目主要需要知道的是css的属性选择器,可以查文档看看就知道了,不会的话其实看看其他的css应该也能联想到哈。

代码:

/* TODO: 实现原子化 flex */
div[flex="~ col"] {display: flex;flex-direction: column;
}

3.神秘咒语

这个考的也就是请求头携带参数,还不会的得抓紧学一下XML,fetch,axios了,这个从蓝桥杯模拟题的趋势来看,考的很频繁,甚至后面的题目发个请求就有3,5分。

代码:

const key1Button = document.getElementById('key1') // 钥匙 1
const key2Button = document.getElementById('key2') // 钥匙 2
const spell1 = document.getElementById('spell1') // 咒语 1
const spell2 = document.getElementById('spell2') //咒语 2// TODO:新增或者修改以下代码key1Button.addEventListener('click', async () => {// 从后台请求钥匙1的咒语部分key1Button.disabled = truetry {let { data } = await axios.get('/spellone', {headers: {Authorization: 'Bearer 2b58f9a8-7d73-4a9c-b8a2-9f05d6e8e3c7' // 添加 Authorization 字段携带 token}})console.log(data)spell1.innerHTML = datatryOpenTreasureBox()} catch (error) {console.error('请求钥匙1咒语失败:', error)}
})key2Button.addEventListener('click', async () => {// 从后台请求钥匙2的咒语部分key2Button.disabled = truetry {let { data } = await axios.get('/spelltwo', {headers: {Authorization: 'Bearer 2b58f9a8-7d73-4a9c-b8a2-9f05d6e8e3c7' // 添加 Authorization 字段携带 token}})spell2.innerHTML = datatryOpenTreasureBox()} catch (error) {console.error('请求钥匙2咒语失败:', error)}
})function tryOpenTreasureBox() {if (spell1.innerHTML == '星辰闪耀' && spell2.innerHTML == '众星归位') {const box = document.getElementById('treasureBox')const suceessmessage = document.getElementById('suceess-message')box.classList.add('opened')suceessmessage.style.display = 'block'}
}

4.朋友圈

1.防抖函数的实现

其实这个还算挺简单的,就是一个非常常规的防抖,会的自然肯定是会的,不会的可以花几分钟时间看看视频学一下,很快的。

代码:

function debounce(fn, delay) {let timer = nullreturn function () {const context = thisconst args = argumentsclearTimeout(timer)timer = setTimeout(function () {fn.apply(context, args)}, delay)}
}

2.将内容存储到localStorage中

这个按照要求做就好了,需要做哪些提示,加哪些属性都有说明。

document.getElementById('text').addEventListener('input',debounce(function () {// 提示正在保存中document.getElementById('prompt').textContent = '正在保存中...'// 设置缓存const text = document.getElementById('text').valueif (text.length <= 0) {document.getElementById('post').setAttribute('disabled', 'disabled')} else {document.getElementById('post').removeAttribute('disabled')}localStorage.setItem('savedText', text)// 过一段时间后提示保存完成setTimeout(function () {document.getElementById('prompt').textContent = '内容已保存'}, 750)}, 200)
)

3.这个就是对页面的一些动态展示了,需要理清页面渲染的流程是怎么样的,什么时候显示什么,什么情况下该显示什么,经过一些判断后添加必要的属性,类名等就行。

document.getElementById('post').addEventListener('click', function () {const content = document.getElementById('text').valueconst element = createContent(content)document.querySelector('.contents').appendChild(element)document.getElementById('prompt').textContent = ''// TODO: 请在此补充用户点击“发表”按钮时清空文本框和缓存的代码document.getElementById('text').value = ''localStorage.removeItem('savedText')// 同时需要将按钮的 disabled 属性设置回来document.getElementById('post').setAttribute('disabled', 'disabled')
})

页面初次加载的缓存

document.addEventListener('DOMContentLoaded', function () {// 页面加载时检查 localStorage 中是否有缓存文本数据const savedText = localStorage.getItem('savedText')if (savedText) {document.getElementById('text').value = savedText// 页面加载时检查输入框内容,设置按钮状态if (savedText.length > 0) {document.getElementById('post').removeAttribute('disabled')} else {document.getElementById('post').setAttribute('disabled', 'disabled')}} else {// 如果没有缓存文本数据,则将按钮设置为禁用状态document.getElementById('post').setAttribute('disabled', 'disabled')}
})

5.美食蛋白揭秘

1.发请求拿到需要的数据

这里的小坑就是拿到的数据渲染出来是不对的,要去除掉多余的数据

 async function fetchData() {// TODO:待补充代码 let data = await fetch(MockURL).then(res => res.json())data.unshift({name: '表头',icon: 'none'})echartsInit(data)//去除第一个元素dataList.value = data.slice(1)}onMounted(() => {fetchData();
});
return {echartsInit,fetchData,dataList
};

2.渲染页面

<!-- TODO:待补充代码,渲染获取的数据 -->
<div class="protein-item" v-for="data in dataList" :key="data.name">{{data.name}}{{data.value}}
</div>

6.营业状态变更

这个题目要实现切换状态,通过观察题目可以看到,需要返回的是一个Boolean值,这个是来确定页面该如何渲染的,第二个需要返回的是一个函数,用来切换状态的。

首先我们要想要的是,返回的值肯定需要是一个ref(),响应式的值,因为我们知道啊,在页面不刷新的情况下,ref(),响应式数据发生变化,页面也会发生变化的,那么想到这个就好办了。

function useToggle(state) {// TODO:待补充代码const toggledState = ref(state)function toggle() {toggledState.value = !toggledState.value}return [toggledState, toggle]}

7.小说阅读器

这个题目真的是把我坑惨了,坑的我想哭。

 但是我的解法可能有点粗糙哈,大佬看到了见谅。

刚开始看到这个题目的数据,在解析数据过程中还好,我用的比较笨拙的办法一步步的解析出来了,提交后也能运行,json文件中的数据也有了,可是正当我提交的时候却出错了。

这是题目描述的格式:

这是我第一次运行出来的格式:

感觉没有一点问题了,不过还是不行,就在我绞尽脑汁没想到办法,重新读了一遍题目,看到了这句话:

我就修改代码将写入格式改成这种了: 空格都已经去掉了,就在我满心欢喜的提交代码时,还是出错不给过,我真的想不通到底哪里出了问题。

最后在我看了一遍txt文件后,我再想是不是标题的问题,

但是看题目描述的结果又是这样的,我抱着试试的感觉修改提交后,终于通过了🎉🎉🎉

真的我要(;´༎ຶД༎ຶ`) ,太坑我了

代码:

const fs = require('fs')let readFilePath = './run/book.txt'
let writeFilePath = './run/book.json'
let options = 'UTF-8'//读取txt小说文件,并按对应数据格式返回。
const readFile = (file) => {try {let result = nulllet arr = {name: '',data: []}let res = fs.readFileSync(file, { encoding: options })res = res.split('------------\n\n')for (let i = 0; i < res.length; i++) {const lines = res[i].trim().split('\r\n').filter((item) => {return item !== '' && item !== '------------' && item !== '    '})arr.name = lines[0].slice(0, 8)lines.splice(0, 1)let temp1 = []let temp2 = []for (let i = 0; i < lines.length; i++) {if (lines[i].slice(0, 3) === '---') {if (temp2.length > 0) {temp2.forEach((item) => {arr.data.push(item)})}temp1.push({isRoll: true,title: lines[i].split('---'[1]).filter((item) => item !== '').join('')})arr.data.push(temp1[0])temp1 = []temp2 = []} else if (lines[i].slice(0, 1) === '第') {temp2.push({ title: lines[i], content: [] })} else {temp2[temp2.length - 1].content.push(lines[i].trim())}}if (temp2.length > 0) {temp2.forEach((item) => {arr.data.push(item)})}}result = arrreturn JSON.stringify(result)} catch (err) {return null}
}//写入json文件中
const writeFile = (file, data) => {try {fs.writeFileSync(file, data, { encoding: options })} catch (err) {console.log(err)}
}// 执行读取文件
let data = readFile(readFilePath)
// console.log(data)
if (data != null) writeFile(writeFilePath, data)
module.exports = {writeFile,readFile
}

component组件

next(value) {// TODO:待补充代码this.activeChapter += valueif (this.activeChapter <= 0) {this.activeChapter = 1return}if (this.activeChapter >= this.chapters.length - 1) {this.activeChapter = this.chapters.length - 1return}//跳过卷if (this.activeChapter % 11 === 0 && value == 1) {this.activeChapter += 1}if (this.activeChapter % 11 === 0 && value == -1) {this.activeChapter -= 1}},},//通过axios发起请求json数据,并渲染界面。created() {// TODO:待补充代码axios.get('../run/book.json').then((res) => {this.bookName = res.data.namethis.chapters = res.data.data})},

8.冰岛人

1.首先的话,我是打算先进行基本的判断,是否是不存在的人,是否是同性,然后直接输出结果

2.找出每个人的祖先数组,然后再进行判断,查看是否满足题目要求,然后返回对应的结果。

代码:

/*** @description 通过输入的两个人的姓名返回相应的字符串* @param {array} data 当地的人口信息* @param {string} name1 要查询的两人名字之一* @param {string} name2 要查询的两人名字之一* @return {string} 根据被查询两人的名字返回对应的字符串* */function marry(data, name1, name2) {function getAncestors(person, data) {let ancestors = []//找出person的父亲或者母亲while (1) {data.forEach((item) => {if (item.givenName === /(\w+)(sson|sdottir)$/gi.exec(person.familyName)[1]) {ancestors.push(item)}})//判断是不是最后一个人了,查询ancestors的最后一个元素的familyName的后缀既不是sson也不是sdottirif (!ancestors[ancestors.length - 1].familyName.endsWith('sson') && !ancestors[ancestors.length - 1].familyName.endsWith('sdottir')) {break}//将personIndex的数据改成最新的数据person = ancestors[ancestors.length - 1]}if (ancestors.length >= 4) {ancestors.pop()}return ancestors}// 获取个人信息let person1 = data.find((person) => person.givenName === name1.split(' ')[0])let person2 = data.find((person) => person.givenName === name2.split(' ')[0])// 如果其中一个人不在名单内,则返回 NAif (!person1 || !person2) {return 'NA'}let sex1 = ''let sex2 = ''// 获取性别if (person1.familyName.endsWith('sson')) {sex1 = 'male'} else if (person1.familyName.endsWith('sdottir')) {sex1 = 'female'}if (person2.familyName.endsWith('sson')) {sex2 = 'male'} else if (person2.familyName.endsWith('sdottir')) {sex2 = 'female'}// 如果两个人为同性,则返回 Whateverif (sex1 === sex2) {return 'Whatever'}// 获取两个人的祖先数组(循环)let ancestors1 = getAncestors(person1, data)let ancestors2 = getAncestors(person2, data)console.log(ancestors1, ancestors2)// 判断是否有公共祖先let hasCommonAncestor = falsefor (let ancestor1 of ancestors1) {for (let ancestor2 of ancestors2) {if (ancestor1 === ancestor2) {hasCommonAncestor = truebreak}}}// 如果有公共祖先,则返回 No;否则返回 Yesif (hasCommonAncestor) {return 'No'} else {return 'Yes'}
}module.exports = marry

9.这是一个”浏览器“

这个题目,第四问暂时我真没想通哪里出问题了,等解决了再更新。

代码:

'use strict'
class Tab {// 构造方法constructor(id) {// 获取元素this.main = document.querySelector(id)this.add = this.main.querySelector('.tabadd')this.ul = this.main.querySelector('.fisrstnav ul')this.fsection = this.main.querySelector('.tabscon')this.init()}// 初始化init() {this.updateNode()// init初始化操作让相关元素绑定事件this.add.onclick = this.addTab.bind(this)for (var i = 0; i < this.lis.length; i++) {this.lis[i].index = ithis.lis[i].onclick = this.toggleTab.bind(this.lis[i], this)this.remove[i].onclick = this.removeTab.bind(this.remove[i], this)this.spans[i].ondblclick = this.editTabthis.sections[i].ondblclick = this.editTab}}// 更新所有的li和sectionupdateNode() {this.lis = this.main.querySelectorAll('li')this.remove = this.main.querySelectorAll('.icon-guanbi')this.sections = this.main.querySelectorAll('section')this.spans = this.main.querySelectorAll('.content')}// 1.切换功能toggleTab(tab) {// 调用 Tab 类的 clearClass 方法,清空所有标签页及其内容页的类名tab.clearClass()// 给点击的标签页和对应的内容页添加选中状态的类名this.classList.add('liactive')// 获取点击标签页的索引const activeIndex = Array.from(tab.lis).indexOf(this)// 切换内容页的选中状态类名for (let i = 0; i < tab.sections.length; i++) {if (i === activeIndex) {tab.sections[i].classList.add('conactive')} else {tab.sections[i].classList.remove('conactive')}}}// 2.清空所有标签页及其内容页类名clearClass() {for (var i = 0; i < this.lis.length; i++) {this.lis[i].className = ''this.sections[i].className = ''}}// 3.添加标签页addTab() {this.clearClass() // 清空所有标签页及其内容页的类名// 创建新的标签页和内容页const newTabIndex = this.lis.lengthconst newTabContent = `标签页${newTabIndex + 1}`const newSectionContent = `标签页${newTabIndex + 1}的内容`// 创建新的标签页const newLi = document.createElement('li')newLi.innerHTML = `<span class="content">${newTabContent}</span><span class="iconfont icon-guanbi"><span class="glyphicon glyphicon-remove"></span></span>`this.ul.appendChild(newLi)// 创建新的内容页const newSection = document.createElement('section')newSection.innerText = newSectionContentthis.fsection.appendChild(newSection)// 更新节点this.updateNode()// 给新标签页和内容页添加选中状态的类名this.lis[newTabIndex].classList.add('liactive')this.sections[newTabIndex].classList.add('conactive')// 重新绑定事件处理程序this.lis[newTabIndex].onclick = this.toggleTab.bind(this.lis[newTabIndex], this)this.remove[newTabIndex].onclick = this.removeTab.bind(this.remove[newTabIndex], this)}//删除节点removeTab(tab) {// 找到点击删除按钮对应的标签页及其内容页的索引const currentIndex = Array.from(tab.remove).indexOf(this)const isActive = tab.lis[currentIndex].classList.contains('liactive')// 删除标签页和内容页tab.ul.removeChild(tab.lis[currentIndex])tab.fsection.removeChild(tab.sections[currentIndex])// 更新节点tab.updateNode()// 若删除的标签页是当前选中的标签页if (isActive) {// 若删除的是最后一个标签页if (currentIndex === tab.lis.length) {// 则选中上一个标签页tab.toggleTab.call(tab.lis[currentIndex - 1], tab)} else {// 否则选中下一个标签页tab.toggleTab.call(tab.lis[currentIndex], tab)}}}// 5.修改功能editTab() {var str = this.innerHTMLwindow.getSelection ? window.getSelection().removeAllRanges() : document.Selection.empty()this.innerHTML = '<input type="text" />'var input = this.children[0]input.value = strinput.select() //让文本框里的文字处于选定状态// 输入框失焦事件input.onblur = function () {this.parentNode.innerHTML = this.value}}
}
var tab = new Tab('#tab')

10.趣味加密解密

能力有限,真写不出来了 😭😭😭😭😭😭😭😭😭😭

总结

这次的模拟题是真的狠,后面的四道题难度简直是咔咔涨 不过真到比赛了,估计也没时间写后面的题目。😢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++第三弹---C++入门(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 C入门 1、内联函数 1.1、概念 1.2、特性 2、auto关键字(C11) 2.1、类型别名思考 2.2、auto简介 2.3、auto的使用细则 2.3、auto不能推导的场景 …

探索Linux世界:基本指令(文件查看、时间相关、grep、打包压缩及相关知识)

今天继续介绍一些指令 文章目录 1.cat - 查看文件1.1输出重定向和追加重定向1.2指令echo 2.more 指令3.less - 逐页查看文本文件内容4.head- 显示文件开头部分内容5.tail - 显示文件末尾部分内容5.1输入重定向&#xff08;<&#xff09;5.2管道&#xff08;|&#xff09; 6.…

镭速教你如何解决大数据量串行处理的问题

大数据的高效处理成为企业发展的关键。然而&#xff0c;大数据量串行处理的问题常常困扰着许多企业&#xff0c;尤其是在数据传输方面。本文将探讨大数据量串行处理的常见问题&#xff0c;并介绍企业常用的处理方式&#xff0c;最后重点阐述镭速如何提供创新解决方案&#xff0…

吴恩达机器学习-未分级实验:过拟合(Overfitting)

解决过拟合 选择更多的数据选择特征&#xff08;特征选择&#xff09;减小参数大小&#xff08;归一化&#xff09; 目标 在本实验中&#xff0c;您将探索: 可能发生过拟合的情况一些解决方案 %matplotlib widget import matplotlib.pyplot as plt from ipywidgets import …

無塵棉花棒:光電設備與光纖清潔的理想之選

在光電設備和光纖清潔用品的领域中&#xff0c;無塵棉花棒以其卓越的性能和特性&#xff0c;已然成為清潔設備端光纖插座的最佳選擇。它不仅具有出色的清潔效果&#xff0c;而且在使用過程中無棉絮、無矽&#xff0c;確保了清潔過程的高效和安全。 首先&#xff0c;無塵棉花棒…

百度AI智能审核

一、介绍 百度内容审核平台&#xff08;Baidu Content Audit Platform&#xff09;是百度推出的一款用于进行内容审核的平台。该平台利用人工智能技术&#xff0c;对用户上传的各类内容进行审核和过滤&#xff0c;以实现内容的合规和安全&#xff0c;可以识别和过滤涉黄、涉政…

微信小程序云开发教程——墨刀原型工具入门(常用组件)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

三款内衣洗衣机的性能较量:希亦、觉飞、鲸立谁的性能更胜一筹?

现在大多数的上班族&#xff0c;面临的都是早九晚六的工作&#xff0c;而且工作完下班回家还是面对各种各样的家务&#xff0c;特别是清洗需要换洗的洗衣&#xff0c;属实是有点辛苦了。可能很多人为了方便&#xff0c;每次洗衣服的都是把一堆衣服直接丢进洗衣机&#xff0c;直…

新手必看,不容错过的厨房装修设计趋势。福州中宅装饰,福州装修

厨房&#xff0c;这个家中最具烟火气息的地方&#xff0c;装修设计的重要性不言而喻。今天我们就来聊聊厨房装修设计的那些事儿&#xff0c;从传统到新趋势&#xff0c;让我们一起看看有哪些值得注意的地方。 传统篇 1. 地轨推拉门 在传统厨房装修中&#xff0c;地轨推拉门是…

【四】将vue部署到k8s中

准备dockerfile和jenkinsfile还有yml文件 因为我前三步将其他的都弄好了&#xff0c;我现在的目的只是为了简单部署上去&#xff0c;所以没做其他深入研究配置&#xff0c;我的简单代码&#xff1a;https://gitee.com/feiminjie/helloworldfront我准备的dockerfile # 使用官方…

Yakit爆破模块应用

yakit介绍 一款集成了各种渗透测试功能的集成软件。&#xff08;类似于burp&#xff0c;但我感觉他功能挺强大&#xff09; 爆破模块位置 按照下面图标点击 界面就是如下。 左侧可以选择爆破的类型&#xff0c;各种数据库http&#xff0c;ssh等都支持。 爆破参数 可以选择…

贪心算法(算法竞赛、蓝桥杯)--奶牛晒衣服

1、B站视频链接&#xff1a;A28 贪心算法 P1843 奶牛晒衣服_哔哩哔哩_bilibili 题目链接&#xff1a;奶牛晒衣服 - 洛谷 #include <bits/stdc.h> using namespace std; priority_queue<int> q;//用大根堆维护湿度的最大值 int n,a,b; int tim,maxn;int main(){s…

第2篇【Docker项目实战】使用Docker部署Raneto知识库平台(转载)

【Docker项目实战】使用Docker部署Raneto知识库平台 一、Raneto介绍 1.1 Raneto简介 Raneto是一个免费、开放、简单的 Markdown 支持的 Node.js 知识库。 1.2 知识库介绍 知识库 知识库是指存储和组织知识的系统或库&#xff0c;它包括了各种类型的信息和知识&#xff0c;如…

数据分析实战-Python实现博客评论数据的情感分析

数据分析实战-Python实现博客评论数据的情感分析 学习建议SnowNLP基础什么是SnowNLP&#xff1f;SnowNLP情感分析 SnowNLP使用SnowNLP安装情感分析中文分词关键词提取拼音、词性标准 SnowNLP实战-博客评论数据的情感分析数据准备数据获取数据分析 总结 学习建议 现在很多网站、…

技术面试最重要的是什么?

技术面试最重要的是什么&#xff1f; 最重要的当然是实力&#xff0c;然而实力之外&#xff0c;也有一些基本原则。 1 让面试官听懂你在做什么 牛逼的人都是能把最复杂的事情讲简单的。 如果面试官听不懂你讲的东西&#xff0c;他就无法判断你的水平。如果这个面试官不是你…

面向IoT物联网的时间序列引擎

1、背景 随着近年来业务的发展&#xff0c;尤其是机器产生的数据占比越来越高的趋势下&#xff0c;时序数据因为其业务价值越来越被更多地关注&#xff0c;也因而催生了专用的时间序列数据库&#xff0c;简称时序数据库&#xff08;TimeSeries Database&#xff0c;TSDB&#x…

flutter选择国家或地区的电话号码区号

1.国家区号列表&#xff08;带字母索引侧边栏&#xff09; import package:generated/l10n.dart; import package:widget/login/area_index_bar_widget.dart; import package:flutter/material.dart; import package:flutter_screenutil/flutter_screenutil.dart;class LoginA…

实现更高能效的汽车级低边驱动器NRVB140ESFT1G 带温度和电流限制 自保护低压侧驱动器

一起去了解关于汽车电子AEC Q101车规认证&#xff01;&#xff01;! 是一种针对分立半导体的可靠性测试认证程序&#xff0c;由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性…

(2022级)成都工业学院Java程序设计(JAVA)实验一:编写一个简单的Java程序

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 IntelliJ IDEA 2023.2.2 jdk17.0.6 实验要求 1、 控制台菜单。要求如下&#xff1a; 1&#xff09;…

Docker容器化技术(互联机制实现便捷互访)

容器的互联是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系&#xff0c;接收容器可以通过容器名快速访问到源容器&#xff0c;而不用指定具体的IP地址。 1.自定义容器命名 连接系统依据容器的名称来执行。因此&#xff0c;首先需要自定义一…