企業信息管理系統開發實戰:基于 Spring Boot+MyBatis+Thymeleaf

引言:企業信息管理系統的核心價值

在企業日常運營中,高效的信息管理是提升效率的關鍵。本文將手把手教你開發一套企業信息管理系統,涵蓋用戶登錄、信息增刪改查、權限控制等核心功能。系統采用 Spring Boot 作為后端框架,MyBatis 處理數據交互,Thymeleaf 實現前端頁面渲染,Druid 作為數據源保障性能,最終形成一套輕量、易用、可擴展的企業級解決方案。

一、系統架構與技術棧

1.1 系統功能概述

本系統聚焦企業用戶信息管理,核心功能包括:

  • 用戶登錄 / 退出(含權限攔截)
  • 用戶信息列表展示
  • 用戶信息添加、修改、刪除
  • 前端頁面動態渲染與交互

1.2 技術棧選擇

  • 后端:Spring Boot 3.2.8(框架核心)、MyBatis 3.0.3(ORM 框架)、Druid 1.2.20(數據源)
  • 前端:Thymeleaf 3.1.2(模板引擎)、HTML5/CSS3(頁面結構與樣式)、jQuery 3.7.1(前端交互)
  • 數據庫:MySQL 8.0(數據存儲)
  • 開發工具:IntelliJ IDEA、Maven(依賴管理)

二、環境搭建與項目初始化

2.1 數據庫設計

首先創建系統所需的數據庫表,以my_user表為例(存儲用戶信息):

SET FOREIGN_KEY_CHECKS=0;-- 用戶表結構
DROP TABLE IF EXISTS `my_user`;
CREATE TABLE `my_user` (`pid` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',`username` varchar(255) DEFAULT NULL COMMENT '用戶名',`password` varchar(255) DEFAULT NULL COMMENT '密碼',`p_addr` varchar(255) DEFAULT NULL COMMENT '地址(下劃線命名)',`gender` int(11) DEFAULT NULL COMMENT '性別(1-男,0-女)',`birth` date DEFAULT NULL COMMENT '生日',PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用戶信息表';-- 初始化測試數據
INSERT INTO `my_user` VALUES (1, 'zhangsan', '123', '北京', 1, '2020-06-14');

2.2 項目結構設計

遵循 Spring Boot 最佳實踐,項目結構如下:

src/
├── main/
│   ├── java/com/qcby/inforcontrollersystem/
│   │   ├── config/           # 配置類(Druid、MyBatis、MVC等)
│   │   ├── controller/       # 控制器(處理請求)
│   │   ├── entity/           # 實體類(與數據庫表映射)
│   │   ├── interceptor/      # 攔截器(登錄驗證等)
│   │   ├── mapper/           # MyBatis映射接口
│   │   ├── service/          # 業務邏輯層(含Impl實現)
│   │   └── InforControllerSystemApplication.java  # 啟動類
│   ├── resources/
│   │   ├── application.yaml  # 主配置文件
│   │   ├── static/           # 靜態資源(css、images、js)
│   │   └── templates/        # Thymeleaf模板(login.html、main.html等)
└── test/                      # 單元測試目錄

2.3 核心依賴配置(pom.xml)

通過 Maven 管理依賴,關鍵依賴如下:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.8</version>
</parent><dependencies><!-- Spring Boot Web核心 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Thymeleaf模板引擎 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- MyBatis整合 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><!-- Druid數據源(適配Spring Boot 3) --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.20</version></dependency><!-- MySQL驅動 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!-- jQuery(WebJars方式) --><dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.7.1</version></dependency><!-- 測試依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

三、核心配置詳解

3.1 數據源配置(Druid)

Druid 作為高性能數據源,需配置連接池參數和監控功能,創建DruidConfig.java

package com.qcby.inforcontrollersystem.config;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;@Configuration
public class DruidConfig {// 綁定application.yaml中spring.datasource前綴的配置@Bean@ConfigurationProperties(prefix = "spring.datasource")public DataSource dataSource() {return new DruidDataSource();}
}

3.2 MyBatis 配置(解決駝峰映射)

數據庫表字段采用下劃線命名(如p_addr),實體類采用駝峰命名(如pAddr),需配置映射規則:

package com.qcby.inforcontrollersystem.config;import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisConfig {@Beanpublic ConfigurationCustomizer configurationCustomizer() {// 開啟下劃線轉駝峰映射return configuration -> configuration.setMapUnderscoreToCamelCase(true);}
}

3.3 MVC 配置(視圖映射與攔截器)

配置頁面路由和登錄攔截器,確保未登錄用戶無法訪問核心功能:

package com.qcby.inforcontrollersystem.config;import com.qcby.inforcontrollersystem.interceptor.LoginInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.util.ArrayList;
import java.util.List;@Configuration
@MapperScan("com.qcby.inforcontrollersystem.mapper") // 掃描MyBatis Mapper接口
public class TxMvcConfig implements WebMvcConfigurer {// 視圖映射:直接將請求路徑映射到模板頁面@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/toLogin").setViewName("login"); // /toLogin -> login.htmlregistry.addViewController("/index").setViewName("index");   // /index -> index.htmlregistry.addViewController("/menu").setViewName("menu");     // /menu -> menu.html}// 注冊攔截器:攔截未登錄用戶@Overridepublic void addInterceptors(InterceptorRegistry registry) {List<String> excludePaths = new ArrayList<>();// 排除登錄頁、靜態資源等不需要攔截的路徑excludePaths.add("/css/**");excludePaths.add("/images/**");excludePaths.add("/toLogin");excludePaths.add("/login");registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") // 攔截所有請求.excludePathPatterns(excludePaths); // 排除指定路徑}
}

四、核心功能實現

4.1 實體類設計(MyUser.java)

my_user表映射,包含用戶基本信息:

package com.qcby.inforcontrollersystem.entity;import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;public class MyUser {private Integer pid;         // 主鍵private String username;     // 用戶名private String password;     // 密碼private String pAddr;        // 地址(駝峰命名,對應表中p_addr)private Integer gender;      // 性別@DateTimeFormat(pattern = "yyyy-MM-dd") // 日期格式轉換private Date birth;          // 生日// 構造方法、Getter、Setter(省略,需手動生成)
}

4.2 登錄攔截器(LoginInterceptor.java)

攔截未登錄用戶,強制跳轉至登錄頁:

package com.qcby.inforcontrollersystem.interceptor;import com.qcby.inforcontrollersystem.entity.MyUser;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession();MyUser user = (MyUser) session.getAttribute("user"); // 從Session獲取用戶信息if (user == null) {// 未登錄,重定向到登錄頁response.sendRedirect(request.getContextPath() + "/toLogin");return false;}// 已登錄,放行return true;}
}

4.3 數據訪問層(Mapper 接口)

通過 MyBatis 注解實現數據庫操作:

package com.qcby.inforcontrollersystem.mapper;import com.qcby.inforcontrollersystem.entity.MyUser;
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Map;public interface MyUserMapper {// 新增用戶(自增主鍵回寫)@Options(useGeneratedKeys = true, keyProperty = "pid")@Insert("insert into my_user(username, password, p_addr, gender, birth) " +"values(#{username}, #{password}, #{pAddr}, #{gender}, #{birth})")void insert(MyUser user);// 查詢所有用戶@Select("select * from my_user")List<MyUser> selectUsers();// 登錄驗證(根據用戶名和密碼查詢)@Select("select * from my_user where username = #{username} and password = #{password}")MyUser selectUsersByUsernameAndPassword(Map<String, String> map);// 根據ID查詢用戶(用于修改)@Select("select * from my_user where pid = #{pid}")MyUser selectUserById(int pid);// 更新用戶信息@Update("update my_user set username=#{username}, password=#{password}, p_addr=#{pAddr}, " +"gender=#{gender}, birth=#{birth} where pid=#{pid}")void update(MyUser user);// 刪除用戶@Delete("delete from my_user where pid = #{pid}")void delete(int pid);
}

4.4 業務邏輯層(Service)

封裝業務邏輯,調用 Mapper 接口:

// 接口定義
package com.qcby.inforcontrollersystem.service;import com.qcby.inforcontrollersystem.entity.MyUser;
import java.util.List;
import java.util.Map;public interface MyUserService {void insert(MyUser user);List<MyUser> selectUsers();MyUser selectUsersByUsernameAndPassword(Map<String, String> map);MyUser selectUserById(int pid);void update(MyUser user);void delete(int pid);
}// 實現類
package com.qcby.inforcontrollersystem.service.Impl;import com.qcby.inforcontrollersystem.entity.MyUser;
import com.qcby.inforcontrollersystem.mapper.MyUserMapper;
import com.qcby.inforcontrollersystem.service.MyUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;@Service
@Transactional // 開啟事務管理
public class MyUserServiceImpl implements MyUserService {@Autowiredprivate MyUserMapper userMapper;@Overridepublic void insert(MyUser user) {userMapper.insert(user);}@Overridepublic List<MyUser> selectUsers() {return userMapper.selectUsers();}@Overridepublic MyUser selectUsersByUsernameAndPassword(Map<String, String> map) {return userMapper.selectUsersByUsernameAndPassword(map);}@Overridepublic MyUser selectUserById(int pid) {return userMapper.selectUserById(pid);}@Overridepublic void update(MyUser user) {userMapper.update(user);}@Overridepublic void delete(int pid) {userMapper.delete(pid);}
}

4.5 控制器(Controller)

處理前端請求,協調視圖與數據:

(1)登錄控制器(LoginController.java)
package com.qcby.inforcontrollersystem.controller;import com.qcby.inforcontrollersystem.entity.MyUser;
import com.qcby.inforcontrollersystem.service.MyUserService;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.HashMap;
import java.util.Map;@Controller
public class LoginController {@Autowiredprivate MyUserService myUserService;// 跳轉到登錄頁@GetMapping("/toLogin")public String toLogin() {return "login";}// 處理登錄請求@PostMapping("/login")public String login(HttpSession session, String username, String password, Model model) {Map<String, String> map = new HashMap<>();map.put("username", username);map.put("password", password);MyUser user = myUserService.selectUsersByUsernameAndPassword(map);if (user != null) {// 登錄成功,將用戶信息存入Sessionsession.setAttribute("user", user);return "redirect:/index"; // 重定向到首頁} else {// 登錄失敗,回顯錯誤信息model.addAttribute("tip", "用戶名或密碼錯誤");return "login";}}// 退出登錄@GetMapping("/logout")public String logout(HttpSession session) {session.invalidate(); // 清除Sessionreturn "redirect:/toLogin";}
}
(2)用戶管理控制器(UserController.java)
package com.qcby.inforcontrollersystem.controller;import com.qcby.inforcontrollersystem.entity.MyUser;
import com.qcby.inforcontrollersystem.service.MyUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;@Controller
public class UserController {@Autowiredprivate MyUserService myUserService;// 展示用戶列表@GetMapping("/main")public String showUserList(Model model) {List<MyUser> users = myUserService.selectUsers();model.addAttribute("users", users); // 存入模型,供前端渲染return "main";}// 跳轉到添加用戶頁面@GetMapping("/add")public String toAddPage() {return "add";}// 保存新用戶@PostMapping("/save")public String saveUser(MyUser user, @RequestParam String birth) {try {// 轉換日期格式(前端傳遞字符串,需轉為Date)if (birth != null && !birth.isEmpty()) {user.setBirth(new SimpleDateFormat("yyyy-MM-dd").parse(birth));}myUserService.insert(user);} catch (ParseException e) {e.printStackTrace();}return "redirect:/main"; // 重定向到列表頁}// 跳轉到修改頁面(攜帶用戶ID)@GetMapping("/getUser")public String toUpdatePage(@RequestParam int pid, Model model) {MyUser user = myUserService.selectUserById(pid);model.addAttribute("user", user); // 回顯用戶信息return "update";}// 更新用戶信息@PostMapping("/update")public String updateUser(MyUser user, @RequestParam String birth) {try {if (birth != null && !birth.isEmpty()) {user.setBirth(new SimpleDateFormat("yyyy-MM-dd").parse(birth));}myUserService.update(user);} catch (ParseException e) {e.printStackTrace();}return "redirect:/main";}// 刪除用戶@GetMapping("/delete")public String deleteUser(@RequestParam int pid) {myUserService.delete(pid);return "redirect:/main";}
}

五、前端頁面實現(Thymeleaf 模板)

5.1 登錄頁(login.html)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>用戶登錄</title><link th:href="@{/css/login.css}" rel="stylesheet"> <!-- 引入CSS --><script th:src="@{/webjars/jquery/3.7.1/jquery.min.js}"></script> <!-- 引入jQuery --><script>// 登錄表單驗證function login1() {const username = $("input[name='username']").val().trim();const password = $("input[name='password']").val().trim();if (!username) {alert("請輸入用戶名");return;}if (!password) {alert("請輸入密碼");return;}$("form").submit(); // 提交表單}</script>
</head>
<body>
<div id="login"><div id="top"><div id="top_left"><img th:src="@{/images/login_03.gif}" alt="系統Logo"></div></div><form th:action="@{/login}" method="post"><div id="center"><div id="center_middle"><!-- 登錄錯誤提示 --><div style="color: red; text-align: center" th:text="${tip}"></div><div id="user">用戶名:<input type="text" name="username" placeholder="請輸入用戶名"></div><div id="password">密碼:<input type="password" name="password" placeholder="請輸入密碼"></div><div id="btn"><a href="#" onclick="login1()">登錄</a><a href="#" onclick="$('form')[0].reset()">清空</a></div></div></div></form>
</div>
</body>
</html>

5.2 用戶列表頁(main.html)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>用戶列表</title><style>.mt { margin: 20px auto; width: 90%; border-collapse: collapse; }.mt th, .mt td { border: 1px solid #ddd; padding: 10px; text-align: center; }.add-btn { margin: 20px 0 0 5%; padding: 6px 12px; background: #4CAF50; color: white; text-decoration: none; }</style>
</head>
<body>
<!-- 添加用戶按鈕 -->
<a th:href="@{/add}" class="add-btn">添加用戶</a><!-- 用戶列表表格 -->
<table class="mt"><tr><th>用戶名</th><th>密碼</th><th>地址</th><th>性別</th><th>生日</th><th>操作</th></tr><!-- 遍歷用戶列表(Thymeleaf語法) --><tr th:each="user : ${users}"><td th:text="${user.username}"></td><td th:text="${user.password}"></td><td th:text="${user.pAddr}"></td><td th:text="${user.gender == 1 ? '男' : '女'}"></td> <!-- 性別轉換 --><td th:text="${#calendars.format(user.birth, 'yyyy-MM-dd')}"></td> <!-- 日期格式化 --><td><a th:href="@{/getUser(pid=${user.pid})}">修改</a><a th:href="@{/delete(pid=${user.pid})}" onclick="return confirm('確定刪除?')">刪除</a></td></tr>
</table>
</body>
</html>

5.3 添加用戶頁(add.html)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>添加用戶</title><style>.mt { margin: 30px auto; border-collapse: collapse; }.mt td { padding: 10px; }input { padding: 6px; width: 250px; }</style>
</head>
<body>
<form th:action="@{/save}" method="post"><table class="mt"><tr><td>用戶名</td><td><input type="text" name="username" required></td></tr><tr><td>密碼</td><td><input type="password" name="password" required></td></tr><tr><td>地址</td><td><input type="text" name="pAddr"></td></tr><tr><td>性別</td><td><input type="radio" name="gender" value="1" checked>男<input type="radio" name="gender" value="0">女</td></tr><tr><td>生日</td><td><input type="date" name="birth"></td></tr><tr><td></td><td><input type="submit" value="保存"></td></tr></table>
</form>
</body>
</html>

六、系統配置文件(application.yaml)

統一配置數據源、MyBatis 等參數:

spring:datasource:username: rootpassword: rooturl: jdbc:mysql://localhost:3306/boot_demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource# Druid連接池參數initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsefilters: stat,wall  # 開啟監控和防火墻# MyBatis配置
mybatis:mapper-locations: classpath:mapper/*.xml  # 若使用XML映射,需指定路徑type-aliases-package: com.qcby.inforcontrollersystem.entity  # 實體類別名

七、系統測試與運行

  1. 啟動項目:運行InforControllerSystemApplication.javamain方法,Spring Boot 內置 Tomcat 啟動,默認端口 8080。
  2. 訪問登錄頁:瀏覽器輸入http://localhost:8080/toLogin,使用初始化數據(用戶名zhangsan,密碼123)登錄。
  3. 功能驗證
    • 登錄成功后跳轉至首頁,展示用戶列表;
    • 點擊 "添加用戶",填寫信息后保存,列表頁會新增記錄;
    • 點擊 "修改" 可更新用戶信息,點擊 "刪除" 可移除記錄;
    • 未登錄時直接訪問/main會被攔截,強制跳轉至登錄頁。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90454.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NLP自然語言處理的一些疑點整理

PyTorch評估模式&#xff08;torch.no_grad和model.eval&#xff09;差異在PyTorch中&#xff0c;model.eval()和torch.no_grad()是模型評估和推理階段的兩個關鍵工具&#xff0c;它們各自扮演著不同的角色&#xff0c;但常常被一起使用以確保模型行為的正確性和計算效率。理解…

物流倉儲自動化升級:Modbus TCP與DeviceNet的協議融合實踐

一、項目背景在我們物流廠的日常運營中&#xff0c;分揀效率和倉儲精準度一直是瓶頸。傳統人工分揀不僅速度慢&#xff0c;還容易因疲勞出錯&#xff1b;倉儲區域的貨物定位全靠人工記錄&#xff0c;時常出現找貨難、盤點耗時的問題。生產線的核心控制依賴施耐德PLC&#xff0c…

產品動態 | 同創永益IStorM Chaos 混沌工程平臺V4.0震撼發布:智能驅動,筑牢系統穩定性防線

當混沌工程從試點走向企業級大規模推廣&#xff0c;標準化缺失、專家依賴高、實施效率低等痛點成為阻礙系統穩定性升級的 “攔路虎”。此刻&#xff0c;同創永益重磅推出IStorM Chaos 混沌工程平臺 V4.0&#xff0c;以智能技術為核心驅動力&#xff0c;為企業構建更高效、更靈活…

C++中的反向迭代器

C中的反向迭代器 為啥反向迭代器的講解要單獨拎出來講&#xff0c;沒有在講各個容器的時候順手講了呢&#xff1f; 主要是因為c中的反向迭代器和正向迭代器的實現不太一樣。 它思想不復雜&#xff0c;主要是巧。來&#xff0c;我們按照我們剛剛的想法把代碼寫出來 #pragma once…

【一步步ai】數據增強與預處理

提升NL2SQL系統性能是一個復雜的多維度優化問題&#xff0c;涉及數據工程、模型架構、訓練策略和評估方法等多個層面。以下是一些有效的提升方向和具體方法&#xff1a; 一、數據增強與預處理 多樣化數據生成 模板擴展&#xff1a;基于SQL語法模板自動生成多樣化的NL-SQL對&am…

站在哪個肩膀上開始學習卡爾曼濾波

站在哪個肩膀上開始學習卡爾曼濾波前言從自適應濾波的角度正交性原理到維納解kalman濾波的提出innovation process新息過程kalman濾波算法Kalman 自適應濾波器算法初始條件輸入觀測向量過程已知參數計算&#xff1a;n1&#xff0c;2&#xff0c;3&#xff0c;..參考前言 不知道…

什么是FCR,如何提升FCR?

? FCR&#xff08;First Call Resolution&#xff0c;首次呼叫解決率&#xff09;&#xff0c;意思是指客戶首次聯系客服時&#xff0c;問題在單次交互中被完全解決的比率。? ?FCR &#xff08;首次解決的通話量 / 總首次通話量&#xff09; 100%一、關鍵要點&…

【瀏覽器插件沖突】Edge瀏覽器加載不出來CSDN創作者中心

【瀏覽器插件沖突】Edge瀏覽器加載不出來CSDN創作者中心寫在最前面報錯GPT的全部回復&#xff0c;可以參考&#x1f50d; 具體錯誤解釋&#xff1a;1. **CORS錯誤**2. **XHR 請求失敗**3. **ReaderArticleFinder / Readability**&#x1f6e0;? 為什么頁面沒有內容顯示&#x…

從零開發Java坦克大戰:架構設計與難點突破 (下)

6. 游戲引擎類:6.1 完整源碼展示: import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import java.util.HashSet; import java.util.Random; import java.util.Set;public class Gam…

Git下載與安裝全攻略

引言 Git是當今最流行的分布式版本控制系統&#xff0c;由Linus Torvalds于2005年創建。它幫助開發者高效管理代碼變更&#xff0c;支持多人協作開發&#xff0c;是現代軟件開發不可或缺的工具。無論是個人項目還是團隊協作&#xff0c;Git都能提供強大的版本控制功能。 本文…

【Elasticsearch】快照生命周期管理 SLM(理論篇)

《Elasticsearch 集群》系列&#xff0c;共包含以下文章&#xff1a; 1?? 冷熱集群架構2?? 合適的鍋炒合適的菜&#xff1a;性能與成本平衡原理公式解析3?? ILM&#xff08;Index Lifecycle Management&#xff09;策略詳解4?? Elasticsearch 跨機房部署5?? 快照與恢…

深入理解 UDP 協議:從原理到實戰的技術解析

UDP&#xff08;User Datagram Protocol&#xff0c;用戶數據報協議&#xff09;作為 TCP 的 "輕量型伙伴"&#xff0c;在實時通信、流媒體傳輸等場景中發揮著不可替代的作用。與 TCP 的可靠傳輸不同&#xff0c;UDP 以 "簡單、快速、無連接" 為設計理念&a…

c語言-數據結構-沿順相同樹解決對稱二叉樹問題的兩種思路

二叉樹OJ前言對稱二叉樹前言 本篇繼續講解二叉樹OJ題目之對稱二叉樹 對稱二叉樹 題目鏈接&#xff1a;https://leetcode.cn/problems/symmetric-tree/description/ 該題要求比較這棵樹是否對稱&#xff0c;對稱&#xff0c;指的是結構對稱并且值也要對稱&#xff0c;即對應…

云原生可觀測-日志觀測(Loki)最佳實踐

一、Loki 簡介 云原生可觀測三大支柱 支柱工具用途MetricsPrometheus性能趨勢、系統負載LogsLoki原始事件記錄、錯誤診斷TracesTempo / Jaeger分布式鏈路追蹤 一、Loki 簡介 1.1 Loki 是什么 Loki 是由 Grafana Labs 開發的 日志聚合系統&#xff0c;與 Prometheus 架構一…

Windows Server 2003 R2系統C盤擴容教程

一、PAGreen軟件下載 下載地址&#xff1a; ExtPart.zip https://pan.baidu.com/s/1FxK61XNI0t-4JIEWK1QA8Q?pwd8888 提取碼: 8888 二、將軟件解壓縮 (1)、執行步驟一下載的程序 雙擊下圖所示可執行程序 (2)、選擇好解壓路徑&#xff0c;點擊「Unzip」進行解壓縮 (3)、磁…

Kubernetes配置管理

目錄什么是ConfigMap創建ConfigMap1&#xff1a;基于目錄創建ConfigMap1.創建conf目錄&#xff0c;放置文件2.基于目錄下的所有文件創建ConfigMap3.查看當前創建的ConfigMap2&#xff1a;基于文件創建ConfigMap1.單個文件創建ConfigMap2.使用帶有key的命令創建ConfigMap3.多個文…

golang怎么實現每秒100萬個請求(QPS),相關系統架構設計詳解

一.需求 使用Golang,以Gin框架為基礎,設計一個能夠處理每秒100萬請求(QPS 1M)的系統架構 注意:100萬QPS是一個很高的數字,單機通常難以處理,所以必須采用分布式架構,并且需要多層次的架構設計和優化 二.搭建步驟 1.系統架構設計 為了實現高并發,需要考慮以下幾個方面…

HCIA再復習

第一章.網絡基礎1.1 網絡類型分類網絡按照二層鏈路類型分為以下四種&#xff1a;多點接入網絡&#xff08;MA&#xff09;&#xff1a;1&#xff0c;廣播型多點接入&#xff08;BMA&#xff09;&#xff1a;如以太網&#xff0c;支持廣播&#xff0c;設備通過MAC地址通信&#…

Qt 數據庫連接池實現與管理

在 Qt 應用程序中&#xff0c;頻繁創建和銷毀數據庫連接會帶來顯著的性能開銷。數據庫連接池通過復用現有連接&#xff0c;避免重復創建和銷毀連接的開銷&#xff0c;從而提高應用程序的響應速度和吞吐量。本文將詳細介紹 Qt 中數據庫連接池的實現與管理方法。 一、數據庫連接池…

數據采集分析:從信息洪流中掘金的科學與藝術

——如何將原始數據轉化為商業決策的黃金&#xff1f;&#x1f310; 引言&#xff1a;我們正淹沒在數據的海洋&#xff0c;卻渴求著知識的甘泉每天全球產生 2.5萬億字節 數據&#xff08;相當于每秒下載4.5萬部高清電影&#xff09;&#xff0c;但未經分析的數據如同未提煉的原…