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

微信小程序中会议列表页面的前后端实现

题外话:想通过集成腾讯IM来解决即时聊天的问题,如果含语音视频,腾讯组件一年5万起步,贵了!后面我们改为自己实现这个功能,这里只是个总结而已。

图文会诊需求

 首先是个图文列表界面  同个界面可以查看具体的图文内容:

 发起图文的聊天的时候 首先选择患者-->再次选择医生团队-->最后选择需要参与的医生-->发起会话

原有的图文聊天 用了腾讯会议的组件,这里要改为我们自己的东西!

数据库设计

后面应该有个图文会议的列表

一个图文会议 应该关联患者、医生信息

现有设计是集成IM的,在一张表当反映了这些信息

如果重新设计 这个就不太合理了 ,应该重新设计会议列表、医生 会议关系表 、患者会议关系表三张表.

那我们就创建一张会议表与2张关系表:

CREATE TABLE chat_group (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255) NOT NULL,create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,creator VARCHAR(255) NOT NULL,memo TEXT
);CREATE TABLE doctor_chat_group_relation (id INT AUTO_INCREMENT PRIMARY KEY,doctor_id INT UNSIGNED NOT NULL,chat_group_id INT NOT NULL,datetime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',FOREIGN KEY (doctor_id) REFERENCES sys_doctors(id) ,FOREIGN KEY (chat_group_id) REFERENCES chat_group(id) 
)CREATE TABLE patient_chat_group_relation (id INT AUTO_INCREMENT PRIMARY KEY,patient_id INT NOT NULL,chat_group_id INT NOT NULL,datetime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',FOREIGN KEY (patient_id) REFERENCES sys_patient(id) ,FOREIGN KEY (chat_group_id) REFERENCES chat_group(id) 
) ENGINE=InnoDB;

插入10条测试数据:

INSERT INTO chat_group (title, creator, memo) VALUES
('Group 1', 'Creator 1', 'Memo for Group 1'),
('Group 2', 'Creator 2', 'Memo for Group 2'),
('Group 3', 'Creator 3', 'Memo for Group 3'),
('Group 4', 'Creator 4', 'Memo for Group 4'),
('Group 5', 'Creator 5', 'Memo for Group 5'),
('Group 6', 'Creator 6', 'Memo for Group 6'),
('Group 7', 'Creator 7', 'Memo for Group 7'),
('Group 8', 'Creator 8', 'Memo for Group 8'),
('Group 9', 'Creator 9', 'Memo for Group 9'),
('Group 10', 'Creator 10', 'Memo for Group 10');

 原来的代码是集成腾讯IM,调用它

会议列表页面

现在单独做个页面:

要求:首先是要显示第一页数据,下拉的时候加载下一页数据

第一步:pages.json当中   还需开启上拉加载事件。如下图

"enablePullDownRefresh" : true,
"onReachBottomDistance":100,

第二步:先下载导入要用到uni-load-more:它用于列表中,做滚动加载使用,展示 loading 的各种状态。

ps:uni-app官网 

3第三步编写前端代码:

基于Vue和uni-app框架的会诊列表页面开发

一、项目背景

本页面是一个基于Vue和uni-app框架开发的会诊列表页面,用于展示医生参与的会诊信息。用户可以通过该页面查看会诊的标题、备注、创建时间等详细信息,并支持点击会诊项进入详情页面。

完整代码:

<template><view><view class="tuijian">
<!-- 			<image src="../../static/kehu/u841.svg"></image -->><text >会诊列表</text></view><view class="list" ><uni-list v-for="(item ,index) in lists" :key="index" ><uni-list-item showArrow :title="item.title" :note="item.memo" :rightText="item.createTime"  clickable  @click="onClick()"></uni-list-item></uni-list><uni-load-more :status="status" :icon-size="14" :content-text="contentText"  /></view></view></template><script>import {loginRequest} from '@/api/request.js'export default {data() {return {status: 'more',totalCount: 1,params: {doctorId: 0,pageNo: 1,pageSize: 20,keyword: '',total: 0,status: 0},contentText: {contentdown: '加载更多~',contentrefresh: '加载中',contentnomore: '我是有底线的~'},lists: [],}},methods: {//获取列表// async getList(){// 	let paramJson = {// 		page:this.params.pageNo,// 		limit:this.params.pageSize,// 	};// 	let { code,data,total } = await app.getReferrerListByPage(paramJson);// 	// console.info(data)// 	if(200 == code){// 		// //请求接口成功之后,判断加载状态,处理数据// 		this.totalCount = total;// 		if(this.params.pageNo == 1){// 			this.lists= data// 		}else{// 			this.lists= this.lists.concat(data);						// 		}// 		if (this.params.pageNo * this.params.pageSize >= total) {// 			this.status = 'noMore';// 		}// 		this.params.pageNo++;// 	}		// },async getList() {this.params.doctorId = wx.getStorageSync('userInfo').id// this.isloading = true// uni.showLoading({// 	title: '加载中'// });try{uni.request({url: loginRequest.baseURL + 'getChatGroups',method: 'POST',header: {'auth-token': wx.getStorageSync("token")},data: {...this.params},success: res => {console.log('res: ', res)if (res.data.code === 200) {// //请求接口成功之后,判断加载状态,处理数据this.totalCount = res.data.data.total;if(this.params.pageNo == 1){this.lists=res.data.data.chatGroups}else{this.lists= this.lists.concat(res.data.data.chatGroups);						}if (this.params.pageNo * this.params.pageSize >= this.totalCount) {this.status = 'noMore';}this.params.pageNo++;} else {uni.showToast({title: res.data.msg,icon: "error"})}}}) } catch (error) {console.error('请求失败:', error);uni.showToast({title: '请求失败,请稍后再试',icon: "error"});this.status = 'more'; // 恢复为可加载更多状态} finally {this.status = 'more'; // 确保最终状态为可加载更多(除非已经没有更多数据)}// uni.hideLoading()// this.isloading = false},//触底加载onReachBottom() {if (this.status != 'noMore') {this.status = 'loading';this.getList()} else {this.status ="noMore"}},onClick(item) {// 处理点击事件,例如跳转到详情页console.log('点击了项目:', item);// 例如:uni.navigateTo({ url: `/pages/detail/detail?id=${item.id}` });}},mounted() {this.getList(); // 页面加载时获取第一页数据}}
</script><style>
/* 页面或组件的样式表 *//* 设置页面的高度、背景色和滚动行为 */
page {height: 100vh;background-color: #F5F6FA;overflow-y: auto;
}/* 为列表容器设置高度和可能的滚动行为(注意:这里通常不需要overflow-y,因为父元素已经设置了) */
.list-container {height: calc(100vh - 130rpx); /* 使用calc函数计算高度,注意rpx是微信小程序的响应式单位 */
}/* 为推荐项设置样式 */
.tuijian {width: 710rpx;height: 94rpx;line-height: 94rpx; /* 设置行高与高度相同,使文本垂直居中 */margin: 20rpx; /* 设置外边距 */background-color: rgba(14, 196, 153, 1); /* 设置背景色 */box-sizing: border-box; /* 确保padding和border不会增加元素的总宽度和高度 */display: flex; /* 使用flex布局 */align-items: center; /* 垂直居中 */
}/* 为推荐项中的图片设置样式 */
.tuijian image {/* 注意:在微信小程序中,应该使用<image>标签,并且它是自闭合的,不需要结束标签 */width: 30rpx;height: 30rpx;margin-left: 40rpx;margin-right: 20rpx;
}/* 但是,由于<image>是一个原生组件,并且微信小程序不支持直接使用标签名选择器在组件样式中,因此上面的选择器应该被重写为类选择器,如果图片有特定的类名的话。例如: */
.tuijian .image-class {width: 30rpx;height: 30rpx;margin-left: 40rpx;margin-right: 20rpx;
}/* 为推荐项中的文本设置样式 */
/* 注意:在微信小程序中,通常使用<text>标签包裹文本,但<text>并不是一个真正的DOM元素,它更像是一个文本容器,用于应用样式。然而,在.wxss文件中,您仍然可以使用类选择器来定义它的样式。 */
.tuijian .text-class {font-size: 36rpx;color: #fff;text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.647058823529412); /* 设置文本阴影 */
}/* 但是,如果<text>是您的自定义组件(这不太常见),则上面的选择器可能适用。否则,您应该直接在<view>或其他容器内使用类选择器来定义文本的样式。 */
</style>

实际效果如图:

还行,项目item前加个小图标吧 ,先回顾一下引入图标的方法(明天补充 今天晚了 睡觉去)

二、页面结构
  1. 顶部推荐区域:包含一个文本“会诊列表”,用于标识页面功能。
  2. 列表区域:展示会诊列表项,每个列表项包含标题、备注和创建时间。
  3. 加载更多区域:用于在用户滚动到页面底部时触发加载更多数据的操作。
三、代码说明
1. 模板部分(template)
  • <view class="tuijian">:包含推荐区域的文本“会诊列表”。
  • <uni-list>:用于包裹列表项,支持循环渲染。
    • <uni-list-item>:列表项,包含标题(title)、备注(note)和创建时间(rightText)。
  • <uni-load-more>:加载更多组件,根据status状态显示不同的文本内容。
2. 脚本部分(script)
  • 数据(data)
    • status:加载更多状态,支持'more'(可加载更多)、'loading'(正在加载)和'noMore'(没有更多数据)。
    • totalCount:总数据量。
    • params:请求参数,包括医生ID、页码、每页数量、关键词等。
    • contentText:加载更多组件的文本内容。
    • lists:会诊列表数据。
  • 方法(methods)
    • getList:获取会诊列表数据的方法,通过uni.request发送请求到后端接口,并处理返回的数据。
    • onReachBottom:触底加载方法,当用户滚动到页面底部时触发,调用getList方法加载更多数据。
    • onClick:点击列表项的方法,当前仅输出点击的项信息,可根据需求跳转到详情页面。
  • 生命周期钩子(mounted)
    • 在页面加载时调用getList方法获取第一页数据。
3. 样式部分(style)
  • 页面样式:设置页面高度、背景色和滚动行为。
  • 列表容器样式:为列表容器设置高度和可能的滚动行为(注意:这里通常不需要overflow-y,因为父元素已经设置了)。
  • 推荐项样式:为推荐项设置宽度、高度、背景色、文本样式等。
  • 文本样式:为推荐项中的文本设置字体大小、颜色、文本阴影等。
四、开发步骤
  1. 创建页面文件:在uni-app项目中创建新的页面文件,包括.vue.js.json.wxss文件(或直接在.vue文件中编写模板、脚本和样式)。
  2. 编写模板:根据页面结构编写模板代码,包括推荐区域、列表区域和加载更多区域。
  3. 编写脚本
    • 在data中定义页面所需的数据和状态。
    • 编写获取会诊列表数据的方法getList,并处理返回的数据。
    • 编写触底加载方法onReachBottom,调用getList方法加载更多数据。
    • 编写点击列表项的方法onClick,根据需求处理点击事件。
    • 在mounted生命周期钩子中调用getList方法获取第一页数据。
  4. 编写样式:根据页面设计编写样式代码,包括页面高度、背景色、列表容器样式、推荐项样式和文本样式等。
  5. 测试页面:在开发环境中测试页面功能,确保数据能够正确加载和显示,点击事件能够正常触发和处理。
五、注意事项
  1. 请求接口:确保后端提供的接口地址和参数格式正确,且接口能够返回正确的数据格式。
  2. 数据处理:在获取到数据后,需要根据需求对数据进行处理,如分页、排序等。
  3. 样式调整:根据页面设计调整样式代码,确保页面美观和用户体验良好。
  4. 错误处理:在请求数据时,需要处理可能出现的错误情况,如网络异常、接口返回错误码等,并给出相应的提示信息。

3、服务端代码开发

项目背景

本项目的目标是开发一个用于医生与聊天群组关系管理的后端服务。医生可以通过这个服务查询自己所参与的聊天群组列表。这些群组信息将从小程序端发送到后端,后端根据医生ID分页返回相关的群组信息。

项目结构
  1. Controller层:处理HTTP请求,调用Service层的方法,并返回响应结果。
  2. Service层:包含业务逻辑,调用Mapper层的方法与数据库进行交互。
  3. Mapper层:定义与数据库交互的SQL语句。
  4. 数据模型:定义数据传输对象(DTO)和实体类。
编码步骤

1. 创建数据模型

首先,我们需要定义数据传输对象(DTO)和实体类。

// ChatGroup.java
@Data
public class ChatGroup {private Integer pageNo;private Integer pageSize;private Integer doctorId;private Integer total;private Integer status; // 注意:原代码中有一个拼写错误,将'tatus'改为'status'private List<ChatGroupDto> chatGroups;
}// ChatGroupDto.java
@Data
public class ChatGroupDto {private Integer chatGroupId;private String title;private LocalDateTime createTime;private String creator;private String memo;
}// DoctorChatGroupRelation.java
@Data
public class DoctorChatGroupRelation {private Integer id;private Integer doctorId;private Integer chatGroupId;private LocalDateTime datetime;
}

2. 创建Mapper接口

Mapper接口定义与数据库交互的SQL语句。

// DoctorChatGroupRelationMapper.java
@Mapper
public interface DoctorChatGroupRelationMapper {@Select("SELECT COUNT(*) FROM doctor_chat_group_relation WHERE doctor_id = #{doctorId}")int countByDoctorId(@Param("doctorId") Integer doctorId);@Select("SELECT dcgr.chat_group_id, cg.title, cg.create_time, cg.creator, cg.memo " +"FROM doctor_chat_group_relation dcgr " +"JOIN chat_group cg ON dcgr.chat_group_id = cg.id " +"WHERE dcgr.doctor_id = #{doctorId} " +"LIMIT #{offset}, #{limit}")List<ChatGroupDto> findByDoctorIdWithPagination(@Param("doctorId") Integer doctorId,@Param("offset") int offset,@Param("limit") int limit);
}

3. 创建Service接口和实现类

Service层包含业务逻辑,调用Mapper层的方法。

// DoctorChatGroupRelationServiceInterface.java
public interface DoctorChatGroupRelationServiceInterface {int countByDoctorId(Integer doctorId);List<ChatGroupDto> findByDoctorIdWithPagination(Integer doctorId, int pageNo, int pageSize);
}// DoctorChatGroupRelationServiceImpl.java
@Service
public class DoctorChatGroupRelationServiceImpl implements DoctorChatGroupRelationServiceInterface {@Autowiredprivate DoctorChatGroupRelationMapper doctorChatGroupRelationMapper;@Overridepublic int countByDoctorId(Integer doctorId) {return doctorChatGroupRelationMapper.countByDoctorId(doctorId);}@Overridepublic List<ChatGroupDto> findByDoctorIdWithPagination(Integer doctorId, int pageNo, int pageSize) {int offset = (pageNo - 1) * pageSize;return doctorChatGroupRelationMapper.findByDoctorIdWithPagination(doctorId, offset, pageSize);}
}

4. 创建Controller

Controller层处理HTTP请求,调用Service层的方法,并返回响应结果。

// DoctorChatGroupRelationController.java
@RestController
@RequestMapping("/wechat/client")
@Api(value = "会议")
public class DoctorChatGroupRelationController {@Autowiredprivate DoctorChatGroupRelationServiceInterface doctorChatGroupRelationService;@PostMapping("/getChatGroups")public ResponseResult<ChatGroup> getChatGroups(@RequestBody ChatGroup chatGroup) {try {Integer doctorId = chatGroup.getDoctorId();Integer pageNo = chatGroup.getPageNo();Integer pageSize = chatGroup.getPageSize();int totalCount = doctorChatGroupRelationService.countByDoctorId(doctorId);List<ChatGroupDto> chatGroups = doctorChatGroupRelationService.findByDoctorIdWithPagination(doctorId, pageNo, pageSize);chatGroup.setTotal(totalCount);chatGroup.setChatGroups(chatGroups);chatGroup.setStatus(1); // 可以根据需要设置状态码,例如1表示成功return ResponseResult.ok(chatGroup);} catch (Exception e) {return ResponseResult.failed("获取会议列表失败" + e.getMessage());}}
}
5. 创建通用的响应结果类

通常,我们会创建一个通用的响应结果类来封装返回给客户端的数据。

// ResponseResult.java
@Data
public class ResponseResult<T> {private int code;private String message;private T data;public static <T> ResponseResult<T> ok(T data) {ResponseResult<T> result = new ResponseResult<>();result.setCode(200);result.setMessage("成功");result.setData(data);return result;}public static <T> ResponseResult<T> failed(String message) {ResponseResult<T> result = new ResponseResult<>();result.setCode(500);result.setMessage(message);return result;}
}
注意事项
  1. 异常处理:在Controller中,我们使用try-catch块捕获异常,并返回失败的响应结果。这样可以确保即使发生异常,客户端也能接收到明确的错误信息。
  2. 分页处理:在Service层,我们通过计算偏移量(offset)来实现分页查询。
  3. 数据验证:在实际项目中,需要对接收到的数据进行验证,确保数据的有效性和安全性。可以使用Spring的@Valid注解和自定义验证器来实现。
  4. 日志记录:在关键业务逻辑处添加日志记录,以便在出现问题时进行故障排查。
通过以上步骤,我们完成了一个简单的医生聊天群组关系管理后端服务。该服务可以接收小程序端的请求,根据医生ID分页返回相关的群组信息。

返回类型 也要封装一下

{code: 200, msg: "操作成功!", data: {pageNo: 1, pageSize: 20, doctorId: 350, total: 2, tatus: null,…}}
code: 200
data: {pageNo: 1, pageSize: 20, doctorId: 350, total: 2, tatus: null,…}
chatGroups: [{chatGroupId: 1, title: "Group 1", createTime: "2024-11-22 20:57:46", creator: "Creator 1",…},…]
0: {chatGroupId: 1, title: "Group 1", createTime: "2024-11-22 20:57:46", creator: "Creator 1",…}
1: {chatGroupId: 2, title: "Group 2", createTime: "2024-11-22 20:57:46", creator: "Creator 2",…}
doctorId: 350
pageNo: 1
pageSize: 20
tatus: null
total: 2
msg: "操作成功!"

相关文章:

微信小程序中会议列表页面的前后端实现

题外话&#xff1a;想通过集成腾讯IM来解决即时聊天的问题&#xff0c;如果含语音视频&#xff0c;腾讯组件一年5万起步&#xff0c;贵了&#xff01;后面我们改为自己实现这个功能&#xff0c;这里只是个总结而已。 图文会诊需求 首先是个图文列表界面 同个界面可以查看具体…...

WEB攻防-通用漏洞文件上传二次渲染.htaccess变异免杀

知识点&#xff1a; 1、文件上传-二次渲染 2、文件上传-简单免杀变异 3、文件上传-.htaccess妙用 4、文件上传-PHP语言特性 1、上传后门时&#xff0c;文件内容带.就不行 这时可以上传一个转换后的ip地址&#xff0c;ip地址对应网站包含后门代码 转换后的int会在访问的时候…...

vue实现列表滑动下拉加载数据

一、实现效果 二、实现思路 使用滚动事件监听器来检测用户是否滚动到底部&#xff0c;然后加载更多数据 监听滚动事件。检测用户是否滚动到底部。加载更多数据。 三、案例代码 <div class"drawer-content"><div ref"loadMoreTrigger" class&q…...

全面解析:HTML页面的加载全过程(四)--浏览器渲染之样式计算

主线程遍历得到的 DOM 树&#xff0c;依次为树中的每个节点计算出它最终的样式&#xff0c;称之为 Computed Style。 通过前面生成的DOM 树和 CSSOM 树&#xff0c;遍历 DOM 树&#xff0c;为每一个 DOM 节点&#xff0c;计算它的所有 CSS 属性&#xff0c;最后会得到一棵带有…...

#Verilog HDL# 谈谈代码中如何跨层次引用

目录 一 先谈作用问题 二 再谈跨层次问题 2.1 向下引用 2.2 向上引用 一 先谈作用问题 大多数编程语言都有一个称为作用域(scope)的特征,它定义了代码的某些部分对于变量和方法的可见性。作用域定义了一个命名空间,以避免同一命名空间内不同对象名称之间的冲突。 V…...

LeetCode 每日一题 2024/11/18-2024/11/24

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 11/18 661. 图片平滑器11/19 3243. 新增道路查询后的最短距离 I11/20 3244. 新增道路查询后的最短距离 II11/21 3248. 矩阵中的蛇11/22 3233. 统计不是特殊数字的数字数量1…...

客户流失分析综述

引言 客户流失这个术语通常用来描述在特定时间或合同期内停止与公司进行业务往来的客户倾向性[1]。传统上&#xff0c;关于客户流失的研究始于客户关系管理&#xff08;CRM&#xff09;[2]。在运营服务时&#xff0c;防止客户流失至关重要。过去&#xff0c;客户获取相对于流失…...

基于51单片机的红包抽奖proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1nYZlLb64kdZAWSydT_uHfA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…...

cangjie (仓颉) vscode环境搭建

sdk下载 下载中心-仓颉编程语言官网 可选择半年更新版&#xff0c;不用申请。目前版本&#xff1a;0.53.13 &#xff0c;选择不同平台压缩包下载解压到任意位置即可 补充下载&#xff0c;vscode插件解压后&#xff0c;在vscode扩展中选择从vsix安装&#xff0c;安装后新增名为…...

阿里云私服地址

1.解压apache-maven-3.6.1-bin 2.配置本地仓库&#xff1a;修改conf/dettings.xml中的<localReoisitory>为一个指定目录。56行 <localRepository>D:\apache-maven-3.6.1-bin\apache-maven-3.6.1\mvn_repo</localRepository> 3.配置阿里云私服&#xff1a;…...

HTMLCSS:3D金字塔加载动画

效果演示 这段代码通过CSS3的3D变换和动画功能&#xff0c;创建了一个旋转的金字塔加载动画&#xff0c;每个侧面都有不同的颜色渐变&#xff0c;底部还有一个模糊的阴影效果&#xff0c;增加了视觉的立体感。 HTML <div class"pyramid-loader"><div cl…...

shell编程(2)(3)

目录 一、永久环境变量 按用户设置永久环境变量 文件路径&#xff1a; 示例步骤&#xff1a; 删除永久环境变量 二、脚本程序传递参数怎么实现 三、用编程进行数学运算 shell中利用expr进行运算 运算与变量结合 1. 变量赋值和基本运算 2. 使用expr进行运算 3. 变量…...

DFT专家分析scan insertion时使用EDT的策略

作为一名芯片设计DFT工程师专家&#xff0c;在做scan insertion&#xff08;扫描插入&#xff09;时使用EDT&#xff08;Embedded Deterministic Test&#xff0c;嵌入式确定性测试&#xff09;的参数配置策略&#xff0c;需要综合考虑多个方面的因素&#xff0c;以确保测试的高…...

Apple Vision Pro开发003-PolySpatial2.0新建项目

unity6.0下载链接:Unity 实时开发平台 | 3D、2D、VR 和 AR 引擎 一、新建项目 二、导入开发包 com.unity.polyspatial.visionos 输入版本号 2.0.4 com.unity.polyspatial&#xff08;单独导入&#xff09;&#xff0c;或者直接安装 三、对应设置 其他的操作与之前的版本相同…...

分公司如何纳税

分公司不进行纳税由总公司汇总纳税“子公司具有法人资格&#xff0c;依法独立承担民事责任;分公司不具有法人资格&#xff0c;其民事责任由公司承担。”企业设立分支机构&#xff0c;使其不具有法人资格&#xff0c;且不实行独立核算&#xff0c;则可由总公司汇总缴纳企业所得税…...

在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager)

在 Ubuntu 系统上安装 npm 环境以及 nvm&#xff08;Node Version Manager&#xff09; 步骤 1: 更新系统包步骤 2: 安装 nvm步骤 3: 安装 Node.js 和 npm步骤 4: 设置默认 Node.js 版本&#xff08;可选&#xff09;总结 在 Ubuntu 系统上安装 npm 环境以及 nvm&#xff08;No…...

深度优先搜索(dfs)题目合集

深度优先搜索&#xff08;dfs&#xff09;题目合集 全排列问题 dfs原理和模版深度优先搜索原理&#xff08;纯个人理解&#xff09;参考程序dfs通用模版 素数环组合的输出 剪枝新dfs模版参考程序新的dfs模版 自然数的拆分 利用形参进行回溯 全排列问题 dfs原理和模版 P1706 全…...

性能监控利器:Ubuntu 22.04 上的 Zabbix 安装与配置指南

简介 今天我们来聊聊如何在 Ubuntu 22.04 上安装和配置 Zabbix。我们会用到 PostgreSQL 作为数据库后端&#xff0c;Nginx 作为 Web 服务器&#xff0c;并用 Let’s Encrypt SSL 证书来保驾护航。 什么是 Zabbix&#xff1f; Zabbix 是一个开源的网络监控和管理解决方案&…...

性能测试的宏观分析:全面提升系统表现的关键

在当今快速发展的软件行业中&#xff0c;系统性能的优劣直接影响用户体验和业务成功。性能测试作为确保系统高效运行的重要环节&#xff0c;其方法和策略不断演进。其中&#xff0c;宏观分析作为一种全面评估系统性能的手段&#xff0c;日益受到关注。本文将深入探讨宏观分析在…...

ctfshow

1,web21 Basic认证采用Base64加密方式&#xff0c;Base64解码字符串发现是 用户名:密码 的格式进行Base64编码。 密码shark63 2,web22 用 子域名扫描器 扫出flag.ctf.show拿到flag&#xff0c;但这个域名已经没了所以就直接交的官方提供的flag。 3,web23 这段PHP代码是一个简单…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...