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

Python趣学篇:用Pygame打造绚烂流星雨动画

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
专栏介绍:《Python星球日记》

目录

    • 一、项目简介与效果展示
    • 二、技术栈与核心概念
      • 1. 主要技术栈
      • 2. 核心概念解析
    • 三、关键实现原理
      • 1. 流星运动轨迹
      • 2. 粒子系统实现
      • 3. 中文字体显示
    • 四、完整代码及分析
    • 五、运行方法与操作指南
      • 1. 环境准备
      • 2. 运行程序
      • 3. 交互操作
      • 4. 性能说明
    • 六、学习价值与扩展思路
      • 1. 学习价值
      • 2. 扩展思路
    • 七、总结

欢迎大家来到Python星球日记的趣学篇,在趣学篇,我们将带来很多有趣的适合初学者的项目,项目均由个人团队开发及AI vide coding的辅助…

🌟 想要在电脑屏幕上重现那种令人心醉的流星雨美景吗?今天我们就用Python从零开始,打造一个炫酷的流星雨动画!不仅有逼真的物理效果,还能显示中文字符,让你在编程的同时感受浪漫的星空之美。

一、项目简介与效果展示

这是一个基于Pygame开发的流星雨动画项目,具有以下特效:

🌠 多彩流星:8种不同颜色的流星随机生成,每颗都有独特的轨迹
粒子尾迹:每个流星都带有动态的粒子拖尾效果,增强视觉冲击力
🌟 闪烁星空:150颗背景星星营造真实的夜空氛围
🌌 渐变背景:深蓝到黑色的自然渐变,模拟夜空色彩
💫 斜向轨迹:所有流星都以30-60度角自然斜向下运动
🎨 中文显示:完美支持中文字体,显示"斜向流星雨来啦!"等文字

预期效果:

在这里插入图片描述

实际效果:

在这里插入图片描述

整个程序运行流畅,达到60FPS的丝滑体验,让你仿佛置身于真实的流星雨之中!

二、技术栈与核心概念

1. 主要技术栈

在这里插入图片描述

  • Pygame:Python游戏开发库,负责图形渲染和事件处理
  • 数学库(math):用于三角函数计算,实现精确的运动轨迹
  • 随机库(random):生成随机的流星属性和位置

2. 核心概念解析

粒子系统:这是游戏特效中的经典概念。想象一下,每颗流星就像一个"粒子发射器",不断产生小粒子形成美丽的尾迹。

Alpha混合:通过调整透明度实现渐变效果,让流星尾迹从亮到暗自然过渡。

面向对象设计:将流星、星星、特殊流星都封装成独立的类,代码结构清晰易维护。

三、关键实现原理

1. 流星运动轨迹

真实的流星雨并不是垂直下落,而是以一定角度斜向划过天空。我们使用三角函数来实现这种自然的运动效果:

# 设置流星的斜向运动
angle = random.uniform(math.radians(30), math.radians(60))  # 30-60度角
speed = random.uniform(12, 20)
self.speed_x = -speed * math.cos(angle)  # 水平分量
self.speed_y = speed * math.sin(angle)   # 垂直分量

这样计算出来的速度分量,让每颗流星都能以不同但合理的角度斜向飞行,营造出逼真的流星雨效果。

2. 粒子系统实现

每颗流星都会不断产生小粒子,形成绚烂的尾迹:

# 为流星添加尾迹粒子
for i in range(4):particle = {'x': self.x + random.randint(-8, 8),'y': self.y + random.randint(-8, 8), 'life': random.randint(25, 40),      # 粒子生命周期'color': self.color,'size': random.randint(1, 4)}self.tail_particles.append(particle)

每个粒子都有自己的生命周期,随着时间推移逐渐变暗消失,这就是我们看到的流星尾迹渐变效果。

在这里插入图片描述

3. 中文字体显示

程序智能适配多种操作系统的中文字体:

font_paths = ["C:/Windows/Fonts/simhei.ttf",      # Windows黑体"C:/Windows/Fonts/msyh.ttc",        # 微软雅黑  "/System/Library/Fonts/PingFang.ttc", # macOS苹方"/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf" # Linux
]

程序会自动尝试加载这些字体,确保在不同系统上都能正确显示中文。

四、完整代码及分析

import pygame
import random
import math
import sys# 初始化pygame
pygame.init()# 设置屏幕尺寸
SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 800
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("炫酷斜向流星雨动画 - 按ESC退出")# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (100, 150, 255)
CYAN = (0, 255, 255)
YELLOW = (255, 255, 0)
PINK = (255, 100, 150)
PURPLE = (150, 100, 255)
GREEN = (100, 255, 150)
ORANGE = (255, 150, 50)class Meteor:def __init__(self):self.reset()def reset(self):self.x = random.randint(-100, SCREEN_WIDTH + 200)self.y = random.randint(-800, -50)# 设置更明显的斜向下运动 - 角度大约在30-60度之间angle = random.uniform(math.radians(30), math.radians(60))  # 30-60度角speed = random.uniform(12, 20)  # 总速度self.speed_x = -speed * math.cos(angle)  # 向左下self.speed_y = speed * math.sin(angle)   # 向下self.length = random.randint(60, 200)self.width = random.randint(2, 6)self.color = random.choice([BLUE, CYAN, WHITE, YELLOW, PINK, PURPLE, GREEN, ORANGE])self.tail_particles = []self.life = 255def update(self):# 更新位置self.x += self.speed_xself.y += self.speed_y# 添加尾迹粒子for i in range(4):particle = {'x': self.x + random.randint(-8, 8),'y': self.y + random.randint(-8, 8),'life': random.randint(25, 40),'color': self.color,'size': random.randint(1, 4)}self.tail_particles.append(particle)# 更新尾迹粒子for particle in self.tail_particles[:]:particle['life'] -= 1.5particle['x'] += random.uniform(-0.5, 0.5)particle['y'] += random.uniform(-0.5, 0.5)if particle['life'] <= 0:self.tail_particles.remove(particle)# 如果流星离开屏幕,重置位置if self.y > SCREEN_HEIGHT + 100 or self.x < -200:self.reset()def draw(self, surface):# 绘制尾迹粒子for particle in self.tail_particles:alpha = max(0, particle['life'] / 40.0)size = max(1, int(particle['size'] * alpha))color = [min(255, int(c * alpha * 1.2)) for c in particle['color']]# 创建带透明度的粒子表面particle_surface = pygame.Surface((size * 2, size * 2), pygame.SRCALPHA)pygame.draw.circle(particle_surface, (*color, int(255 * alpha)), (size, size), size)surface.blit(particle_surface, (int(particle['x'] - size), int(particle['y'] - size)))# 绘制流星主体 - 创建沿运动方向的渐变效果segments = min(self.length, 50)for i in range(segments):progress = i / segmentsalpha = 1 - progress# 沿着流星运动方向绘制尾迹current_x = self.x - (self.speed_x * progress * 3)  # 调整尾迹长度current_y = self.y - (self.speed_y * progress * 3)if 0 <= current_x <= SCREEN_WIDTH and 0 <= current_y <= SCREEN_HEIGHT:# 计算当前片段的颜色和大小color = [min(255, int(c * alpha * 1.3)) for c in self.color]width = max(1, int(self.width * alpha))# 创建带透明度的流星片段meteor_surface = pygame.Surface((width * 2, width * 2), pygame.SRCALPHA)pygame.draw.circle(meteor_surface, (*color, int(255 * alpha)), (width, width), width)surface.blit(meteor_surface, (int(current_x - width), int(current_y - width)))class Star:def __init__(self):self.x = random.randint(0, SCREEN_WIDTH)self.y = random.randint(0, SCREEN_HEIGHT)self.brightness = random.randint(80, 255)self.twinkle_speed = random.uniform(0.02, 0.08)self.twinkle_phase = random.uniform(0, 2 * math.pi)self.size = random.choice([1, 1, 1, 2])  # 大部分是小星星def update(self):self.twinkle_phase += self.twinkle_speeddef draw(self, surface):current_brightness = int(self.brightness * (0.3 + 0.7 * abs(math.sin(self.twinkle_phase))))color = (current_brightness, current_brightness, min(255, current_brightness + 20))pygame.draw.circle(surface, color, (int(self.x), int(self.y)), self.size)class ShootingStar:def __init__(self):self.reset()def reset(self):self.x = random.randint(-100, SCREEN_WIDTH + 100)self.y = random.randint(-300, SCREEN_HEIGHT//3)# 让特殊流星也是斜向下运动,但角度稍有不同self.angle = random.uniform(math.radians(25), math.radians(65))  # 25-65度角self.speed = random.randint(18, 28)self.length = random.randint(100, 150)self.life = random.randint(60, 100)self.max_life = self.lifeself.color = random.choice([WHITE, YELLOW, CYAN])def update(self):# 按照设定角度斜向下移动self.x += -self.speed * math.cos(self.angle)  # 向左self.y += self.speed * math.sin(self.angle)   # 向下self.life -= 1if self.life <= 0 or self.x < -100 or self.x > SCREEN_WIDTH + 100 or self.y > SCREEN_HEIGHT + 100:self.reset()def draw(self, surface):alpha = self.life / self.max_lifefor i in range(20):progress = i / 20# 沿着运动方向绘制尾迹trail_x = self.x + self.speed * math.cos(self.angle) * progress * self.length / 20trail_y = self.y - self.speed * math.sin(self.angle) * progress * self.length / 20trail_alpha = alpha * (1 - progress)if -50 <= trail_x <= SCREEN_WIDTH + 50 and -50 <= trail_y <= SCREEN_HEIGHT + 50:color = [int(c * trail_alpha) for c in self.color]size = max(1, int(3 * trail_alpha))trail_surface = pygame.Surface((size * 2, size * 2), pygame.SRCALPHA)pygame.draw.circle(trail_surface, (*color, int(255 * trail_alpha)), (size, size), size)surface.blit(trail_surface, (int(trail_x - size), int(trail_y - size)))def create_gradient_background():background = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT))for y in range(SCREEN_HEIGHT):# 创建从深蓝到黑色的渐变progress = y / SCREEN_HEIGHTr = int(5 * (1 - progress))g = int(10 * (1 - progress))b = int(30 * (1 - progress))color = (r, g, b)pygame.draw.line(background, color, (0, y), (SCREEN_WIDTH, y))return backgrounddef main():clock = pygame.time.Clock()# 创建流星列表meteors = [Meteor() for _ in range(20)]# 创建星星背景stars = [Star() for _ in range(150)]# 创建特殊流星shooting_stars = [ShootingStar() for _ in range(3)]# 设置中文字体 - 尝试多种字体路径font = Nonefont_paths = ["simhei.ttf","C:/Windows/Fonts/simhei.ttf","C:/Windows/Fonts/msyh.ttc","C:/Windows/Fonts/simsun.ttc","/System/Library/Fonts/PingFang.ttc",  # macOS"/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf",  # Linux]for font_path in font_paths:try:font = pygame.font.Font(font_path, 60)breakexcept:continueif font is None:# 如果找不到中文字体,使用系统默认字体font = pygame.font.Font(None, 60)# 创建多行文字texts = ["流星雨来啦!", "许个愿吧~"]text_surfaces = []for i, text in enumerate(texts):try:text_surface = font.render(text, True, WHITE)except:# 如果渲染中文失败,使用英文text_surface = font.render("Meteor Shower!" if i == 0 else "Make a wish~", True, WHITE)text_surfaces.append(text_surface)# 创建渐变背景background = create_gradient_background()running = Trueframe_count = 0print("流星雨动画已启动!")print("操作说明:")print("- 按 ESC 键退出")print("- 按空格键添加特殊斜向流星")print("- 享受这场飞舞的绚烂流星雨吧!")while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falseelif event.key == pygame.K_SPACE:# 添加特殊流星 - 也是斜向下运动special_meteor = Meteor()special_meteor.length = 300special_meteor.width = 10special_meteor.color = WHITE# 重新设置运动方向确保是斜向下angle = random.uniform(math.radians(35), math.radians(55))speed = random.uniform(15, 25)special_meteor.speed_x = -speed * math.cos(angle)special_meteor.speed_y = speed * math.sin(angle)meteors.append(special_meteor)frame_count += 1# 绘制背景screen.blit(background, (0, 0))# 更新和绘制星星for star in stars:star.update()star.draw(screen)# 更新和绘制特殊流星for shooting_star in shooting_stars:shooting_star.update()shooting_star.draw(screen)# 更新和绘制普通流星for meteor in meteors:meteor.update()meteor.draw(screen)# 绘制标题文字,添加浮动和闪烁效果for i, text_surface in enumerate(text_surfaces):alpha = int(200 + 55 * math.sin(frame_count * 0.05 + i))y_offset = int(10 * math.sin(frame_count * 0.03 + i))text_with_alpha = text_surface.copy()text_with_alpha.set_alpha(alpha)text_rect = text_surface.get_rect(center=(SCREEN_WIDTH // 2, 120 + i * 80 + y_offset))screen.blit(text_with_alpha, text_rect)# 定期添加随机流星if frame_count % 90 == 0:  # 每1.5秒new_meteor = Meteor()meteors.append(new_meteor)# 偶尔添加超级流星if frame_count % 300 == 0:  # 每5秒super_meteor = Meteor()super_meteor.length = 400super_meteor.width = 12super_meteor.color = random.choice([WHITE, YELLOW, CYAN])# 确保超级流星也是斜向下运动angle = random.uniform(math.radians(40), math.radians(50))speed = random.uniform(18, 25)super_meteor.speed_x = -speed * math.cos(angle)super_meteor.speed_y = speed * math.sin(angle)meteors.append(super_meteor)# 限制流星数量以保持性能if len(meteors) > 35:meteors.pop(0)# 添加一些随机的星星if random.randint(1, 100) < 2:stars.append(Star())if len(stars) > 200:stars.pop(0)pygame.display.flip()clock.tick(60)  # 60 FPSpygame.quit()sys.exit()if __name__ == "__main__":main()

在这里插入图片描述

整个项目采用面向对象的设计模式,主要包含以下几个类:

Meteor:普通流星

  • reset():重置流星位置和属性
  • update():更新位置和粒子效果
  • draw():绘制流星和尾迹

Star:背景星星

  • 实现闪烁效果,营造夜空氛围

ShootingStar:特殊流星

  • 更大更亮,出现频率较低

主程序循环

  1. 事件处理(键盘输入)
  2. 更新所有对象状态
  3. 绘制所有图形元素
  4. 控制帧率(60FPS)

五、运行方法与操作指南

1. 环境准备

# 安装Pygame库
pip install pygame

2. 运行程序

python meteor_shower.py

3. 交互操作

  • ESC键:退出程序
  • 空格键:手动添加一颗特殊流星
  • 程序会自动生成各种流星效果,无需其他操作

在这里插入图片描述

4. 性能说明

  • 支持1200×800分辨率
  • 稳定60FPS运行
  • 自动优化粒子数量,保证流畅性

六、学习价值与扩展思路

1. 学习价值

这个项目非常适合Python初学者,能够学习到:

  • Pygame基础:图形绘制、事件处理、游戏循环
  • 数学应用:三角函数在编程中的实际运用
  • 面向对象编程:类的设计和使用
  • 算法优化:如何平衡视觉效果与性能

2. 扩展思路

想要让你的流星雨更加炫酷?可以尝试这些扩展:

🎵 音效系统:添加背景音乐和流星划过的音效
🎮 交互玩法:让用户点击流星获得分数
🌈 更多特效:爆炸效果、彗星、UFO等
📱 移动适配:改造成手机应用
🤖 AI元素:让流星根据音乐节拍变化

七、总结

通过这个流星雨项目,我们不仅创造了一个美丽的视觉效果,更重要的是学会了如何将数学知识编程技巧相结合。从简单的三角函数到复杂的粒子系统,每一行代码都在为最终的视觉盛宴贡献力量。

编程的魅力就在于此——我们可以用代码重现自然之美,用算法诠释浪漫情怀。无论你是编程新手还是资深开发者,都能从这样的项目中获得乐趣和成长。

快来运行这个程序,在你的屏幕上点亮一场专属的数字流星雨吧!✨

💡 小贴士:如果你对这个项目感兴趣,建议动手实践一下。编程最好的学习方式就是边写边学,在调试和优化的过程中,你会发现更多有趣的细节和改进空间!

让我们一起用代码让世界变得更有趣!🎉

创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

相关文章:

Python趣学篇:用Pygame打造绚烂流星雨动画

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏介绍&#xff1a;《Python星球日记》 目录 一、项目简介与效果展示二、技术栈与核…...

AI系统负载均衡与动态路由

载均衡与动态路由 在微服务架构中,负载均衡是实现服务高可用和性能优化的关键机制。传统负载均衡技术通常围绕请求数、连接数、CPU占用率等基础指标进行分发,而在AI系统中,特别是多模型、多异构算力(如CPU、GPU、TPU)共存的环境下,负载均衡不仅要考虑节点资源消耗,还需…...

山西省第十八届职业院校技能大赛 网络建设与运维赛项 样题

山西省第十八届职业院校技能大赛 网络建设与运维赛项 &#xff08;学生组&#xff09; 样题 2024 年 11 月 xx 日 2 赛题说明 一、竞赛项目简介 “网络建设与运维”竞赛共分为模块一&#xff1a;网络理论测试与网络 运维&#xff1b;模块二&#xff1a; 网络建设与调试&a…...

Stone 3D新版本发布,添加玩家控制和生物模拟等组件,增强路径编辑功能,优化材质编辑

后续版本号改为构建日期加小版本&#xff0c;所以最新版本为20250603.01 功能更新如下&#xff1a; 1. 改写fps-controls组件&#xff0c;简化游戏应用的创建&#xff0c;你只需要一个场景glb&#xff0c;然后给Scene节点添加fps-controls组件&#xff0c;即可完成一个第一人…...

【Qt】之【Get√】【Bug】通过值捕获(或 const 引用捕获)传进 lambda,会默认复制成 const

通过值捕获&#xff08;或 const 引用捕获&#xff09;传进 lambda&#xff0c;会默认复制成 const。 背景 匿名函数外部定义 QSet<QString> nameSet,需要传入匿名函数使用修改 connect(dlg, ..., [nameSet](...) {nameSet.insert(name); // ❌ 这里其实是 const QSet…...

排序算法C语言实现

算法概览 排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性适用场景插入排序O(n)O(n)O(1)稳定小规模/基本有序希尔排序O(n log n)O(n)O(1)不稳定中等规模冒泡排序O(n)O(n)O(1)稳定教学/小规模堆排序O(n log n)O(n log n)O(1)不稳定大规模数据选择排序O(n)O(n)O(1)不稳定…...

Python----目标检测(训练YOLOV8网络)

一、数据集标注 在已经采集的数据中&#xff0c;使用labelImg进行数据集标注&#xff0c;标注后的txt与原始 图像文件同名且在同一个文件夹&#xff08;data&#xff09;即可。 二、制作数据集 在data目录的同目录下&#xff0c;新建dataset目录&#xff0c;以存放制作好的YOLO…...

构建 MCP 服务器:第一部分 — 资源入门

什么是模型上下文协议? 模型上下文协议(MCP) 是Claude等大型语言模型 (LLM) 与外部数据和功能安全交互的标准化方式。您可以将其想象成一个平视显示器,或者 AI 的 USB 端口——它提供了一个通用接口,允许任何兼容 MCP 的 LLM 连接到您的数据和工具。 MCP 提供了一个集中式协…...

c# :this() 和 :base()区别

在 C# 中&#xff0c;:this() 和 :base() 都用于构造函数的重载和继承&#xff0c;但它们有不同的用途和上下文&#xff1a; 1. :this() 用途&#xff1a;用于调用当前类中的其他构造函数&#xff08;构造函数重载&#xff09;。场景&#xff1a;当你希望一个构造函数先执行另…...

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第十五讲)

这一期讲解lvgl中日历控件的基础使用&#xff0c;Calendar 部件是一个经典日历&#xff0c;它具有以下功能&#xff1a;• 通过一个7x7矩阵显示任何月份 • 显示日期名称 • 突出显示当前日期&#xff08;今天&#xff09; • 突出显示任何用户定义的日期 日历是一个可编辑的小…...

Vue中实现表格吸底滚动条效果,列太多时左右滚动条始终显示在页面中

1、安装 npm install el-table-horizontal-scroll 2、全局注册&#xff08;main.js&#xff09; import horizontalScroll from el-table-horizontal-scrollVue.use(horizontalScroll) 如下图&#xff0c;在main.js加上上面的代码 3、表格内引用 <el-table :data"…...

BeeWorks 协同办公能力:局域网内企业级协作的全场景重构

在企业数字化办公场景中&#xff0c;BeeWorks 以强大的协同办公能力&#xff0c;将局域网内的通讯、协作、业务流程整合为统一整体。作为专注于企业级局域网环境的协作平台&#xff0c;其不仅提供即时通讯基础功能&#xff0c;更通过办公工具集成、会议能力强化、业务系统对接等…...

Mermaid 绘图--以企业权限视图为例

文章目录 一、示例代码二、基础结构设计2.1 组织架构树2.2 权限视图设计 三、销售数据权限系统四、关键语法技巧汇总 一、示例代码 在企业管理系统开发中&#xff0c;清晰的权限视图设计至关重要。本文将分享如何使用 Mermaid 绘制直观的企业权限关系图&#xff0c;复制以下代…...

Redis(02)Win系统如何将Redis配置为开机自启的服务

一、引言 Redis 是一款高性能的键值对存储数据库&#xff0c;在众多项目中被广泛应用。在 Windows 环境下&#xff0c;为了让 Redis 能更稳定、便捷地运行&#xff0c;将其设置为系统服务并实现自动启动是很有必要的。这样一来&#xff0c;系统开机时 Redis 可自动加载&#xf…...

C++课设:高效的日程管理系统

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏介绍&#xff1a;《编程项目实战》 目录 一、C日程管理系统的时代价值1. 为什么选…...

功能测试、性能测试、安全测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、功能测试 1、单接口功能 手工测试中的单个业务模块&#xff0c;一般对应一个接口 例如&#xff1a; 登录业务------登录接口 加入购物车业务------加入购…...

提示词指南 --- 提示词的基本结构

提示词指南 --- 提示词的基本结构以及三种角色 什么是Prompt (提示词)Prompt的基本结构和三种角色提示词的三种核心“角色”&#xff08;Role&#xff09; 真实例子 什么是Prompt (提示词) 我们可以把“Prompt&#xff08;提示词&#xff09;”想象成和AI聊天时你说的“一句话…...

UI学习—cell的复用和自定义cell

前言 Nib是什么&#xff1f; Nib就是.xib文件&#xff1a;一个可视化的UI界面文件&#xff0c;它记录了一个UI组件&#xff08;例如一个表格单元格Cell&#xff09;的界面布局信息&#xff0c;可以在interfaceBuilder中创建 [UINib nibWithNibName:"CustomCell" b…...

20250605使用boot-repair来恢复WIN10和ubuntu22.04.6双系统的启动

rootrootrootroot-X99-Turbo:~$ sudo apt-get install boot-repair rootrootrootroot-X99-Turbo:~$ sudo add-apt-repository ppa:yannubuntu/boot-repair rootrootrootroot-X99-Turbo:~$ sudo apt-get install boot-repair 20250605使用boot-repair来恢复WIN10和ubuntu22.04.6…...

网络安全面试题目(无答案)

一、渗透测试与漏洞挖掘 如何绕过WAF进行SQL注入&#xff1f;列举三种技术并解释原理。 答案要点&#xff1a; 分块传输编码&#xff08;Chunked Transfer&#xff09;绕过正则检测 畸形HTTP参数&#xff08;如参数污染、Unicode编码&#xff09; 利用WAF规则盲区&#xff08…...

JavaScript性能优化实战

### 1. 减少全局变量 JavaScript里&#xff0c;全局变量就像一个大杂烩&#xff0c;啥都往里扔&#xff0c;很容易出问题&#xff0c;还会影响性能。为啥呢&#xff1f;因为全局变量会被所有函数共享&#xff0c;查找起来特别费劲&#xff0c;就像在一个大仓库里找东西&#xf…...

接口安全SOAPOpenAPIRESTful分类特征导入项目联动检测

1 、 API 分类特征 SOAP - WSDL OpenApi - Swagger RESTful - /v1/api/ 2 、 API 常见漏洞 OWASP API Security TOP 10 2023 3 、 API 检测流程 接口发现&#xff0c;遵循分类&#xff0c;依赖语言&#xff0c; V1/V2 多版本等 Method &#xff1a;请求方法 攻击方…...

视频汇聚平台EasyCVR“明厨亮灶”方案筑牢旅游景区餐饮安全品质防线

一、背景分析​ 1&#xff09;政策监管刚性需求​&#xff1a;国家食品安全战略及 2024年《关于深化智慧城市发展的指导意见》要求构建智慧餐饮场景&#xff0c;推动数字化监管。多地将“AI明厨亮灶”纳入十四五规划考核&#xff0c;要求餐饮单位操作可视化并具备风险预警能力…...

sql server如何创建表导入excel的数据

在 SQL Server 中&#xff0c;可以通过几种方式将 Excel 数据导入到数据库表中。下面是一个完整的流程&#xff0c;包括如何创建表&#xff0c;以及将 Excel 数据导入该表的方法&#xff1a; ✅ 方法一&#xff1a;使用 SQL Server Management Studio (SSMS) 的导入向导&#x…...

仓库自动化搬运:自动叉车与AGV选型要点及核心技术解析

自动叉车与AGV均可实现自主作业&#xff0c;无需人工驾驶即可搬运托盘化货物。然而&#xff0c;这两种解决方案存在一些关键差异。 自动叉车与AGV的对比 自动叉车与AGV是截然不同的车辆&#xff0c;其差异主要源于原始设计&#xff1a; 自动叉车是制造商对传统手动叉车进行改…...

java UDP 模板

UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;在 Java 中可以使用 UDP 进行网络编程。理论上没有服务器客户端之分&#xff0c;实际上算是有的&#xff0c;以下是 Java 中 UDP 编程的基本步骤和示例代码&#xff1a; 服务器端 创建…...

【亲测有效】Mybatis-Plus更新字段为null

Mybatis-Plus更新字段为null 遇到问题 Mybatis-Plus更新的默认行为如下: Mybatis-Plus默认如果某个传入参数的字段为null, 默认不更新这个字段, 例如有个Double类型的字段, 当前数据库数据为10, 然后传参时当前字段为null, 实际上Mybatis-Plus是不会覆盖该字段为null的, 仍然…...

NLP学习路线图(二十五):注意力机制

在自然语言处理领域&#xff0c;序列模型一直扮演着核心角色。从早期的循环神经网络&#xff08;RNN&#xff09;到如今一统天下的Transformer模型&#xff0c;注意力机制&#xff08;Attention Mechanism&#xff09; 的引入堪称一场革命。它彻底改变了模型处理序列信息的方式…...

05 APP 自动化- Appium 单点触控 多点触控

文章目录 一、单点触控查看指针的指针位置实现手势密码&#xff1a; 二、多点触控 一、单点触控 查看指针的指针位置 方便查看手势密码-九宫格每个点的坐标 实现手势密码&#xff1a; 执行手势操作&#xff1a; 按压起点 -> 移动到下一点 -> 依次移动 -> 释放&am…...

MyBatis-Plus LambdaQuery 高级用法:JSON 路径查询与条件拼接的全场景解析

目录 1. 查询 JSON 字段中的特定值 2. 动态查询 JSON 字段中的值 3. 查询 JSON 数组中的值 4. 查询 JSON 字段中的嵌套对象 5. 结合其他条件查询 JSON 字段 6. 使用类型处理器简化 JSON 查询 6.1 创建自定义 JSON 类型处理器 6.2 在实体类中指定自定义类型处理器 示例…...