- 博客(315)
- 收藏
- 关注
原创 在 Windows 系统上通过WSL来使用Makefile的方法
整个流程核心是「通过 WSL 搭建 Linux 兼容环境 → 安装依赖工具 → 访问项目 → 执行 Makefile」,若遇到具体错误,可根据终端输出的报错信息定位问题(通常是依赖缺失或路径错误)。
2025-09-17 13:07:44
320
原创 Node.js后端工程师需了解的前端技术:HTML5、JavaScript、CSS、工具(Axios、EJS、 Chart.js)及资源CDN和MDN
作为Node.js后端工程师,为调试目的学习前端技术时,核心需求是快速构建简单界面、测试API交互、展示数据,无需深入复杂的前端框架。需要的是轻量、易上手且能满足调试需求的最小化前端技术栈,本文整理了适合Node.js后端工程师的前端技术。包括HTML5、JavaScript、CSS、工具(Axios、EJS、 Chart.js)及资源CDN和MDN。它可作为Node.js后端工程师的快速入门指南,帮助您快速上手前端技术,提高开发效率。
2025-09-17 10:11:51
308
原创 基于 Node.js 的后端框架:NestJS 和 Express(二)
Express 是基于 Node.js 平台的轻量级 Web 应用框架,它简化了原生 Node.js 开发 HTTP 服务器的复杂度,提供了简洁的 API 和丰富的功能,是 Node.js 生态中最流行的后端框架之一。NestJS 是一个基于 Node.js 的企业级后端框架,由 Kamil Myśliwiec 于 2017 年创建。它借鉴了 Angular 的模块化架构思想,结合了面向对象编程(OOP)、函数式编程(FP)和函数式响应式编程(FRP)的特点,旨在为 Node.js 开发提供结构化、可扩展
2025-09-17 09:30:18
529
原创 基于 Node.js 的后端框架:NestJS 和 Express(一)
简单说:小项目、快迭代、小团队用 Express;大项目、长期维护、大团队用 NestJS。如果项目初期不确定规模,也可先从 Express 入手,后期再根据需求迁移到 NestJS(两者生态兼容,迁移成本可控)。
2025-09-17 09:04:52
545
原创 科普:Python中为什么“from .utils” 不能写成 “from ./utils”?
- **包结构是“逻辑关系网”**:用点号描述模块在代码组织中的位置,服务于Python的导入系统,确保代码能被正确引用和复用。 - **文件结构是“物理存储图”**:用路径分隔符描述文件在磁盘中的位置,服务于操作系统的文件管理,确保数据能被正确读写。
2025-09-15 22:03:28
203
原创 科普:Python 的包管理工具:uv 与 pip
- **pip**:Python 包管理的“基石”,兼容所有场景,但性能一般、功能零散(需配合其他工具),适合简单需求或老旧项目。- **uv**:现代 Python 包管理的“升级替代品”,以 Rust 为核心实现极致性能,整合虚拟环境、锁文件、规范兼容等功能,适合中大型项目、团队协作或追求效率的开发者。
2025-09-15 16:40:50
501
原创 科普:RAM(随机存取内存)和Flash(闪存)
RAM(随机存取内存)和Flash(闪存)的物理原理差异源于它们存储数据的底层机制,这些机制决定了它们的特性(如易失性/非易失性、读写速度等)。单片机中的 RAM(随机存取内存)和 Flash(闪存)是两种不同类型的存储器,它们在功能、特性和用途上有显著区别,共同支撑着单片机的正常工作。数据的保持完全依赖触发器的供电——断电后,晶体管失去驱动电压,触发器状态被破坏,数据立即丢失。这种物理机制的差异,导致了RAM适合高速临时存储,而Flash适合长期保存程序和固定数据,二者在单片机中形成互补。
2025-09-14 10:32:37
732
原创 科普:“烧录”和“刻录”
“烧录”更偏向**硬件底层的程序写入**,让设备“知道如何工作”;“刻录”更偏向**通用数据的存储**,让介质“保存需要的数据”。两者虽都用“烧”字,但其技术场景和目标截然不同。 对单片机进行烧录程序,不是真的“烧”,虽然早期部分存储器写入程序时会有物理层面的改变,如熔断丝,但现代单片机烧录主要是通过电信号将程序代码写入非易失性存储器中,是一种“下载”操作。
2025-09-14 10:11:39
381
原创 创建自己的Docker镜像,使用工具:GitHub(远程仓库)、GitHub Desktop(版本控制工具)、VSCode(代码编辑器)
通过添加`Dockerfile`和`.dockerignore`,并结合VSCode编辑、GitHub Desktop版本控制、Docker命令构建,即可为Python项目创建标准化镜像。核心价值在于:**确保项目在任何安装Docker的环境中都能以相同方式运行**,解决“本地能跑,部署崩了”的环境一致性问题。
2025-09-12 17:19:46
967
原创 建自己的Python项目仓库,使用工具:GitHub(远程仓库)、GitHub Desktop(版本控制工具)、VSCode(代码编辑器)
通过本文介绍的流程,三个工具各司其职:GitHub负责远程托管,GitHub Desktop简化版本控制,VSCode专注代码开发,形成高效的协作闭环。即使是新手,也能通过可视化操作完成规范的Python项目管理。
2025-09-12 12:26:33
982
原创 科普:管理你的代码:Git、GitHub及GitHub Desktop
1. 在 VSCode 中编辑项目代码(新建或修改)。 2. 在 GitHub Desktop 中查看修改、提交到本地仓库。 3. 通过 GitHub Desktop 推送到 GitHub 远程(或拉取远程更新)。
2025-09-12 00:00:35
1005
原创 科普:环境隔离的工具:虚拟环境与容器Docker
- 虚拟环境是“轻量级的语言依赖隔离”,适合开发时管理项目依赖; - Docker是“重量级的系统级隔离”,适合应用的打包、分发和跨环境部署; - 二者是独立的:既不冲突也不嵌套,而是可以互补:用虚拟环境做本地开发,用Docker做环境固化和部署。
2025-09-11 22:07:14
442
原创 科普:在Windows个人电脑上使用Docker的极简指南
拉取镜像 docker pull nginx:alpine 获取轻量级Nginx镜像启动容器 docker run -d -p 8080:80 nginx 映射端口到本地8080进入容器 docker exec -it <容器ID> sh 进入运行中的容器终端停止容器 docker stop <容器ID> 优雅停止容器清理资源 docker system prune -a 删除所有未使用的镜像/容器
2025-09-11 15:55:46
883
原创 科普:企业微信的第三方应用涉及的“配置应用权限”
企业微信的第三方应用涉及“配置应用权限”,它在不同阶段含义不同:开发阶段意指**应用自身所需的功能权限**,安装阶段意指**企业管理员对应用使用范围的控制**,产生此歧义的问题,归根到低还是语言的缩写问题,设想一下,这两部分文档由不同的人员编写,是不是很容易产生这类问题?我们的文档编写人员一方面应尽量避免这方面的问题,另一方面应进行统稿工作,即各部分的内容的一致性检查。
2025-09-05 22:15:40
638
原创 科普:指令回调地址与数据回调地址
“回调”的“回”,指的是**“反过来”** —— 原本是开发者“找”企业微信要数据/做操作(正向),而“回调”是企业微信“找”开发者送数据(反向)。指令回调地址与数据回调地址位于**开发者(企业)自己部署的公网HTTPS服务器上**(如阿里云、腾讯云),既不在用户本地设备,也不在企业微信官方后台。企业微信后台仅作为“调用方”,向这个地址推送事件数据。
2025-09-05 21:33:55
790
原创 科普:企业微信小程序放在哪儿了?
企业微信的小程序**主要存放并展示在「工作台」**,这是与微信小程序最显著的区别,体现了企业微信“办公工具集中化”的设计理念,更符合企业内部协作的场景需求。
2025-09-04 21:27:23
391
原创 科普:requirements.txt 和 environment.yml
- 若项目是纯 Python 且依赖简单,用 `requirements.txt` 更轻量。 - 若项目涉及多语言依赖、系统库,或需要严格复现环境(如科研、团队协作),优先用 `environment.yml`。 - 实际开发中,两者可能共存(如 `environment.yml` 中通过 `pip:` 嵌套 `requirements.txt` 的内容)。
2025-08-31 21:38:00
808
原创 科普:Python 中颜色的格式: RGB 格式 v.s. RGBA 格式
在实际开发中,若需处理透明效果(如游戏中的粒子、图像水印、渐变叠加),优先使用 RGBA;若仅需纯色且不透明,用 RGB 更简洁。
2025-08-21 23:24:33
1173
原创 python中的单下划线“_”与双下划线“__”的使用场景及“左右双下划线”(魔术方法:`__xxx__`)
1. 单下划线:遵循“内部成员”约定,提醒自己和他人不要随意外部访问,但不阻止访问。 2. 双下划线:仅在需要“防止子类覆盖父类关键成员”时使用,避免过度使用(会降低代码可读性)。 3. 魔术方法:仅使用Python内置的`__xxx__`方法,不自定义类似格式的方法(如`__myfunc__`)。
2025-08-19 20:42:28
929
原创 Pygame中,精灵Sprite与精灵组Group,显性入组与隐性入组,它们之间的关系是什么?
显性添加精灵到组中—— 开发者明确控制精灵与组的关联关系。这种方式是最基础、最常用的,核心优势在于灵活性和可控性。隐式添加精灵到组的方法,其核心原理是利用了pygame.sprite.Sprite基类的构造函数(__init__)特性:当创建精灵时,可直接将组作为参数传入,精灵会自动加入这些组,无需再显式调用group.add()。
2025-08-19 16:03:28
957
原创 python泛型类Generic[TypeVar(“T“)]
python泛型类Generic[TypeVar("T")]:`Generic` 与 `TypeVar("T")` 是实现**泛型编程**的核心工具,用于在不指定具体类型的情况下定义类、函数或数据结构,从而提高代码的复用性和灵活性。- **类型检查依赖工具**:Python 解释器运行时不检查泛型类型,需通过 `mypy` 等工具进行静态类型检查。- **命名规范**:类型变量通常用单个大写字母表示(如 `T`、`U`、`V`),多个变量可区分用途(如 `T` 表示输入类型,`U` 表示输出类型)。
2025-08-18 16:26:53
1062
原创 Pygame 中,`pg.display.update(dirty)` v.s. `pg.display.flip()`
`pg.display.update(dirty)` 和 `pg.display.flip()` 是 Pygame 中用于**更新屏幕显示**的两个核心函数,它们的底层机制和适用场景有显著区别,选择正确的函数能直接影响游戏性能。
2025-08-16 06:53:21
573
原创 为什么游戏会出现“卡顿”:`clock.tick()` v.s. `clock.get_fps()`
为什么游戏会出现“卡顿”——当实际帧率远低于目标帧率时,画面更新变慢,不能满足视觉对动画速度的要求,你就感觉到“卡顿”。此时需要优化代码(如减少精灵、简化绘制)来降低每帧成本,让实际帧率接近目标值。
2025-08-15 22:34:09
676
原创 科普:Pygame 中,`pg.Surface` v.s. `screen`
- `Surface`(草稿纸): 草稿纸是“透明的”,即草稿纸“贴到”另一草稿纸上时,仅考虑图片的叠放。 - `Surface`(草稿纸)只在内存中处理,即使你在上面画了内容,不贴到 `screen` 上也看不到。- `screen` 是特殊 `Surface`(展示墙):需要显示的内容都要通过这里“贴”的方式, 贴到 `screen` 上。 - 只有贴到 `screen` 上的内容,经过 `pg.display.flip()` 刷新后,才能显示在窗口中被你看到。
2025-08-15 21:44:27
761
原创 科普:Pygame 中的`pg.mixer.Sound` vs `pg.mixer.music` 的区别是什么?
pygame中,所有音频播放默认是非阻塞的(`play()` 调用后立即返回,不等待播放完成),确保游戏主循环不卡顿(核心特性)。
2025-08-15 15:31:34
909
原创 科普:Pygame 中射击速度控制
**检查频率相对于你手的动作而言,无论你按键动作多快,都能被主循环非常及时地捕捉到,所以,你可以视为它“一直在检查”空格键的状态。** 因此,示例中射击速度取决于你敲击空格键的速度。
2025-08-15 12:28:20
959
原创 科普:Pygame中的显示屏,`SCREENRECT.size` 与 `pg.FULLSCREEN`
在 Pygame 中,与显示大小相关的描述量(属性、函数、常量等)有很多,它们分别用于获取、设置或判断显示窗口/屏幕的尺寸、分辨率、适配模式等。例如:`SCREENRECT.size`(逻辑分辨率)和 `pg.FULLSCREEN`(全屏标志),以及其它。
2025-08-15 09:28:51
1045
原创 pygame的帧处理中,涉及键盘的有`pg.event.get()`与`pg.key.get_pressed()` ,二者有什么区别与联系?
- `pg.event.get()` 中的键盘事件(`KEYDOWN`/`KEYUP`):处理**按键动作的瞬间**,适合单次操作; - `pg.key.get_pressed()`:获取**按键的当前状态**,适合持续操作。 两者机制不同,但**在游戏的帧循环中同时使用**(如上例),是 Pygame 中处理键盘交互的核心工具。
2025-08-14 23:21:23
788
原创 科普:python中,你的工作目录中不是是多了个`__pycache__`文件夹?
`__pycache__` 文件夹是 Python 自动生成的,用于存储编译后的 `.pyc` 文件,而`.pyc` 是 Python 为了提高执行效率而生成的“中间编译产物”,是源代码和机器码之间的过渡形态。
2025-08-14 15:16:05
657
原创 Python中,`all_sprites: List[pg.sprite.Sprite] = []`与 `all_sprites = pg.sprite.Group()` 等价么?
`List[pg.sprite.Sprite] = []` 只是一个**普通的精灵存储容器**,需要手动实现所有管理逻辑(更新、绘制、碰撞等);而 `pg.sprite.Group()` 是 Pygame 为精灵管理设计的**专用工具**,内置了高效的批量操作方法,能极大简化游戏开发流程。 在 Pygame 中,几乎所有场景都推荐使用 `Group` 而非列表管理精灵——这正是 `Group` 类存在的意义。
2025-08-13 23:05:33
486
原创 科普:Pygame 中的坐标系
- Pygame 中 x 轴和 y 轴的**逻辑单位(像素)长度相等**,绘制正方形(宽高相等)和圆(指定半径)时,逻辑上是标准图形。 - 实际显示是否“正”,取决于屏幕硬件的像素是否为正方形(现代设备几乎都是正方形像素),与 Pygame 无关。 因此,在开发中只需按逻辑像素绘制即可,无需额外处理坐标系单位差异。
2025-08-13 17:54:53
569
原创 在 Pygame 中,精灵的形状并不是矩形,为何当rect来处理?
游戏中最常见的需求之一是“碰撞检测”(如角色碰到敌人、子弹击中目标)。如果直接基于精灵的真实形状(如像素级精确碰撞),计算会非常复杂: - 不规则形状需要逐像素比对或复杂的几何运算(如多边形相交检测); - 实时游戏中,频繁的高精度碰撞计算会严重消耗性能(尤其是大量精灵同时存在时)。 而 `Rect` 实现的“矩形碰撞检测”(Axis-Aligned Bounding Box,AABB)是一种低成本的近似方案
2025-08-13 15:42:40
788
原创 Pygame 中,`pygame.Rect`的参数及其衍生属性
`pygame.Rect` 除了最基础的 `x`(左边缘x坐标)、`y`(上边缘y坐标)、`width`(宽度)、`height`(高度)这四个核心参数外,还封装了一系列**衍生属性**(或称**便捷属性**),用于直接访问矩形的边缘、中心等位置。这些属性会根据核心参数自动计算,并且**支持直接赋值修改**(修改后会反向更新核心参数)。
2025-08-13 15:29:17
708
原创 游戏中角色持枪:玩家操控角色,角色转向时枪也要转向
面向多方向时,核心是用 **(dx, dy) 方向向量** 替代单一的 `facing` 值,通过向量分量分别控制水平和垂直偏移,再结合角色中心坐标计算武器位置。这种方式可以灵活支持任意方向(包括8向、16向等),是2D游戏中处理多方向朝向的常用逻辑。
2025-08-12 22:48:16
825
原创 科普:增强细节真实感的“微弹跳”
1像素的“微弹跳”在游戏中通常不是为了让玩家“明确看到弹跳”,而是为了**增强细节真实感**: 例如,模拟物体在粗糙表面移动时的轻微颠簸(如汽车行驶在非平整路面)、或角色行走时的细微重心起伏。它更像一种“潜意识层面的细节补充”,让动画显得更自然,而非明显的“弹跳动作”。如果需要更明显的弹跳(如球的上下反弹),通常需要结合速度、重力等物理逻辑。
2025-08-12 22:01:24
575
原创 科普:python中的“__init__.py”与“import”的关系
当Python解释器遇到一个目录时,会检查该目录下是否存在`__init__.py`文件。如果存在,就会将这个目录识别为一个**Python包**(而非普通文件夹),允许通过`import`语句导入其中的模块或子包。`__all__` 是一个特殊的列表变量(通常定义在包的 `__init__.py` 文件中),它的核心作用是明确指定当使用 `from package import *` 语句时,哪些模块、函数或类会被导入到当前作用域
2025-08-12 20:37:07
359
原创 python中,通过“类变量”实现“实例的自动注册”
Pygame的“Sprite自动注册机制”本质是**通过`Sprite`子类与`Group`的配合,在实例化时自动加入管理组,实现批量更新、绘制和碰撞检测**。其核心价值是简化多对象场景的代码逻辑,让开发者更专注于游戏逻辑而非对象管理,尤其适合中大型游戏中大量重复元素的处理。
2025-08-09 07:00:47
459
原创 科普:python -m pip install 与pip install 安装的区别
`python -m pip install numpy` 和 `pip install numpy` 本质上都是用于安装 `numpy` 库的命令,但它们的**调用方式和适用场景存在细微区别**,核心差异在于“如何定位并使用 `pip` 工具”。
2025-08-08 08:01:52
369
原创 科普:NumPy 中多维数组的切片操作
多维数组切片的核心是“按维度独立处理”,通过 `start:stop:step`、整数索引、`...` 等组合,可灵活提取任意子数组。掌握切片规则能极大提升处理高维数据(如图像、张量)的效率。
2025-08-08 07:03:32
322
原创 科普:游戏编程中图像的“颜色深度”“深度”和“景深”
在图像编程中,“颜色深度”“深度”和“景深”是三个完全不同的概念,分别对应图像的**颜色信息精度**、**三维空间距离**和**光学聚焦效果**,在编程处理中关注的维度和应用场景也截然不同。颜色深度是计算机图形中表示颜色精度的基本参数,它决定了每个像素可以显示的颜色数量。从早期的1位黑白到现代的32位真彩色+透明度,颜色深度的提升使得数字图像能够越来越准确地还原真实世界的色彩。在实际应用中,需要在图像质量、存储空间和性能之间找到平衡。
2025-08-08 06:56:56
478
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人