1月第四讲:Java Web学生自习管理系统
一、项目背景与需求分析
随着网络技术的不断发展和学校规模的扩大,学生自习管理系统的需求日益增加。传统的自习管理方式存在效率低下、资源浪费等问题,因此,开发一个智能化的学生自习管理系统显得尤为重要。该系统旨在提高自习室的利用率和管理效率,为学生提供方便快捷的自习预约服务,同时为管理员提供高效的资源管理工具。
系统的主要功能需求包括:
1.用户管理:管理员和学生的注册、登录。
2.自习室管理:自习室类型、座位信息的录入和查询。
3.座位预约:学生预约自习室座位、查看预约状态和历史记录。
4.管理员操作:管理员查看预约情况、管理资源分配。
二、技术选型与架构设计
1.技术选型:
- 前端:HTML、CSS、JavaScript,用于创建用户界面。
- 后端:Java(JDK 1.8),Servlet,JSP,JDBC,用于处理业务逻辑和数据库交互。
- 数据库:MySQL,用于存储用户信息和自习室资源数据。
- 服务器:Apache Tomcat,用于部署和运行Web应用。
- 开发工具:IntelliJ IDEA 或 Eclipse,用于编写和调试代码。
2.架构设计:
三层架构:
- 表示层:JSP/HTML 作为前台与用户交互,Servlet 用于控制跳转和调用业务逻辑层。
- 业务逻辑层:处理业务逻辑,调用数据访问层。
- 数据访问层:与数据库交互,封装数据库操作。
三、数据库设计
1.用户表(users):存储用户信息。
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(50) NOT NULL,role VARCHAR(10) NOT NULL CHECK (role IN ('student', 'admin'))
);
2.自习室表(study_rooms):存储自习室信息。
CREATE TABLE study_rooms (id INT AUTO_INCREMENT PRIMARY KEY,room_name VARCHAR(50) NOT NULL,capacity INT NOT NULL
);
3.座位表(seats):存储座位信息。
CREATE TABLE seats (id INT AUTO_INCREMENT PRIMARY KEY,room_id INT NOT NULL,status VARCHAR(10) NOT NULL CHECK (status IN ('available', 'booked')),FOREIGN KEY (room_id) REFERENCES study_rooms(id)
);
4.预约表(reservations):存储预约信息。
CREATE TABLE reservations (id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,seat_id INT NOT NULL,start_time DATETIME NOT NULL,end_time DATETIME NOT NULL,FOREIGN KEY (user_id) REFERENCES users(id),FOREIGN KEY (seat_id) REFERENCES seats(id)
);
四、后端实现
1.数据库连接工具类(DBUtil.java):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DBUtil {private static final String DB_URL = "jdbc:mysql://localhost:3306/study_management";private static final String DB_USER = "root";private static final String DB_PASSWORD = "your_password";private static Connection connection = null;static {try {Class.forName("com.mysql.cj.jdbc.Driver");connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}}public static Connection getConnection() {return connection;}// 其他数据库操作方法(增删改查)
}
2.数据访问层(DAO):
-
UserDao.java:
import java.sql.*; import java.util.ArrayList; import java.util.List;public class UserDao {public boolean registerUser(String username, String password, String role) {String sql = "INSERT INTO users (username, password, role) VALUES (?, ?, ?)";try (PreparedStatement pst = DBUtil.getConnection().prepareStatement(sql)) {pst.setString(1, username);pst.setString(2, password);pst.setString(3, role);return pst.executeUpdate() > 0;} catch (SQLException e) {e.printStackTrace();return false;}}// 其他方法(登录、查询用户等) }
-
StudyRoomDao.java 和 SeatDao.java 以及 ReservationDao.java 的实现类似,包含各自的增删改查方法。
3.业务逻辑层(Service):
-
UserService.java:
public class UserService {public boolean register(String username, String password, String role) {return UserDao.registerUser(username, password, role);}// 其他方法(登录验证、查询用户信息等) }
-
StudyRoomService.java、SeatService.java 和 ReservationService.java 类似,包含各自的业务逻辑处理。
4. Servlet:
-
RegisterServlet.java:
import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException;public class RegisterServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");String role = request.getParameter("role");boolean isRegistered = UserService.register(username, password, role);if (isRegistered) {response.sendRedirect("login.jsp");} else {request.setAttribute("error", "Registration failed!");request.getRequestDispatcher("register.jsp").forward(request, response);}}// 其他方法(登录Servlet、预约Servlet等) }
5. JDBC工具类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class JDBCUtils {private static final String URL = "jdbc:mysql://localhost:3306/StudyManagementSystem?useSSL=false&serverTimezone=UTC";private static final String USER = "root";private static final String PASSWORD = "your_password"; // 请替换为您的数据库密码public static Connection getConnection() throws SQLException {return DriverManager.getConnection(URL, USER, PASSWORD);}
}
6. Servlet示例:添加学生
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;@WebServlet("/addStudent")
public class AddStudentServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");String major = request.getParameter("major");int grade = Integer.parseInt(request.getParameter("grade"));String phone = request.getParameter("phone");String sql = "INSERT INTO Student (name, major, grade, phone) VALUES (?, ?, ?, ?)";try (Connection conn = JDBCUtils.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, name);pstmt.setString(2, major);pstmt.setInt(3, grade);pstmt.setString(4, phone);pstmt.executeUpdate();response.sendRedirect("students.jsp"); // 重定向到学生列表页面} catch (SQLException e) {e.printStackTrace();request.setAttribute("error", "添加学生失败,请稍后再试!");request.getRequestDispatcher("addStudent.jsp").forward(request, response);}}
}
7. JSP页面示例:添加学生页面
<!-- addStudent.jsp -->
<!DOCTYPE html>
<html>
<head><title>添加学生</title>
</head>
<body><h2>添加学生</h2><form action="addStudent" method="post">姓名: <input type="text" name="name" required><br>专业: <input type="text" name="major" required><br>年级: <input type="number" name="grade" required><br>电话: <input type="text" name="phone" required><br><input type="submit" value="提交"></form><c:if test="${not empty error}"><p style="color:red;">${error}</p></c:if>
</body>
</html>
注意:为了使用JSP标签库(如<c:if>
),您需要在JSP页面顶部添加以下指令:
jsp复制代码<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
并且,您需要在项目的WEB-INF/lib
目录下添加JSTL库(如jstl-1.2.jar
)。
相关文章:“
https://book.qq.com/book-search/%E5%90%8D%E4%BC%98%E9%A6%86%E7%BD%91%E3%80%9023Y4.com%E3%80%91?c31a
https://book.qq.com/book-search/%E6%B5%B7%E8%A7%92%E7%A4%BE%E5%8C%BA%E3%80%9023Y4.com%E3%80%91?c31b
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E7%BD%91%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31c
https://book.qq.com/book-search/%E6%9E%9C%E5%86%BB%E4%BC%A0%E5%AA%92%E3%80%9023Y4.com%E3%80%91?c31d
https://book.qq.com/book-search/%E6%9E%9C%E5%86%BB%E4%BC%A0%E5%AA%92%E8%BF%9B23Y4.com%E7%9C%8B?c31e
https://book.qq.com/book-search/%E6%80%A7%E5%B7%B4%E5%85%8B%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31f
https://book.qq.com/book-search/%E7%88%B1%E5%A8%81%E5%A5%B6%E7%BD%91%E3%80%9023Y4.com%E3%80%91?c31g
https://book.qq.com/book-search/%E7%A6%81%E6%BC%AB%E5%A4%A9%E5%A0%82%E3%80%9023Y4.com%E3%80%91?c31h
https://book.qq.com/book-search/%E6%92%B8%E6%92%B8%E7%A4%BE%E7%BD%91%E3%80%9023Y4.com%E3%80%91?c31i
https://book.qq.com/book-search/%E6%8A%96%E9%98%B4%E4%B8%8B%E8%BD%BD%E3%80%8A23Y4.com%E3%80%8B?c31i
https://book.qq.com/book-search/%E6%8A%96%E9%98%B4%E7%BD%91%E7%AB%99%E3%80%9023Y4.com%E3%80%91?c31k
https://book.qq.com/book-search/%E4%B9%85%E4%B9%85%E7%83%AD%E7%9C%8B%E3%80%9023Y4.com%E3%80%91?c31l
https://book.qq.com/book-search/%E4%B9%85%E4%B9%85%E7%83%AD%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31m
https://book.qq.com/book-search/%E6%92%B8%E6%92%B8%E7%A4%BE%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31n
https://book.qq.com/book-search/%E4%B8%8B%E8%BD%BD%E6%8A%96%E9%98%B4%E3%80%9023Y4.com%E3%80%91?c31o
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E5%9C%B0%E5%9D%80%E3%80%9023Y4.com%E3%80%91?c31p
https://book.qq.com/book-search/%E7%9C%8B%E8%89%B3%E6%AF%8D%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c31q
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E7%9C%8B%E8%BF%99%E3%80%9023Y4.com%E3%80%91?c31r
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E5%9C%B0%E5%9D%80%E8%BF%9B23Y4.com%E7%9C%8B?c31s
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E5%9C%B0%E5%9D%80%E6%9D%A523Y4.com%E7%9C%8B?c31t
”
五、前端实现
1.注册页面(register.jsp):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Register</title>
</head>
<body><h1>Register</h1><form action="RegisterServlet" method="post">Username: <input type="text" name="username" required><br>Password: <input type="password" name="password" required><br>Role: <select name="role"><option value="student">Student</option><option value="admin">Admin</option></select><br><button type="submit">Register</button></form><c:if test="${not empty error}"><p style="color:red">${error}</p></c:if>
</body>
</html>
2.登录页面(login.jsp)
登录页面(login.jsp)** 和 其他页面(如自习室管理页面、座位预约页面等)类似,通过表单提交数据到相应的Servlet进行处理。
(1)项目结构
假设项目结构如下:
MyWebApp/
│
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── controller/
│ │ │ │ ├── LoginServlet.java
│ │ │ │ ├── StudyRoomServlet.java
│ │ │ │ └── SeatReservationServlet.java
│ │ │ └── model/
│ │ │ └── User.java
│ │ └── webapp/
│ │ ├── WEB-INF/
│ │ │ ├── web.xml
│ │ └──
│ │ ├── login.jsp
│ │ ├── studyRoom.jsp
│ │ └── seatReservation.jsp
(2) User
模型类
首先,定义一个简单的User
类来表示用户信息。
// src/main/java/com/example/model/User.java
package com.example.model;public class User {private String username;private String password;// Getters and Setterspublic String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}
(3)登录页面 (login.jsp
)
创建一个简单的登录页面。
<!-- src/main/webapp/login.jsp -->
<!DOCTYPE html>
<html>
<head><title>Login</title>
</head>
<body><h2>Login</h2><form action="login" method="post"><label for="username">Username:</label><input type="text" id="username" name="username" required><br><br><label for="password">Password:</label><input type="password" id="password" name="password" required><br><br><input type="submit" value="Login"></form><p>Or go to <a href="studyRoom.jsp">Study Room Management</a> or <a href="seatReservation.jsp">Seat Reservation</a> (without login).</p>
</body>
</html>
(4)登录处理Servlet (LoginServlet.java
)
处理登录表单提交的Servlet。
// src/main/java/com/example/controller/LoginServlet.java
package com.example.controller;import com.example.model.User;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// Simple hard-coded authentication for demo purposesif ("admin".equals(username) && "password123".equals(password)) {User user = new User();user.setUsername(username);user.setPassword(password);request.getSession().setAttribute("user", user);response.sendRedirect("studyRoom.jsp");} else {response.sendRedirect("login.jsp?error=true");}}
}
(5)自习室管理页面 (studyRoom.jsp
)
显示自习室管理页面(假设用户已登录)。
<!-- src/main/webapp/studyRoom.jsp -->
<!DOCTYPE html>
<html>
<head><title>Study Room Management</title>
</head>
<body><h2>Study Room Management</h2><%if (session.getAttribute("user") == null) {response.sendRedirect("login.jsp");return;}%><p>Welcome, <%= session.getAttribute("user").getUsername() %>!</p><p>This is where you can manage study rooms.</p><a href="logout">Logout</a>
</body>
</html>
JSP 复制 全屏
(6)座位预约页面 (seatReservation.jsp
)
显示座位预约页面(假设用户未登录也可访问)。
<!-- src/main/webapp/seatReservation.jsp -->
<!DOCTYPE html>
<html>
<head><title>Seat Reservation</title>
</head>
<body><h2>Seat Reservation</h2><p>You can reserve a seat here.</p><%if (session.getAttribute("user") != null) {out.println("<p>Logged in as: " + session.getAttribute("user").getUsername() + "</p>");} else {out.println("<p>You are not logged in. <a href='login.jsp'>Login</a> to see more options.</p>");}%><a href="login.jsp">Login</a>
</body>
</html>
(7)注销处理Servlet (LogoutServlet.java
)
处理用户注销的Servlet(未包含在代码中,但可以通过添加一个新的Servlet实现)。
相关文章:

1月第四讲:Java Web学生自习管理系统
一、项目背景与需求分析 随着网络技术的不断发展和学校规模的扩大,学生自习管理系统的需求日益增加。传统的自习管理方式存在效率低下、资源浪费等问题,因此,开发一个智能化的学生自习管理系统显得尤为重要。该系统旨在提高自习室的利用率和…...

【Redis】Redis 典型应用 - 缓存 (cache)
目录 1. 什么是缓存 2. 使用 Redis 作为缓存 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 4. 缓存的淘汰策略 5. 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿 关于缓存预热 (Cache preheating) 关于缓存穿透 (Cache penetration) 关于缓存雪崩 (Cache avalanche) 关…...

HTML——38.Span标签和字符实体
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>span标签和字符实体</title><style type"text/css">h1{text-align: center;}p{text-indent: 2em;}span{color: red;}</style></head><…...

ROS2+OpenCV综合应用--10. AprilTag标签码追踪
1. 简介 apriltag标签码追踪是在apriltag标签码识别的基础上,增加了小车摄像头云台运动的功能,摄像头会保持标签码在视觉中间而运动,根据这一特性,从而实现标签码追踪功能。 2. 启动 2.1 程序启动前的准备 本次apriltag标签码使…...

python Celery 是一个基于分布式消息传递的异步任务队列系统
Celery 是一个基于分布式消息传递的异步任务队列系统,主要用于处理耗时任务、定时任务和周期性任务。它能够将任务分配到多个工作节点(Worker)上执行,从而提高应用程序的性能和可扩展性。Celery 是 Python 生态中最流行的任务队列…...

嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别
引言:在现代嵌入式硬件设计中,开关元件作为电路中的重要组成部分,起着至关重要的作用。三种主要的开关元件——IGBT(绝缘栅双极型晶体管)、MOSFET(金属氧化物半导体场效应晶体管)和三极管&#…...

麒麟信安云在长沙某银行的应用入选“云建设与应用领航计划(2024)”,打造湖湘金融云化升级优质范本
12月26日,2024云计算产业和标准应用大会在北京成功召开。大会汇集政产学研用各方专家学者,共同探讨云计算产业发展方向和未来机遇,展示云计算标准化工作重要成果。 会上,云建设与应用领航计划(2024)建云用…...

好用的随机生成图片的网站
官网: Lorem Picsum 获取自定义大小的随机图像 https://picsum.photos/200/300 获取正方形图像 https://picsum.photos/200 获取特定类型的图像 通过添加到 /id/{image} url 的开头来获取特定图像。 https://picsum.photos/id/237/200/300 获取静态随机图像…...

添加 env 配置,解决import路径问题
添加 env 配置,解决import路径问题 { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid830387 “version”: “0.2.0”, “configurations”: [ {"name&q…...

Go work stealing 机制
Go语言的Work Stealing(工作窃取)机制是一种用于调度Goroutines(协程)的策略,其核心目的是最大化CPU使用率,减少任务调度的开销,并提高并发性能和吞吐量。以下是Go Work Stealing机制的详细解释…...

基础数据结构--二叉树
一、二叉树的定义 二叉树是 n( n > 0 ) 个结点组成的有限集合,这个集合要么是空集(当 n 等于 0 时),要么是由一个根结点和两棵互不相交的二叉树组成。其中这两棵互不相交的二叉树被称为根结点的左子树和右子树。 如图所示&am…...

《C++设计模式》策略模式
文章目录 1、引言1.1 什么是策略模式1.2 策略模式的应用场景1.3 本文结构概览 2、策略模式的基本概念2.1 定义与结构2.2 核心角色解析2.2.1 策略接口(Strategy)2.2.2 具体策略实现(ConcreteStrategy)2.2.3 上下文(Cont…...

JavaScript学习记录6
第一节 算数运算符 1. 概述 JavaScript 共提供10个算术运算符,用来完成基本的算术运算。 加法运算符x y减法运算符 x - y乘法运算符 x * y除法运算符x / y指数运算符x ** y余数运算符x % y自增运算符x 、x自减运算符--x 、x--数值运算符 x负数值运算符-x 减法、…...

如何在没有 iCloud 的情况下将数据从 iPhone 传输到 iPhone
概括 您可能会遇到将数据从 iPhone 转移到 iPhone 的情况,尤其是当您获得新的 iPhone 15/14 时,您会很兴奋并希望将数据转移到它。 使用iCloud最终可以做到这一点,但它的缺点也不容忽视,阻碍了你选择它。例如,您需要…...

Doris安装部署
Doris 概述 Apache Doris由百度大数据部研发(之前叫百度 Palo,2018年贡献到 Apache 社区后,更名为 Doris ),在百度内部,有超过200个产品线在使用,部署机器超过1000台,单一业务最大可…...

[服务器][教程]Ubuntu24.04 Server开机自动挂载硬盘教程
1. 查看硬盘ID ls -l /dev/disk/by-uuid可以看到对应的UUID所对应的分区 2. 创建挂载文件夹 创建好文件夹即可 3. 修改配置文件 sudo vim /etc/fstab把对应的UUID和创建的挂载目录对应即可 其中# Personal mount points下面的是自己新添加的 :分区定位ÿ…...

io多路复用, select, poll, epoll
系列文章目录 异步I/O操作函数aio_xxx函数 https://blog.csdn.net/surfaceyan/article/details/134710393 文章目录 系列文章目录前言一、5种IO模型二、IO多路复用APIselectpollepoll 三、两种高效的事件处理模式Reactor模式Proactor模式模拟 Proactor 模式基于事件驱动的非阻…...

k8s-1.28.2 部署prometheus
一、prometheus helm仓库 ## 网站地址 # https://artifacthub.io/## prometheus 地址 # https://artifacthub.io/packages/helm/prometheus-community/prometheus. # helm repo add prometheus-community https://prometheus-community.github.io/helm-charts # helm repo …...

记录第一次跑YOLOV8做目标检测
今天是24年的最后一天,终于要向新世界开始破门了,开始深度学习,YOLO来敲门~ 最近做了一些皮肤检测的功能,在传统的处理中经历了反复挣扎,终于要上YOLO了。听过、看过,不如上手体会过~ 1、YOLO是什么&#x…...

使用Python爬取BOSS直聘职位数据并保存到Excel
使用Python爬取BOSS直聘职位数据并保存到Excel 在数据分析和挖掘中,爬取招聘网站数据是一项常见的任务。本文将详细介绍如何使用Python爬取BOSS直聘上与“测试工程师”相关的职位数据,并将其保存到Excel文件中。通过逐步分解代码和添加详细注释…...

node.js之---集群(Cluster)模块
为什么会有集群(Cluster)模块? 集群(Cluster)模块的作用 如何使用集群(Cluster)模块? 为什么会有集群(Cluster)模块 Node.js 是基于 单线程事件驱动 模型的…...

SSM-Spring-IOC/DI对应的配置开发
目录 一、IOC 控制反转 1.什么是控制反转呢 2. Spring和IOC之间的关系是什么呢? 3.IOC容器的作用以及内部存放的是什么? 4.当IOC容器中创建好service和dao对象后,程序能正确执行么? 5.Spring 容器管理什么内容? 6.如何将需要管理的对象交给 …...

一文大白话讲清楚CSS元素的水平居中和垂直居中
文章目录 一文大白话讲清楚CSS元素的水平居中和垂直居中1.已知元素宽高的居中方案1.1 利用定位margin:auto1.2 利用定位margin负值1.3 table布局 2.未知元素宽高的居中方案2.1利用定位transform2.2 flex弹性布局2.3 grid网格布局 3. 内联元素的居中布局 一文大白话讲清楚CSS元素…...

航顺芯片推出HK32A040方案,赋能汽车矩阵大灯安全与智能化升级
汽车安全行驶对整车照明系统的要求正在向智能化方向发展。车灯位于汽车两侧,前期有各种各样的实现包括氙气灯、LED灯等等光源技术。矩阵大灯对汽车照明系统朝着安全性和智能化兼具的方向发展起到了重要推动作用。矩阵大灯可以精细控制到每一个小灯珠,从而…...

智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之12 方案再探:特定于领域的模板 之2 首次尝试和遗留问题解决
本文提要 现在就剩下“体”本身的 约定了--这必然是 自律自省的,或者称为“戒律” --即“体”的自我训导discipline。完整表述为: 严格双相的庄严“相” (<head>侧),完全双性的本质“性”(<boot>侧&…...

redis zset底层实现
1.Redis zset底层实现 转载自:https://marticles.github.io/2019/03/19/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Redis-Zset%E5%8E%9F%E7%90%86/ zset底层是压缩列表 跳表实现的。 跳表里面又由字典hash表 跳表实现。 什么时候用压缩列表?什么时候用…...

go.Bar如何让hovertext显示为legend
在 Plotly 的 go.Bar 图中,如果你想让鼠标悬停时 (hover) 显示的文本 (hovertext) 与图例 (legend) 一致,可以通过 hovertemplate 来控制悬停时的显示内容。 实现方法 hovertemplate 是一种自定义工具,允许你完全控制悬停时的文本显示格式。…...

【Vue】分享一个快速入门的前端框架以及如何搭建
先上效果图: 登录 菜单: 下载地址: 链接:https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取码:ui20 … 主要是可以自定义设置token,更改后端请求地址较为方便。 应用设置: 登录与token设置: 在这里设置不用登录,可以请求的接口: request.js i…...

Flink源码解析之:如何根据JobGraph生成ExecutionGraph
Flink源码解析之:如何根据JobGraph生成ExecutionGraph 在上一篇Flink源码解析中,我们介绍了Flink如何根据StreamGraph生成JobGraph的流程,并着重分析了其算子链的合并过程和JobGraph的构造流程。 对于StreamGraph和JobGraph的生成来说&…...

UE(虚幻)学习(三) UnrealSharp插件中调用非托管DLL
上一篇文章中我使用UnrealSharp成功使用了我的一个C#控制台程序中的网络模块,这个程序是基于KCP网络了,其中调用了Cmake 编译的一个C的DLL,在虚幻中DLL需要放在Binaries目录中才可以。Unity中只要放在任意Plugins目录中就可以。 但是Binaries…...