自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 C++性能优化

在日常开发中,我会先用工具(比如perf)定位真正的性能瓶颈,再有针对性地优化,而不是过早优化。如果你的类很小(比如只有1个int),对象大小就从4字节膨胀到16字节(还要考虑对齐),Cache效率立马下降。“一个类有10个虚函数,创建100万个对象,虚函数机制带来了多大的额外内存开销?(32位CPU是4字节,64位是8字节)分块读取。虚函数是实现多态的机制,但它的“代价”在CPU层面是实打实的。多了两次内存访问,CPU流水线可能被打断,分支预测更难。:对齐规则是每个成员的偏移量必须是其自身大小的整数倍。

2026-08-30 09:07:22 224

原创 计算机组成原理

学科领域伪共享的角色典型问题计算机组成原理根本原因“为什么CPU这么设计?“为什么修改一个字节会影响另一个?操作系统调度环境“OS怎么分配线程到不同核心?“内核里的计数器怎么优化?编译原理布局优化“编译器怎么安排变量内存地址?“能不能自动加Padding?高性能编程/游戏开发应用实践“我怎么避免掉帧?“怎么用SoA架构重构数据?

2026-06-17 21:53:14 371

原创 NTP算法实现客户端与服务器时间同步

通过NTP算法实现客户端与服务端时间同步。

2026-06-14 06:32:59 175

原创 RAll思想解决C++编程中内存泄漏问题

RAII是的缩写,中文译为“资源获取即初始化”。将资源的生命周期绑定到对象的生命周期上资源(如内存、文件句柄、锁、网络连接等)在对象构造时获取,在对象析构时自动释放。RAII 是 C++ 实现确定性资源管理、异常安全和零成本抽象的基石。

2026-06-03 19:07:51 397

原创 内存对齐原理

这张图在技术面试讲解或笔记中比模糊的截图更清晰、更专业。当指定了打包对齐数n时,所有成员的“有效对齐值”变为。作为AI,我无法直接生成图片文件,但我可以为你绘制一张。假设当前环境为64位系统,编译器默认对齐数为8。下,double的有效对齐值是2而不是8。:“有效对齐值”不是成员自身大小,而是。,而不是嵌套结构体本身的大小。嵌套结构体的有效对齐值 =内存对齐不是语言特性,而是。,整体对齐也受n限制。

2026-06-03 09:04:45 372

原创 C++ 设计模式

【代码】C++ 设计模式。

2024-08-05 20:41:43 334

原创 UE5虚幻-多玩家枪战游戏项目

UE射击游戏开发。

2024-08-01 07:31:04 1423

原创 UE4蓝图——半自动射击与全自动射击

使用UE的蓝图编程实现半自动与全自动射击

2024-07-06 08:02:15 1904

原创 UE之网络同步

epollIOCP性能监控接入热状态回调;动态分辨率/LOD降级;避免持续满载触发温控阈值这是一个非常精准的底层问题。但关键在于:UE 的网络同步,它是通过调用 OS Socket API 间接触发中断的。真正决定中断是否成为性能瓶颈的,是三者的耦合关系。

2026-10-24 10:16:00 299

原创 游戏客户端——算法题

这些是腾讯光子游戏客户端面试中常见的算法与数学题。下面按题目分别给出思路和参考代码(C++)。

2026-09-17 20:59:32 171

原创 三、计算机网络

利用 NAT 对"已发起出站连接"的放行规则,通过一个公网协调服务器交换地址信息并同步打洞时机,使双方的 NAT 误以为入站包是对合法出站的回应,从而实现端到端直连。核心词不是"不用公网",而是"欺骗 NAT 的状态表"。

2026-08-12 06:12:07 310

原创 4、UE的GAS框架

UE 的 GAS 指的是 Gameplay Ability System(游戏玩法能力系统)。它是 Unreal Engine 中一套高度模块化、数据驱动的游戏逻辑框架,最初由 Epic Games 为《堡垒之夜》和《虚幻争霸》开发,后来集成到引擎中供所有开发者使用。

2026-08-05 16:02:55 188

原创 迷宫路径搜索问题:BFS与DFS算法详解

迷宫路径搜索是图论中的基础问题,BFS 和 DFS 都是有效的解决方法。BFS 更适合需要最短路径的场景,而 DFS 代码更简洁。在实际解题时,可以根据题目要求和数据规模选择合适的算法。

2026-07-05 11:10:59 240

原创 4、排序算法(C++)

冒泡排序的核心思想是比较相邻元素,如果顺序不对就交换,每一轮都会把一个最大的元素放到数组末尾,因此总共需要 n-1 轮。它的平均和最坏时间复杂度都是 O(n²),空间复杂度是 O(1),属于稳定排序。实际开发中由于效率较低,很少直接使用,C++ 的。冒泡排序的思想是不断比较相邻两个元素,如果前面的元素比后面大,就交换它们的位置。每完成一轮遍历,当前最大的元素都会被交换到数组末尾,就像气泡不断往上浮一样,所以叫冒泡排序。核心是计算字节数,int是4个字节,5个数就是20个字节。

2026-06-27 12:05:22 234

原创 数据结构——双链表(C++)

【代码】数据结构——双链表(C++)

2026-06-26 12:06:31 239

原创 SIMD指令集

建议这样回答:“SIMD是单指令多数据流的并行计算技术,通过宽寄存器一条指令处理多个数据。在游戏开发中,它主要用于加速数学密集型的热点函数,比如我项目中的AOI批量距离计算。但SIMD不是银弹,它要求数据连续对齐、避免分支,且需要考虑跨平台兼容性和尾部元素处理,必须配合Profile验证才有实际收益。

2026-06-25 21:55:07 350

原创 UEC++开发(游戏客户端)

显式在EndPlay中解绑委托是处理“短生命周期对象监听长生命周期对象事件”的黄金准则。即便 UE 的动态委托提供弱引用保护,主动清理能消除对象销毁顺序不确定性带来的隐患,确保系统稳定性。

2026-06-25 12:55:09 312

原创 第一章——C++ 基础知识笔记

C++基础知识

2026-06-25 09:07:43 534

原创 UE5 C++(多线程编程)

这段代码的价值不在于“视线检测”这个具体功能,而在于它提供了一个UE C++多线程编程的安全脚手架。在射击游戏中,凡是涉及“批量、独立、CPU密集”的任务(弹道预测、AI寻路预处理、网络序列化、骨骼动画混合),都可以套用这个“主线程提数据 → 后台并行算 → 弱指针安全回传”的模式。这是一个可以直接集成到UE5 C++射击游戏项目中的生产级完整实现。相比之前的教学示例,它修复了UObject线程安全问题、物理查询安全性以及内存生命周期管理。

2026-06-21 16:54:02 510

原创 Leetcode算法题

【代码】Leetcode——两个有序数组找中位数。

2026-06-21 09:53:53 54

原创 C++(防止数组下标越界)

范围for / STL算法 > std::array/vector + .at() > std::span > 原生数组+手动校验将"避免越界"视为设计决策而非事后补救:在项目初期就约定使用标准容器,比后期逐个修复越界 bug 成本低几个数量级。

2026-06-20 19:29:43 454

原创 UE5—游戏引擎开发

我在项目中实际遇到过两个性能瓶颈:一是透明物体排序的微卡顿,二是体积雾降噪的 GPU 开销。前者我用无分支三数取中解决了分支预测问题,后者我用排序网络+Shader min/max 消除了线程束分化。这两个经历让我深刻体会到,引擎底层的位运算技巧不是用来手写的玩具,而是指导我们在正确抽象层级做架构决策的思维模型。

2026-06-20 18:32:18 488 1

原创 LeetCode刷算法题(C++)

【代码】LeetCode刷算法题(C++)

2026-06-13 15:17:38 101

原创 2、数据结构与算法(C++)

红黑树是一种自平衡二叉搜索树。它在每个节点上增加了一个存储位来表示节点的颜色(红色或黑色),通过对任何一条从根到叶子的路径上各个节点的颜色进行约束,确保没有一条路径会比其他路径长出两倍,从而实现近似平衡。日常开发:直接使用std::map或std::set,无需关心底层红黑树的具体实现。性能需求:如果你需要有序的键值对或集合,且数据量较大,红黑树是实现的最佳选择之一。学习目的:理解红黑树有助于深入掌握 C++ STL 的机制以及平衡树算法。

2026-06-13 08:25:47 222

原创 和平精英开发

作用:控制引擎清理“待销毁对象队列”(Pending Kill Queue)的时间间隔。单位:秒(Seconds)。默认值:通常为60.0秒(不同 UE 版本略有差异)。机制:当你调用或将对象标记为时,对象并不会立即从内存中移除,而是进入一个等待队列。只有当距离上次清理的时间超过该变量设定值时,GC 才会在下一次 Tick 中真正执行 Purge 操作,释放这些对象的内存并重置引用。

2026-06-10 06:37:43 345

原创 第二章、操作系统知识

操作系统:内存管理、多线程、IO文件系统

2026-06-06 11:26:40 313

原创 计算机网络之——TCP/UDP协议

在射击游戏(FPS/TPS)开发中,TCP 和 UDP 的选择从来不是“二选一”,而是。大厂面试时,如果你只回答“射击游戏用UDP因为快”,会被认为缺乏工程深度。

2026-06-04 08:09:18 400

原创 Python——研发效能工具

AI 帮你写自动化工具时,高频调用的都是 Python 的内置标准库。看懂这几个,你就能指挥 AI 搬运资产、执行命令行。不管是调用虚幻引擎的编译命令行(RunUAT/UHT),还是调用 SteamCMD 上传包体,AI 绝对会用这个模块。当你有了这份基础概念后,这两天面试或者以后入职,遇到复杂的自动化需求,你只需要给 AI 喂这样的。AI 写脚本时,最喜欢用以下几种方式来存取数据(比如游戏资产路径、NPC 列表、打包配置)。捕获异常,并提取报错行前后的 5 行上下文。有序的集合,相当于 C++ 的。

2026-06-03 11:18:35 207 2

原创 子弹对象池系统

【代码】子弹对象池系统。

2026-06-02 19:50:38 190

原创 UE5服务端倒带(Server-Side Rewind)

【代码】Lag Compensation(延迟补偿)算法。

2026-05-30 15:54:22 249

原创 C++编程练习

C++锻炼编程

2026-05-23 11:23:38 528

原创 针对“悬挂物资”的 UE5 C++ Demo 实现(和平精英七周年鹅仔)

游戏内是一个固定场景(位于电玩城主题区)

2026-05-02 15:57:30 82

原创 简易视频预览器

但为简化,此处以通用权限为例。面试时可说明“了解新存储模型”。⚠️ 注意:Android 13(API 33)起需使用。

2025-12-02 18:32:14 296

原创 C++ 内存

在面向对象编程中,类是创建对象的蓝图,而对象则是类的具体实例。每个对象都有自己的内存模型,用于存储其数据成员(属性)和指向其方法的指针。

2025-01-01 16:49:41 605

原创 C++内存泄漏检测

不过,你可以通过定义一个具有相同名称的新函数来实现类似的效果,这种技术通常被称为函数隐藏或函数替换。### 2. 使用包装函数创建一个新的函数来封装`malloc`,并在其中加入你想要的功能。3. 替换全局操作符new/delete对于C++对象,更推荐的方式是重载全局的`new`和`delete`操作符,这可以让你控制所有对象的内存分配与释放过程。这种方法简单直接,但会影响整个程序中的所有`malloc`调用。- 当覆盖默认的内存管理函数时,请确保你的实现是线程安全的,特别是当你在多线程环境中工作时。

2024-12-01 11:06:57 327

原创 游戏客户端开发——网络性能优化

以上代码示例展示了如何在网络游戏中进行数据压缩、使用UDP协议、发送心跳包、数据包合并以及异步IO操作。这些技术可以显著提高网络性能,提升玩家的体验。对于实时性要求高的游戏,使用UDP协议可以减少延迟。UDP是无连接的,不会保证数据包的顺序和完整性,但可以通过应用层实现必要的可靠性机制。在网络游戏中,网络性能优化是一个至关重要的环节,因为它直接影响到玩家的体验。以下是一些常见的网络性能优化技巧及其对应的C++代码示例。只发送必要的数据,避免发送冗余信息。例如,只发送玩家移动的方向和速度,而不是每帧的位置。

2024-11-21 18:09:51 1254

原创 UE5-----MenuSystem

如果菜单系统中包含了一个可见的角色,那么 AMenuSystemCharacter 可能负责管理这个角色的动画状态,例如闲置、选择动作或其他视觉反馈。:此类可能重写了输入处理函数,以便响应用户的键盘、鼠标或控制器输入,使用户能够在不同的菜单项之间导航。:它还可能包含了一些状态管理的功能,比如跟踪用户当前在哪个菜单页面,或者记录用户做出的选择等。:该类可能包含了与用户界面(UI)进行交互的逻辑,比如处理菜单选项的选择、游戏设置的调整等。要加*SessionName。

2024-11-11 16:41:33 534

原创 UE的两种网络架构

客户端-服务器架构,其中一个中央服务器处理所有玩家之间的通信和数据同步。这种架构更常见于大型在线游戏,因为它可以提供更好的控制、安全性和可扩展性。点对点网络,其中每个玩家的游戏客户端直接与其他玩家的游戏客户端通信。这种架构通常用于小型或中型规模的多人游戏。

2024-11-02 13:07:54 527

原创 Lua脚本语言——游戏开发

【代码】Lua脚本语言——游戏开发。

2024-10-16 20:08:24 1361

原创 Stm32单片机

通过上述代码和说明,你可以实现一个简单的智能机械键盘,能够检测按键按下并发送相应的键盘报告。process_key_event 函数创建一个键盘报告,并通过USB HID发送该报告。去抖动处理:在实际应用中,可能需要增加去抖动处理,以消除由于机械振动引起的误触发。如果检测到压力值超过阈值,调用 process_key_event 函数处理按键事件。MX_USB_DEVICE_Init 函数初始化USB设备,确保可以进行HID通信。在主循环中,遍历所有的行和列,读取每个按键的压力传感器值。

2024-09-23 16:06:19 1377

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除