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

碰一碰发视频后端源码技术开发详解,支持OEM

一、引言

碰一碰发视频作为一种新颖的交互方式,在前端为用户带来便捷体验的同时,后端技术起着至关重要的支撑作用。后端负责管理视频资源、处理 NFC 标签信息与视频的关联逻辑、用户数据的存储与分析以及与前端的高效通信,确保整个系统稳定、流畅地运行。本文将深入探讨碰一碰发视频后端技术的源码实现细节,涵盖从服务器架构搭建到核心功能模块的具体代码实现,为开发者提供全面的技术参考,助力打造高效可靠的碰一碰发视频后端系统。

二、技术选型与架构设计

(一)技术选型

  1. 编程语言:选择 Python 作为主要的开发语言,因其具有简洁、高效、丰富的库和框架支持等优点,适合快速搭建后端服务。
  2. Web 框架:采用 Flask 框架来构建后端应用程序。Flask 是一个轻量级的 Web 框架,易于上手和扩展,能够方便地处理 HTTP 请求和响应,满足碰一碰发视频后端的基本需求。
  3. 数据库:使用 MySQL 作为关系型数据库来存储视频信息、NFC 标签数据、用户数据等结构化数据。MySQL 具有成熟的技术生态、高性能和稳定性,适合处理大量的业务数据。

(二)架构设计

后端架构采用分层设计模式,主要包括以下几个层次:

  1. 数据访问层(DAO):负责与数据库进行交互,执行 SQL 查询语句,实现对视频、标签、用户等数据的增删改查操作。该层通过定义数据模型类和相应的数据库操作方法,为上层业务逻辑提供数据支持。
  2. 业务逻辑层(BLL):包含核心的业务逻辑处理代码,如处理 NFC 标签信息验证、视频资源管理、用户权限验证、视频播放记录统计等。业务逻辑层调用数据访问层的方法来获取和操作数据,并将处理结果返回给前端或上层应用。
  3. 接口层(API):向外暴露一系列的 HTTP 接口,供前端应用或其他客户端调用。接口层接收前端发送的请求,调用业务逻辑层的相应方法进行处理,并将处理结果以 JSON 格式返回给前端,实现前后端的数据交互。

三、数据库设计

(一)视频资源表(videos)

字段名数据类型描述
video_idINT PRIMARY KEY AUTO_INCREMENT视频 ID,唯一标识每个视频
video_nameVARCHAR(255)视频名称
video_urlVARCHAR(255)视频的存储地址或播放链接
video_descriptionTEXT视频的描述信息
upload_timeTIMESTAMP视频上传时间

(二)NFC 标签表(nfc_tags)

字段名数据类型描述
tag_idINT PRIMARY KEY AUTO_INCREMENTNFC 标签 ID,唯一标识每个标签
tag_uidVARCHAR(255)NFC 标签的唯一标识符(UID)
video_idINT与该标签关联的视频 ID,外键关联 videos 表的 video_id 字段

(三)用户表(users)

字段名数据类型描述
user_idINT PRIMARY KEY AUTO_INCREMENT用户 ID,唯一标识每个用户
usernameVARCHAR(255)用户名称
passwordVARCHAR(255)用户密码
emailVARCHAR(255)用户邮箱
register_timeTIMESTAMP用户注册时间

(四)视频播放记录表(video_playback_records)

字段名数据类型描述
record_idINT PRIMARY KEY AUTO_INCREMENT播放记录 ID
user_idINT播放视频的用户 ID,外键关联 users 表的 user_id 字段
video_idINT被播放的视频 ID,外键关联 videos 表的 video_id 字段
play_timeTIMESTAMP视频播放的时间

四、核心功能模块实现

(一)视频资源管理模块

  1. 视频上传功能:在后端定义一个路由处理函数,用于接收前端上传的视频文件和相关信息(如视频名称、描述等)。使用 Flask 的 request 对象获取上传的文件和表单数据,将视频文件保存到服务器指定的存储目录,并将视频信息插入到 videos 表中。

收起

python

from flask import Flask, request, jsonify
import os
import uuid
from werkzeug.utils import secure_filenameapp = Flask(__name__)# 配置视频存储路径
UPLOAD_FOLDER = 'videos'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER@app.route('/upload_video', methods=['POST'])
def upload_video():if 'video' not in request.files:return jsonify({'error': 'No video file provided'}), 400video_file = request.files['video']if video_file.filename == '':return jsonify({'error': 'No selected video file'}), 400if video_file:# 生成唯一的视频文件名video_id = str(uuid.uuid4())video_name = secure_filename(video_file.filename)video_path = os.path.join(app.config['UPLOAD_FOLDER'], video_id + '_' + video_name)video_file.save(video_path)# 获取视频描述信息video_description = request.form.get('description', '')# 将视频信息插入数据库cursor = mysql.connect().cursor()sql = "INSERT INTO videos (video_id, video_name, video_url, video_description) VALUES (%s, %s, %s, %s)"cursor.execute(sql, (video_id, video_name, video_path, video_description))mysql.connect().commit()cursor.close()return jsonify({'video_id': video_id,'message': 'Video uploaded successfully'}), 200

  1. 视频查询功能:根据前端的请求(如查询所有视频、按关键词查询视频等),在 videos 表中执行相应的查询操作,并将查询结果以 JSON 格式返回给前端。

收起

python

@app.route('/get_videos', methods=['GET'])
def get_videos():# 获取查询参数,如关键词keyword = request.args.get('keyword', '')cursor = mysql.connect().cursor()if keyword:sql = "SELECT * FROM videos WHERE video_name LIKE %s"cursor.execute(sql, ('%' + keyword + '%',))else:sql = "SELECT * FROM videos"cursor.execute(sql)videos = cursor.fetchall()cursor.close()video_list = []for video in videos:video_dict = {'video_id': video[0],'video_name': video[1],'video_url': video[2],'video_description': video[3]}video_list.append(video_dict)return jsonify(video_list)

(二)NFC 标签管理模块

  1. 标签与视频关联功能:接收前端发送的 NFC 标签 UID 和视频 ID,将其插入到 nfc_tags 表中,建立标签与视频的关联关系。

收起

python

@app.route('/associate_tag_video', methods=['POST'])
def associate_tag_video():tag_uid = request.json.get('tag_uid')video_id = request.json.get('video_id')if not tag_uid or not video_id:return jsonify({'error': 'Tag UID and video ID are required'}), 400cursor = mysql.connect().cursor()sql = "INSERT INTO nfc_tags (tag_uid, video_id) VALUES (%s, %s)"cursor.execute(sql, (tag_uid, video_id))mysql.connect().commit()cursor.close()return jsonify({'message': 'Tag and video associated successfully'}), 200

  1. 标签信息查询功能:根据标签 UID 查询与之关联的视频信息,以便在前端触发碰一碰操作时能够快速获取对应的视频资源。

收起

python

@app.route('/get_video_by_tag_uid', methods=['GET'])
def get_video_by_tag_uid():tag_uid = request.args.get('tag_uid')if not tag_uid:return jsonify({'error': 'Tag UID is required'}), 400cursor = mysql.connect().cursor()sql = "SELECT v.video_id, v.video_name, v.video_url FROM nfc_tags nt JOIN videos v ON nt.video_id = v.video_id WHERE nt.tag_uid = %s"cursor.execute(sql, (tag_uid,))video = cursor.fetchone()cursor.close()if video:video_dict = {'video_id': video[0],'video_name': video[1],'video_url': video[2]}return jsonify(video_dict)else:return jsonify({'error': 'Video not found for the given tag UID'}), 404

(三)用户管理模块

  1. 用户注册功能:接收前端发送的用户注册信息(用户名、密码、邮箱等),对密码进行加密处理后,将用户信息插入到 users 表中。

收起

python

from werkzeug.security import generate_password_hash@app.route('/register_user', methods=['POST'])
def register_user():username = request.json.get('username')password = request.json.get('password')email = request.json.get('email')if not username or not password or not email:return jsonify({'error': 'Username, password and email are required'}), 400# 对密码进行加密hashed_password = generate_password_hash(password)cursor = mysql.connect().cursor()sql = "INSERT INTO users (username, password, email) VALUES (%s, %s, %s)"cursor.execute(sql, (username, hashed_password, email))mysql.connect().commit()cursor.close()return jsonify({'message': 'User registered successfully'}), 200

  1. 用户登录功能:验证前端发送的用户名和密码是否匹配数据库中的用户信息,若匹配,则生成一个用户登录令牌(如 JWT 令牌)并返回给前端,前端在后续的请求中携带该令牌进行身份验证。

收起

python

import jwt
from flask import make_response@app.route('/login_user', methods=['POST'])
def login_user():username = request.json.get('username')password = request.json.get('password')if not username or not password:return jsonify({'error': 'Username and password are required'}), 400cursor = mysql.connect().cursor()sql = "SELECT * FROM users WHERE username = %s"cursor.execute(sql, (username,))user = cursor.fetchone()cursor.close()if user and check_password_hash(user[2], password):# 生成 JWT 令牌payload = {'user_id': user[0]}token = jwt.encode(payload, app.config['SECRET_KEY'], algorithm='HS256')response = make_response(jsonify({'message': 'Login successful', 'token': token}))return responseelse:return jsonify({'error': 'Invalid username or password'}), 401

(四)视频播放记录模块

  1. 记录播放事件功能:在用户播放视频时,后端接收前端发送的用户 ID 和视频 ID,将播放记录插入到 video_playback_records 表中,以便后续进行数据分析和统计。

收起

python

@app.route('/record_playback', methods=['POST'])
def record_playback():user_id = request.json.get('user_id')video_id = request.json.get('video_id')if not user_id or not video_id:return jsonify({'error': 'User ID and video ID are required'}), 400cursor = mysql.connect().cursor()sql = "INSERT INTO video_playback_records (user_id, video_id) VALUES (%s, %s)"cursor.execute(sql, (user_id, video_id))mysql.connect().commit()cursor.close()return jsonify({'message': 'Playback recorded successfully'}), 200

  1. 获取播放统计信息功能:根据业务需求,如统计视频的播放次数、某个用户的播放历史等,在 video_playback_records 表中执行相应的查询和统计操作,并将结果返回给前端。

收起

python

@app.route('/get_playback_statistics', methods=['GET'])
def get_playback_statistics():# 例如,获取所有视频的播放次数统计cursor = mysql.connect().cursor()sql = "SELECT video_id, COUNT(*) as play_count FROM video_playback_records GROUP BY video_id"cursor.execute(sql)statistics = cursor.fetchall()cursor.close()stats_list = []for stat in statistics:stats_dict = {'video_id': stat[0],'play_count': stat[1]}stats_list.append(stats_dict)return jsonify(stats_list)

五、接口安全与优化

(一)接口安全

  1. 身份验证:对于需要用户登录才能访问的接口(如视频播放记录相关接口),在后端使用中间件对前端发送的令牌进行验证。如果令牌无效或过期,则返回相应的错误信息,拒绝访问。

收起

python

def token_required(f):@wraps(f)def decorated(*args, **kwargs):token = request.headers.get('Authorization')if not token:return jsonify({'error': 'Token is missing'}), 401try:data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=['HS256'])except jwt.InvalidTokenError:return jsonify({'error': 'Invalid token'}), 401return f(*args, **kwargs)return decorated@app.route('/protected_route', methods=['GET'])
@token_required
def protected_route():# 只有通过身份验证的用户才能访问此路由return jsonify({'message': 'This is a protected route'})

  1. 数据加密:在用户注册和登录过程中,对用户密码进行加密处理,避免明文密码在数据库中存储,提高用户数据的安全性。如使用 werkzeug.security 模块中的 generate_password_hash 函数对密码进行哈希加密。

(二)性能优化

  1. 数据库连接池:使用数据库连接池来管理数据库连接,避免频繁地创建和销毁数据库连接,提高数据库操作的性能。例如,可以使用 SQLAlchemy 库的连接池功能,在应用启动时初始化连接池,并在需要时从连接池中获取连接,使用完毕后将连接归还到连接池中。

收起

python

from flask_sqlalchemy import SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI'] ='mysql://username:password@localhost/db_name'
app.config['SQLALCHEMY_POOL_SIZE'] = 10
app.config['SQLALCHEMY_POOL_TIMEOUT'] = 30
app.config['SQLALCHEMY_POOL_RECYCLE'] = 1800db = SQLAlchemy(app)

  1. 缓存机制:对于一些频繁查询且数据更新不频繁的接口(如视频列表查询接口),可以使用缓存机制来提高响应速度。例如,使用 Flask-Caching 库来实现缓存功能,将查询结果缓存到内存中,设置合适的缓存过期时间,在缓存有效期内,直接返回缓存中的数据,避免重复查询数据库。

收起

python

from flask_caching import Cacheapp.config['CACHE_TYPE'] ='simple'
cache = Cache(app)@app.route('/cached_videos', methods=['GET'])
@cache.cached(timeout=60)
def cached_videos():# 查询视频列表的代码return jsonify(video_list)

六、总结

碰一碰发视频后端技术的开发涉及多个关键模块和技术要点,通过合理的技术选型、架构设计以及对各个功能模块的精心实现,能够构建出一个稳定、高效、安全的后端系统。在实际开发过程中,开发者还需要根据具体的业务需求和应用场景进行进一步的优化和扩展,例如添加更多的视频管理功能、完善用户权限管理、优化数据库查询性能等,以满足不断增长的用户需求和业务发展要求。同时,后端开发人员应与前端开发团队紧密协作,确保前后端接口的兼容性和数据交互的流畅性,共同打造出优质的碰一碰发视频应用系统。

以上就是碰一碰发视频后端源码技术开发的详细内容,希望对广大开发者有所帮助,在实际项目中能够根据自身情况灵活运用这些技术,开发出更加出色的应用。

请注意,上述代码中的 mysql.connect() 部分需要根据实际情况替换为正确的 MySQL 连接配置和操作方式,并且在实际部署时,需要确保服务器环境的安全性和稳定性,包括设置合适的防火墙规则、定期备份数据等。

相关文章:

碰一碰发视频后端源码技术开发详解,支持OEM

一、引言 碰一碰发视频作为一种新颖的交互方式,在前端为用户带来便捷体验的同时,后端技术起着至关重要的支撑作用。后端负责管理视频资源、处理 NFC 标签信息与视频的关联逻辑、用户数据的存储与分析以及与前端的高效通信,确保整个系统稳定、…...

Python vs PHP:哪种语言更适合网页抓取

本文将比较 Python 和 PHP,以帮助读者确定哪种语言更适合他们的需求。文章将探讨两种语言的优点和缺点,并根据读者的经验水平分析哪种语言可能更容易上手。接下来,文章将深入探讨哪种语言在抓取网页数据方面更胜一筹。 简而言之,…...

SpringBoot 新特性

优质博文:IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持,spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux,它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…...

NAT 技术如何解决 IP 地址短缺问题?

NAT 技术如何解决 IP 地址短缺问题? 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 随着互联网的普及和发展,IP 地址的需求量迅速增加。尤其是 IPv4 地址&…...

微积分复习(微分方程)

1,一阶微分方程 可分离的微分方程: 可以把x和y分列等号两边,然后求积分可以解决 齐次方程和准齐次方程 要求是 :yf(y/x),也就是没有单独的x项,我们可以通过设ty/x来统一变量方便我们运算 准齐次方程就是常数项不统一,我们可以将Xxa,Yyb来消灭常数项进而转化为齐次形式…...

动态规划子序列问题系列一>等差序列划分II

题目: 解析: 1.状态表示: 2.状态转移方程: 这里注意有个优化 3.初始化: 4.填表顺序: 5.返回值: 返回dp表总和 代码: public int numberOfArithmeticSlices(int[] nums) {in…...

【连续学习之SSL算法】2018年论文Selfless sequential learning

1 介绍 年份:2018 期刊: arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一种名为SLNID(Sparse coding through Local Neural Inhibition and…...

【FastAPI】中间件

【FastAPI】中间件 一、概述二、作用2.1 日志记录与监控2.2 身份验证与授权2.3 CORS(跨域资源共享)2.4 Gzip压缩2.5 会话管理2.6 自定义功能2.7 执行顺序 三、 总结四、相关链接 一、概述 FastAPI的中间件提供了一种强大的机制,允许开发者在…...

文档大师:打造一站式 Word 报告解决方案1

前言 在政府、医院、银行、财务以及销售等领域,常常需要创建各种报告文件来展开工作汇报,譬如季度销售报告、年度总结报告、体检报告和保险合同等。在没有报表工具支持之前,这类报告主要通过 Word 制作,费时费力且难以维护&#…...

再谈c++线性关系求值

目的 线性关系是最简单的一种关系,在编程当中应用非常多,所以,再说一次线性关系。 线性关系的定义是这样的: 两个变量之间存在一次方函数关系,就称它们之间存在线性关系。正比例关系是线性关系中的特例,反…...

【ES6复习笔记】Class类(15)

介绍 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是一个语法糖,它的绝大部分功能,…...

AppAgent 源码 (xml 解析)

1. 数据准备 adb shell uiautomator dump /sdcard/output.xml # 获取手机ui界面的xml文件 adb pull /sdcard/output.xml output.xml # 将手机上的xml文件拉取到电脑上具体的xml文件&#xff1a; <?xml version1.0 encodingUTF-8 standaloneyes ?> <hierarchy ro…...

Oracle 11G还有新BUG?ORACLE 表空间迷案!

前段时间遇到一个奇葩的问题&#xff0c;在开了SR和oracle support追踪两周以后才算是有了不算完美的结果&#xff0c;在这里整理出来给大家分享。 1.问题描述 12/13我司某基地MES全厂停线&#xff0c;系统卡死不可用&#xff0c;通知到我排查&#xff0c;查看alert log看到是…...

FreeSwitch中启用WebRTC

在FreeSwitch中启用WebRTC需要进行一系列配置。以下是详细的步骤&#xff1a; 1. 安装必要的依赖&#xff1a; 确保安装了支持WebRTC的依赖库&#xff0c;如libsrtp。 2. 配置SIP Profile&#xff1a; 编辑 conf/sip_profiles/internal.xml 文件&#xff0c;添加或修改以下内…...

力扣矩阵-算法模版总结

lc-73.矩阵置零-(时隔14天)-12.27 思路&#xff1a;(23min22s) 1.直接遍历遇0将行列设0肯定不行&#xff0c;会影响后续判断&#xff0c;题目又要求原地算法&#xff0c;那么进一步考虑是否可以将元素为0&#xff0c;其行列需要设为0的位置给存储下来&#xff0c;最后再遍历根据…...

服务端高并发分布式结构演进之路

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 服务端高并发分布式结构演进之路 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 概述 …...

虚拟机桥接模式

主机Win10,虚拟机xp 1.虚拟机设置中选择桥接模式 2.在虚拟机菜单&#xff1a;编辑>虚拟机网络编辑&#xff0c;点击“更改设置”&#xff0c;可以看到三个网卡&#xff0c;这三个网卡分别对应不同的网络共享模式。桥接模式须使用VMnet0&#xff0c;如果没看到这个网卡&…...

JVM调优实践篇

理论篇 1多功能养鱼塘&#xff0d;JVM内存 大鱼塘O&#xff08;可分配内存&#xff09;&#xff1a; JVM可以调度使用的总的内存数&#xff0c;这个数量受操作系统进程寻址范围、系统虚拟内存总数、系统物理内存总数、其他系统运行所占用的内存资源等因素的制约。 小池塘A&a…...

SpeedTree学习笔记总结

SpeedTree是一款业界领先的三维树木植被建模软件&#xff0c;特别适用于游戏开发和影视制作。 一、基础操作 旋转&#xff1a;鼠标左键 平移&#xff1a;鼠标中键 缩放&#xff1a;鼠标中键滚动 Trunks树干节点 Branches树枝 Cap给树干封口 Frond创建大树叶 Decorations…...

【MuJoCo和PhysX】

MuJoCo 与 Unity 的 PhysX 引擎的主要区别 应用领域&#xff1a; MuJoCo&#xff1a;主要用于机器人学、强化学习、生物力学等领域&#xff0c;擅长处理多自由度、复杂动力学问题&#xff0c;尤其适合进行高精度的物理仿真。 Unity PhysX&#xff1a;主要用于游戏开发、虚拟现…...

HTML制作一个普通的背景换肤案例2024版

一&#xff0c;完整的代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>换肤</t…...

python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶

【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;二十&#xff09;使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单&#xff0c;因此可以自由操作的空间也就大&#x…...

qt QZipReader详解

1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录&#xff0c;并允许你解压缩单个或多个文件。通过 QZipReader&#xff0c;你可以以编程方式读取 .zip 文件中的内容&#xff0c;并提取它们到目标目录中。…...

开发场景中Java 集合的最佳选择

在 Java 开发中&#xff0c;集合类是处理数据的核心工具。合理选择集合&#xff0c;不仅可以提高代码效率&#xff0c;还能让代码更简洁。本篇文章将重点探讨 List、Set 和 Map 的适用场景及优缺点&#xff0c;帮助你在实际开发中找到最佳解决方案。 一、List&#xff1a;有序存…...

顶顶通呼叫中心中间件mod_cti模块安全增强,预防盗打风险(mod_cti基于FreeSWITCH)

文章目录 前言联系我们mod_cti版本支持安全加强说明 前言 FreeSWITCH暴露在公网最大的风险就是被不法之人盗打 出现盗打的主要原因以下几点&#xff1a; 分机密码太简单或者密码泄露了拨号方案配置不合理sofia配置错误 所以我们给顶顶通呼叫中心中间件添加了安全加强功能&am…...

bash shell的条件语句

&#xff5e; script% touch if.sh &#xff5e; script% chmod 755 if.sh1.if-then-fi #!/usr/bin/env bashFOOD$1 if [ $FOOD"apple" ] thenecho The food is $FOOD fi exit 0~ script % ./if.sh apple The food is apple如果要将多条语句写在一行&#xff0c;可以…...

拦截器Interceptor与过滤器Filter

拦截器Interceptor 定义&#xff1a; SpringMVC内置拦截机制,允许在请求被目标方法处理的前后进行拦截&#xff0c;执行一些额外操作&#xff1b;比如&#xff1a;权限验证&#xff0c;日志记录&#xff0c;数据共享等。 实现步骤 1、自定义拦截器 Component public class …...

水电站视频智能监控系统方案设计与技术应用方案

一、背景需求 水电站作为国家重要的能源基地&#xff0c;其安全运行对于保障能源供应和社会稳定具有重要意义。然而&#xff0c;传统的人工监控方式存在着诸多问题&#xff0c;如人力成本高、监控范围有限、反应不及时等。因此&#xff0c;水电站急需引进一种先进的视频智能监控…...

教师管理系统

大概功能&#xff1a; 1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出 数据会保存到 txt 文件里面 姓名&#xff1a;必须是中文 手机号码&#xff1a;必须是11位&#xff0c;必须是数字 效果展示&#xff1a; 代码展示&#xff1a; Teache…...

nexus docker安装

#nexus docker 安装 docker pull sonatype/nexus3 mkdir -p /data/nexus-data docker run -itd -p 8081:8081 --privilegedtrue --name nexus3 \ -v /data/nexus-data:/var/nexus-data --restartalways docker.io/sonatype/nexus3 #访问 http://192.168.31.109:8081/ 用户名&am…...

canvas之进度条

canvas之进度条 效果&#xff1a; 封装的组件 <template><div class"circle" :style"{ width: props.radius px, height: props.radius px }"><div class"circle-bg" :style"{ width: props.radius - 5 px, height: pr…...

【ES6复习笔记】Promise对象详解(12)

1. 什么是 Promise&#xff1f; Promise 是 JavaScript 中处理异步操作的一种机制&#xff0c;它可以让异步操作更加容易管理和控制。Promise 对象代表一个异步操作的最终完成或失败&#xff0c;并提供了一种方式来处理操作的结果。 2. Promise 的基本语法 Promise 对象有三…...

前端Python应用指南(五)用FastAPI快速构建高性能API

《写给前端的python应用指南》系列&#xff1a; &#xff08;一&#xff09;快速构建 Web 服务器 - Flask vs Node.js 对比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的应用结构与模块化设计&#xff08;三&#xff09;Django vs Flask&#xff1a;哪种框架适…...

c#多线程之生产者-消费者模型

在 C# 中实现 生产者-消费者模式&#xff0c;通常需要多个线程来处理数据的生产和消费。我们可以使用 Queue<T> 来作为存储数据的队列&#xff0c;并使用 Thread、Mutex 或 Monitor 来确保线程安全。BlockingCollection<T> 是 C# 提供的一个线程安全的集合&#xf…...

2011-2020年各省城镇职工基本医疗保险年末参保人数数据

2011-2020年各省城镇职工基本医疗保险年末参保人数数据 1、时间&#xff1a;2011-2020年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;省份、时间、城镇职工基本医疗保险年末参保人数 4、范围&#xff1a;31省 5、指标解释&#xff1a;参保人数指报告期末按国家有关…...

Python基础语法知识——列表、字典、元组与集合

列表&#xff08;list&#xff09;、字典(dictionary)、元组(tuple)与集合(set)都可以看成存储数据的容器&#xff0c;但是前两者常用&#xff0c;后两者用得相对较少。 目录 1 列表&#xff08;list) 1.1列表入门 1 列表&#xff08;list) 1.1列表入门 class1["李白…...

Mysql数据库中,监测某张表中某字段的修改情况(被哪个ip所修改、新老值)

在Mysql数据库中&#xff0c;通过写一个触发器&#xff0c;来监测某张表(q_device)字段(run_status)的改变情况。 【示例】 -- 1. 创建监测日志表 CREATE TABLE change_log (id INT AUTO_INCREMENT PRIMARY KEY,table_name VARCHAR(255),column_name VARCHAR(255),old_value T…...

迁移学习 详解及应用示例

简介&#xff1a; 迁移学习是一种机器学习技术&#xff0c;其核心思想是利用在一个任务上已经学到的知识&#xff08;源任务&#xff1a;任务已经有一个训练好的模型&#xff0c;然后我们将这个模型的某些部分或知识迁移到一个新的但相关的“目标任务”上。&#xff09;来帮助解…...

ubuntu控制器多网口配置

在Ubuntu系统中配置多网口&#xff0c;可以通过编辑网络配置文件&#xff08;Netplan 或旧版 /etc/network/interfaces&#xff09;实现。这适用于需要管理多个网络接口&#xff08;如 eth0、eth1 等&#xff09;的场景&#xff0c;例如负载均衡、网络隔离或多路径通信。 以下…...

接口调用限频(代理模式+滑动窗口)

目录 代码示例 接口 代理 接口实现 限流工厂 限流处理器接口 直接交换处理器 限流处理器 限流配置 滑动窗口限流 通过代理模式滑动窗口&#xff0c;限流请求第三方平台&#xff0c;避免出现第三方平台抛出限流异常&#xff0c;影响正常业务流程&#xff0c;从出口出发…...

FFmpeg在python里推流被处理过的视频流

链式算法处理视频流 视频源是本地摄像头 # codinggbk # 本地摄像头直接推流到 RTMP 服务器 import cv2 import mediapipe as mp import subprocess as sp# 初始化 Mediapipe mp_drawing mp.solutions.drawing_utils mp_drawing_styles mp.solutions.drawing_styles mp_holis…...

2- Linux系统的命令帮助

Linux 命令行帮助信息使用指南 一、引言 对于初学者来说,Linux命令行可能会显得复杂和难以捉摸。然而,一旦掌握了如何有效地利用命令行的帮助信息,您将发现它是一个强大而灵活的工具,可以极大地提高您的工作效率。本指南旨在为新手介绍如何在Linux中获取命令的帮助信息,…...

Mysql事务

一、数据库事务基础 1.1. 什么是事务 简单来说&#xff0c;事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。在 MySQL 中&#xff0c;事务支持是在引擎层实现的。 比如 MySQL 原生的MyISAM引擎就不支持事务&#xff0c;这也是MyISAM被InnoDB…...

Fast adaptively balanced min-cut clustering

#0.论文信息 标题&#xff1a;Fast adaptively balanced min-cut clustering期刊&#xff1a;Pattern Recognition作者: Feiping Nie , Fangyuan Xie , Jingyu Wang ,Xuelong Li机构: China Telecom, Northwestern Polytechnic al University.代码链接&#xff1a; #1.摘要 …...

vue3和springboot使用websocket通信

前端端口&#xff1a;9090 后端端口&#xff1a;8080 vue3 引入依赖&#xff1a; npm install sockjs-client stomp/stompjs vue页面 <template><div><h1>WebSocket 示例</h1><button click"sendMessage">发送消息</button>…...

Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy

文章目录 一、Policies二、SizeBasedTriggeringPolicy:基于文件大小的滚动策略2.1、文件达到指定大小就归档 三、TimeBasedTriggeringPolicy&#xff1a;基于时间间隔的滚动策略3.1、验证秒钟归档场景3.2、验证分钟场景3.3、验证小时场景 四、多策略组合使用五、扩展知识5.1、S…...

js版本之ES6特性简述【Proxy、Reflect、Iterator、Generator】(五)

目录 Proxy Reflect 静态方法 部分实例 Iterator 实际开发迭代器的使用实例 迭代器&#xff08;Iterator&#xff09;应用 Generator Proxy Proxy 是 ES6 中新增的对象 Proxy 是JavaScript中的内置对象&#xff0c;它提供了一种机制&#xff0c;可以拦截并自定义各种…...

微信V3支付报错 平台证书及平台证书序列号

1.平台证书及平台证书序列号设置错误报错&#xff1a; 错误1&#xff1a; Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…...

【开发问题记录】执行 git cz 报require() of ES Module…… 错误

文章目录 1、问题2、解决3、参考链接 1、问题 在对 commitizen 进行完&#xff0c;一系列的初始化以后 &#xff0c; 对代码进行 提交 到暂存区&#xff0c;然后要提交到 本地仓库 的报错 然后因为安装了 commitizen 所以是想用 git cz 进行提交的&#xff0c; 执行命令的时候…...

Kubernetes 安装 Nginx以及配置自动补全

部署 Nginx &#xff1a; [rootk8s-master ~]# kubectl create deployment nginx --imagenginx:1.14-alpine deployment.apps/nginx created暴露端口&#xff1a; [rootk8s-master ~]# kubectl expose deployment nginx --port80 --typeNodePort service/nginx exposed查看服…...