基于Spring boot+Vue的在线考试系统

文章目录

    • spring boot 分层图解
    • 安装idea
    • 配置阿里云镜像
    • 项目启动
    • 前端项目结构
      • 项目前端中index.html
      • App.vue
      • main.js
      • router
    • 整个页面渲染过程
    • 关于矢量图图标的使用
    • 引入JQuery依赖
    • github-markdown-css样式文件-一般用作文章正文的样式美化

spring boot 分层图解

在这里插入图片描述

安装idea

安装参考
idea插件使用一
idea插件使用二
项目热部署参考

配置阿里云镜像

<mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name>		  <url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
</mirrors>

项目启动

1) 安装node.js(请自行安装)
安装参考一
安装参考二
2)切换到项目根目录
3)在项目根目录执行:

npm install -g cnpm --registry=https://registry.npm.taobao.org 

//切换模块下载镜像地址
4)项目根目录执行cnpm install,下载该项目依赖模块
提示如果安装“360安全卫士”或“电脑管家”,一定要关闭,不然报错
在这里插入图片描述

5)添加mark-down编辑依赖

cnpm install mavon-editor --save

6)用于解析md文档依赖

cnpm install markdown-it --save
cnpm install github-markdown-css

7)启动服务:项目根目录执行npm run dev,会自动打开前端首页(后端项目要提前部署好)
在这里插入图片描述

前端项目结构

在这里插入图片描述

build项目构建(webpack)相关代码
config配置目录,包括端口号等。我们初学可以使用默认的:8089,当然线上为
node_modulesnpm 加载的项目依赖模块
src要开发的目录,基本上要做的事情都在这个目录里。里面包含了几个目录及文件:assets: 放置一些图片,如logo等。components: 公共组件。 router:路由。 App.vue: 项目入口文件,我们也可以直接将组件写这里,而不使用 components 目录。 main.js: 项目的核心文件。
static静态资源目录,如图片、字体等。
index.html首页入口文件,可以添加一些 meta 信息
package.json项目配置文件
README.md项目的说明文档,markdown 格式

项目前端模块中引入了vuex,存放vuex的系列文件:
vuex需要遵守的规则:

1、应用层级的状态应该集中到单个 store 对象中。
2、提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。
3、异步逻辑都应该封装到 action 里面。

1)首先 index.js 入口文件
2)store.js - 引入vuex,设置state状态数据,引入getter、mutation和action
3)state.js 相当于数据库
里面定义了数据结构,一些数据的初始状态
4)getters.js 顾名思义 取用,不做修改
5)mutation-types.js 存放Vuex常用的变量
引入mutation-types.js 操作里面定义的常用变量
6)action.js - 提交mutation以达到委婉地修改state状态,可异步操作

store.js文件

import VUE from 'vue'
import VUEX from 'vuex'VUE.use(VUEX)const state = {isPractice: false, //练习模式标志flag: false, //菜单栏左右滑动标志userInfo: null,menu: [// {//   index: '1',//   title: '考试管理',//   icon: 'icon-kechengbiao',//   content:[{item1:'考试查询',path:'selectExam'},{item2:'添加考试',path:'/addExam'}],// },// {//   index: '2',//   title: '题库管理',//   icon: 'icon-tiku',//   content:[{item2:'所有题库',path:'/selectAnswer'},{item3:'增加题库',path:'/addAnswer'},{path: '/addAnswerChildren'}],// },{index: '1',title: '成绩查询',icon: 'icon-performance',content:[{item1:'学生成绩查询',path:'/allStudentsGrade'},{path: '/grade'},{item2: '成绩分段查询',path: '/selectExamToPart'},{path: '/scorePart'},{item2: '成绩分科排序',path: '/selectExamToPart2'},{path: '/scorePart2'}],},{index: '2',title: '批改试卷',icon: 'el-icon-edit',content:[{item1:'未批改的应用题',path:'/studentApplication'},{item2: '已批改的应用题',path: '/studentApplication2'}],},{index: '3',title: '答疑解惑',icon: 'el-icon-chat-dot-round',content:[{item1:'发布问题',path:'/publishProblem'},{item2:'学生问题',path:'/solveProblem'}],},// {//   index: '6',//   title: '教师管理',//   icon: 'icon-Userselect',//   content:[{item1:'教师管理',path:'/teacherManage'},{item2: '添加教师',path: '/addTeacher'}],// },// {//   index: '7',//   title: '模块管理',//   icon: 'icon-module4mokuai',//   content:[{item1:'模块操作',path:'/module'}],// }],
}
const mutations = {practice(state,status) {state.isPractice = status},toggle(state) {state.flag = !state.flag},changeUserInfo(state,info) {state.userInfo = info}
}
const getters = {}
const actions = {getUserInfo(context,info) {context.commit('changeUserInfo',info)},getPractice(context,status) {context.commit('practice',status)}
}
export default new VUEX.Store({state,mutations,getters,actions,// store
})

更多用法

项目前端中index.html

项目中index.html和其他html差不多,但一般只定义一个空的根节点,在main.js里面定义的实例将挂载在根节点下,内容都通过vue组件来填充。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>锋芒频波测评系统</title><link rel="stylesheet" href="//at.alicdn.com/t/font_987928_pqv3jkd52jl.css"><link rel="icon" type="image/x-icon" href="../static/img/图标1.png"/></head><body><div id="app"></div><!-- built files will be auto injected --></body>
</html>

main.js里面定义的实例

new Vue({el: '#app',router,render: h => h(App),components: { App },template: '<App/>'
})

App.vue

一个vue页面通常由三部分组成:模板(template)js(script)样式(style)

  1. template
    其中模板只能包含一个父节点,<router-view/><router-view/> <router-view/>的简写,是子路由视图,后面的路由页面都显示在此处。
  2. script
    vue通常用es6来写,用export default导出,其下面可以包含数据data,生命周期(mounted等),方法(methods)等
  3. style
    样式通过style标签<style></style>包裹,默认是影响全局的,如需定义作用域只在该组件下起作用,需在标签上加scoped,<style scoped></style>
<template><div id="app"><router-view/></div>
</template><script>
export default {name: 'App'
}
</script><style>
ul {list-style: none;
}
a {text-decoration: none;
}
* {margin: 0;padding: 0;
}
#app {font-family: "Microsoft YaHei", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;background-color: #eee;
}
</style>

main.js

main.js主要是引入vue框架,根组件及路由设置,并且定义vue实例。

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import echarts from 'echarts'
import axios from 'axios'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import VueCookies from 'vue-cookies'
import mavonEditor from 'mavon-editor'
import 'mavon-editor/dist/css/index.css'Vue.use(ElementUI)
Vue.use(VueCookies)
Vue.use(mavonEditor)Vue.config.productionTip = false
Vue.prototype.bus = new Vue()
Vue.prototype.$echarts = echarts
Vue.prototype.$axios = axiosnew Vue({el: '#app',router,render: h => h(App),components: { App },template: '<App/>'
})

代码中的router相当于router:router,为ES6写法,在对象中,如果键值对一样的话,可以简写为一个;

components: { App }引入根组件App.vue,App即App:App;
template:'<App/>'是简写形式,等价于 <App></App>

router

router下的index.js文件中的routes定义了路径为’/'的路由,该路由对应的页面是HelloWorld组件。

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)export default new Router({routes: [{path: '/',name: 'login', //登录界面component: () => import('@/components/common/login')},{path: '/changeUser',name: 'changeUser',component: () => import ('@/components/common/userManager')},{path: '/index', //教师主页component: () => import('@/components/admin/index'),children: [{path: '/', //首页默认路由component: () => import('@/components/common/hello')},{path:'/grade', //学生成绩component: () => import('@/components/charts/grade')},{path: '/selectExamToPart', //学生分数段component: () => import('@/components/teacher/selectExamToPart')},{path: '/selectExamToPart2', //学生分科成绩component: () => import('@/components/teacher/selectExamToPart2')},{path: '/scorePart',component: () => import('@/components/charts/scorePart')},{path: '/scorePart2',   //单科成绩排序component: () => import('@/components/charts/scorePart2')},{path: '/searchStudentApplication',   //单科成绩排序component: () => import('@/components/teacher/searchStudentApplication')},{path: '/allStudentsGrade', //所有学生成绩统计component: () => import('@/components/teacher/allStudentsGrade')},{path: '/examDescription', //考试管理功能描述component: () => import('@/components/teacher/examDescription')},{path: '/selectExam', //查询所有考试component: () => import('@/components/teacher/selectExam')},{path: '/addExam', //添加考试component: () => import('@/components/teacher/addExam')},{path: '/answerDescription', //题库管理功能介绍component: ()=> import('@/components/teacher/answerDescription')},{path: '/selectAnswer', //查询所有题库component: () => import('@/components/teacher/selectAnswer')},{path: '/addAnswer', //增加题库主界面component: () => import('@/components/teacher/addAnswer')},{path: '/addAnswerChildren', //点击试卷跳转到添加题库页面component: () => import('@/components/teacher/addAnswerChildren')},{path: '/studentManage', //学生管理界面component: () => import('@/components/teacher/studentManage')},{path: '/studentApplication', //展示要批改的应用题component: () => import('@/components/teacher/studentApplicationNoCorrect')},{path: '/studentApplication2', //展示批改过的应用题component: () => import('@/components/teacher/studentApplicationCorrect')},{path: '/solveProblem', //展示问题component: () => import('@/components/teacher/solveProblem')},{path: '/publishProblem', //展示问题component: () => import('@/components/teacher/publishProblem')},{path: '/addStudent', //添加学生component: () => import('@/components/teacher/addStudent')},{path: '/teacherManage',component: () => import('@/components/admin/tacherManage')},{path: '/addTeacher',component: () => import ('@/components/admin/addTeacher')},]},{path: '/student',component: () => import('@/components/student/index'),children: [{path:"/",component: ()=> import('@/components/student/myExam')},{path: '/manager', component: () => import('@/components/student/manager')},{path: '/update_stuinfo', component: () => import('@/components/student/update_stuinfo')},{path: '/examMsg', component: () => import('@/components/student/examMsg')},{path: '/message', component: () => import('@/components/student/message')},{path: '/studentScore', component: () => import("@/components/student/answerScore")},{path: '/scoreTable', component: () => import("@/components/student/scoreTable")}]},{path: '/answer',component: () => import('@/components/student/answer')},{path: '/registerstudent', component: () => import('@/components/student/registerstudent')},{path: '*',redirect: '/'}]
})

整个页面渲染过程

访问http://localhost:8088/显示的就是index.html页面,index.html原本只有一个根结点id=“app”。
在这里插入图片描述
main.js入口文件引入根组件App
在这里插入图片描述
前边我们已经提到,根组件App中,<router-view/>是子路由视图,后面的路由页面都显示在此处,访问http://localhost:8088/,路由为‘/’,根据路由文件index.js,所以引入login组件。
在这里插入图片描述

在这里插入图片描述
login.vue

<!-- 用户登录界面 -->
<template><div id="login"><div><img src="../../assets/img/top_logo.jpg" height="60" width="60"/></div><div class="bg"></div><el-row class="main-container"><el-col :lg="8" :xs="16" :md="10" :span="10"><div class="bottom"><div class="container"><p class="title">锋芒频波测评系统</p><el-form :label-position="labelPosition" label-width="80px" :model="formLabelAlign"><el-form-item label="账号:"><el-input v-model.number="formLabelAlign.username" placeholder="请输入账号"></el-input></el-form-item><el-form-item label="密码:">
<!--                <i class="el-icon-unlock"></i>--><el-input v-model="formLabelAlign.password" placeholder="请输入密码" type='password'></el-input></el-form-item><div><input class="myInput" type="text" v-model="formLabelAlign.verifyCode" placeholder="请输入验证码"/>
<!--                <el-input v-model="formLabelAlign.verifyCode" placeholder="请输入验证码" type='text' ></el-input>--><img alt="单击图片刷新!" style="margin-bottom: -13px;" src="/api/kaptcha"onclick="this.src='/api/kaptcha?d='+new Date()*1"></div><div class="submit"><el-button type="primary" class="row-login" @click="login()">登录</el-button></div>
<!--              <el-button class="row-register" type="button" @click="register()">Or, Sign Up?</el-button>--></el-form></div></div></el-col></el-row><el-row class="footer"><el-col><p class="msg2">©2020  锋芒工作室 All Rights Reserved</p></el-col></el-row></div>
</template><script>
import store from '@/vuex/store'
import {mapState} from 'vuex'
export default {store,name: "login",data() {return {role: 2,labelPosition: 'left',verfyCode_houtuan:'',formLabelAlign: {username: '',password: '',verifyCode:''}}},created(){// this.$axios(`/api/getVerify`).then(res => {//   console.log(res.data)})},methods: {getverfiyCode() {//分页查询所有试卷信息},register() {this.$router.push({path: '/registerstudent'})},//用户登录请求后台处理login() {console.log("登录操作执行-------");// console.log(this.formLabelAlign.verifyCode);this.$axios({url: `/api/getVerify`,method: 'get',async:false}).then(res => {// if (res.data.code==200){//// }if (res.data === this.formLabelAlign.verifyCode) {if (this.formLabelAlign.username === "" || this.formLabelAlign.password === ""){this.$message({showClose: true,type: 'error',message: '用户名或密码为空'})}else{this.$axios({url: `/api/login`,method: 'post',data: {...this.formLabelAlign}}).then(res=>{let resData = res.data.dataif(resData != null) {switch(resData.role) {case "0":  //管理员this.$cookies.set("cname", resData.adminName)this.$cookies.set("cid", resData.adminId)this.$cookies.set("role", 0)this.$router.push({path: '/index' }) //跳转到首页breakcase "1": //教师this.$cookies.set("cname", resData.teacherName)this.$cookies.set("cid", resData.teacherId)this.$cookies.set("role", 1)this.$router.push({path: '/index' }) //跳转到教师用户breakcase "2": //学生this.$cookies.set("cname", resData.studentName)this.$cookies.set("cid", resData.studentId)this.$cookies.set("role", 2)this.$router.push({path: '/student'})break}}if(resData == null) { //错误提示this.$message({showClose: true,type: 'error',message: '用户名或者密码错误'})}})}}else{this.$message({showClose: true,type: 'error',message: '验证码错误'})}})},clickTag(key) {this.role = key}},computed: mapState(["userInfo"]),mounted() {}
}
</script><style lang="scss" scoped>
.myInput{background-color: #FFF;background-image: none;border-radius: 4px;border: 1px solid #DCDFE6;-webkit-box-sizing: border-box;box-sizing: border-box;color: #606266;display: inline-block;font-size: inherit;height: 40px;line-height: 40px;outline: 0;padding: 0 15px;transition: border-color .2s cubic-bezier(.645,.045,.355,1);
}
.container {margin-bottom: 32px;
}
.container .el-radio-group {margin: 30px 0px;
}
#login {font-size: 14px;color: #000;background-color: #fff;
}
#login .bg {position: fixed;top: 70px;left: 0;width: 100%;overflow-y: auto;height: 75%;/*<!--background: url('../../assets/img/img2.jpg')center top / cover no-repeat;-->*/background-color: #459ddd;
}
#login .main-container {display: flex;justify-content: center;align-items: center;margin-top: 75px;
}
#login .bottom {display:flex;justify-content: center;background-color:white;border-radius: 10px;box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);min-height: 430px;
}
#login .bottom .title {text-align: center;font-size: 30px;
}
.bottom .container .title {margin: 70px 0px;;
}
.bottom .submit .row-login {width: 100%;background-color: #459ddd;border-color: #459ddd;margin: 10px 0px 10px 0px;padding: 15px 20px;
}
.bottom .submit {display: flex;justify-content: center;
}
.footer {margin-top: 50px;text-align: center;
}
.footer .msg2 {font-size: 14px;color: gray;margin-top: 70px;
}
.bottom .options .register span:nth-child(1) {color: #8C8C8C;
}
//学生注册
.bottom .row-register {background-color: transparent;border: none;padding: 0;margin:0;font-size: 1.1em;box-sizing: border-box;border-bottom: 1px solid transparent;cursor: pointer;
}
.bottom .row-register{border-bottom: 1px solid #ffffff;
}</style>

由于在config文件夹下index.js文件下创建"api",代替target里面的地址(后台请求),后面组件中我们掉接口时直接用api代替
在这里插入图片描述
在这里插入图片描述

关于矢量图图标的使用

点击详情

引入JQuery依赖

cnpm install jquery --save

github-markdown-css样式文件-一般用作文章正文的样式美化

1.下载到项目中

cnpm i github-markdown-css

2.将样式放到模块化vue目录下,然后在 style中导入

<style scoped lang="less">
@import './github-markdown.css';
</style>

3.在vue脚手架中的 .postcssrc.js文件中加入 exclude: ‘github-markdown’ //css样式文件

module.exports = {// 配置要使用的 PostCSS 插件plugins: {// 配置使用 autoprefixer 插件// 作用:生成浏览器 CSS 样式规则前缀// VueCLI 内部已经配置了 autoprefixer 插件// 所以又配置了一次,所以产生冲突了// 'autoprefixer': { // autoprefixer 插件的配置//   // 配置要兼容到的环境信息//   browsers: ['Android >= 4.0', 'iOS >= 8']// },// 配置使用 postcss-pxtorem 插件// 作用:把 px 转为 rem'postcss-pxtorem': {rootValue ({ file }) {return file.indexOf('vant') !== -1 ? 37.5 : 75},// 配置要转换的 CSS 属性      // * 表示所有propList: ['*'],exclude: 'github-markdown'   //css样式文件}}

4.在需要美化的正文部分加入github-markdown-css样式文件的 主样式类名
markdown-body 生效

  <!-- 文章内容 --><div class="article-content markdown-body"v-html='article.content'ref="article-content"></div><van-divider>the end</van-divider></div>

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

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

相关文章

Java基础总结之(面试)

文章目录Java标识符Java修饰符访问权限修饰符访问控制和继承非访问权限修饰符局部变量修饰符接口接口中方法修饰符运算符算术运算符一元运算符二元运算符算术赋值运算符赋值运算符逻辑运算符&#xff08;&&、||和!&#xff09;关系运算符自增和自减运算符&#xff08;和…

Javaweb练手项目

文章目录学生管理系统音乐网站锋芒博客中医药管理系统博客天梯CMS系统锋芒社团官网学生管理系统 实现技术&#xff1a;ServletMVC&#xff08;模式&#xff09;Filter(过滤器&#xff09;html 主要功能&#xff1a;学生信息的增删查改&#xff0c;文件&#xff08;图片&#x…

Spark之scala学习(基础篇)待更新

文章目录引言大数据介绍大数据与云计算区别大数据和人工智能的区别大数据和传统的分析&#xff08;excel&#xff09;的区别scala的特性面向对象特性函数式编程函数式编程的特点&#xff1a;函数式编程的优势静态类型扩展性并发性为什么要学scalascala安装简单测试了解ScalaSca…

Jupyter Notebook的安装及问题解决方案

文章目录下载并安装Anaconda3更改主界面路径但是如果没有jupyter_notebook_config.py文件怎么办&#xff1f;如果更改过路径后&#xff0c;不生效怎么办&#xff1f;使用参考pycharm导入pyspark下载并安装Anaconda3 官网下载个人版 Anaconda3安装参考 点击&#xff0c;然后进…

airodump-ng wlan0mon扫描不到网络_MySQL ProxySql 由于漏洞扫描导致的 PROXYSQL CPU 超高...

ProxySQL 本身是一款非常棒的MYSQL 中间件的开源产品, 在公司运行了一段时间后,突然一天报警,所在机器的CPU 出奇的高,之前在测试系统, 预生产, 以及生产系统均没有出现问题. 开始未来紧急解决问题,重新启动了proxysql服务,并查看错误日志.PROXYSQL 的系统版本的2.012 MYSQL 的…

4个空格和一个tab有什么区别_火花塞为什么一换就是4个?只换一个不行吗?

火花塞不是一个经常被提及的配件&#xff0c;但如果火花塞老化&#xff0c;车辆的整体性能将受到影响&#xff0c;更换火花塞其实也是日常保养的一部分&#xff0c;就像换机油和三滤一样。不知道大家是否注意到&#xff0c;在做完保养之后&#xff0c;维修师傅会帮你检查一下火…

小型云台用的是什么电机_直流电机的工作原理是什么?未来的电动车都会用直流电机吗?...

说起直流电机&#xff0c;其实我们每个人&#xff0c;每天都在用。是吗&#xff1f;别惊讶&#xff0c;是的。手机&#xff0c;我们每天都在用&#xff0c;有消息或者有电话时&#xff0c;手机就开始振动。这个振动就是用直流电机来实现的。当然&#xff0c;直流电机在其他领域…

C语言、C++学习路线

文章目录C语言 C语言大纲 C语言知识点总结图 C语言视频推荐基础篇进阶篇速成篇基础入门之游戏实战篇C语言核心链表文档教程视频教程文件C语言实例C C大纲岗位分析 C与C 编程基础四大件数据结构与算法计算机网络操作系统设计模式C视频推荐C语言 C语言大纲 C语言知识点总结图 C语…

2020年日历_2020年《故宫日历》发布:浓缩紫禁城600年沧桑

2020年《故宫日历》。中国网记者 刘维佳/摄中国网8月26日讯(记者 刘维佳) 2020年《故宫日历》发布会今日在故宫博物院建福宫举行。2020年为庚子鼠年&#xff0c;亦正值紫禁城建成六百周年&#xff0c;因此&#xff0c;2020年《故宫日历》是为纪念紫禁城六百周年而特别呈现。故宫…

jav简单的个人博客网站代码_每个人都可以拥有的个人博客网站

题记------去过的地方越多&#xff0c;越知道自己想回到什么地方去&#xff01;雨又下了一夜&#xff0c;曾经多少次觉得下雨天是最适合睡觉的天气。而最近的雨&#xff0c;总感觉有些嘈杂&#xff0c;总怕吵醒远方睡梦中的星&#xff0c;晨。以至于翻来覆去睡不着。但是&#…

泰禾光电机器人研发_机器之眼 | 3D相机能让机器人看见什么?

“中国制造2025”&#xff0c;其核心环节之一就是机器人智能化。视觉技术代表了机器的眼睛和大脑&#xff0c;机器视觉将使得机器人智能化变成现实。为了使机器人能够胜任更复杂的工作&#xff0c;机器人不但要有更好的控制系统&#xff0c;还需要更多地感知环境的变化。机器人…

云计算学习路线

文章目录说明云计算学习路线云计算技术支撑Linux 基础环境搭建文档教程Linux学习视频推荐云计算基础知识docker容器KVM&#xff08;推荐一本书《深度实践KVM》&#xff09;OpenStackK8S&#xff08;Kubernetes&#xff09;说明 云计算和大数据未来十年必然趋势成为社会的生产资…

算法学习路线图

关于算法的讨论 如何系统地学习数据结构与算法&#xff1f;| 自学数据结构与算法最全路线 编程指北 动态规划-背包问题 最小生成树(MST)—prim和kruskal算法 用回溯法(backtracking algorithm)求解N皇后问题(N-Queens puzzle) n皇后问题[分支限界法] 克鲁斯卡尔算法(Krus…

大数据学习路线

文章目录学习教程&#xff08;不全&#xff09;文档教程大数据实战项目项目源码广义的定义 &#xff1a;是指物理世界到数字世界的映射和提炼。通过发现其中的数据特征&#xff0c;从而做出提升效率的决策行为。 狭义的定义&#xff1a;通过获取存储、分析&#xff0c;从大容量…

input层级高 小程序_获客、引流成本越来越高?开发小程序:低成本获客、引流...

在最近几年时间中&#xff0c;各行各业都有不少企业、商家反应&#xff1a;获客成本越来越高。对此&#xff0c;小编的建议是&#xff1a;去开发一个微信小程序。这是为什么&#xff1f;下面将让带着丰富小程序开发以及运营经验的&#xff0c;来自上海数字商圈的产品经理&#…

聚宽macd底背离_许多散户不知道:MACD月线金叉,MACD月金叉都会带来一波牛市!...

MACD吸收了移动平均线的优点。移动平均线的买卖交易在趋势明显时效果很好&#xff0c;但是一旦遇到牛皮盘整行情&#xff0c;移动平均线所发出的信号就过于频繁而且极其不准确&#xff0c;在期货市场的保证金杠杆效应下容易使投资者遭受致命损失。而MACD恰好能做到&#xff1a;…

dbscan算法中 参数的意义_无监督机器学习中,最常见的聚类算法有哪些?

在机器学习过程中&#xff0c;很多数据都具有特定值的目标变量&#xff0c;我们可以用它们来训练模型。但是&#xff0c;大多数情况下&#xff0c;在处理实际问题时&#xff0c;数据不会带有预定义标签&#xff0c;因此我们需要开发能够对这些数据进行正确分类的机器学习模型&a…

大数据与云计算的理解与基本认识

文章目录大数据海量数据产生的原因?大数据的出现与发展为我们生活带来了什么&#xff1f;传统的数据处理&#xff0c;存储手段在海量数据当中有什么劣势&#xff1f;大数据数据存储手段&#xff1f;大数据分析在商业上的应用&#xff1f;云计算什么是虚拟化&#xff1f;虚拟化…

造完家怎么拆东西_吸顶灯灯管怎么拆?吸顶灯拆灯管的注意事项有哪些?

吸顶灯出现故障&#xff0c;检查是因为灯管给坏了&#xff0c;就需要对吸顶灯的灯光进行拆卸&#xff0c;那么&#xff0c;吸顶灯灯管怎么拆?打算将吸顶灯的灯管给拆了的时候&#xff0c;也应该要能够清楚具体拆卸的事宜&#xff0c;保证拆卸效果&#xff0c;吸顶灯拆灯管的注…

mac nginx 非brew安装_Nginx服务器环境手动安装Discuz! Q非详细教程

Discuz! QDiscuz! Q是原腾讯旗下Discuz团队新开源的社区程序&#xff0c;不过定位当然和以前不一样。前段时间就知道Discuz! Q内测这事&#xff0c;不过一直没兴趣&#xff0c;昨天看见腾讯云这边有个Discuz! Q的活动&#xff0c;就去瞧瞧&#xff0c;还没有pc版本&#xff0c;…