(免费分享)基于 SpringBoot 的高校宿舍管理系统带论文
项目描述
系统代码质量高,功能强大,带论文。
系统的功能主要有:
(1)基本信息管理
基本信息分为学生信息和宿舍信息两部分,其功能是负责维护这些信息,对
它们进行增删查改等操作。
(2)宿舍分配管理
根据给定的宿舍信息与学生信息,按照一定的规则自动地给还未分配宿舍的
学生分配宿舍,学生可在该宿舍内自选床位,最终的宿舍分配信息可以以文件形
式(如 Excel 表格)导出。
(3)宿舍日常管理
主要包括卫生管理、报修管理、留言管理等。
卫生管理:记录并维护卫生检查信息。
报修管理:添加、查看、修改报修单信息。
留言管理:包括发布公告、失物招领、普通留言以及对这些信息的维护。
(4)离返校管理
对节假日学生的去向、寒暑假学生的留校以及返校登记信息进行统计及管
理,并以图表形式呈现统计信息。
(5)综合查询管理
包括查找学生信息、各楼栋/专业的学生宿舍分配情况、卫生检查情况、学
生离返校及留校信息、指定类型的留言、查看宿舍成员等。
运行环境
idea/eclipse+mysql5.7+jdk1.8+maven3
项目技术
springboot + layui
免费领取下载链接-关注底部gongzhonghao:033
免费领取下载链接-关注底部gongzhonghao:033
免费领取下载链接-关注底部gongzhonghao:033package com.usc.lzh.doms.service.impl;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.usc.lzh.doms.entity.*;
import com.usc.lzh.doms.mapper.DorMMapper;
import com.usc.lzh.doms.service.DorMService;
import com.usc.lzh.doms.utils.MyStringUtil;
import com.usc.lzh.doms.vo.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.xmlbeans.impl.xb.xsdschema.All;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;@Service
public class DorMServiceImpl implements DorMService {@Resourceprivate DorMMapper dormMapper;@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;/*** 查找报修信息** @param riVo 分页查询的参数,负责的楼栋编号* @return*/@Overridepublic List<RepairInfo> findRepairInfoListByPage(RepairInfoVo riVo) {List<RepairInfo> list = dormMapper.findRepairInfoListByPage(riVo);return dealString(list);}// 解析brcode填充brarea/brbid/brrid和格式化日期字符串private List<RepairInfo> dealString(List<RepairInfo> list) {for (int i = 0; i < list.size(); i++) {String brcode = list.get(i).getBrcode().trim();String subtime = list.get(i).getSubtime();// 截取空格前的字符串,使日期格式为yy-MM-ddString date = MyStringUtil.timeTodate(subtime);list.get(i).setSubtime(date);String[] brArr = brcode.split("#");list.get(i).setBrarea(MyStringUtil.getBrarea(brArr[0]));list.get(i).setBrbid(brArr[1]);list.get(i).setBrrid(brArr[2]);}return list;}/*** 导出报修信息** @param brcode 宿舍楼编号* @param statusCode 报修状态* @return*/public List<RepairInfo> exportRepairInfo(String brcode, String statusCode) {String status = transStatusCode(statusCode);List<RepairInfo> list = dormMapper.exportRepairInfo(brcode, status);return dealString(list);}// 转换statusCode为数据库中的statusprivate String transStatusCode(String status) {if (status != null && !status.equals("")) {Integer statusCode = Integer.parseInt(status.trim());switch (statusCode) {case 1:status = "已处理";break;case 2:status = "未处理";break;case 3:status = "正在处理";break;}} else {status = "";}return status;}/*** 批量更改报修状态** @param params ids和status*/@Overridepublic boolean batchEditRepairStatus(String params) {try {// 将前端json数据解析出来JSONArray jsonArray = JSONArray.parseArray(params);JSONObject jsonObject = jsonArray.getJSONObject(0);String statusCode = (String) jsonObject.get("status");String status = transStatusCode(statusCode);// ids为要更新状态的报修单编号String ids = jsonObject.get("ids").toString();// 去掉两边的[]ids = ids.substring(1, ids.length() - 1);// 转为String字符串String[] idsArray = ids.split(",");// 字符数组转为int数组int[] array = Arrays.stream(idsArray).mapToInt(Integer::parseInt).toArray();// int数组转为List,装箱List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());dormMapper.batchEditRepairStatus(list, status);return true;} catch (Exception e) {return false;}}/*** 查询卫生检查信息** @param ciVo* @return*/@Overridepublic List<CleanInfo> findCleanInfoListByPage(CleanInfoVo ciVo) {List<CleanInfo> list = dormMapper.findCleanInfoListByPage(ciVo);for (int i = 0; i < list.size(); i++) {String brcode = list.get(i).getBrcode().trim();String time = list.get(i).getTime();// 截取空格前的字符串,使日期格式为yy-MM-ddString date = MyStringUtil.timeTodate(time);list.get(i).setTime(date);String[] brArr = brcode.split("#");list.get(i).setBrarea(MyStringUtil.getBrarea(brArr[0]));list.get(i).setBrbid(brArr[1]);list.get(i).setBrrid(brArr[2]);}return list;}/*** 更改卫生检查信息** @param ci* @return*/@Overridepublic int updateCleanInfo(CleanInfo ci) {try {// 如果宿舍号改了
// String brcode = ci.getBrcode();
// if (StringUtils.isNotBlank(brcode)){
// String brrid = brcode.split("#")[2];
// ci.setBrbid(brrid);
// }int result = dormMapper.updateCleanInfo(ci);return result;} catch (Exception e) {e.printStackTrace();return -1;}}/*** 删除卫生检查记录** @param id* @return*/@Overridepublic int deleteCleanInfo(String id) {try {int actualId = Integer.parseInt(id);int result = dormMapper.deleteCleanInfo(actualId);return result;} catch (Exception e) {e.printStackTrace();return -1;}}/*** 批量添加卫生检查记录** @param params 卫生检查信息的json数据* @param checker 检查人* @return*/@Overridepublic boolean batchInsertCleanInfo(String params, String checker) {String classPath = "com.usc.lzh.doms.mapper.DorMMapper.batchInsertCleanInfo";// 获取mysql的session并且关闭自动提交SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);try {List<CleanInfo> list = dealCleanInfoAddParams(params, checker);// 插入sqlSession.insert(classPath, list);// 提交sqlSession.commit();// 防止内存崩溃sqlSession.clearCache();} catch (Exception e) {e.printStackTrace();// 回滚sqlSession.rollback();return false;} finally {// 关闭sqlSession.close();}return true;}private List<CleanInfo> dealCleanInfoAddParams(String params, String checker) throws Exception {List<CleanInfo> list = new ArrayList<>();if (StringUtils.isNotBlank(params)) {// json数据转为JSONArray对象JSONArray jsonArray = JSONArray.parseArray(params);// 遍历json数组,将json对象转为CleanInfo对象并且存到list中for (int i = 0; i < jsonArray.size(); i++) {CleanInfo ci = new CleanInfo();JSONObject obj = jsonArray.getJSONObject(i);String brarea = obj.get("brarea").toString().trim();String brbid = obj.get("brbid").toString().trim();String brrid = obj.get("brrid").toString().trim();String brcode = MyStringUtil.getBrcode(brarea, brbid, brrid);ci.setBrarea(brarea);ci.setBrbid(brbid);ci.setBrrid(brrid);ci.setBrcode(brcode);ci.setTime(obj.get("time").toString().trim());String grade = obj.get("grade").toString().trim();if (StringUtils.isNotBlank(grade)) {ci.setGrade(Integer.parseInt(grade));}ci.setContent(obj.get("content").toString().trim());ci.setChecker(checker);list.add(ci);}}return list;}/*** 查找宿舍信息** @param biVo* @return*/@Overridepublic List<RepairInfo> findBuildRoomInfoListByPage(BuildRoomInfoVo biVo) {List<RepairInfo> list = dormMapper.findBuildRoomInfoListByPage(biVo);return list;}/*** 修改宿舍信息** @param bi* @return*/@Overridepublic int updateBuildRoomInfo(BuildRoomInfo bi) {try {int result = dormMapper.updateBuildRoomInfo(bi);return result;} catch (Exception e) {e.printStackTrace();return -1;}}/*** 删除宿舍信息** @param brcode 宿舍编号* @return*/@Overridepublic int deleteBuildRoomInfo(String brcode) {try {int result = dormMapper.deleteBuildRoomInfo(brcode);return result;} catch (Exception e) {e.printStackTrace();return -1;}}/*** 添加宿舍信息** @param list* @return*/@Overridepublic boolean addBuildRoomInfo(List<BuildRoomInfo> list) {String classPath = "com.usc.lzh.doms.mapper.DorMMapper.addBuildRoomInfo";// 获取mysql的session并且关闭自动提交SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);try {// 插入sqlSession.insert(classPath, list);// 提交sqlSession.commit();// 防止内存崩溃sqlSession.clearCache();} catch (Exception e) {e.printStackTrace();// 回滚sqlSession.rollback();return false;} finally {// 关闭sqlSession.close();}return true;}/*** 查看自己发布的公告/失物招领信息** @param mbVo* @return*/@Overridepublic List<MessageBoard> findMessageListByPage(MessageBoardVo mbVo) {System.out.println(mbVo.getType());List<MessageBoard> list = dormMapper.findMessageListByPage(mbVo);for (int i = 0; i < list.size(); i++) {// 截取日期String time = list.get(i).getTime();String date = MyStringUtil.timeTodate(time);list.get(i).setTime(date);// 解析typeInteger type = list.get(i).getType();list.get(i).setTypeValue(MyStringUtil.mbTypeToValue(type));// 解析brcodeString brcode = list.get(i).getBrcode();System.out.println(brcode);if (StringUtils.isNotBlank(brcode)) {String[] split = brcode.split("#");switch (split.length) {case 1:list.get(i).setBrarea(MyStringUtil.getBrarea(split[0]));break;case 2:case 3:list.get(i).setBrarea(MyStringUtil.getBrarea(split[0]));list.get(i).setBrbid(split[1]);break;}}}return list;}/*** 添加公告信息** @param mb* @return*/@Overridepublic int addMessage(MessageBoard mb) {try {// time是当前时间Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");mb.setTime(sdf.format(date));// 拼接brcodeString brcode = MyStringUtil.getBrcode(mb.getBrarea(), mb.getBrbid(), "");mb.setBrcode(brcode);System.out.println(mb);int result = dormMapper.addMessage(mb);return result;} catch (Exception e) {e.printStackTrace();return -1;}}/*** 修改公告信息** @param mb* @return*/@Overridepublic int updateMessage(MessageBoard mb) {try {int result = dormMapper.updateMessage(mb);return result;} catch (Exception e) {e.printStackTrace();return -1;}}/*** 批量删除公告/失物招领信息** @param list id数组* @return*/@Overridepublic boolean deleteMessage(List<Integer> list) {try {dormMapper.deleteMessage(list);return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 查找留校信息列表** @param stVo* @return*/@Overridepublic List<StayInfo> findStayInfoListByPage(StayInfoVo stVo) {stVo.setApprovetype(1);List<StayInfo> list = dormMapper.findStayInfoListByPage(stVo);return list;}/*** 导出学生留校信息** @param brarea* @param brbid* @return*/@Overridepublic List<StayInfo> exportStayInfo(String brarea, String brbid) {StayInfoVo stVo = new StayInfoVo();stVo.setBrbid(brbid);stVo.setBrarea(brarea);stVo.setApprovetype(1);List<StayInfo> list = dormMapper.findStayInfoListByPage(stVo);return list;}/*** 获取留校学生的统计数据** @param brarea* @param brbid* @return*/@Overridepublic JSONObject getStayInfoEchartsData(String brarea, String brbid) {// 最后返回的数据JSONObject data = new JSONObject();// 宿舍区JSONArray bsArray = new JSONArray();// 宿舍区及人数JSONArray countArray = new JSONArray();List<String> brareas = new ArrayList<>();if (StringUtils.isNotBlank(brarea)) {brareas.add(brarea);} else {brareas = dormMapper.getStayInfoBrareas();}for (String item : brareas) {bsArray.add(item);Integer count = dormMapper.getStayInfoOnBrareaCount(item, brbid, 1);JSONObject obj = new JSONObject();obj.put("name", item);obj.put("value", count);countArray.add(obj);}data.put("data", bsArray);data.put("series", countArray);return data;}/*** 查找宿舍分配信息** @param aiVo 按专业、班级、宿舍区、楼栋进行查找* @return*/@Overridepublic List<AllocationInfo> findAllocationInfoListByPage(AllocationInfoVo aiVo) {List<AllocationInfo> list = dormMapper.findAllocationInfoListByPage(aiVo);return list;}/*** 导出宿舍分配信息** @param brarea* @param brbid* @return*/public List<AllocationInfo> exportAllocationInfo(String brarea, String brbid) {List<AllocationInfo> list = dormMapper.exportAllocationInfo(brarea, brbid);return list;}/*** 查找空余寝室** @param biVo* @return*/public List<BuildRoomInfo> findFreeRoomListByPage(BuildRoomInfoVo biVo) {return dormMapper.findFreeRoomListByPage(biVo);}/*** 查找未分配寝室的学生** @param siVo* @return*/public List<StudentInfo> findNotAllocateStudentListByPage(StudentInfoVo siVo) {return dormMapper.findNotAllocateStudentListByPage(siVo);}private List<StudentInfo> MsiList = null;//男生private List<StudentInfo> FsiList = null;//女生private List<BuildRoomInfo> MbiList = null;//男生寝室private List<BuildRoomInfo> FbiList = null;//女生寝室private List<AllocationInfo> aiList = new ArrayList<>();private List<BuildRoomInfo> updateList = new ArrayList<>();/*** 判断床位够不够** @return*/public boolean judgeIsEnough() {initList();//初始化列表int mbed = 0;//男寝床位int fbed = 0;//女寝床位for (int i = 0; i < MbiList.size(); i++) {mbed += MbiList.get(i).getFree();}for (int i = 0; i < FbiList.size(); i++) {fbed += FbiList.get(i).getFree();}int mstucount = MsiList.size();//男生人数int fstucount = FsiList.size();//女生人数System.out.println(mbed + "--" + mstucount);System.out.println(fbed + "--" + fstucount);if (mbed >= mstucount && fbed >= fstucount) {return true;}return false;}/*** 初始化列表*/private void initList() {StudentInfoVo msi = new StudentInfoVo();msi.setStusex("男");StudentInfoVo fsi = new StudentInfoVo();fsi.setStusex("女");MsiList = dormMapper.findNotAllocateStudentListByPage(msi);FsiList = dormMapper.findNotAllocateStudentListByPage(fsi);BuildRoomInfoVo mbi = new BuildRoomInfoVo();mbi.setSex("男");BuildRoomInfoVo fbi = new BuildRoomInfoVo();fbi.setSex("女");MbiList = dormMapper.findFreeRoomListByPage(mbi);FbiList = dormMapper.findFreeRoomListByPage(fbi);}/*** 分配宿舍(全部分配)** @return*/@Overridepublic boolean doAssignAll() {try {clearList();initList();AllocateRoomToStudent(MbiList, MsiList);//分配女寝AllocateRoomToStudent(FbiList, FsiList);//分配男寝if (aiList.size() != 0) {boolean result = batchInsertAllocationInfo(aiList);// 批量插入宿舍分配信息// 插入失败,抛异常if (!result) {throw new Exception();}dormMapper.batchUpdateBuildRoomInfo(updateList);updateList.clear();}return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 分配宿舍给学生** @param biList 宿舍列表* @param siList 学生列表*/public void AllocateRoomToStudent(List<BuildRoomInfo> biList, List<StudentInfo> siList) {int index = 0;//第几个学生int biLen = biList.size();int siLen = siList.size();//遍历宿舍,若宿舍或学生已分配完,退出循环for (int i = 0; i < biLen && index < siLen; i++) {BuildRoomInfo room = biList.get(i);//取一间宿舍int free = room.getFree();//获取它的容量String brcode = room.getBrcode();int j = 1;for (; j <= free && index < siLen; j++) {StudentInfo si = siList.get(index);index++;String stuid = si.getStuid();AllocationInfo ai = new AllocationInfo();ai.setBrcode(brcode);ai.setStuid(stuid);aiList.add(ai);System.out.println(ai);}//为更新空宿舍表做准备updateList.add(new BuildRoomInfo(brcode, free - j + 1));}}/*** 显示分配结果** @param aiVo* @return*/@Overridepublic List<AllocationInfo> viewAllocateResult(AllocationInfoVo aiVo) {
// int page = aiVo.getPage();
// int row = aiVo.getLimit();
// int start = (page - 1) * row;if (aiList == null || aiList.size() == 0) {return null;}return dormMapper.viewAllocateResult(aiList);
// return dormMapper.viewAllocateResult(aiList, start, row);}/*** 批量插入宿舍分配信息** @param list* @return*/public boolean batchInsertAllocationInfo(List<AllocationInfo> list) {String classPath = "com.usc.lzh.doms.mapper.DorMMapper.batchInsertAllocationInfo";// 获取mysql的session并且关闭自动提交SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);try {// 插入sqlSession.insert(classPath, list);// 提交sqlSession.commit();// 防止内存崩溃sqlSession.clearCache();} catch (Exception e) {e.printStackTrace();// 回滚sqlSession.rollback();return false;} finally {// 关闭sqlSession.close();}return true;}/*** 清空列表*/private void clearList() {if (updateList != null) {updateList.clear();}if (MbiList != null) {MbiList.clear();}if (FbiList != null) {FbiList.clear();}if (MsiList != null) {MsiList.clear();}if (FsiList != null) {FsiList.clear();}if (aiList != null) {aiList.clear();}}
}
相关文章:

(免费分享)基于 SpringBoot 的高校宿舍管理系统带论文
项目描述 系统代码质量高,功能强大,带论文。 系统的功能主要有: (1)基本信息管理 基本信息分为学生信息和宿舍信息两部分,其功能是负责维护这些信息,对 它们进行增删查改等操作。 &#x…...

运筹系列78:cbc使用介绍
1. 上手 1.1 快速使用 首先是简单的调用测试,在mac上首先安装clp的库:brew install coin-or-tools/coinor/cbc,然后新建项目进行调用,各项配置如下,注意要添加的library和directory比较多: 1.2 命令行方…...

RocketMQ底层源码解析——事务消息的实现
1. 简介 RocketMQ自身实现了事务消息,可以通过这个机制来实现一些对数据一致性有强需求的场景,保证上下游数据的一致性。 以电商交易场景为例,用户支付订单这一核心操作的同时会涉及到下游物流发货、积分变更、购物车状态清空等多个子系统…...

学习802.11之MAC帧格式(一篇就够!)
802.11规范的关键在于MAC(媒介访问控制层),MAC位于各式物理层之上,控制数据传输。负责核心成帧操作以及与有线骨干网络之间的交互。 802.11 MAC采用载波监听多路访问(CSMA)机制来控制对传输媒介的访问&…...

使用阿里云IoT Studio建立物模型可视化界面
使用阿里云IoT Studio建立物模型可视化界面 上一篇文章介绍了如何使用ESP-01S上报数据到物模型:https://blog.csdn.net/weixin_46251230/article/details/128996719 这次使用阿里云IoT Studio建立物模型的Web页面 阿里云IoT Studio: https://studio.i…...
HBase 复习 ---- chapter07
HBase 复习 ---- chapter07部署 HBase(运维) 1:部署 HBase 实际是部署了三个技术(hadoop zookeeper hbase) hadoop hdfs mapreduce common hdfs namenode datanode secondaryNamenode yarn ResourceManager&a…...

跟我一起写Makefile--个人总结
此篇笔记是根据陈皓大佬《跟我一起写Makefile》学习所得 文章目录换行符clean变量make的自动推导另类风格的Makefile清空目标文件的规则cleanMakefile总述显示规则隐晦规则变量的定义注释引用其它的Makefile环境变量MAKEFILESmake的工作方式书写规则规则举例规则的语法在规则中…...
设计模式之为什么要学好设计模式
目录1 回顾软件设计原则2 设计模式总览3 经典框架都在用设计模式解决问题1 回顾软件设计原则 不用设计模式并非不可以,但是用好设计模式能帮助我们更好地解决实际问题,设计模式最重要的是解耦。设计模式天天都在用,但自己却无感知。我们把设…...

大数据时代的小数据神器 - asqlcell
自从Google发布了经典的MapReduce论文,以及Yahoo开源了Hadoop的实现,大数据这个词就成为了一个行业的热门。在不断提高的机器性能和各种层出不穷的工具框架加持下,数据分析开始从过去的采样抽查变成全量整体,原先被抽样丢弃的隐藏…...

【呕心沥血】整理全栈自动化测试技术(三):如何编写技术方案
前面两篇笔记我介绍了自动化测试前期调研注意事项和前置准备阶段切入点,有同学在后台提问: “做完前期的调研和准备工作,领导要求写一个落地方案并评审,自动化测试的落地方案该怎么写”? 首先这个要求我觉得挺正常&a…...

67. 二进制求和
文章目录题目描述竖式模拟转换为十进制计算题目描述 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” …...
1555数列极差(队列 优先队列 )
目录 题目描述 解题思路 代码部分 题目描述 在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得…...

代码随想录算法训练营第二十七天 | 93.复原IP地址,78.子集,90.子集II
一、参考资料复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html 视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/子集题目链接/文章讲解:https://programmercarl.com/0078.…...
jvm类加载器
概念 Bootstarp ClassLoader (引导类加载器) 加载String等核心的类Ext ClassLoader (拓展类加载器)System ClassLoader (系统类加载器) 加载用户自定义的类 关系 BootstrapClassLoader 包含 ExtClassLoaderExtClassLoader 包含 SystemClassLoader彼此是包含关系,不…...

Rust学习入门--【7】Rust 数据类型
类型系统 对于任何一门语言都是重中之重,因为它体现了语言所支持的不同类型的值。 类型系统 也是 IT 初学者最难啃的三座大山之一,而类型系统之所以难以理解,主要是没有合适的现成的参考体系。 我们说类型系统 存在的目的,就是 …...

阅读MySQL必知必会,查缺补漏
MySQL自带数据库 information_schema:是MySQL自带的数据库,主要保持MySQL数据库服务器的系统信息,比如数据库的名称,数据库表的名称,字段名称,存储权限等。 performance_schema:是MySQL系统自…...

MySQL数据库10——多表连接查询
数据如果在多个表里面,需要进行连接查询。 一般在pandas里面merge合并会用到一个索引,按这个索引的规则进行合并叫做有规则的等值连接。若不按规则连接,遍历两两组合的所有可能性,叫做笛卡尔积。 笛卡尔积连接 通常人们都会设置…...
华为OD机试 - 括号检查(Python)| 真题含思路
括号检查 题目 现有一字符串 仅由 (,),{,},[,] 六种括号组成,若字符串满足以下条件之一,则为无效字符串 任意类型的左右括号数量不相等 存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度 若字符串无效则输出 0 0 <= 字符串长度 <= 100000 输入 一个只…...

安全渗透测试中的一款免费开源的超级关键词URL采集工具
安全渗透测试中的一款免费开源的超级关键词URL采集工具。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使…...
数据资产管理实践白皮书(6.0版)解读
目录 第一章数据资产管理概述 ( 一 ) 数据资产管理和数据要素的关系...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...