如何面向DeepSeek编程,打造游戏开发工具集,提升工作效率
最近我在思考:
如何基于DeepSeek,来提升工作效率,构建高效游戏开发工作流。
方向有两个:
A: 基于DeepSeek+私有代码框架,让它完成项目代码的续写;
B: 基于DeepSeek来创作一些工具,使用工具来提升效率,如程序化地图等;
方向A,目前我们做了一些预言,包括本地部署,然后把我们的项目框架代码做好知识库,让DS学习,然后让它帮我们完成代码续写,目前效果不佳,很多代码还需要认为修改,才能编译通过。
相比方向A,方向B就方便很多,让DS来写游戏开发中常用的工具,提升工作效率。首先工具本身不复杂,比较独立,代码量小。完全可以让DS开发。我们使用工具来提升我们的工作效率。同时还可以在工具中调用各种AI的 API,来提升工作效率。
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀
今天给大家分享一个基于DS编写一个Unity插件工具的流程,并尝试接入其他智能体的API。
选择Unity的插件机制作为工具流的基本环境
问题: 为什么选择Unity作为工具开发的基本环境,而不是使用Python脚本等其他环境?
1: 主要是因为Unity的插件扩展机制比较成熟稳定;
2:Unity可以方便的访问到游戏场景等相关的游戏内容内容,能更好的与游戏工作结合起来。
3: 同时导出给其他引擎也方便。
4: DeepSeek基于标准的Unity 插件来自动生成的代码,稳定性高。正确率高。
第一款工具:抠背景工具
很多程序员在做游戏创业的时候,在网上找到一个效果图,想要去掉背景,拿到里面的图片元素。所以急需一个智能的抠背景工具。同时还有一些简单的抠背景的需求,比如把纯色背景变成透明色。而传统的去背景的AI工具,大部分都要收取费用。像简单的抠背景,我们就不用AI,而是直接就通过[0, 0]的像素颜色,直接把背景给换成透明的。提炼出背景工具的需求如下:
需求1: 支持简单的背景色扣图,将每个图片的[0, 0]作为默认扣除的颜色;
需求2: 支持基于支持AI的API调用只能扣图;
需求3: 为了好用,我们除了支持单图意外,还需要支持基于文件夹的批量抠图;
需求明确后,我们开始让DS,帮我们生成Unity编辑器扩展代码。
面向DeepSeek的编辑器扩展编程
1: 创建一个工具类的Unity项目,专门用来做各种游戏开发工具,包括但不限于:抠图工具,程序化地图生成工具,地图编辑器工具,技能编辑器工具等。
项目中的所有的工具,我们都放到专门的Unity工程中,进行处理。
如上图,我这里分成了Editors与WorkSpace,来分别放工具代码+需要处理的数据与文件。
2:提问DeepSeek,来帮我们自动生成工具扩展代码。
提问DS: 帮我写一个 Remove Background Tool 插件
using UnityEngine;
using UnityEditor;
using System.IO;public class RemoveBackgroundTool : EditorWindow
{private Texture2D sourceTexture; // 原始图片private Color backgroundColor = Color.white; // 背景颜色private float tolerance = 0.1f; // 颜色容差[MenuItem("Tools/Remove Background Tool")]public static void ShowWindow(){// 创建自定义窗口GetWindow<RemoveBackgroundTool>("Remove Background");}private void OnGUI(){GUILayout.Label("Remove Background Tool", EditorStyles.boldLabel);// 选择图片sourceTexture = (Texture2D)EditorGUILayout.ObjectField("Source Texture", sourceTexture, typeof(Texture2D), false);// 设置背景颜色backgroundColor = EditorGUILayout.ColorField("Background Color", backgroundColor);// 设置颜色容差tolerance = EditorGUILayout.Slider("Tolerance", tolerance, 0f, 1f);// 扣除背景按钮if (GUILayout.Button("Remove Background")){RemoveBackground();}}private void RemoveBackground(){if (sourceTexture == null){Debug.LogError("Source texture is not assigned.");return;}// 获取图片路径string path = AssetDatabase.GetAssetPath(sourceTexture);if (string.IsNullOrEmpty(path)){Debug.LogError("Failed to get asset path.");return;}// 创建一个新的 Texture2D 对象Texture2D texture = new Texture2D(sourceTexture.width, sourceTexture.height, TextureFormat.ARGB32, false);// 复制原始图片的像素数据texture.SetPixels(sourceTexture.GetPixels());texture.Apply();// 遍历每个像素,扣除背景for (int y = 0; y < texture.height; y++){for (int x = 0; x < texture.width; x++){Color pixelColor = texture.GetPixel(x, y);if (IsColorSimilar(pixelColor, backgroundColor, tolerance)){texture.SetPixel(x, y, Color.clear); // 将背景色设置为透明}}}// 应用修改texture.Apply();// 保存新图片byte[] bytes = texture.EncodeToPNG();string newPath = Path.GetDirectoryName(path) + "/" + Path.GetFileNameWithoutExtension(path) + "_NoBackground.png";File.WriteAllBytes(newPath, bytes);// 刷新 Asset DatabaseAssetDatabase.Refresh();Debug.Log("Background removed and saved to: " + newPath);}// 判断两个颜色是否相似private bool IsColorSimilar(Color color1, Color color2, float tolerance){return Mathf.Abs(color1.r - color2.r) < tolerance &&Mathf.Abs(color1.g - color2.g) < tolerance &&Mathf.Abs(color1.b - color2.b) < tolerance;}}
它帮我生成代码,并给出使用方式与改进建议:
使用说明
- 创建脚本:
- 在 Unity 项目中创建一个新的 C# 脚本,命名为
RemoveBackgroundTool.cs
。 - 将上述代码复制到脚本中。
- 打开插件窗口:
- 在 Unity 编辑器中,点击菜单栏的
Tools
->Remove Background Tool
,打开插件窗口。
- 选择图片:
- 在插件窗口中,选择需要扣除背景的图片(
Source Texture
)。
- 设置背景颜色和容差:
- 设置背景颜色(
Background Color
)和颜色容差(Tolerance
)。容差值越小,颜色匹配越严格。
- 扣除背景:
- 点击
Remove Background
按钮,插件会生成一张扣除背景后的新图片,并保存到与原始图片相同的目录下,文件名以_NoBackground.png
结尾。
功能说明
- 背景颜色: 用户可以指定需要扣除的背景颜色。
- 颜色容差: 用于控制颜色匹配的严格程度。容差值越大,扣除的背景范围越广。
- 透明背景: 扣除的背景会被替换为透明色(
Color.clear
)。 - 保存新图片: 扣除背景后的图片会保存为 PNG 格式,并自动导入到 Unity 项目中。
注意事项
- 图片格式:
- 确保原始图片的格式支持透明通道(如 PNG 格式)。
- 如果图片格式不支持透明通道,扣除背景后可能会出现异常。
- 性能问题:
- 对于高分辨率图片,扣除背景的过程可能会较慢。可以考虑优化像素遍历逻辑。
- 复杂背景:
- 该插件适用于纯色背景的扣除。如果背景复杂(如渐变、图案等),可能需要使用更高级的图像处理工具或插件。
扩展功能
如果你需要更强大的功能,可以考虑以下扩展:
- 支持多种背景颜色: 允许用户指定多个背景颜色。
- 批量处理: 支持批量扣除多张图片的背景。
- AI 背景扣除: 集成 AI 技术,自动检测并扣除复杂背景
先导入到Unity,试试看,没有任何错误,同时我们来体验一下,看用户体验方面还有哪些需要改进,
阅读一下代码,写的很好,同时导出的处理函数也独立出来了,编辑器界面代码和功能代码分离。接下来我们从用户体验上改进:
1: 支持指定文件夹,这样可以批量处理;
2: 每张图片的默认颜色为左上角[0, 0]的颜色。
提问DS:
改进一下代码,帮我增加一个选择文件夹选项,直接处理文件夹里面的所有图片,并输出到同级的dst文件夹中。这个时候DS给出修改的代码与使用建议,同上。
再看效果,默认的背景颜色指定了,同时支持文件夹选项。
阅读代码,没有太多的问题。功能正常,接下来就是接入,AI。
提问DS:推荐一下,接入哪个AI工具的API完成AI智能抠图,并把工具扩展代码增加AI抠图的选项。
DS给出代码与回答,代码省略,回答如下:
集成 AI 自动检测与抠图功能是一个非常有价值的方向!我们可以通过调用现有的 AI 服务(如 Remove.bg 或 DeepLab)来实现自动背景扣除。以下是改进后的代码,集成了 Remove.bg 的 API 来实现 AI 自动抠图。
功能说明
- AI 自动抠图:
- 使用 Remove.bg 的 API 实现自动背景扣除。
- 用户可以通过勾选
Use AI for Background Removal
来启用 AI 功能。
- 手动背景扣除:
- 如果不使用 AI,插件会基于用户设置的背景颜色和容差手动扣除背景。
- 支持单个文件和文件夹处理:
- 用户可以选择处理单个文件或整个文件夹中的所有图片。
- 输出到
dst
文件夹:
- 处理后的图片会保存到与输入文件或文件夹同级的
dst
文件夹中。
- 日志输出:
- 处理过程中会输出日志,方便用户查看处理进度和结果。
使用步骤
- 获取 API Key:
- 前往 Remove.bg 注册并获取 API Key。
- 将
apiKey
变量替换为你的 API Key。
- 打开插件窗口:
- 在 Unity 编辑器中,点击菜单栏的
Tools
->Remove Background Tool
,打开插件窗口。
- 选择处理模式:
- 勾选
Process Folder
复选框以处理文件夹,否则处理单个文件。
- 选择文件或文件夹:
- 在 单个文件模式 下,点击
Choose File
按钮选择图片。 - 在 文件夹模式 下,点击
Choose Folder
按钮选择文件夹。
- 启用 AI 功能:
- 勾选
Use AI for Background Removal
以启用 AI 自动抠图。
- 处理图片:
- 点击
Process
按钮,插件会处理图片并将结果保存到dst
文件夹中。
- 查看结果:
- 处理后的图片会保存到与输入文件或文件夹同级的
dst
文件夹中,文件名以_NoBackground.png
结尾。
注意事项
- API 调用限制:
- Remove.bg 的免费 API 有调用次数限制,如果需要处理大量图片,建议升级到付费计划。
- 网络请求:
- AI 功能需要网络连接,确保 Unity 编辑器可以访问外部 API。
- 性能问题:
- 对于大量高分辨率图片,AI 处理可能会较慢。可以考虑分批处理。
未来改进方向
- 本地 AI 模型:
- 集成本地 AI 模型(如 DeepLab)以减少对网络 API 的依赖。
- 进度条显示:
- 在处理大量图片时,显示进度条以提升用户体验。
- 错误处理:
- 增加对异常情况的处理(如网络请求失败、API 调用超时等)。
希望这个改进后的插件能满足你的需求!如果有任何问题,欢迎随时提问!
打开代码,确实增加了 RemoveBackgroundWithAI的函数,里面是把本地的图片,上传到服务器,然后拿处理结果。
private async Task RemoveBackgroundWithAI(string imagePath, string outputFolder)
{// 调用 Remove.bg APIusing (HttpClient client = new HttpClient()){client.DefaultRequestHeaders.Add("X-Api-Key", apiKey);// 读取图片文件byte[] imageData = File.ReadAllBytes(imagePath);ByteArrayContent content = new ByteArrayContent(imageData);// 发送请求var response = await client.PostAsync("https://api.remove.bg/v1.0/removebg", new MultipartFormDataContent{{ content, "image_file", Path.GetFileName(imagePath) }});if (response.IsSuccessStatusCode){// 保存处理后的图片byte[] resultData = await response.Content.ReadAsByteArrayAsync();string fileName = Path.GetFileNameWithoutExtension(imagePath) + "_NoBackground.png";string outputPath = Path.Combine(outputFolder, fileName);File.WriteAllBytes(outputPath, resultData);Debug.Log($"AI-processed image saved to: {outputPath}");}else{Debug.LogError($"Failed to process image with AI: {response.ReasonPhrase}");}}
}
上面是生成的代码,看了一下主要功能,没有问题,接下来生成API Key,根据DS给出的官网,注册账号+API密钥。
完成后,将API Key,放入到工具代码,运行测试,Unity 卡死。杀掉进程后,我重新打开,排除错误(AI不是万能的,一些关键的错误还是需要人来排查)。打开remove.bg的官方文档,找到相关的API代码,和DS生成的代码,进行比对与修改,文档代码如下:
对比调整修改后,测试成功。
private async Task RemoveBackgroundWithAI(string imagePath, string outputFolder){// 调用 Remove.bg APIusing (HttpClient client = new HttpClient())using (var formData = new MultipartFormDataContent()){formData.Headers.Add("X-Api-Key", apiKey);client.DefaultRequestHeaders.Add("X-Api-Key", apiKey);// 读取图片文件byte[] imageData = File.ReadAllBytes(imagePath);ByteArrayContent content = new ByteArrayContent(imageData);formData.Add(content, "image_file", Path.GetFileName(imagePath));formData.Add(new StringContent("auto"), "size");var response = client.PostAsync("https://api.remove.bg/v1.0/removebg", formData).Result;if (response.IsSuccessStatusCode){// 保存处理后的图片byte[] resultData = await response.Content.ReadAsByteArrayAsync();string fileName = Path.GetFileNameWithoutExtension(imagePath) + "_NoBackground.png";string outputPath = Path.Combine(outputFolder, fileName);File.WriteAllBytes(outputPath, resultData);Debug.Log($"AI-processed image saved to: {outputPath}");}else{Debug.LogError($"Failed to process image with AI: {response.ReasonPhrase}");}}}
再次运行,就能正常的使用了(我账户没有充钱,所以返回了Forbidden错误)。
对比调整修改后,测试成功。
再次运行,就能正常的使用了(我账户没有充钱,所以返回了Forbidden错误)。
End
心得1: 使用AI来开发工具代码,基于工具来提升效率,是AI应用的一个很好的思路与方向。
心得2: 基于标准开发规范的小规模代码编写,如:编辑器扩展工具,TA Shader开发等, DeepSeek等大模型能快速的实现,并很好的给出思路,辅助人类完成,所以靠工具类的技术美术要注意了。
心得3: 所有的程序员要注意了,沟通交流能力+阅读代码+系统整合的能力变得更为重要。而这些需要你有更扎实的基础与更全的知识体系结构,才能驾驭AI。分辨出它的优点与错误。
今天给大家演示了《如何基于DS开发插件,如何调用AI工具的API》,后续我们还会推出更多的DeepSeek+AI的工具教程,丰富我们的工具流,比如程序化生成地图,自动化AI怪物逻辑训练等。敬请期待
相关文章:
如何面向DeepSeek编程,打造游戏开发工具集,提升工作效率
最近我在思考: 如何基于DeepSeek,来提升工作效率,构建高效游戏开发工作流。 方向有两个: A: 基于DeepSeek私有代码框架,让它完成项目代码的续写; B: 基于DeepSeek来创作一些工具,使用工具来提升效率,如…...
IDE集成开发环境MyEclipse中安装SVN
打开Myeclipse的help菜单----install from site 点击add弹出对话框 在输入框中输入对应内容 http://subclipse.tigris.org/update_1.10.x 点击OK之后,会刷新出两个选项,需要选中的 点击next,出现许可的时候选中同意,一直结束等…...
QT中使用C++调用 python脚本
1、使用QT Creator 新建项目 2、添加Python解释器 在.pro 文件中添加python头文件与链接库 INCLUDEPATH -I /usr/include/python3.8/ LIBS -L /usr/lib/python3.8/config-3.8-x86_64-linux-gnu -lpython3.8本文实验为ubuntu自带python3.8,虚拟环境中的python解释…...
C语言学习day25:WinAPI编程进阶07-游戏辅助时钟周期事件、定时器消息
接下来我们说一下时间周期(定时器)事件 我们接下来继续用上一章中的代码来举例 这次课程我们需要用的函数SetTimer()函数和KillTimer()函数 SetTimer() 语法: UINT_PTR SetTimer([in, opti…...
NVIDIA Jetson Nano的国产替代,基于算能BM1684X+FPGA+AI算力盒子,支持deepseek边缘部署
NVIDIA Jetson Nano的国产替代,基于算能BM1684X的AI算力盒子,支持deepseek边缘部署 另外,还提供BM1684XFPGAAI的解决方案。 核心板基于Sophon SG2300X SoC(也叫BM1684X)打造 带有8核ARM Cortex-A53 2.3GHz,…...
解锁STM32外设:开启嵌入式开发新世界
✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 探索 STM32 强大的外设家族 初窥门径:STM32 外设开发基础 开发方式与工具 外设配置基础步骤 深入剖析:常见外设应用实例…...
C++的内存管理
1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int…...
P8685 [蓝桥杯 2019 省 A] 外卖店优先级--优先队列“数组”!!!!!
P8685 [蓝桥杯 2019 省 A] 外卖店优先级 题目 解析优先队列如何判断是否使用优先队列?省略规则优先队列常用操作大顶堆 vs 小顶堆定义队列h队列数组 代码 题目 解析 每个外卖店会在不同的时间点收到订单,我们可以看见测试用例的时间顺序是不同的&#x…...
nuxt2 打包优化使用“compression-webpack-plugin”插件
在使用 Nuxt.js 构建项目时,为了提高性能,通常会考虑对静态资源进行压缩。compression-webpack-plugin 是一个常用的 Webpack 插件,用于在生产环境中对文件进行 Gzip 压缩。这对于减少网络传输时间和提高页面加载速度非常有帮助。下面是如何在…...
RabbitMQ知识点
1.为什么需要消息队列? RabbitMQ体系结构 操作001:RabbitMQ安装 二、安装 # 拉取镜像 docker pull rabbitmq:3.13-management # -d 参数:后台运行 Docker 容器 # --name 参数:设置容器名称 # -p 参数:映射端口号&…...
Windsuf 连接失败问题:[unavailable] unavailable: dial tcp...
问题描述 3月6日,在使用Windsuf 时,遇到以下网络连接错误: [unavailable] unavailable: dial tcp 35.223.238.178:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of…...
Spark 3.0核心新特性解析与行业应用展望
Spark 3.0核心新特性解析与行业应用展望 一、自适应查询执行(Adaptive Query Execution, AQE) 作为Spark 3.0最具突破性的优化,AQE通过运行时动态调整执行计划,解决了传统静态优化的局限性。其核心技术突破体现在三方面: 1. 动态分区合并(Dynamically Coalescing Shuf…...
基于 harbor 构建docker私有仓库
仓库(Repository)是集中存放镜像的地方,又分公共仓库和私有仓库。 有时候容易把仓库与注册服务器(Registry)混淆。 实际上注册服务器是存放仓库的具体服务器, 一个注册服务器上可以有多个仓库,…...
MySQL基本建表操作
目录 1,创建数据库db_ck 1.1创建表 1.2 查看创建好的表 2,创建表t_hero 2.1 先进入数据库Db_Ck 2.1.1 这里可以看是否进入数据库: 2.2 创建表t_Hero 2.2.1 我们可以先在文本文档里面写好然后粘贴进去,因为直接写的话,错了要重新开始 …...
低空经济快速发展,无人机人才培养及校企实验室共建技术详解
随着低空经济的快速发展,无人机作为该领域的关键技术载体,其应用范围和市场需求正在迅速扩大。为了满足这一趋势,无人机人才的培养以及校企实验室的共建成为了推动技术进步和产业升级的重要途径。以下是对无人机人才培养及校企实验室共建技术…...
电脑网络出现问题!简单的几种方法解除电脑飞行模式
在某些情况下,您可能需要关闭电脑上的飞行模式以便重新连接到 Wi-Fi、蓝牙或其他无线网络。本教程中简鹿办公将指导您如何在 Windows 和 macO S操作系统上解除飞行模式。 一、Windows 系统下解除飞行模式 通过快捷操作中心 步骤一:点击屏幕右下角的通知…...
Docker入门篇1:搜索镜像、拉取镜像、查看本地镜像列表、删除本地镜像
大家好我是木木,在当今快速发展的云计算与云原生时代,容器化技术蓬勃兴起,Docker 作为实现容器化的主流工具之一,为开发者和运维人员带来了极大的便捷 。下面我们一起开始入门第一篇:搜索镜像、拉取镜像、查看本地镜像…...
网络初级复习作业
作业要求: 1,学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到白度网络中的HTTP服务器 2,学校网络内部网段基于192.168.1.0/24划分:PC1可以正常访问3.3.3.0/24网段,但是PC2不允许 3,学校内部路由使用静态路由…...
Spring Boot 调用DeepSeek API的详细教程
目录 前置准备步骤1:创建Spring Boot项目步骤2:配置API参数步骤3:创建请求/响应DTO步骤4:实现API客户端步骤5:创建控制器步骤6:异常处理步骤7:测试验证单元测试示例Postman测试请求 常见问题排查…...
rpc和proto
rpc全称远程过程控制,说白了是一种对信息发送和接收的规则编写方法,来自google,这些规则会以protobuf代码存到proto文件里。我以autoGen中agent_worker.proto为例,大概长这样 syntax "proto3";package agents;option …...
我的两个医学数据分析技术思路
我的两个医学数据分析技术思路 从临床上获得的或者公共数据库数据这种属于观察性研究,是对临床诊疗过程中自然产生的数据进行分析而获得疾病发生发展的规律等研究成果。再细分,可以分为独立危险因素鉴定和预测模型构建两种。 独立危险因素鉴定是一直以…...
GitHub上传项目
总结(有基础的话直接执行这几步,就不需要再往下看了): git init 修改git的config文件:添加:[user]:name你的github用户名 email你注册github的用户名 git branch -m master main git remote add origin 你的URL gi…...
汇编点亮LED
目录 一、ARM常用汇编指令 二、汇编点亮LED 2.1 GPIO简述 2.2 GPIO相关寄存器 2.3 LED原理图 2.4 汇编点亮LED 一、ARM常用汇编指令 常用汇编格式: label : instruction @ comment label:标号 instruction:具体汇编指令 comment:注释内容 常…...
VS Code C++ 开发环境配置
VS Code 是当前非常流行的开发工具. 本文讲述如何配置 VS Code 作为 C开发环境. 本文将按照如下步骤来介绍如何配置 VS Code 作为 C开发环境. 安装编译器安装插件配置工作区 第一个步骤的具体操作会因为系统不同或者方案不同而有不同的选择. 环境要求 首先需要立即 VS Code…...
Python深度学习算法介绍
一、引言 深度学习是机器学习的一个重要分支,它通过构建多层神经网络结构,自动从数据中学习特征表示,从而实现对复杂模式的识别和预测。Python作为一门强大的编程语言,凭借其简洁易读的语法和丰富的库支持,成为深度学…...
hadoop集群HDFS读写性能测试
一、写测试命令 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -write -nrFiles 10 -size 10MB二、读测试命令 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-t…...
HTTPS加密原理详解
目录 HTTPS是什么 加密是什么 HTTPS的工作流程 1.使用对称加密 2.引入非对称加密 3.引入证书机制 客户端验证证书真伪的过程 签名的加密流程 整体工作流程 总结 HTTPS是什么 HTTPS协议也是一个应用程协议,是在HTTP的基础上加入了一个加密层,由…...
react基本功
useLayoutEffect useLayoutEffect 用于在浏览器重新绘制屏幕之前同步执行代码。它与 useEffect 相同,但执行时机不同。 主要特点 执行时机:useLayoutEffect 在 DOM 更新完成后同步执行,但在浏览器绘制之前。这使得它可以在浏览器渲染之前读取和修改 DOM,避免视觉上的闪烁…...
计算机视觉|3D 点云处理黑科技:PointNet++ 原理剖析与实战指南
一、引言 在当今数字化与智能化快速发展的时代,3D 点云处理技术在多个前沿领域中发挥着重要作用。特别是在自动驾驶和机器人视觉等领域,这项技术已成为实现智能化的关键支撑。 以自动驾驶为例,车辆需要实时感知周围复杂的环境信息ÿ…...
【VUE2】第三期——样式冲突、组件通信、异步更新、自定义指令、插槽
目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …...
WebAssembly技术及应用了解
WebAssembly(Wasm)是一种为Web设计的高效、低级的二进制指令格式,旨在提升Web应用的性能并支持多种编程语言。以下是对其核心概念、优势、应用场景及开发流程的系统介绍: 1. 核心概念 二进制格式:Wasm采用紧凑的二进制…...
工程化与框架系列(26)--前端可视化开发
前端可视化开发 📊 引言 前端可视化是现代Web应用中不可或缺的一部分,它能够以直观的方式展示复杂的数据和信息。本文将深入探讨前端可视化开发的关键技术和最佳实践,包括图表绘制、数据处理、动画效果等方面。 可视化技术概述 前端可视化…...
ESP32的IDF开发学习-WiFi的开启、配置与连接
前言 本章节将实现如何使用ESP32的WiFi功能,尽可能的详细地介绍 简介 ESP32中的wifi支持双工作模式 Station(STA)模式:连接到路由器或其他AP设备,可通过esp_wifi_set_mode(WIFI_MODE_STA)设置。SoftAP模式…...
2025-3-9 一周总结
目前来看本学期上半程汇编语言,编译原理,数字电路和离散数学是相对重点的课程. 在汇编语言和编译原理这块,个人感觉黑书内知识点更多,细节更到位,体系更完整,可以在老师讲解之前进行预习 应当及时复习每天的内容.第一是看书,然后听课,在一天结束后保证自己的知识梳理完整,没有…...
【网络编程】事件选择模型
十、基于I/O模型的网络开发 10.9 事件选择模型 10.0.1 基本概念 事件选择(WSAEventSelect) 模型是另一个有用的异步 I/O 模型。和 WSAAsyncSelect 模 型类似的是,它也允许应用程序在一个或多个套接字上接收以事件为基础的网络事件通知,最 主要的差别在…...
Java核心语法:从变量到控制流
一、变量与数据类型(对比Python/C特性) 1. 变量声明三要素 // Java(强类型语言,需显式声明类型) int age 25; String name "CSDN"; // Python(动态类型) age 25 name …...
信息安全与网络安全的区别_信息安全与网络安全之差异探析
在当今数字化时代,信息安全与网络安全成为了人们关注的热点话题。尽管这两个概念经常被提及,但它们之间存在着明显的区别。本文旨在探讨信息安全与网络安全的定义、范畴及应对策略,以帮助读者更好地理解和应对相关挑战。 一、定义与范畴的差…...
http协议的三次握手机制
HTTP协议是基于TCP协议的,因此HTTP的三次握手机制实际上就是TCP的三次握手机制。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了确保通信的可靠性,TCP在建立连接时需要进行三次握手。下面我们详细…...
探秘沃尔什-哈达玛变换(WHT)原理
沃尔什-哈达玛变换(WHT)起源 起源与命名(20世纪早期) 数学基础:该变换的理论基础由法国数学家雅克哈达玛(Jacques Hadamard)在1893年提出,其核心是哈达玛矩阵的构造。扩展与命名&…...
C++ Windows下屏幕截图
屏幕截图核心代码(如果要求高帧率,请使用DxGI): // RGB到YUV的转换公式 #define RGB_TO_Y(r, g, b) ((int)((0.299 * (r)) (0.587 * (g)) (0.114 * (b)))) #define RGB_TO_U(r, g, b) ((int)((-0.169 * (r)) - (0.331 * (g)) …...
【python爬虫】酷狗音乐爬取练习
注意:本次爬取的音乐仅有1分钟试听,仅作学习爬虫的原理,完整音乐需要自行下载客户端。 一、 初步分析 登陆酷狗音乐后随机选取一首歌,在请求里发现一段mp3文件,复制网址,确实是我们需要的url。 复制音频的…...
电路的一些设计经验
这个C37在这里位于AMS1117-3.3稳压器的输入端。这个是作为输入滤波电容,有助于平滑输入电压,减少输入电压的纹波和噪声,从而提高稳压器LDO的稳定性。 电容器储存电荷,当输入电压出现小的拨动或者纹波时,电容器可以释放…...
Windows编译环境搭建(MSYS2\MinGW\cmake)
我的音视频/流媒体开源项目(github) 一、基础环境搭建 1.1 MSYS2\MinGW 参考:1. 基于MSYS2的Mingw-w64 GCC搭建Windows下C开发环境_msys2使用mingw64编译 在Widndows系统上,使用gcc工具链(g)进行C程序开发?可以的&a…...
Vue 框架深度解析:源码分析与实现原理详解
文章目录 一、Vue 核心架构设计1.1 整体架构流程图1.2 模块职责划分 二、响应式系统源码解析2.1 核心类关系图2.2 核心源码分析2.2.1 数据劫持实现2.2.2 依赖收集过程 三、虚拟DOM与Diff算法实现3.1 Diff算法流程图3.2 核心Diff源码 四、模板编译全流程剖析4.1 编译流程图4.2 编…...
前端 | CORS 跨域问题解决
问题:Access to fetch at http://localhost:3000/save from origin http://localhost:5174 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header is present on the request…...
《白帽子讲 Web 安全》之文件操作安全
目录 引言 (一)文件上传与下载漏洞概述 1.文件上传的常见安全隐患 1.1前端校验的脆弱性与服务端脚本执行危机在文件上传流程中,部分开发者可能会在前端使用 JavaScript 代码对文件后缀名进行简单校验,试图以此阻止非法文件上传…...
【AI】AI开源IDE:CLine源码分析报告
1. 源码位置: CLine 是一个开源的 VSCode 插件,其完整源码托管在 GitHub 的 cline/cline 仓库中。这个仓库包含 CLine 的核心逻辑(TypeScript 编写),包括与 LLM 的对话控制、工具调用接口,以及 VSCode 插件…...
使用数据库和缓存的时候,是如何解决数据不一致的问题的?
1.缓存更新策略 1.1. 缓存旁路模式(Cache Aside) 在应用里负责管理缓存,读取时先查缓存,如果命中了则返回缓存,如果未命中就查询数据库,然后返回缓存,返回缓存的同时把数据给写入缓存中。更新…...
docker compose 以redis为例
常见docker compose 命令 》》注意这个是旧版本的,新版本 docker 与compose 之间没有 - 新版本的 docker compose 把 version 取消了 ,redis 默认是没有配置文件的 ,nginx,mysql 默认是有的 services:redis:image: redis:lat…...
基于Kubernetes部署MySQL主从集群
以下是一个基于Kubernetes部署MySQL主从集群的详细YAML示例,包含StatefulSet、Service、ConfigMap和Secret等关键配置。MySQL主从集群需要至少1个主节点和多个从节点,这里使用 StatefulSet 初始化脚本 实现主从自动配置。 1. 创建 Namespace (可选) ap…...