中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世
中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世
- 引言
- CodeBuddy
- 环境准备
- VSCode
- CodeBuddy
- Node.js下载安装
- 游戏开发
- Craft模型
- 一句话生成数独游戏
- 游戏体验
- EdgeOne Pages
- MCP
- Pages MCP Server
- 配置 MCP Server
- 游戏源码
- 总结
引言
在正文开始之前,先引入一下故事背景:其实,自己最初选择编程行业,也是想自己开发一个小游戏啥的,主要是为了娱乐。没想到进入了编程行业之后,就变成了后端Java 开发者,虽然可能和自己期望的有点差距,但是在Java 语言行业待久了,也就习惯了。只是心里对于做一个小游戏的念想一直还在。恰逢中国版Cursor—- 腾讯云CodeBuddy 来了,对于小游戏的实现也看到了曙光,下面闲话少说,先来介绍一下我们今天的主角。什么是CodeBuddy?
CodeBuddy
腾讯云CodeBuddy,也就是腾讯云代码助手,是由腾讯云自研的一款编程提效辅助工具,以插件形式安装到编辑器(VS Code 或者 JetBrains 系列 IDE)中辅助编程;是基于腾讯混元+DeepSeek双轮模型,为开发者提供AI 技术问答、全新开发智能体Craft、代码补全、单元测试、代码诊断和智能评审等多Agent能力,兼容MCP 开放生态,并支持团队知识库管理、自定义智能体等功能,辅助开发者提高编码效率和质量,助力开发者提质增效。
腾讯云CodeBuddy 目前支持的语言及框架,理论上,腾讯云代码助手不限制任何类型的代码语言,甚至对于中文内容的输入,都能进行自动补全
在对腾讯云CodeBuddy 有了基础的了解之后,下面我们直接来上手感受一下吧。正所谓“纸上得来终觉浅,绝知此事要躬行”,就是这个道理。
环境准备
在开始做自己的小游戏之前,首先需要定个游戏设计方向。那么作为我个人的话,比较喜欢的数独小游戏,那么我们今天的目标就是基于腾讯云 CodeBuddy 来0手写代码实现数独小游戏。那么有了小游戏开发方向之后,我们就需要先准备好我们的开发工具,这里我们需要用到的是vscode 前端开发工具。这个个人作为一个java 后端开发者,本地电脑还没有前端开发工具环境,那么这里我就先准备一下环境吧。
VSCode
这里我找到了VSCode 的官方下载网址:https://code.visualstudio.com/Download 在浏览器打开网址后,你可以根据自身电脑不同的操作系统选择不同的vscode 版本,这里我选择 Windows 版本的 vscode 并下载
下载完成后,直接双击VSCodeUserSetup-x64-1.100.0.exe 打开文件,选择同意协议后指定 D盘安装,默认是C盘,但是考虑到系统盘磁盘容易满,影响电脑开机速度,这里我选择 D盘
后面其他的选择默认即可,等待 vscode 安装完成之后就可以看到如下页面
点击【完成】启动vscode,下面我们就需要为我们的vscode 安装腾讯云 CodeBuddy 插件。
CodeBuddy
在安装CodeBuddy 之前,首先需要确定你本地开发工具 IDE 满足版本要求,如果你本地的开发工具不能满足 CodeBuddy 对开发工具 的最低版本要求,那么需要你升级本地开发工具后再次尝试后面的安装
在打开的vscode 开发工具页面,点击【设置】-【Extensions】,在搜索框中输入【腾讯云代码助手】,点击【Install】
在弹出的弹框【Do you trust the publisher “Tencent Cloud”?】中选择【Trust Publisher & Install】开始安装CodeBuddy 插件
安装完成后微信扫码登录 CodeBuddy 后就可以看到我们的 vscode 开发工具页面已经有了CodeBuddy 的操作页面
Node.js下载安装
这里如果你的本地没有安装Node.js 的话,你需要在你的本地先安装Node.js,后面会用到。在浏览器打开Node.js 的官网地址:https://nodejs.org/zh-cn 在官网首页直接点击【下载Node.js (LTS)】下载Node.js 到本地并双击安装
整个安装过程全部默认即可,安装完成后打开cmd 命令输入以下命令验证 Node.js 是否安装成功
node -v
npm -v
执行完成后可以看到如下内容,表示Node.js 安装成功
游戏开发
在上面我们已经安装好了我们的 vscode 开发工具以及CodeBuddy AI 代码辅助编程工具,那么下面我们就来提出我们的想法吧。
Craft模型
腾讯云 Craft 预置了 hunyuan 和 deepseek-v3最新模型,默认(default)为 hunyuan 模型,支持你对模型进行切换,这里我们就默认选择就可以
一句话生成数独游戏
其实从AI 对话发展到现在,大家对于与AI 对话的技巧上基本上都有一定的认知了,想让AI 回答准确的话,那么最常用的就是定角色(是什么)+发任务(做什么)+提要求(什么要求)。
那么我的需求就出来了【你是一个小游戏开发专家,具有丰富的游戏开发经验,我需要你开发一个数独小游戏,需要支持难,中,易三种难易度切换,锻炼玩家数字敏感性。现在,帮我生成完整的代码吧。】在输入我们的要求后,Craft会对我们的需求进行一个分析整理,包括游戏的核心功能、复杂度评估、实现计划等
让我们在心里首先对我们的需求有一个大概的直观的认识,随后Craft 会按照上面设定好的【实现计划】逐步生成对应的文件。首先开始生成第一个文件,文件生成之后需要我们点击【修改】确认,然后才会进行下一步的任务代码生成,或者我们也可以直接设置【每次询问】为【自动修改文件】
等待所有文件全部生成完成之后,Craft 会直接在AI 对话内容展示区域提示【数独游戏开发完成】并对已经创建的文件进行一个简单的介绍。在文件接受区域我们选择【全部接受】就可以完成本次数独游戏开发整个计划中新建文件的保存
这里Craft 除了生成数独游戏需要的文件外,还对当前数独游戏的功能特点(包括游戏的难易度介绍、游戏特性自动生成题目、答案检查等)以及如何运行游戏都进行了详细的说明,方便我们后续直接体验
游戏体验
下面我们按照Craft 的提示找到 index.html 的文件,选中 index.html 文件后右键选择【Copy Path】,可以获取到 index.html 文件的本地路径,
我们将复制的 index.html 本地路径地址放在浏览器,可以看到我们的数独小游戏已经成功展现在我们的面前了,从色彩搭配上以及功能上,感觉还是很不错的。同时数独游戏也具备了我们在生成游戏时提出的需要数独游戏具有难中易三种难度切换的需求,下面我们来看一下效果吧
这里我简单体验了一下,效果很不错,每完成一个可以再次点击【新游戏】重新开始,闲暇之余放松身心,让大脑换个方向运转一下,体验感还是不错的。那么到这里我想,是不是可以给页面增加一个计时的展示,不然都不知道自己玩数独游戏有没有提升,加了计时器之后,就可以方便的看到我们完成当前的数独游戏耗时多少,于是我继续提出我的需求【为数独游戏增加一个计时功能,可以看到每一局耗时多少,展示形式以分钟:秒 的形式展示】这里我们可以看到,在收到我们的需求后,Craft 会对当前的需求进行分析后,基于现有的页面进行功能的改造,
这里我们可以看到Craft 在对现有的文件进行修改的时候,会基于已经发生的情况再次就行判断修改,就像上面对我们的script.js 文件进行了多轮次的分析修改,最终完成对数独游戏计时功能的添加。下面我们在浏览器刷新我们的本地 index.html 页面,就可以看到我们的数独游戏已经增加了计时功能,同时每次点击【新游戏】会自动重置计时器
在官方文档关于VSCode 插件更新记录中我们可以看到,本次 VSCode 的CodeBuddy 插件更新后的Craft 支持 MCP 扩展能力,支持在 MCP 市场中主流 MCP 服务一键安装、自定义配置 MCP
那么既然Craft 支持 MCP扩展能力,那么这么好玩的数独游戏,只能自己在本地玩儿的话,是不是有点太小气了,完全可以通过MCP 来发布出来让大家都可以体验一下数独游戏的魅力,正所谓“独乐乐不如众乐乐”,下面说干就干。在开始之前先容我介绍一下后面用到的EdgeOne Pages 和 MCP ,方便大家更好的理解为什么可以这么干。
EdgeOne Pages
什么是EdgeOne Pages?EdgeOne Pages 是基于 Tencent EdgeOne 基础设施打造的前端开发和部署平台,专为现代 Web 开发设计,帮助开发者快速构建、部署静态站点和无服务器应用。通过集成边缘函数能力,实现高效的内容交付和动态功能扩展,支持全球用户的快速访问。
我们使用 EdgeOne Pages,可以高效快速的构建、部署无服务应用,从而大大缩短从代码编写到部署上线的时间,保证项目的快速迭代,帮助企业迅速应对市场需求;同时无需配置和管理服务器等基础设施,通过 JS 在靠近用户的边缘节点编写超低延时的服务端逻辑。而本地部署,一方面需要依赖特定运行时环境(如 Node.js、Python 或 Docker),限制了可落地的应用场景,操作复杂,另一方面对技术有一定要求,需要有一定的技术基础才能操作,导致应用相对会收到限制。
MCP
那么什么是MCP呢?MCP 是模型上下文协议(Model Context Protocol)的简称,是一个开源协议,由Anthropic(Claude开发公司)开发,旨在让大型语言模型(LLM)能够以标准化的方式连接到外部数据源和工具。有了 MCP 标准协议,就像给 AI 大模型装了一个 “万能接口”,让 AI 模型能够与不同的数据源和工具进行无缝交互。它就像 USB-C 接口一样,提供了一种标准化的方法,将 AI 模型连接到各种数据源和工具。同时,MCP 可以在不同的应用 / 服务之间保持上下文,增强整体自主执行任务的能力
Pages MCP Server
那么什么是Pages MCP Server?EdgeOne Pages Deploy MCP 是一项专用服务,能够将 HTML 内容快速部署到 EdgeOne Pages 并生成公开访问链接。看到没,刚才我说的,自己用Craft 生成了一个数独游戏,但是只能自己在本地玩儿,有点太小气,那么我们就可以通过EdgeOne Pages Deploy MCP 将我们的数独小游戏 HTML 页面快速部署到EdgeOne Pages 并生成公开访问链接,有了公开访问链接,我们就可以让更多的小伙伴一起玩耍起来了。
配置 MCP Server
那么我们首先需要为我们的开发工具 VSCode的 Craft 配置 MCP Server ,点击AI 对话框 的MCP 图标
在CodeBuddy 对话框选择【MCP 市场】,找到我们需要的MCP 并点击右侧的【安装】,这里需要说明的是如果本地没有安装Node.js 的话,这里点击安装会安装失败,需要你安装Node.js之后再尝试
安装完成后,切换tab的【已安装】后打开json 参数配置页面
在右侧打开的配置 MCP Server 的文件【Craft_mcp_settings.json】中输入一下配置内容后保存配置文件
{"mcpServers": {"edgeone-pages-mcp-server": {"command": "npx","args": ["edgeone-pages-mcp"]}}
}
复制上面配置到 Craft_mcp_settings.json 文件后可以看到 MCP Server 已经到达正常状态
点击MCP Server 的执行按钮,可以在我们的Craft 对话框看到如下测试内容
访问测试页面地址可以看到已经发布成功的测试页面的内容
下面我们在Craft 的AI 对话框中输入我们的需求【通过我们配置的edgeone-pages-mcp-server发布我们生成的数独小游戏】,但是这里提示完成扫描目录之后没找到之前生成的数独游戏文件,可能是因为我重启电脑后导致原来的会话丢失,
但是我看到上一次数独游戏的文件还在本地,那么我通过选择文件的方式再次尝试发布数独小游戏
第一次选择文件发布尝试失败,可能是网络波动问题导致,
再次在选择了指定数独小游戏的文件AI 对话框中输入【发布我们已经生成的数独小游戏】后,等待了大概5分钟终于看到发布成功了,
以及完整的游戏说明,游戏访问链接:https://mcp.edgeone.site/share/n6K0vNGxD3GuMuQyVD3sZ
游戏源码
这里想到大家可能有需要,想要自己在本地基于现有我生成的这一版数独小游戏再次进行优化尝试,那么这里我将Craft 生成的数独小程序的源码贴出来供大家选择,这里需要说明一点的是,整个数独小游戏的源码我一个字母也没有敲,完全是Craft 为我生成的我直接用的,下面提供相应的源码
index.html
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数独游戏</title><link rel="stylesheet" href="style.css">
</head>
<body><div class="container"><h1>数独游戏</h1><div class="controls"><div class="timer" id="timer">00:00</div><select id="difficulty"><option value="easy">简单</option><option value="medium">中等</option><option value="hard">困难</option></select><button id="new-game">新游戏</button></div><div class="board" id="board"><!-- 9x9的数独格子将由JavaScript动态生成 --></div><div class="message" id="message"></div><button id="check">检查答案</button></div><script src="script.js"></script>
</body>
</html>
style.css
* {margin: 0;padding: 0;box-sizing: border-box;
}body {font-family: Arial, sans-serif;background-color: #f0f0f0;display: flex;justify-content: center;align-items: center;min-height: 100vh;
}.container {background-color: white;padding: 20px;border-radius: 10px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}h1 {text-align: center;color: #333;margin-bottom: 20px;
}.controls {display: flex;justify-content: center;align-items: center;gap: 10px;margin-bottom: 20px;
}.timer {background-color: #333;color: #fff;padding: 8px 16px;border-radius: 5px;font-size: 18px;font-family: monospace;min-width: 80px;text-align: center;
}select, button {padding: 8px 16px;font-size: 16px;border: none;border-radius: 5px;cursor: pointer;
}select {background-color: #fff;border: 1px solid #ccc;
}button {background-color: #4CAF50;color: white;transition: background-color 0.3s;
}button:hover {background-color: #45a049;
}.board {display: grid;grid-template-columns: repeat(9, 1fr);gap: 1px;background-color: #999;border: 2px solid #333;margin-bottom: 20px;
}.cell {width: 40px;height: 40px;background-color: white;display: flex;justify-content: center;align-items: center;font-size: 20px;font-weight: bold;
}.cell input {width: 100%;height: 100%;border: none;text-align: center;font-size: 20px;font-weight: bold;color: #444;
}.cell input:focus {outline: none;background-color: #e8f0fe;
}.cell.given {background-color: #f0f0f0;
}.cell.invalid {background-color: #ffebee;
}/* 3x3宫格边框 */
.cell:nth-child(3n) {border-right: 2px solid #333;
}.cell:nth-child(9n) {border-right: none;
}.board > div:nth-child(n+19):nth-child(-n+27),
.board > div:nth-child(n+46):nth-child(-n+54) {border-bottom: 2px solid #333;
}.message {text-align: center;margin: 10px 0;padding: 10px;border-radius: 5px;display: none;
}.message.success {display: block;background-color: #e8f5e9;color: #2e7d32;
}.message.error {display: block;background-color: #ffebee;color: #c62828;
}@media (max-width: 500px) {.cell {width: 30px;height: 30px;font-size: 16px;}.cell input {font-size: 16px;}.container {padding: 10px;}
}
script.js
class Sudoku {constructor() {this.board = Array(9).fill().map(() => Array(9).fill(0));this.solution = Array(9).fill().map(() => Array(9).fill(0));}// 生成新游戏generate(difficulty) {// 清空棋盘this.board = Array(9).fill().map(() => Array(9).fill(0));this.solution = Array(9).fill().map(() => Array(9).fill(0));// 生成完整的解决方案this.fillBoard(0, 0);// 复制解决方案this.solution = this.board.map(row => [...row]);// 根据难度挖空this.removeNumbers(difficulty);}// 填充数独板(回溯算法)fillBoard(row, col) {if (col >= 9) {row++;col = 0;}if (row >= 9) {return true;}const numbers = this.shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9]);for (let num of numbers) {if (this.isValid(row, col, num)) {this.board[row][col] = num;if (this.fillBoard(row, col + 1)) {return true;}this.board[row][col] = 0;}}return false;}// 检查数字在当前位置是否有效isValid(row, col, num) {// 检查行for (let x = 0; x < 9; x++) {if (this.board[row][x] === num) return false;}// 检查列for (let x = 0; x < 9; x++) {if (this.board[x][col] === num) return false;}// 检查3x3方格let startRow = row - row % 3;let startCol = col - col % 3;for (let i = 0; i < 3; i++) {for (let j = 0; j < 3; j++) {if (this.board[i + startRow][j + startCol] === num) return false;}}return true;}// 随机打乱数组shuffle(array) {for (let i = array.length - 1; i > 0; i--) {const j = Math.floor(Math.random() * (i + 1));[array[i], array[j]] = [array[j], array[i]];}return array;}// 根据难度移除数字removeNumbers(difficulty) {let cellsToRemove;switch(difficulty) {case 'easy':cellsToRemove = 40; // 保留41个数字break;case 'medium':cellsToRemove = 50; // 保留31个数字break;case 'hard':cellsToRemove = 60; // 保留21个数字break;default:cellsToRemove = 45;}let count = 0;while (count < cellsToRemove) {const row = Math.floor(Math.random() * 9);const col = Math.floor(Math.random() * 9);if (this.board[row][col] !== 0) {this.board[row][col] = 0;count++;}}}// 检查当前填写是否正确checkSolution(currentBoard) {for (let i = 0; i < 9; i++) {for (let j = 0; j < 9; j++) {if (currentBoard[i][j] !== this.solution[i][j]) {return false;}}}return true;}
}// 游戏管理类
class Game {constructor() {this.sudoku = new Sudoku();this.currentBoard = Array(9).fill().map(() => Array(9).fill(0));this.timer = null;this.startTime = null;this.timerElement = null;this.initializeGame();}// 格式化时间显示formatTime(seconds) {const minutes = Math.floor(seconds / 60);const remainingSeconds = seconds % 60;return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;}// 启动计时器startTimer() {if (this.timer) {clearInterval(this.timer);}this.startTime = Date.now();this.timerElement.textContent = "00:00";this.timer = setInterval(() => {const currentTime = Date.now();const elapsedSeconds = Math.floor((currentTime - this.startTime) / 1000);this.timerElement.textContent = this.formatTime(elapsedSeconds);}, 1000);}// 停止计时器stopTimer() {if (this.timer) {clearInterval(this.timer);this.timer = null;}}initializeGame() {this.boardElement = document.getElementById('board');this.messageElement = document.getElementById('message');this.difficultySelect = document.getElementById('difficulty');this.timerElement = document.getElementById('timer');// 初始化事件监听document.getElementById('new-game').addEventListener('click', () => {this.startNewGame();});document.getElementById('check').addEventListener('click', () => {this.checkGame();});// 开始新游戏this.startNewGame();}startNewGame() {const difficulty = this.difficultySelect.value;this.sudoku.generate(difficulty);this.currentBoard = this.sudoku.board.map(row => [...row]);this.renderBoard();this.messageElement.className = 'message';this.messageElement.textContent = '';// 启动新的计时器this.startTimer();}renderBoard() {this.boardElement.innerHTML = '';for (let i = 0; i < 9; i++) {for (let j = 0; j < 9; j++) {const cell = document.createElement('div');cell.className = 'cell';if (this.currentBoard[i][j] !== 0) {cell.classList.add('given');cell.textContent = this.currentBoard[i][j];} else {const input = document.createElement('input');input.type = 'number';input.min = 1;input.max = 9;input.addEventListener('input', (e) => {const value = parseInt(e.target.value) || 0;if (value >= 0 && value <= 9) {this.currentBoard[i][j] = value;}});cell.appendChild(input);}this.boardElement.appendChild(cell);}}}checkGame() {const isComplete = this.currentBoard.every(row => row.every(cell => cell !== 0));if (!isComplete) {this.messageElement.className = 'message error';this.messageElement.textContent = '请填完所有空格!';return;}const isCorrect = this.sudoku.checkSolution(this.currentBoard);if (isCorrect) {this.stopTimer();const finalTime = this.timerElement.textContent;this.messageElement.className = 'message success';this.messageElement.textContent = `恭喜!你已经成功解开这个数独!完成时间:${finalTime}`;} else {this.messageElement.className = 'message error';this.messageElement.textContent = '答案不正确,请继续尝试!';}}
}// 启动游戏
window.addEventListener('DOMContentLoaded', () => {new Game();
});
总结
到这里我想说,虽然我本身并不是前端开发者,前端开发工具VSCode也是今天刚下载安装的,Node.js 部署环境也是现装的,但是真的实现一个数独小游戏,却是一点也不难。感觉上就是有了CodeBuddy ,即使是陌生的环境,陌生的开发工具,一样可以达到自己期待的效果,并且效果还不错。
对于开发者来说,CodeBuddy的出现似乎打破了不同开发语言之间的壁垒,过去你可能说你精通一门语言之后,你再学习其他开发语言,你的学习效率会大大提升,但是大家注意,你还是有一个【学习】的过程,还是需要学习了之后才能接手开发。那么现在呢,有了CodeBuddy 之后,我不懂前端,我只要下载一个前端开发工具,安装腾讯云CodeBuddy 插件之后,我就可以在前端开发工具里面实现我想要的。我不懂python 开发语言,那么我下载了 PyCharm开发工具,同样安装了腾讯云CodeBuddy 插件后,我想实现的,比如数据抓取什么的,我掌握好AI对话三要素,我一样可以很高效的做到。
脑中闪现了一个梗,对于开发者来说,替代你的可能不是你的同行(相同语言开发者),而可能是你的跨行(不同语言开发者),就像娱乐圈一样,各种跨行表演,哈哈。
相关文章:
中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世
中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世 引言CodeBuddy环境准备VSCodeCodeBuddyNode.js下载安装 游戏开发Craft模型一句话生成数独游戏游戏体验 EdgeOne PagesMCPPages MCP Server配置 MCP Server 游戏源码总结 引言 在正文开始之前,先引…...
【蓝桥杯嵌入式】【复盘】第13届国赛真题
1. 前言 最近在准备16届的蓝桥杯嵌入式赛道的国赛,打算出一个系列的博客,记录STM32G431RBT6这块比赛用板上所有模块可能涉及到的所有考点,如果有错误或者遗漏欢迎各位大佬斧正。 本系列博客会分为以下两大类: 1.1. 单独模块的讲…...
Docker疑难杂症解决指南
Docker疑难杂症解决指南 Docker作为容器化技术的代表,广泛应用于开发、测试和部署环境中。然而,在使用过程中,用户可能会遇到各种问题。以下是一些常见的Docker疑难杂症及其解决方法。 容器无法启动 容器无法启动是常见问题之一࿰…...
嵌入式开发学习日志(数据结构--顺序结构单链表)Day19
一、顺序结构 安装软件命令: sudo apt-get install (软件名) 安装格式化对齐:sudo apt-get install clang-format 内存泄漏检测工具: sudo apt-get install valgrind 编译后,使用命令 valgrind ./a.out 即可看内…...
MySQL 8.0 OCP 1Z0-908 题目解析(2)
题目005 Choose two. Which two actions can obtain information about deadlocks? □ A) Run the SHOW ENGINE INNODB MUTEX command from the mysql client. □ B) Enable the innodb_status_output_locks global parameter. □ C) Enable the innodb_print_all_deadlock…...
短板效应--双指针
1.根据题意取决于最小的高,那么 若当移动最小高的一端,mv可能会变 但若移动较大的一端,v一定会变小就没有意义了,所以我们只需要每次移动一端,直到lr就行 2.原理就是与左右端点有关且每次只要移动一端就行 #include…...
CodeBuddy终极测评:中国版Cursor的开发革命(含安装指南+HTML游戏实战)
一、腾讯云CodeBuddy产品全景解读 1. 什么是腾讯云代码助手? 官方定义: Tencent Cloud CodeBuddy是由腾讯自研的AI编程辅助工具,基于混元大模型DeepSeek双引擎,提供: ✅ 智能代码补全(支持200语言&#x…...
【Linux】简单设计libc库
📝前言: 经过之间两篇文章,【Linux】基础IO(一)和【Linux】基础IO(二)的学些,我们对文件的基础IO已经有了一定的理解。 这篇文章我们来简单设计一下libc库,来复习一下文…...
3335. 字符串转换后的长度 I
3335. 字符串转换后的长度 I class Solution:def lengthAfterTransformations(self, s: str, t: int) -> int:# 大质数mod 10**97# 创建一个长度为26的数组cnt,对应26个小写字母cnt [0]*26# 计算出s中26个字符分别有多少个for ch in s:cnt[ord(ch)-ord(a)] 1f…...
《医院网络安全运营能力成熟度评估指南》(试行版)研究解读
引言 随着数字化转型的不断深入,医院信息化建设已从单点应用走向全面系统集成,信息系统已成为支撑医院业务运行和管理决策的基础设施。然而,信息化发展也带来了日益复杂的网络安全挑战,从传统的边界防护到如今的全方位安全威胁,医院网络安全建设面临着前所未有的压力。20…...
鸿蒙5.0项目开发——鸿蒙天气项目的实现(介绍)
【高心星出品】 文章目录 项目简介:项目运行效果图:主要功能:使用的技能点:开发环境: 项目简介: 这是一个基于鸿蒙系统(HarmonyOS)开发的天气应用,采用 ArkTS 语言开发&…...
软考软件测评师——计算机网络
目录 第一部分 核心知识点解析 1. IPv4地址规范 2. 层次化网络架构 3. 网络设备解析 4. URL结构规范 5. 关键网络命令 6. SNMP配置要求 第二部分 历年真题精析 2020年真题 2016年真题 2015年真题 高频考点总结 第一部分 核心知识点解析 1. IPv4地址规范 特殊地址说…...
Node.js 中的 URL 模块
一、URL 模块基础 1. 模块导入方式 // Node.js 方式 const url require(url);// ES 模块方式 (Node.js 14 或启用 ESM) import * as url from url; 2. 核心功能 解析 URL 字符串 格式化 URL 对象 URL 处理工具方法 WHATWG URL 标准实现 二、URL 解析与构建 1. 传统解…...
JavaWeb 前端开发
JavaWeb前端 初识 HTMLCSS 入门程序 什么是HTML HTML是由标签构成的 什么是CSS HTML快速入门 标签可以是大写,也可以是小写,也可以是大小写混用。 属性值也可以使用单引号,但一般使用双引号。 HTML的语法结构比较松散,不严谨…...
设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析
目录 一、策略模式:AI大模型的动态决策引擎 1.1 核心原理与工业级实现 1.2 AI时代的技术演进 二、模板方法模式:AI流水线的标准化基石 2.1 多模态处理框架设计 三、策略与模板方法的协同创新 3.1 电商推荐系统实践 四、前沿趋势与挑战 4.1 量子计算增强模式 五、伦理…...
2. 盒模型/布局模块 - 响应式产品展示页_案例:电商产品网格布局
2. 盒模型/布局模块 - 响应式产品展示页 案例:电商产品网格布局 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style type"text/css">:root {--primary-color…...
H5S 视频监控AWS S3 对象存储
本文介绍一下如何使用S3对象存储作为H5S 存储空间进行录像存储 然后创建一个对象存储,本文以minio 为例(实际项目亲测天翼云): 首先安装 s3fs 如果是redhat系列,使用如下命令 sudo yum install epel-release sudo yum install s3fs-fuse …...
Visual Studio 2022 跨网络远程调试
🚀 Visual Studio 2022 跨网络远程调试实践指南 在本地开发软件时,Visual Studio 的调试器是我们最依赖的工具之一。但是当目标程序运行在远程设备上,例如测试服务器、工控设备或嵌入式终端,如何实现 跨网络远程调试 成为了开发中…...
最短路与拓扑(1)
1、找最长良序字符串 #include<bits/stdc.h> using namespace std; const int N105; int dis[N]; int vis[N]; int edge[N][N]; int n,m; int vnum;void dij(int u, int v) {// 初始化距离数组和访问标记for(int i0; i<vnum; i) {vis[i] 0;dis[i] edge[u][i];}// D…...
【前缀和】和为 K 的子数组(medium)
【前缀和】和为 K 的子数组 题目描述算法原理和细节问题代码 题目描述 和为 K 的子数组 给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。 示例 1: 输入:nums [1,1,1], k 2 输出: 2 解释: 此题 [1,1] 与 [1,1] 为两种不同的…...
深入理解 JVM:StackOverFlow、OOM 与 GC overhead limit exceeded 的本质剖析及 Stack 与 Heap 的差异
摘要 在 Java 开发过程中,内存管理相关的问题一直是开发者需要重点关注的领域。StackOverFlow、OutOfMemory(OOM)和GC overhead limit exceeded是常见的运行时错误,而理解Stack(栈)和Heap(堆&a…...
汽车功能安全--TC3xx MBIST设计要点
英飞凌针对硬件潜伏故障的自测,提供了四种机制:PBIST、LBIST、MONBIST和MBIST。 LBIST和MONBIST我们已经聊过了,今天就快速介绍下MBIST。 MBIST,全程Memory Built-in Self Test,用于检测SRAM数据单元的完整性。 在2…...
blazor与硬件通信实现案例
在网页接入硬件交互通信方案这篇博客中,曾经提到了网页中接入各种硬件操作的方法,即通过Windows Service作为指令的中转,并建立websocket通信连接,进而实现接入硬件的各种操作。这篇博客就以实际的案例来讲解具体怎么实现。 一、建立Windows Service项目 比如我就建立了一…...
思迈特软件携手天阳科技,打造ChatBI金融智能分析新标杆
5月10日,广州思迈特软件有限公司(以下简称“思迈特软件”)与天阳宏业科技股份有限公司(以下简称“天阳科技”)在北京正式签署战略合作协议。思迈特软件董事长吴华夫、CEO姚诗成,天阳科技董事长兼总裁欧阳建…...
微服务的“导航系统”:使用Spring Cloud Eureka实现服务注册与发现
在上一篇中,我们理解了微服务架构的核心理念以及Spring Cloud为我们提供的强大工具集。我们提到,微服务架构的一个核心挑战在于,服务实例的网络位置是动态的,服务之间需要一种机制来互相定位。 想象一下,你开了一家新…...
Linux之初见进程
1. 冯诺依曼体系结构 冯诺依曼体系结构是计算机的基本设计原则之一,也被认为是现代计算机的基础。它由美国数学家约翰冯诺伊曼在20世纪40年代后期提出。冯诺依曼体系结构包括存储程序概念、将数据和指令存储在同一存储器中、按照顺序执行指令等关键特征。 具体来说…...
Docker入门教程:常用命令与基础概念
目录 简介常用命令Docker 常用命令汇总docker run 命令格式与参数解析 简介 Docker 是一个客户端-服务器(client-server)架构的应用程序,其中包含两个主要组件:Docker 客户端和 Docker 守护进程(也称为 Docker Daemon…...
内核深入学习3——分析ARM32和ARM64体系架构下的Linux内存区域示意图与页表的建立流程
内核深入学习3——ARM32/ARM64在Linux内核中的实现(2) 今天我们来讨论的是一个硬核的内容,也是一个老生常谈的话题——那就是分析ARM32和ARM64体系架构下的Linux内存区域示意图的内容。对于ARM64的部分,我们早就知道一个基本的…...
vim 练习题
文章目录 前言:学习了vim基础命令,上机实操下吧命令模式练习插入模式练习末行模式练习视图模式练习高级操作练习 总结 前言:学习了vim基础命令,上机实操下吧 命令模式练习 打开任意文本文件,使用gg跳转到首行&#x…...
CSS3 选择器完全指南:从基础到高级的元素定位技术
CSS3选择器完全指南:从基础到高级的元素定位技术 一、基本选择器:精准定位的基石 (一)元素选择器 通过元素标签名直接匹配页面元素,语法简洁直观: p { color: #333; } /* 选择所有<p>元素 */ div…...
从SAM看交互式分割与可提示分割的区别与联系:Interactive Segmentation Promptable Segmentation
SAM的火爆也带来了一项新的任务:Promptable Segmentation,并且作者在文中对比了交互式分割Interactive Segmentation,并且在训练过程中也参考了交互式分割的训练方法,那么可提示分割与交互式分割有什么区别? 个人观点…...
k8s初始化时候,报错无法通过 CRI(容器运行时接口)与 containerd 通信
报错主要信息处 [reset] Unmounting mounted directories in “/var/lib/kubelet” W0513 11:34:19.818023 27124 cleanupnode.go:134] [reset] Failed to evaluate the “/var/lib/kubelet” directory. Skipping its unmount and cleanup: lstat /var/lib/kubelet: no such f…...
k8s之k8s集群部署
一、kubernetes基础环境搭建 1.安装虚拟机 2. 基础环境配置 2.1 关闭防火墙 更改主机名 #系统更新 sudo dnf update -y # 关闭防火墙 sudo systemctl stop firewalld sudo systemctl disable firewalld # 临时关闭 SELinux sudo setenforce 0 # 永久关闭 SELinux sudo sed -i…...
百度智能云千帆携手联想,共创MCP生态宇宙
5月7日,2025联想创新科技大会(Tech World)在上海世博中心举行,本届大会以“让AI成为创新生产力”为主题。会上,联想集团董事长兼CEO杨元庆展示了包括覆盖全场景的超级智能体矩阵,包括个人超级智能体、企业超…...
黑白浮生项目测试报告
文章目录 一、项目背景二、项目功能三、测试计划1. 功能测试1.1 注册页面1.1.1 正常注册1.1.2 异常注册 1.2 登录页面1.2.1 正常登录1.2.2 异常登录 1.3 游戏大厅页面1.3.1 开始匹配1.3.2 取消匹配 1.4 游戏房间页面1.4.1 落子1.4.2 游戏结束 2. 自动化测试2.1 创建浏览器驱动类…...
《操作系统真象还原》第十四章(2)——文件描述符、文件操作基础函数
文章目录 前言文件描述符简介文件描述符原理文件描述符实现修改thread.h修改thread.c 文件操作相关的基础函数inode操作相关函数文件相关函数编写file.h编写file.c 目录相关函数完善fs/dir.h编写fs/dir.c 路径解析相关函数实现文件检索功能修改fs.h继续完善fs.c makefile 结语 …...
k8s v1.26 实战csi-nfs 部署
一 前言 使用自开发的一键k8s基础环境部署后,存储需要解决,就是测试环境故选择nfs比较简单,翻阅很多网上资料感觉都不是很全面,结合网上资料折腾了一天,总算是完成了csi-nfs部署。其实之前也部署过,经过一…...
测试集群的功能-执行wordcount程序
具体的操作步骤如下: 确保hadoop是正确运行的。hdfs和yarn都正常启动了。在集群根目录下创建wcinput目录,并在它的下面上传两个文本文件word1.txt, word2.txt,其中保存了要测试的单词信息。在任意一台设备中,进入到hadoop的主目录…...
聊一聊Electron中Chromium多进程架构
Chromium 多进程架构概述 Chromium 的多进程架构是其核心设计之一,旨在提高浏览器的稳定性、安全性和性能。Chromium 将不同的功能模块分配到独立的进程中,每个进程相互隔离,避免了单进程架构中一个模块的崩溃导致整个浏览器崩溃的问题。 在…...
虹科技术 | 简化汽车零部件测试:LIN/CAN总线设备的按键触发功能实现
汽车零部件测试领域对操作的便捷性要求越来越高,虹科Baby-LIN-RC系列产品为这一需求提供了完美的解决方案。从基础的按键设置到高级的Shift键应用,本文将一步步引导您了解虹科Baby-LIN-RC系列产品的智能控制之道。 虹科Baby-LIN-3-RC 想象一下࿰…...
前端开发避坑指南:React 代理配置常见问题与解决方案
前端开发避坑指南:React 代理配置常见问题与解决方案 一、为什么需要配置代理?二、使用 create-react-app 默认配置代理三、使用 http-proxy-middleware 配置复杂代理四、高级代理配置五、生产环境中的代理配置一、为什么需要配置代理? React 应用在开发过程中经常需要与后端…...
43、Server.UrlEncode、HttpUtility.UrlDecode的区别?
Server.UrlEncode 和 HttpUtility.UrlDecode 是 .NET 中用于处理 URL 编码/解码的两个不同方法,主要区别在于所属命名空间、使用场景和具体行为。以下是详细对比: 1. 所属类库与命名空间 Server.UrlEncode 属于 System.Web.HttpServerUtility 类。通常…...
Azure 应用的托管身份与服务主体
Microsoft Entra ID -- 前称 Azure Active Directory -- 提供强大的身份验证和授权功能。托管身份和服务主体通过限制凭据暴露的风险来帮助确保对 Azure 资源的访问安全。 托管身份为Azure原生应用程序自动管理身份,而服务主体则非常适合需要访问Azure资源的外部应…...
音频特征工具Librosa包的使用
深入探索Mamba模型架构与应用 - 商品搜索 - 京东 DeepSeek大模型高性能核心技术与多模态融合开发 - 商品搜索 - 京东 要使用深度学习与语音特征进行抽取,首先需要准备能够对语音特征进行解析的工具。 Librosa是一个用于音频、音乐分析与处理的Python工具包&#x…...
Mapreduce初使用
(一)MapReduce的定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个…...
Samtec助力电视广播行业
【摘要前言】 现代广播电视技术最有趣的方面之一就是界限的模糊。过去,音频和视频是通过射频电缆传输的模拟技术采集的,而现在,数字世界已经取代了模拟技术。物理胶片和磁带已让位于数字存储设备和流媒体。 在这个过程中,连接器…...
根据输入的数据渲染柱形图
背景:根据不同季度的销售额,生成对应的柱形图,直观的看出差异 效果: 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatibl…...
Three.js模型材质调整与性能优化实战
一、材质基础调整 1.1 颜色与透明度控制 通过Material.color属性可直接修改材质颜色: material.color new THREE.Color(0xff0000); // 红色结合opacity属性实现透明效果: material.opacity 0.5; // 50%透明度如需动态调整,可通过Color.…...
QEMU模拟32位ARM实现自定义系统调用
实现自定义系统调用 如何使用 QEMU 模拟32位 ARM 环境参考:使用Qemu模拟32位ARM系统 修改linux内核源码 使用 linux-4.4.240 源码,下载链接:下载链接 在 arch\arm\include\uapi\asm\unistd.h 文件下新增系统调用 sys_test: /…...
AWS IoT Core自定义域名配置实战指南
在使用AWS IoT Core时,配置自定义域名可以为您的IoT解决方案带来多方面的好处。本文将详细介绍如何在AWS IoT Core中设置和使用自定义域名,包括证书配置、域名设置以及DNS记录创建等关键步骤。 为什么要使用自定义域名? 使用自定义域名(也称为客户管理的域名)有以下几个主要…...