2022年《微信小程序从基础到uni-app项目实战》

news2025/3/3 4:26:32

教程推荐:黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)_

一、起步

1 uni-app 简介

uni-app 是一个使用 Vue.js 开发所有前端应用的框架。开发者编写一套代码,可发布到 iOS、Android、

H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。

​详细的 uni-app 官方文档,请翻阅 https://uniapp.dcloud.net.cn/

2 、开发工具

uni-app 官方推荐使用 HBuilderX 来开发 uni-app 类型的项目。主要好处: 模板丰富 完善的智能提示 一键运行

当然,你依然可以根据自己的喜好,选择使用 VS Code、Sublime、记事本... 等自己喜欢的编辑 器!

2.1 下载 HBuilderX

1. 访问 HBuilderX 的官网首页 https://www.dcloud.io/hbuilderx.html

2. 点击首页的 DOWNLOAD 按钮

3. 选择下载 正式版 -> App 开发版

2.2 安装 HBuilderX

1. 将下载的 zip包 进行解压缩

2. 将解压之后的文件夹,存放到纯英文的目录中(且不能包含括号等特殊字符)

3. 双击 HBuilderX.exe 即可启动 HBuilderX

2.3 安装 scss/sass 编译

为了方便编写样式(例如: ),建议安装 scss/sass 编译 插 件。插件下载地址:

https://ext.dcloud.net.cn/plugin?name=compile-node-sass

进入插件下载页面之后,点击右上角的 使用 HBuilderX 导入插件 按钮进行自动安装,截图如下:

2.4 快捷键方案切换

操作步骤:工具 -> 预设快捷键方案切换 -> VS Code

 2.5 修改编辑器的基本设置

操作步骤:工具 -> 设置 -> 打开 Settings.json 按需进行配置

源码视图下可用的参考配置:

{ "editor.colorScheme": "Default", "editor.fontSize": 12, "editor.fontFamily": "Consolas", "editor.fontFmyCHS": "微软雅黑 Light", "editor.insertSpaces": true, "editor.lineHeight": "1.5", "editor.minimap.enabled": false,

"editor.mouseWheelZoom": true, "editor.onlyHighlightWord": false, "editor.tabSize": 2, "editor.wordWrap": true, "explorer.iconTheme": "vs-seti", "editor.codeassist.px2rem.enabel": false, "editor.codeassist.px2upx.enabel": false

}

Tips:可以使用 Ctrl + 鼠标滚轮 缩放编辑器

3 新建 uni-app 项目

1. 文件 -> 新建 -> 项目

 2. 填写项目基本信息

 3. 项目创建成功

 4 目录结构

一个 uni-app 项目,默认包含如下目录及文件:

┌─components uni-app组件目录

│ └─comp-a.vue 可复用的a组件

├─pages 业务页面文件存放的目录

│ ├─index

│ │ └─index.vue index页面

│ └─list

│ └─list.vue list页面

├─static 存放应用引用静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此

├─main.js Vue初始化入口文件

├─App.vue 应用配置,用来配置小程序的全局样式、生命周期函数等

├─manifest.json 配置应用名称、appid、logo、版本等打包信息

└─pages.json 配置页面路径、页面窗口样式、tabBar、navigationBar 等页面类信息

5 把项目运行到微信开发者工具

1. 填写自己的微信小程序的 AppID:

​2. 在 HBuilderX 中,配置“微信开发者工具”的安装路径:

 3. 在微信开发者工具中,通过 设置 -> 安全设置 面板,开启“微信开发者工具”的服务端口:

 4. 在 HBuilderX 中,点击菜单栏中的 运行 -> 运行到小程序模拟器 -> 微信开发者工具 ,将当前 uniapp 项目编译之后,自动运行到微信开发者工具中,从而方便查看项目效果与调试:

5. 初次运行成功之后的项目效果:

​6 使用 Git 管理项目

6.1 本地管理

1. 在项目根目录中新建 .gitignore 忽略文件,并配置如下:

注意:由于我们忽略了 unpackage 目录中仅有的 dist 目录,因此默认情况下, unpackage 目录不 会被 Git 追踪 此时,为了让 Git 能够正常追踪 unpackage 目录,按照惯例,我们可以在 unpackage 目录下创建 一个叫做 .gitkeep 的文件进行占位

2. 打开终端,切换到项目根目录中,运行如下的命令,初始化本地 Git 仓库:

# 忽略 node_modules 目录

/node_modules /unpackage/dist

git init

3. 将所有文件都加入到暂存区:

4. 本地提交更新:

6.2 把项目托管到码云

1. 注册并激活码云账号( 注册页面地址:https://gitee.com/signup )

2. 生成并配置 SSH 公钥

3. 创建空白的码云仓库

4. 把本地项目上传到码云对应的空白仓库中

二、. tabBar

2.0 创建 tabBar 分支

运行如下的命令,基于 master 分支在本地创建 tabBar 子分支,用来开发和 tabBar 相关的功能:

2.1 创建 tabBar 页面

在 pages 目录中,创建首页(home)、分类(cate)、购物车(cart)、我的(my) 这 4 个 tabBar 页面。在

HBuilderX 中,可以通过如下的两个步骤,快速新建页面:

1. 在 pages 目录上鼠标右键,选择新建页面

2. 在弹出的窗口中,填写页面的名称、勾选 scss 模板之后,点击创建按钮。截图如下:

 2.2 配置 tabBar 效果

git add .

git commit -m "init project"

git checkout -b tabbar

1. 将 资料 目录下的 static 文件夹 拷贝一份,替换掉项目根目录中的 static 文件夹

2. 修改项目根目录中的 pages.json 配置文件,新增 tabBar 的配置节点如下:

2.3 删除默认的 index 首页

1. 在 HBuilderX 中,把 pages 目录下的 index首页文件夹 删除掉

2. 同时,把 page.json 中记录的 index 首页 路径删除掉

3. 为了防止小程序运行失败,在微信开发者工具中,手动删除 pages 目录下的 index 首页文件 夹

4. 同时,把 components 目录下的 uni-link 组件文件夹 删除掉

2.4 修改导航条的样式效果

1. 打开 pages.json 这个全局的配置文件

2. 修改 globalStyle 节点如下:

{ "tabBar": { "selectedColor": "#C00000", "list": [ { "pagePath": "pages/home/home", "text": "首页", "iconPath": "static/tab_icons/home.png", "selectedIconPath": "static/tab_icons/home-active.png"

}, { "pagePath": "pages/cate/cate", "text": "分类", "iconPath": "static/tab_icons/cate.png", "selectedIconPath": "static/tab_icons/cate-active.png"

}, { "pagePath": "pages/cart/cart", "text": "购物车", "iconPath": "static/tab_icons/cart.png", "selectedIconPath": "static/tab_icons/cart-active.png"

}, { "pagePath": "pages/my/my", "text": "我的", "iconPath": "static/tab_icons/my.png", "selectedIconPath": "static/tab_icons/my-active.png"

} ] } }

2.5 分支的提交与合并

1. 将本地的 tabbar 分支进行本地的 commit 提交:

2. 将本地的 tabbar 分支推送到远程仓库进行保存:

3. 将本地的 tabbar 分支合并到本地的 master 分支:

4. 删除本地的 tabbar 分支:

三. 首页

3.0 创建 home 分支

运行如下的命令,基于 master 分支在本地创建 home 子分支,用来开发和 home 首页相关的功能:

3.1 配置网络请求

由于平台的限制,小程序项目中不支持 axios,而且原生的 wx.request() API 功能较为简单,不支 持拦截器等全局定制的功能。因此,建议在 uni-app 项目中使用 @escook/request-miniprogram 第 三方包发起网络数据请求。

请参考 @escook/request-miniprogram 的官方文档进行安装、配置、使用 官方文档:https://www.npmjs.com/package/@escook/request-miniprogram

最终,在项目的 main.js 入口文件中,通过如下的方式进行配置:

{ "globalStyle": { "navigationBarTextStyle": "white", "navigationBarTitleText": "黑马优购", "navigationBarBackgroundColor": "#C00000", "backgroundColor": "#FFFFFF"

} }

git add .

git commit -m "完成了 tabBar 的开发"

git push -u origin tabbar

git checkout master

git merge tabbar

git branch -d tabbar

git checkout -b home

import { $http } from '@escook/request-miniprogram'

uni.$http = $http

// 配置请求根路径

3.2 轮播图区域

3.2.1 请求轮播图的数据

实现步骤:

1. 在 data 中定义轮播图的数组

2. 在 onLoad 生命周期函数中调用获取轮播图数据的方法

3. 在 methods 中定义获取轮播图数据的方法 示例代码:

3.2.2 渲染轮播图的 UI 结构

$http.baseUrl = 'https://www.uinav.com'

// 请求开始之前做一些事情

$http.beforeRequest = function (options) { uni.showLoading({ title: '数据加载中...', }) }

// 请求完成之后做一些事情

$http.afterRequest = function () { uni.hideLoading() }

export default { data() { return { // 1. 轮播图的数据列表,默认为空数组

swiperList: [], } }, onLoad() { // 2. 在小程序页面刚加载的时候,调用获取轮播图数据的方法

this.getSwiperList() }, methods: { // 3. 获取轮播图数据的方法

async getSwiperList() { // 3.1 发起请求

const { data: res } = await uni.$http.get('/api/public/v1/home/swiperdata') // 3.2 请求失败

if (res.meta.status !== 200) { return uni.showToast({ title: '数据请求失败!', duration: 1500, icon: 'none', }) } // 3.3 请求成功,为 data 中的数据赋值

this.swiperList = res.message

}, }, }

1. 渲染 UI 结构

2. 美化 UI 结构:

3.2.3 配置小程序分包

分包可以减少小程序首次启动时的加载时间

为此,我们在项目中,把 tabBar 相关的 4 个页面放到主包中,其它页面(例如:商品详情页、商品列表 页)放到分包中。在 uni-app 项目中,配置分包的步骤如下:

1. 在项目根目录中,创建分包的根目录,命名为 subpkg

2. 在 pages.json 中,和 pages 节点平级的位置声明 subPackages 节点,用来定义分包相 关的结构:

<style lang="scss">

swiper { height: 330rpx; .swiper-item, image { width: 100%; height: 100%; } } </style> { "pages": [ { "path": "pages/home/home", "style": {} }, { "path": "pages/cate/cate", "style": {} }, { "path": "pages/cart/cart", "style": {} },

3. 在 subpkg 目录上鼠标右键,点击 新建页面 选项,并填写页面的相关信息:

 3.2.4 点击轮播图跳转到商品详情页面

将 -item>-item> 节点内的 view 组件,改造为 navigator 导航组件,并动态 绑定 url 属性 的值。

1. 改造之前的 UI 结构:

2. 改造之后的 UI 结构:

{ "path": "pages/my/my", "style": {} } ], "subPackages": [ { "root": "subpkg", "pages": [] } ] }

v-for="(item, i) in swiperList" :key="i">

class="swiper-item">

:src="item.image_src">

3.2.5 封装 uni.$showMsg() 方法

当数据请求失败之后,经常需要调用 uni.showToast({ /* 配置对象 */ }) 方法来提示用户。此 时,可以在全局封装一个 uni.$showMsg() 方法,来简化 uni.showToast() 方法的调用。具体的 改造步骤如下:

1. 在 main.js 中,为 uni 对象挂载自定义的 $showMsg() 方法:

2. 今后,在需要提示消息的时候,直接调用 uni.$showMsg() 方法即可:

3.3 分类导航区域

3.3.1 获取分类导航的数据

实现思路:

1. 定义 data 数据

2. 在 onLoad 中调用获取数据的方法

3. 在 methods 中定义获取数据的方法 示例代码如下:

v-for="(item, i) in swiperList" :key="i">

class="swiper-item" :url="'/subpkg/goods_detail/goods_detail? goods_id=' + item.goods_id">

:src="item.image_src">

// 封装的展示消息提示的方法

uni.$showMsg = function (title = '数据加载失败!', duration = 1500) { uni.showToast({ title, duration, icon: 'none', }) }

async getSwiperList() { const { data: res } = await uni.$http.get('/api/public/v1/home/swiperdata') if (res.meta.status !== 200) return uni.$showMsg() this.swiperList = res.message

}

export default { data() { return { // 1. 分类导航的数据列表

navList: [], } }, onLoad() { // 2. 在 onLoad 中调用获取数据的方法

this.getNavList() }, methods: { // 3. 在 methods 中定义获取数据的方法

3.3.2 渲染分类导航的 UI 结构

1. 定义如下的 UI 结构:

2. 通过如下的样式美化页面结构:

3.3.2 点击第一项,切换到分类页面

1. 为 nav-item 绑定点击事件处理函数:

2. 定义 navClickHandler 事件处理函数:

3.4 楼层区域

async getNavList() { const { data: res } = await uni.$http.get('/api/public/v1/home/catitems') if (res.meta.status !== 200) return uni.$showMsg() this.navList = res.message

}, }, }

class="nav-list">

class="nav-item" v-for="(item, i) in navList" :key="i">

:src="item.image_src" class="nav-img">

.nav-list { display: flex; justify-content: space-around; margin: 15px 0; .nav-img { width: 128rpx; height: 140rpx; } }

<view class="nav-list">

<view class="nav-item" v-for="(item, i) in navList" :key="i"

@click="navClickHandler(item)">

<image :src="item.image_src" class="nav-img"></image>

</view>

</view>

// nav-item 项被点击时候的事件处理函数

navClickHandler(item) { // 判断点击的是哪个 nav

if (item.name === '分类') { uni.switchTab({ url: '/pages/cate/cate'

}) } }

4.1 获取楼层数据

实现思路:

1. 定义 data 数据

2. 在 onLoad 中调用获取数据的方法

3. 在 methods 中定义获取数据的方法 示例代码如下:

3.4.2 渲染楼层的标题

1. 定义如下的 UI 结构:

2. 美化楼层标题的样式:

3.4.3 渲染楼层里的图片

1. 定义楼层图片区域的 UI 结构:

export default { data() { return { // 1. 楼层的数据列表

floorList: [], } }, onLoad() { // 2. 在 onLoad 中调用获取楼层数据的方法

this.getFloorList() }, methods: { // 3. 定义获取楼层列表数据的方法

async getFloorList() { const { data: res } = await uni.$http.get('/api/public/v1/home/floordata') if (res.meta.status !== 200) return uni.$showMsg() this.floorList = res.message

}, }, }

class="floor-list">

class="floor-item" v-for="(item, i) in floorList" :key="i">

:src="item.floor_title.image_src" class="floor-title">

.floor-title { height: 60rpx; width: 100%; display: flex; }

2. 美化楼层图片区域的样式:

3.4.4 点击楼层图片跳转到商品列表页

1. 在 subpkg 分包中,新建 goods_list 页面

2. 楼层数据请求成功之后,通过双层 forEach 循环,处理 URL 地址:

class="floor-img-box">

class="left-img-box">

:src="item.product_list[0].image_src" :style="{width: item.product_list[0].image_width + 'rpx'}" mode="widthFix">

class="right-img-box">

class="right-img-item" v-for="(item2, i2) in item.product_list"

:key="i2" v-if="i2 !== 0">

:src="item2.image_src" mode="widthFix" :style="{width: item2.image_width + 'rpx'}">

.right-img-box { display: flex; flex-wrap: wrap; justify-content: space-around; }

.floor-img-box { display: flex; padding-left: 10rpx; }

3. 把图片外层的 view 组件,改造为 navigator 组件,并动态绑定 url 属性 的值:

3.5 分支的合并与提交

1. 将本地的 home 分支进行本地的 commit 提交:

2. 将本地的 home 分支推送到远程仓库进行保存:

3. 将本地的 home 分支合并到本地的 master 分支:

4. 删除本地的 home 分支:

// 获取楼层列表数据

async getFloorList() { const { data: res } = await uni.$http.get('/api/public/v1/home/floordata') if (res.meta.status !== 200) return uni.$showMsg() // 通过双层 forEach 循环,处理 URL 地址

res.message.forEach(floor => { floor.product_list.forEach(prod => { prod.url = '/subpkg/goods_list/goods_list?' +

prod.navigator_url.split('?')[1] }) }) this.floorList = res.message

}

class="floor-img-box">

class="left-img-box" :url="item.product_list[0].url">

:src="item.product_list[0].image_src" :style="{width: item.product_list[0].image_width + 'rpx'}" mode="widthFix">

class="right-img-box">

class="right-img-item" v-for="(item2, i2) in item.product_list"

:key="i2" v-if="i2 !== 0" :url="item2.url">

:src="item2.image_src" mode="widthFix" :style="{width: item2.image_width + 'rpx'}">

git add .

git commit -m "完成了 home 首页的开发"

git push -u origin home

git checkout master

git merge home

git branch -d home

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

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

相关文章

Word不计算封面、目录页数将正文页码修改为第几页共几页的格式

本文介绍在Word文档中&#xff0c;不考虑封面、目录、前言等的页数&#xff0c;为正文添加“第X页&#xff0c;共X页”样式页码的方法。 在Word中&#xff0c;我们可以双击页眉或页脚部分&#xff0c;选择“页码”选项并添加页码。 其中&#xff0c;可以添加如下图所示形式的页…

Nginx配置虚拟主机

虚拟主机指的是,在一台服务器中,我们使用Nginx,来配置多个网站。 如何区分不同的网站: 端口不同域名不同 1、通过端口区分不同的虚拟主机 1.1、Nginx配置文件 &#xff08;1&#xff09;Nginx配置文件的位置 cd /usr/local/nginx/conf nginx.conf 就是Nginx的配置文件 &a…

Docker学习

Docker学习 Docker概述 Docker安装 Docker命令 Docker镜像 Docker的数据卷 DockerFile Docker网络原理 IDEA整合Docker 集群-Docker Compose Docker Swarm CI\CD jenkins Docker概述 安装教程&#xff1a;(https://docs.docker.com/engine/install/centos/) 文档…

CSS初阶语法

CSS初阶语法 文章目录CSS初阶语法1.CSS介绍2.CSS引入方式3.CSS基础选择器3.1 标签选择器(标签名字)3.2 类选择器(class)3.3 id选择器(id)3.4 通配符选择器(*)4.文字基本样式4.1 字体样式(font-size、font-weight、font-style、font-family、font)4.2 文本样式(text-indent、tex…

SpringBoot SpringBoot 开发实用篇 2 配置高级 2.1 第三方bean 属性绑定

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇2 配置高级2.1 第三方bean 属性绑定2.1.1 ConfigurationProperties2.…

ERP系统有哪些品牌?

企业资源规划 (ERP) 系统可以帮助企业在一个系统中管理其整个运营。凭借 CRM、人力资源、会计、供应链管理等功能&#xff0c;优秀的 ERP 系统可以集中并简化每位员工的日常工作。 那么&#xff0c;ERP系统有哪些品牌&#xff1f;哪个好用&#xff1f;下面就来简单介绍几个主流…

Android Studio App开发之网络通信中移动数据格式JSON的讲解以及实战(附源码 超详细必看)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、移动数据格式JSON 网络通信的交互数据格式有两大类&#xff0c;分别是JSON和XML&#xff0c;前者短小精悍&#xff0c;后者表现力丰富&#xff0c;对于App来说&#xff0c;基本采用JSON格式与服务器通信。一是手机流量…

计算机网络的常见面试题

GET 和 POST 的区别 作用 GET用来获取资源&#xff0c;POST用于传输实体主体 参数位置 GET的参数放在URL中&#xff0c;POST的参数存储在实体主体中&#xff0c;并且GET方法提交的请求的URL中的数据多是2048字节&#xff0c;POST请求没有大小限制 安全性 GET方法因为参数放在…

二极管:Irush与我相干!

故事还没结束,我们必须继续讲,继续挖,边说边究。 即使时间us级不会让FUSE同学Open,FUSE后面的兄弟姐妹呢,可以扛住事吗?那可有3.4A的能量冲击啊! 不确定,就有可能。墨菲老人家曾说过:会出错的事总会出错。也就是会发生的事总会发生,只要不给时间加上一个期限,非要给…

外卖项目03---分类管理业务开发

目录 一、公共字段自动填充 41 1.1问题分析 41 ​编辑1.2公共字段自动填充---代码实现并测试 42 1.3公共字段自动填充---功能完善 43 二、新增分类 44 2.1需求分析 44 三、分类信息查询 45 3.1需求分析 45 3.2代码开发 流程分析 四、删除分类 46 4.1需求分析 46 4.2…

教你打造高性能的 Go 缓存库

我在看一些优秀的开源库的时候看到一个有意思的缓存库 fastcache&#xff0c;在它的介绍主要有以下几点特点&#xff1a; 读写数据要快&#xff0c;即使在并发下&#xff1b;即使在数 GB 的缓存中&#xff0c;也要保持很好的性能&#xff0c;以及尽可能减少 GC 次数&#xff1…

基于Fluent求解器进行二次开发到底怎么做?

作者 | 小田老师 Ansys Fluent软件作为通用的流体仿真软件&#xff0c;功能模型虽然多而全&#xff0c;但是缺乏相应的行业专业性。同时仿真分析具有一定的技术门槛&#xff0c;既需要技术人员具备行业基础&#xff0c;也需要积累相关仿真经验&#xff0c;对软件操作要有较高的…

Docker安装Redis

文章目录1.Docker搜索Redis镜像2.Docker拉取镜像3.Docker挂载配置文件4.启动Redis 容器5.测试Redis6.Docker删除Redis1.Docker搜索Redis镜像 命令&#xff1a;docker search <镜像名称> docker search redis可以看到有很多redis的镜像&#xff0c;此处因没有指定版本&…

干货|数据安全治理白皮书4.0(文末附下载链接)

数据安全治理白皮书是国内最早的数据安全治理白皮书系列&#xff0c;围绕数据安全治理&#xff0c;“新理论、新技术、新实践”&#xff0c;一次系统汇总、梳理分析与集中呈现&#xff0c;2018年-2021年&#xff0c;已发布1.0/2.0/3.0三个版本&#xff0c;2022年&#xff0c;已…

线性二分类的实现

神经网络结构 从视觉上判断是线性可分的&#xff0c;使用单层神经网络&#xff1b; 输入层设置两个输入单元&#xff0c;表示经纬度&#xff1a;&#x1d44b;&#x1d465;1,&#x1d465;2 输出层设置一个单元&#xff0c;表示地盘所属阵营&#xff1a; &#x1d467;&…

STC15W单片机防丢语音报警GPS北斗定位测距双机LORA无线手持可充电

实践制作DIY- GC0091-防丢语音报警 一、功能说明&#xff1a; 基于STC15W单片机设计-防丢语音报警 功能介绍&#xff1a; 主机硬件&#xff1a; STC15W4K48S4&#xff08;或者STM32F103CxT6&#xff09;系列最小系统板OLED显示器LORA无线通讯模块GPS北斗双模定位模块蜂鸣器…

RGD环肽:环六肽c(GRGDSP),CAS号: 135432-37-0

c(GRGDSP)是一个环RGD肽。刺激大鼠传入小动脉的收缩。已用于顺铂的靶向给药。结果表明&#xff0c;c(RGDSP)可抑制小鼠B16黑色素瘤细胞在纤连蛋白包被孔上的粘附。 编号: 194990中文名称: RGD环肽&#xff1a;环六肽c(GRGDSP)英文名: cyclo(GRGDSP)CAS号: 135432-37-0单字母: c…

电子统计台账:中文标记月度流水账格式数据的转换,以及过滤模板的普遍适配性

上一个例子展示的台账格式中&#xff0c;月份是阿拉伯数字。本文试着转换中文月份格式的台账数据。 1 新建项目 新建一个项目“测试06_工业生产_中文月度流水账_202101”。 切换到2021年1月。 2 打开数据源文件 打开2个企业数据源文件&#xff1a; 6流水账式中文月份M_1-…

go pprof 实战

为什么要进行性能优化 哪些情况需要进行性能优化 其实关于性能优化的主题&#xff0c;网上已经讨论很多次&#xff0c;这里谈一下我的理解&#xff0c;那么其实核心就是 2 个点&#xff1a; 服务一直高负载&#xff0c;业务增长需要经常扩容架构不能满足业务发展&#xff0c…

[附源码]java毕业设计基于的考研408课程学习平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…