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

计算机毕业设计 基于Web的景区管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥
🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。
🍊心愿:点赞 👍 收藏 ⭐评论 📝
🍅 文末获取源码联系

👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~
Java毕业设计项目~热门选题推荐《1000套》

Python毕业设计精品项目《1000套》

微信小程序毕业设计精品项目《1000套》

大数据/机器学习毕业设计精品项目《1000套》

【看项目演示视频,文末扫一下】

【看项目演示视频,文末扫一下】

目录

1.技术选型

2.开发工具

2.1 Java

2.2 SpringBoot

2.3 MyBatisPlus

2.4 Vue

2.5 ElementUI

2.6 MySQL

2.7 Maven

3.功能

3.1【角色】

3.2【前端功能模块】

3.3【后端功能模块】

4.项目演示截图

4.1 前台

4.2 后台

5.核心代码

5.1拦截器

5.2分页工具类

5.3文件上传下载

5.4前端请求

6.LW文档大纲参考


背景意义介绍: 

基于Web的景区管理系统是一个综合性的信息服务平台,旨在为游客、商家和景区管理者提供便捷的信息交流和管理服务。随着旅游业的快速发展,游客对于旅游体验的要求越来越高,而景区管理者面临的挑战也随之增加。该系统通过集成景点信息、美食信息、酒店预订、旅游攻略等服务,为游客提供了一站式的旅游信息服务,极大地提升了旅游规划和体验的便利性。

系统的开发有助于提高景区的管理效率,通过实时更新的旅游资讯、景点信息和商品信息,为游客提供最新的旅游动态。同时,系统为商家提供了一个展示和销售的平台,有助于提升商家的知名度和收入。对于景区管理者而言,系统的后台管理功能可以有效地监控和管理景区的各种资源,包括导游申请、摊位信息和投诉建议等,确保景区运营的有序性和游客的满意度。

此外,景区管理系统的实施还有助于推动旅游业的可持续发展。通过数据分析和游客反馈,管理者可以更好地了解游客需求,优化旅游资源配置,提升服务质量,从而吸引更多的游客,促进当地经济的发展。

1.技术选型

  • 框架:springboot、mybatisplus、vue、elementui、html、css、js、mysql、jdk1.8
  • 工具:idea、Navicat

2.开发工具

2.1 Java

Java是一种广泛使用的高级编程语言,以其跨平台兼容性、面向对象的特性和丰富的库支持而闻名。它在系统开发中被广泛应用,特别是在需要高度可移植性和网络功能的场景中。Java的虚拟机(JVM)允许程序在多种操作系统上运行,无需修改代码。它的强类型系统和自动垃圾回收机制减少了内存泄漏和程序崩溃的风险。此外,Java提供了强大的网络编程支持,使得开发分布式系统和网络应用变得容易。它还拥有大量的开源库和框架,如Spring和Hibernate,这些库和框架进一步简化了复杂问题的解决,如数据库操作和企业级应用开发。因此,Java在构建可扩展、安全且高效的系统中扮演了关键角色。

2.2 SpringBoot

Spring Boot是一个轻量级的Java框架,旨在简化Spring应用的创建和部署。它通过自动配置和“约定优于配置”的原则,极大地减少了开发者在配置上的负担。Spring Boot内置了Tomcat、Jetty等Web服务器,使得应用无需部署WAR文件即可快速启动。此外,它还提供了丰富的Starters,帮助开发者轻松集成数据库、消息队列、安全框架等。Spring Boot的Actuator模块为应用提供了监控和管理功能,增强了系统的可维护性。通过这些特性,Spring Boot使得开发微服务架构和云原生应用变得更加高效和简单。

2.3 MyBatisPlus

MyBatis-Plus是一个对MyBatis框架的增强工具,它通过简化数据库操作和减少模板代码,极大地提升了开发效率。它提供了自动生成的CRUD接口,使得开发者无需编写繁琐的SQL语句,同时支持Lambda表达式和条件构造器,让查询条件构建变得简洁明了。内置的分页插件简化了分页操作,而灵活的主键策略和代码生成器进一步加速了开发流程。MyBatis-Plus的无侵入性和对现有工程的兼容性,使其成为提升数据库操作效率和简化开发流程的有力工具。

2.4 Vue

Vue.js是一个渐进式JavaScript框架,专注于构建用户界面。它易于上手,同时提供了强大的功能来帮助开发者构建复杂的单页应用。Vue的核心特点包括响应式数据绑定、组件系统和虚拟DOM。响应式数据绑定让数据更新变得简单直观,开发者只需关注数据本身,视图会自动更新。组件系统允许开发者将界面分割成可复用的组件,每个组件管理自己的状态和逻辑,使得代码更加模块化和可维护。虚拟DOM提高了性能,因为它减少了直接操作DOM的次数,通过计算最小更新量来实现高效的DOM更新。Vue还提供了丰富的生态系统,包括Vuex状态管理和Vue Router路由管理,使得构建大型应用变得更加简单。此外,Vue的轻量级特性使其成为快速开发中小型项目的优选。在系统开发中,Vue通过这些特点,提供了快速开发、高可维护性和良好的用户体验,特别适合于需要快速迭代和动态内容更新的应用场景。

2.5 ElementUI

Element UI是一个专为Vue.js设计的开源前端组件库,由饿了么前端团队开发。它以“简洁、实用、高效”为核心设计理念,遵循Material Design等国际通行的设计规范,提供了一套直观易用且符合人类直觉交互习惯的UI组件。Element UI的组件库丰富,包括表格、表单、对话框、菜单、按钮等,这些组件都基于响应式设计,自动适应不同设备的屏幕大小,提供一致的用户体验。

使用Element UI可以大大提高开发效率,它提供了一套全面的预置组件,涵盖了几乎所有的基础和复杂UI需求。例如,它的表单验证、下拉选择器、日期选择器等功能模块均经过精心设计,兼顾了功能性和美观性,提升了用户体验。此外,Element UI的组件封装简单,开发人员可以轻松地在Vue.js应用程序中使用,同时支持高度可定制性,在保持默认外观的前提下,可以通过CSS、主题等来自定义组件样式,支持按需加载。

Element UI还提供了完善的文档和示例代码,方便开发者学习和使用,同时拥有一个活跃的社区,为开发者提供了丰富的资源和支持。它的设计和实现考虑了开发者的实际需求,使得在构建现代Web应用程序时,Element UI成为一个受欢迎的选择。

2.6 MySQL

MySQL是一个流行的关系型数据库管理系统,广泛用于各种应用场景。它以其高性能、可靠性和易用性而闻名。MySQL支持SQL语言,允许开发者通过标准的查询语句来操作数据。它提供了强大的数据类型,包括整数、浮点数、字符串和日期时间等,以满足不同数据存储需求。

MySQL的索引机制优化了查询性能,通过B+树等数据结构,加快了数据检索速度。它的事务处理能力保证了数据的一致性和完整性,支持ACID(原子性、一致性、隔离性、持久性)属性,适合需要高可靠性的业务场景。

此外,MySQL的复制功能支持数据的分布式存储,提高了数据的可用性和容错性。其灵活的存储引擎,如InnoDB和MyISAM,提供了不同的性能和功能特点,以适应不同的应用需求。MySQL还提供了丰富的管理工具和监控功能,方便数据库的维护和优化。

在系统开发中,MySQL通过其高性能、可靠性、易用性和灵活性,为数据存储和管理提供了强大的支持。它的社区版免费且开源,降低了开发和维护成本,使其成为许多项目的首选数据库解决方案。

2.7 Maven

Maven是一个强大的项目管理和构建自动化工具,它通过提供一个标准化的项目管理方法,简化了Java项目的构建过程。Maven的核心优势在于其依赖管理能力,它允许开发者在项目的`pom.xml`文件中声明依赖,然后自动从远程仓库中获取所需的库,从而避免了手动下载和配置依赖的繁琐工作。

Maven还强制执行了一致的项目结构,这不仅促进了团队成员之间的协作,还简化了代码的整合和重用。它定义了一系列构建生命周期和阶段,使得开发者可以按照预定义的顺序执行各种任务,如编译、测试、打包和部署。

此外,Maven支持构建配置文件,允许开发者为不同环境定义不同的构建配置,这对于在多个环境中部署应用程序(如开发、测试和生产环境)非常有用。Maven的可扩展性也是其一大特点,开发者可以创建Maven插件来添加额外的目标或定制现有目标,以满足特定需求。

在系统应用中,Maven通过自动化构建流程、管理项目依赖、提供一致的项目结构、支持自动化测试、允许构建配置文件和高度可扩展性,极大地提高了开发效率和项目的可维护性。这些特性使得Maven成为Java项目开发中不可或缺的工具之一。

3.功能

3.1【角色】

管理员、商家、用户

3.2【前端功能模块】

  • 登录
  • 注册
  • 首页
  • 景点信息
  • 美食信息
  • 商品信息
  • 旅游资讯
  • 酒店信息
  • 旅游攻略
  • 医疗服务站
  • 个人中心

3.3【后端功能模块】

  • ​​​​​​​登录
  • 首页展示
  • 用户管理
  • 旅游资讯管理
  • 景点信息管理
  • 美食信息管理
  • 酒店信息管理
  • 旅游攻略管理
  • 医疗服务站管理
  • 导游申请管理
  • 摊位信息管理
  • 商品信息管理
  • 投诉建议管理
  • 操作日志管理

4.项目演示截图

4.1 前台

4.2 后台

5.核心代码

5.1拦截器

package com.interceptor;import com.alibaba.fastjson.JSONObject;
import com.annotation.IgnoreAuth;
import com.entity.TokenEntity;
import com.service.TokenService;
import com.utils.R;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;/*** 权限(Token)验证*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {public static final String LOGIN_TOKEN_KEY = "Token";@Autowiredprivate TokenService tokenService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//支持跨域请求response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {response.setStatus(HttpStatus.OK.value());return false;}IgnoreAuth annotation;if (handler instanceof HandlerMethod) {annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);} else {return true;}//从header中获取tokenString token = request.getHeader(LOGIN_TOKEN_KEY);/*** 不需要验证权限的方法直接放过*/if(annotation!=null) {return true;}TokenEntity tokenEntity = null;if(StringUtils.isNotBlank(token)) {tokenEntity = tokenService.getTokenEntity(token);}if(tokenEntity != null) {request.getSession().setAttribute("userId", tokenEntity.getUserid());request.getSession().setAttribute("role", tokenEntity.getRole());request.getSession().setAttribute("tableName", tokenEntity.getTablename());request.getSession().setAttribute("username", tokenEntity.getUsername());return true;}PrintWriter writer = null;response.setCharacterEncoding("UTF-8");response.setContentType("application/json; charset=utf-8");try {writer = response.getWriter();writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));} finally {if(writer != null){writer.close();}}return false;}
}

5.2分页工具类

 
package com.utils;import java.io.Serializable;
import java.util.List;
import java.util.Map;import com.baomidou.mybatisplus.plugins.Page;/*** 分页工具类*/
public class PageUtils implements Serializable {private static final long serialVersionUID = 1L;//总记录数private long total;//每页记录数private int pageSize;//总页数private long totalPage;//当前页数private int currPage;//列表数据private List<?> list;/*** 分页* @param list        列表数据* @param totalCount  总记录数* @param pageSize    每页记录数* @param currPage    当前页数*/public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {this.list = list;this.total = totalCount;this.pageSize = pageSize;this.currPage = currPage;this.totalPage = (int)Math.ceil((double)totalCount/pageSize);}/*** 分页*/public PageUtils(Page<?> page) {this.list = page.getRecords();this.total = page.getTotal();this.pageSize = page.getSize();this.currPage = page.getCurrent();this.totalPage = page.getPages();}/** 空数据的分页*/public PageUtils(Map<String, Object> params) {Page page =new Query(params).getPage();new PageUtils(page);}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getCurrPage() {return currPage;}public void setCurrPage(int currPage) {this.currPage = currPage;}public List<?> getList() {return list;}public void setList(List<?> list) {this.list = list;}public long getTotalPage() {return totalPage;}public void setTotalPage(long totalPage) {this.totalPage = totalPage;}public long getTotal() {return total;}public void setTotal(long total) {this.total = total;}}

5.3文件上传下载

package com.controller;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;/*** 上传文件映射表*/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{@Autowiredprivate ConfigService configService;/*** 上传文件*/@RequestMapping("/upload")@IgnoreAuthpublic R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {if (file.isEmpty()) {throw new EIException("上传文件不能为空");}String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}String fileName = new Date().getTime()+"."+fileExt;File dest = new File(upload.getAbsolutePath()+"/"+fileName);file.transferTo(dest);if(StringUtils.isNotBlank(type) && type.equals("1")) {ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));if(configEntity==null) {configEntity = new ConfigEntity();configEntity.setName("faceFile");configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}return R.ok().put("file", fileName);}/*** 下载文件*/@IgnoreAuth@RequestMapping("/download")public ResponseEntity<byte[]> download(@RequestParam String fileName) {try {File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}File file = new File(upload.getAbsolutePath()+"/"+fileName);if(file.exists()){HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    headers.setContentDispositionFormData("attachment", fileName);    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);}} catch (IOException e) {e.printStackTrace();}return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);}}

5.4前端请求

import axios from 'axios'
import router from '@/router/router-static'
import storage from '@/utils/storage'const http = axios.create({timeout: 1000 * 86400,withCredentials: true,baseURL: '/furniture',headers: {'Content-Type': 'application/json; charset=utf-8'}
})
// 请求拦截
http.interceptors.request.use(config => {config.headers['Token'] = storage.get('Token') // 请求头带上tokenreturn config
}, error => {return Promise.reject(error)
})
// 响应拦截
http.interceptors.response.use(response => {if (response.data && response.data.code === 401) { // 401, token失效router.push({ name: 'login' })}return response
}, error => {return Promise.reject(error)
})
export default http

6.LW文档大纲参考

 具体LW如何写法,可以咨询博主,耐心分享!

你可能还有感兴趣的项目👇🏻👇🏻👇🏻

更多项目推荐:计算机毕业设计项目

Python毕业设计精品项目《1000套》

微信小程序毕业设计精品项目《1000套》

大数据/机器学习毕业设计精品项目《1000套》

如果大家有任何疑虑,请在下方咨询或评论

相关文章:

计算机毕业设计 基于Web的景区管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

计算生物学与生物信息学漫谈-2-测序深度/读长质量和Fasta处理

上一篇文章中我们介绍了测序技术的由来与发展&#xff0c;那么在介绍第三代测序的时候&#xff0c;我们提到了关于测序深度和读长的问题&#xff0c;那么本篇文章就详解介绍一下。 计算生物学与生物信息学漫谈-1-测序一路走来-CSDN博客 目录 1.测序深度SEQUENCING DEPTH &…...

基于SSM+微信小程序的电子点餐管理系统(点餐1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的电子点餐管理系统实现了管理员及用户。管理员实现了首页、个人中心、餐品分类管理、特色餐品管理、订单信息管理、用户管理、特价餐品管理、活动订单管理、系统管理。…...

IO进程---day5

1、使用有名管道实现两个进程之间的相互通信 //管道文件 #include<myhead.h> int main(int argc, const char *argv[]) {//创建有名管道文件1if(mkfifo("./pipe1",0664)-1){perror("创建管道文件失败");return 0;}if(mkfifo("./pipe2",066…...

ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF(Unified Robot Description Format)语法详解

URDF 文件是一个标准的 XML 文件格式&#xff0c;用于在 ROS 中描述机器人模型的结构。URDF 通过预定义的一系列标签&#xff0c;简洁地表达机器人的组成和运动关系。虽然机器人模型可能非常复杂&#xff0c;但在 URDF 中可以主要简化为两个核心部分&#xff1a; 连杆&#xff…...

常见SQL注入攻击示例与原理及其防御措施

SQL 注入&#xff08;SQL Injection&#xff09;是一种代码注入技术&#xff0c;用于攻击数据驱动的应用程序&#xff0c;主要通过在输入字段或 URL 查询参数中插入恶意 SQL 语句来实现。攻击者利用应用程序对用户输入数据的未充分验证或过滤&#xff0c;将恶意 SQL 语句注入到…...

Node.js 中的 WebSocket 底层实现

WebSockets 是一种网络通信协议&#xff0c;可实现双向客户端-服务器通信。 WebSockets 通常用于需要即时更新的应用程序&#xff0c;使用 HTTP 之上的持久双工通道来支持实时交互&#xff0c;而无需持续进行连接协商。服务器推送是 WebSockets 的众多常见用例之一。 本文首先…...

MySQl数据库的基本操作

1.1创建数据库 使用CREATE DATABASE语句可以轻松创建MySQL数据库&#xff0c;语法如下&#xff1a; CREATE DATABASE 数据库名; 例&#xff1a;创建fruitsales数据库 CREATE DATABASE fruitsales;1.2 查看数据库 使用SHOW语句查看当前服务器下所有已经存在的数据库 SHOW DAT…...

Egg.js 项目的合理 ESLint 配置文件模板

Egg.js 项目的合理 ESLint 配置文件模板 安装依赖 npm install eslint babel/eslint-parser eslint-plugin-import eslint-plugin-promise eslint-plugin-node --save-dev extends: 扩展了 eslint-config-egg 以及其他一些常用的插件配置。 parser: 使用 babel/eslint-parse…...

算法专题七: 分治归并

目录 1. 排序数组2. 交易逆序对的总数3. 计算右侧小于当前元素的个数4. 翻转对 1. 排序数组 算法思路: 本道题使用归并的思路进行排序, 先讲数组分为左右两个区间, 然后合并两个有序数组. class Solution {vector<int> tmp; public:vector<int> sortArray(vector&…...

一个基于vue功能强大的表格组件--vxe-table的二次封装

基础使用 一个基于 vue 的 PC 端表格组件&#xff0c;支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等… <vxe-grid v-bind"gridOptions1"…...

CSS网页布局(重塑网页布局)

一、实现两列布局 许多网站有一些特点&#xff0c;如页面顶部放置一个大的导航或广告条&#xff0c;右侧是链接或图片&#xff0c;左侧放置主要内容&#xff0c;页面底部放置版权信息等。 一般情况&#xff0c;此类网页布局的两列都有固定的宽度&#xff0c;而且从内容上很容易…...

计算机网络:数据链路层 —— 以太网(Ethernet)

文章目录 局域网局域网的主要特征 以太网以太网的发展100BASE-T 以太网物理层标准 吉比特以太网载波延伸物理层标准 10吉比特以太网汇聚层交换机物理层标准 40/100吉比特以太网传输媒体 局域网 局域网&#xff08;Local Area Network, LAN&#xff09;是一种计算机网络&#x…...

考研前所学c语言02(2024/10/16)

1.一个十进制的数转化为二进制的就是不断除二取余&#xff0c;得到的余数从下到上取 比如123&#xff1a; 结果为&#xff1a; 同理其他的十进制转八进制&#xff0c;十六进制就除八&#xff0c;除十六即可 再比如123转十六进制&#xff1a; 因为余数是11&#xff0c;十六进…...

R语言绘图——坐标轴及图例

掌握坐标轴与图例的设置与调整&#xff0c;对于提升数据可视化的清晰度和可读性至关重要。通过这些工具&#xff0c;可以有效地传达数据背后的故事&#xff0c;提高图表的表现力。 0x01 坐标轴 一、坐标轴的设置 1、修改坐标轴的标签 在ggplot2中&#xff0c;坐标轴是根据数…...

JDK中socket源码解析

目录 1、Java.net包 1. Socket通信相关类 2. URL和URI处理类 3. 网络地址和主机名解析类 4. 代理和认证相关类 5. 网络缓存和Cookie管理类 6. 其他网络相关工具类 2、什么是socket&#xff1f; 3、JDK中socket核心Api 4、核心源码 1、核心方法 2、本地方法 3、lin…...

Ansible自动化运维项目实战指南

Ansible自动化运维项目实战指南 在当今快速发展的IT环境中&#xff0c;运维工作的复杂性和规模性日益增加&#xff0c;传统的手动运维方式已难以满足高效、可靠、可重复性的需求。Ansible作为一款开源的自动化运维工具&#xff0c;凭借其简单易用、无需代理、基于SSH的架构特性…...

MySQL【知识改变命运】10

联合查询 0.前言1.联合查询在MySQL里面的原理2.练习一个完整的联合查询2.1.构造练习案例数据2.2 案例&#xff1a;⼀个完整的联合查询的过程2.2.1. 确定参与查询的表&#xff0c;学⽣表和班级表2.2.2. 确定连接条件&#xff0c;student表中的class_id与class表中id列的值相等2.…...

Java学习教程,从入门到精通, Java 基础语法(4)

1、Java 基础语法 一、Java 简介与开发环境搭建 Java 简介&#xff1a;Java 是一种面向对象的编程语言&#xff0c;具有跨平台、安全、稳定等特点。Java 主要应用于企业级应用、Android 应用开发、大数据处理等领域。开发环境搭建&#xff1a;搭建 Java 开发环境需要安装 JDK…...

反编译工具-Jclasslib的使用,与Java方法调用的探索

这里写目录标题 前言IDEA下查看字节码的两种方法使用idea自带的插件工具安装插件 为什么没有看出方法调用关系原因分析工厂举例 知识补充语言java可移植性 总结 前言 画时序图的时候&#xff0c;我想验证下方法的调用是否写的正确。方法调用不仅涉及到程序的基本逻辑流程&#…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...