跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

华为 OD C++ 技术面核心考点整理

华为 OD C++ 技术面涉及变量声明定义、内存管理、宏与常量、类结构体及编译流程等核心知识点。重点掌握 RAII 机制避免内存泄漏,区分 define 与 const 的类型安全性,理解静态库与动态库的链接差异,熟悉预处理到链接的完整编译链路,这些基础概念是面试中的高频考点。

云朵棉花糖发布于 2026/3/27更新于 2026/8/1741 浏览
华为 OD C++ 技术面核心考点整理

在准备华为 OD 的技术面试时,C++ 基础概念往往是必问环节。很多候选人容易在这些看似简单的'八股文'上栽跟头,其实它们考察的是对语言底层机制的理解。下面梳理了几个高频问题,希望能帮你理清思路。

变量的声明和定义的区别

理解这两者的关键在于存储空间的分配。声明只是告诉编译器变量的名字和类型,不占用实际内存;而定义会真正分配存储空间并建立实体。一个变量可以被多次声明(比如在多个文件中通过 extern 引用),但只能被定义一次。需要注意的是,如果 extern 修饰的变量带有初始化语句,那它实际上就变成了定义。

内存泄露是什么意思?怎么避免

内存泄漏简单来说就是程序申请了内存却忘了释放,导致这块资源无法回收。随着运行时间增长,可用内存会被逐渐耗尽,轻则性能下降,重则直接崩溃甚至宕机。

避免泄漏的核心思路是尽早释放:

  1. RAII 机制:利用对象生命周期自动管理资源,析构函数里做清理工作。
  2. 智能指针:优先使用 std::shared_ptr、std::unique_ptr 等 STL 容器替代裸指针。
  3. 成对出现:如果用 new/delete 或 malloc/free,务必保证配对调用。
  4. 置空习惯:delete 后将指针设为 nullptr,防止悬空指针误用。

怎么排查内存泄漏,遇到内存泄漏情况,一般怎么解决

排查通常分两步走。首先是观察监控,看进程内存是否持续上涨且不回落。其次在测试环境稳定复现后,结合日志分析或内存检测工具进行定位。常用的工具有 Valgrind、Dr. Memory 以及编译器的 AddressSanitizer。找到泄漏点后,回溯代码逻辑,检查是否有循环引用未断开、异常路径下资源未释放等情况。

define 和 const 的区别

虽然都能定义常量,但处理方式不同。#define 是预处理宏替换,没有类型检查,容易引发副作用;const 是真正的类型安全常量,有作用域限制,调试时更容易追踪。实际开发中建议优先使用 const。

define 和 typedef 的区别

两者都用于别名,但本质不同。typedef 创建的是类型别名,参与类型检查,支持模板;#define 只是文本替换,不参与编译期的类型系统。写复杂类型别名时,typedef 更安全。

宏函数和内联函数的区别

宏函数在预处理阶段展开,没有类型检查,参数求值可能重复;内联函数由编译器处理,有类型检查,执行效率接近宏但更安全。除非为了极致优化且确定无副作用,否则推荐用内联函数。

类和结构体的区别

语法上几乎一样,主要区别在于默认访问权限。class 默认成员是私有的(private),而 struct 默认是公有的(public)。此外,类更倾向于面向对象设计,结构体常用于数据聚合。

结构体和联合体差别

结构体每个成员都有独立的内存空间,总大小是各成员之和(含对齐填充);联合体所有成员共享同一块内存,大小取决于最大成员。联合体适合需要复用内存的场景,比如协议解析。

静态库和动态库区别

静态库在编译链接时就被复制到可执行文件里,体积大但独立性强;动态库在运行时加载,节省空间但依赖系统环境。Linux 下通常是 .a 和 .so,Windows 下是 .lib 和 .dll。

C++ 的编译过程

整个流程分为四步:预处理(展开宏、头文件)、编译(转汇编)、汇编(转机器码)、链接(合并符号、生成可执行文件)。理解这个过程有助于排查链接错误和符号冲突。

目录

  1. 变量的声明和定义的区别
  2. 内存泄露是什么意思?怎么避免
  3. 怎么排查内存泄漏,遇到内存泄漏情况,一般怎么解决
  4. define 和 const 的区别
  5. define 和 typedef 的区别
  6. 宏函数和内联函数的区别
  7. 类和结构体的区别
  8. 结构体和联合体差别
  9. 静态库和动态库区别
  10. C++ 的编译过程
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Vue 基础入门教程(一)
  • 基于 Windows 环境搭建 OpenClaw 项目操作实战
  • 使用 TRAE CN 与 MCP 协议将 MasterGo 设计稿转为前端代码
  • 本地部署 Stable Diffusion 3.5 完整教程
  • LlamaFactory v0.9.4 正式发布:全面升级的 LLM 微调框架
  • ChatGPT 如何利用结构化原则实现高效信息管理
  • Mac mini M4 部署 OpenClaw + Ollama 本地大模型接入飞书机器人
  • 程序员办公室趣谈:雍正专治“八阿哥”Bug
  • SQL Server 2025 数据库安装与配置图文教程
  • Spring Boot 3.5.11 + JDK21 整合 RabbitMQ、RocketMQ、Kafka 实战与选型
  • Windows 系统下 Python 安装配置详细教程
  • VS Code 远程连接服务器后 GitHub Copilot 无法使用的修复方法
  • CSS Flex 布局基础应用指南
  • Ubuntu 24.04 虚拟机安装教程
  • JDK 11 安装与环境变量配置教程
  • 前端请求后端返回 404/405/500 状态码排查与解决指南
  • AI 与存储的结合:智能存储的实践与挑战
  • 基于YOLOv8与LLM的Web目标检测及人脸表情识别系统
  • 基于 YOLO 与 LLM 的 Web 目标检测与智能分析系统
  • Z-Image Turbo 画板:低显存 AI 绘画稳定生成指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online