C++考试大纲
第一部分:C++语言核心与基础1. C++程序基本框架与结构 基本框架 1234567#include <iostream> // 预处理指令int main(int argc, char* argv[]) { // 程序入口点 // 你的代码 std::cout << "Hello, World!" << std::endl; return 0; // 返回值给操作系统} 原理深度剖析: #include:在编译的预处理阶段,预处理器会找到指定的头文件,并将其内容原封不动地复制到#include指令所在的位置。这本质是一种文本替换。 main函数:是操作系统加载程序后执行的起点。argc和argv由操作系统填充,argc是参数个数,argv是一个指向字符串指针的数组,存储着具体的参数。返回值return 0;被传递给操作系统,表示程序正常退出(非0值通常表示错误)。 模块化与头文件保护 模块化:将声明(.h/.hpp)与定义(.cpp)分离。.cpp文件是独立的...
排序算法
排序算法code: sorting_algorithm 1. 问题分析1.1 问题定义问题:给定一个包含n个整数的无序数组,将其按升序排列。 示例: 输入:[64, 34, 25, 12, 22, 11, 90] 输出:[11, 12, 22, 25, 34, 64, 90] 1.2 排序算法分类排序算法可以根据不同的特性进行分类: 按时间复杂度分类: 简单排序:O(n²) - 冒泡排序、插入排序 高效排序:O(n log n) - 快速排序、归并排序、堆排序 按空间复杂度分类: 原地排序:O(1) - 冒泡排序、插入排序、快速排序、堆排序 非原地排序:O(n) - 归并排序 按稳定性分类: 稳定排序:相等元素的相对位置不变 - 冒泡排序、插入排序、归并排序 不稳定排序:相等元素的相对位置可能改变 - 快速排序、堆排序 2. 各算法实现详细解析2.1 冒泡排序 (BubbleSort)2.1.1 算法原理冒泡排序是最基础的排序算法,通过重复遍历数组,比较相邻元素并交换位置,使得较大的元素像”气泡”一样逐渐”浮”到数组末尾。 核心思想: 从数组开始处遍历,比较相邻...
动态规划算法
动态规划code: dynamic_programming 1. 问题分析1.1 问题定义问题:假设要爬n阶楼梯,每次可以爬1阶或2阶,问有多少种不同的方法可以爬到楼顶。 示例: n=1:只有1种方法(1) n=2:有2种方法(1+1, 2) n=3:有3种方法(1+1+1, 1+2, 2+1) 1.2 数学递推关系1dp[n] = dp[n-1] + dp[n-2] 解释:到达第n阶楼梯,可以从第n-1阶爬1阶上来,或者从第n-2阶爬2阶上来。 2. 各算法实现详细解析2.1 暴力递归算法 (ViolentRecursion)1234567int32_t ViolentRecursion::ClimbStairs(uint32_t stairFloors){ if (stairFloors <= 2) { return static_cast<int32_t>(stairFloors); } return ClimbStairs(stairFloors - 1) ...
缓冲系统中内存序(memory_order)的使用及其作用
缓冲系统中内存序(memory_order)的使用及其作用一、C++ 六种内存顺序模式 内存顺序模式 简要介绍 适用场景 memory_order_relaxed 仅保证原子操作的原子性,不提供同步和顺序约束。性能最高。 计数器自增/自减(如统计)、不需要同步的状态标志。 memory_order_consume 数据依赖顺序:当前线程中依赖此原子变量的操作不会被重排到该操作之前。 读取指针型数据(如链表节点),后续操作依赖该指针(场景罕见,通常用 acquire 替代)。 memory_order_acquire 获取操作:当前线程中所有后续读写不会被重排到该操作之前。 读取共享数据后需确保看到其他线程的修改(常与 release 配对)。 memory_order_release 释放操作:当前线程中所有先前读写不会被重排到该操作之后。 修改共享数据后需确保对其他线程可见(常与 acquire 配对)。 memory_order_acq_rel 获取-释放操作:同时具有 acquire 和 release 的语义。 读-修改-写操作(如 f...
高性能日志系统实现
实现代码:TinyOperateSystem:C++系统 - AtomGit | GitCode 阶段1:核心模块开发 阶段2:I/O 系统开发 阶段3:前端接口开 阶段4:支持系统开发 阶段5:集成与测试 阶段6:部署 关键时序图 sequenceDiagram par 并发处理 LogStream ->> LogStream: LogStream(LogLevel level, const char* file, int line) activate LogStream LogStream ->> FixedBuffer: Append(const char* buf, size_t len) LogStream ->> LogFormat: Default() activate LogFormat note over LogFormat: 增加 时间戳/LogLevel/文件名/线程号/信息 LogFormat ->> LogFormat: AddFormatt...
高性能日志系统设计
一、架构优化概览 graph TD A[前端API] --> B[线程本地缓冲] B --> C[无锁环形队列] C --> D[双缓冲交换区] D --> E[后端处理器] E --> F[文件输出] E --> G[控制台输出] E --> H[网络输出] I[崩溃处理器] -->|紧急刷新| D J[配置管理] -->|动态调整| A J -->|输出控制| E K[日志滚动] -->|文件管理| F L[性能监控] -->|实时反馈| C L -->|资源调控| E 二、核心组件设计1. 分层架构优化 graph LR A[前端接口层] -->|零拷贝写入| B[缓冲管理层] B -->|批量提交| C[核心处理层] C -->|异步输出| D[输出层] E[支持系统] -->|配置注入| B E...
高性能日志系统架构设计与技术选型
一、核心架构设计1. 异步日志模型1.1 生产者-消费者模式1主线程 → 内存缓冲区 → 后台线程 → 磁盘 优势:主线程写入耗时<1μs,避免I/O阻塞 性能:实测吞吐125万条/秒(单线程) 1.2 无锁队列实现 核心技术:std::atomic + CAS操作 方案:Ring-Log双向循环链表 效果:线程竞争减少70% 2. 多级缓冲策略2.1 双缓冲技术 graph LR A[前端缓冲] -->|写入| B[活跃区] C[后端缓冲] -->|刷盘| D[磁盘] B -->|交换| C 交换时机:缓冲区满或定时触发 代表方案:WLog 2.2 动态缓冲扩展 内存管理:预分配节点池 + 按需扩容 保护机制:内存上限约束(防OOM) 3. 模块化架构 graph TD F[前端] -->|格式化日志| B[缓冲层] B -->|批量处理| E[后端引擎] E --> F1[文件] E --> F2[网络] E --> F3[控制台] 前端:流式API(LOG...
个人博客进阶设置
个人博客进阶设置阿里云 + Ubuntu 24.04 + Nginx + https + Hexo + Butterfly + local CDN 一、环境准备1. 阿里云安全组端口配置 关闭4000端口 — hexo本地服务端口 开放443端口 — https 2. 申请域名 作者是在阿里云中租赁的域名 域名注册_域名查询_域名申请_域名购买_域名续费_国际域名-万网-阿里云品牌 3. 申请证书 作者是在阿里云中申请的证书数字证书管理服务管理控制台 4. 下载证书1mkdir /etc/nginx/cear 在官网下载证书后放在/etc/nginx/cear路径下 5. 备案 网站备案_ICP备案_备案迁移_App备案_小程序备案_备案-阿里云 二、Nginx配置1. 新建Nginx配置1touch /etc/nginx/sites-available/<domain_name> 2. 配置<domain_name>12345678910111213141516171819202122232425262728293031323334353...
个人博客搭建手册
个人博客搭建手册阿里云 + Ubuntu 24.04 + Nginx + Hexo + Butterfly 一、环境准备1. 安装必要工具12apt updateapt install -y git curl 2. 阿里云安全组开放端口 4000端口 — hexo本地服务端口 80端口 — http PS:使用nginx反向代理后关闭4000端口 二、Node.js环境部署1. 下载并执行安装脚本1curl -sL https://deb.nodesource.com/setup_22.x | bash - curl -sL:使用 curl 命令的部分,-s 参数表示静默模式,不输出进度信息,而 -L 参数表示跟随重定向。这样可以从给定的 URL 下载脚本 https://deb.nodesource.com/setup_22.x:NodeSource 提供的一个脚本地址,用于设置 Node.js 的源。文件名setup_22.x中的数字22,就是目前能找到最新的LTS版本,自然可以将22改成23,以后有24也同理 |:管道操作符,将前一个命令的输出传递给下一个命令 ba...
GN构建系统常用命令
GN 构建系统常用命令 生成Ninja构建文件 1gn gen out/Default 编译项目 1ninja -C out/Default 打开文本编辑器修改构建参数 1gn args out/Default 清理指定输出目录中的所有生成文件 12# 不会删除args.gn文件gn clean out/Default 查找引用了给定源文件的目标 1gn refs out/Default //path/to/source_file.cpp 编译特定目标 12345# 编译 base_target 组ninja -C out base_target# 编译 logger 共享库ninja -C out logger 如果目标在不同目录中,需要使用完整路径 12345# 编译 base 目录下的 base_targetninja -C out //base:base_target# 编译 logger 共享库ninja -C out //base/logger:logger 列出所有构建目标 123456789# 列出所有构建目标gn ls out# 列出所有构建目标(...