滕王阁序
引言《滕王阁序》是初唐诗人王勃的千古名篇,作于上元二年(675年)洪州滕王阁宴会上。文章辞藻华丽、意境壮阔,融写景、抒情、议论于一体,被誉为“千古第一骈文”。 原文正文 豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟;人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰,台隍枕夷夏之交,宾主尽东南之美。都督阎公之雅望,棨戟遥临;宇文新州之懿范,襜帷暂驻。十旬休假,胜友如云;千里逢迎,高朋满座。腾蛟起凤,孟学士之词宗;紫电清霜,王将军之武库。家君作宰,路出名区;童子何知,躬逢胜饯。 时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿。临帝子之长洲,得天人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。 披绣闼,俯雕甍。山原旷其盈视,川泽纡其骇瞩。闾阎扑地,钟鸣鼎食之家;舸舰弥津,青雀黄龙之舳。云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡...
基础与语法与数据结构:数据类型与变量
核心要点速览 数据类型分类:基本类型、复合(派生)类型、自定义类型 核心复合类型:指针、引用、数组、结构体、联合体、枚举 变量关键特性:存储类别(auto/static/extern 等)、初始化要求、作用域与生命周期 常量核心:const(只读)、constexpr(编译期常量) 类型转换:隐式转换(编译器自动)、显式转换(四种强制转换) 一、数据类型1.1 基本类型基本类型是 C++ 内置的基础数据类型,具有固定内存大小(部分受平台影响)和明确取值范围。 类型 典型大小(32/64 位系统) 含义 / 范围 面试考点 bool 1 字节 布尔值:true(1)/false(0) sizeof(bool)恒为 1;不可用 0 / 非 0 代替(语法允许但不规范) char 1 字节 ASCII 码:-128127 或 0255 区分signed char(带符号)和unsigned char(无符号);默认符号性由编译器决定 short 2 字节 短整数:-32768~32767 与short ...
基础与语法与数据结构:程序结构与预处理
核心要点速览 流程:预处理→编译→汇编→链接→执行 程序入口:main 函数(返回值 int,return 0 表示正常退出) 核心预处理指令:#include(头文件包含)、#define(宏定义)、条件编译(#ifdef/#ifndef/endif)、#pragma once(头文件防重复包含) 核心要点速览 流程:预处理→编译→汇编→链接→执行 程序入口:main 函数(返回值 int,return 0 表示正常退出) 核心预处理指令:#include(头文件包含)、#define(宏定义)、条件编译(#ifdef/#ifndef/endif)、#pragma once(头文件防重复包含) 一、程序结构 执行流程:预处理→编译→汇编→链接→执行 预处理是编译的第一个阶段,由预处理器处理所有以 #开头的指令,生成 “预处理后的源代码” 预处理核心操作:消除注释、展开宏、处理条件编译、引入头文件内容 阶段 核心操作 产出物 关键工具 预处理 处理 # 指令、展开宏、引入头文件 预处理后的源代码 预处理器(cpp) ...
并发编程:线程
核心要点速览 线程 vs 进程:进程是资源分配单位(独立内存),线程是调度单位(共享进程内存),线程通信成本更低 线程创建:std::thread支持函数、Lambda、函数对象三种方式 线程管理:join()等待回收、detach()分离(慎用)、joinable()检查状态 线程标识:std::this_thread::get_id()获取 ID,std::thread::id判断唯一性 线程状态:就绪、运行、阻塞、终止 一、线程的基本概念1. 线程与进程 进程:程序的一次执行实例,拥有独立内存空间(代码、数据、堆栈),是资源分配的最小单位。 线程:进程内的执行单元,共享进程的代码、全局数据等资源,拥有独立的栈和寄存器,是调度的最小单位。 核心区别: 资源隔离:进程间地址空间独立,线程间共享进程内存。 通信成本:进程间通信(IPC)需跨地址空间(成本高),线程间直接共享数据(成本低)。 轻量化:线程比进程更轻量,创建、切换、销毁开销更小。 2. 线程的优势 并发执行多个任务,提升程序响应速度。 充分利用多核 CPU 资源,提高 CPU 利用率。 比进程更轻量,资源消...
基础与语法与数据结构:运算符与表达式
核心要点速览 逻辑运算符(&&/||):支持短路求值,右操作数可能不执行 逗号运算符(,):按左到右执行多个表达式,返回最后一个值,优先级最低 右结合运算符:赋值运算符(=)、条件运算符(?:)、单目运算符,优先级相同时从右到左执行 一、逻辑运算符的短路求值(&& / ||)核心规则短路求值是逻辑运算符的优化特性,仅在必要时计算右操作数,直接影响代码执行结果。 &&(逻辑与):左操作数为false时,直接返回false,右操作数不执行。 ||(逻辑或):左操作数为true时,直接返回true,右操作数不执行。 常见场景(含副作用表达式) &&短路示例: 123int i = 0;bool res = (i == 1) && (++i); // 左为false,右++i不执行// 结果:res=false,i=0(而非1) ||短路示例: 123int j = 0;bool res = (j == 0) || (++j); // 左为true,右++j不执...
网路编程:网络基础
核心要点速览 协议栈:TCP/IP 四层模型(应用层→传输层→网络层→数据链路层) TCP vs UDP:TCP 面向连接、可靠流式;UDP 无连接、高效数据报 三次握手:建立 TCP 连接,确保双方收发能力正常;四次挥手:断开连接,释放全双工通道 TIME_WAIT:客户端第四次挥手后停留 2MSL,确保 ACK 送达、旧报文失效 Socket:网络编程接口,由 “IP + 端口” 唯一标识,TCP 需按固定流程(绑定 - 监听 - 连接 - 收发)编程 一、TCP/IP 四层模型 应用层:提供具体业务协议(HTTP、FTP、DNS),定义数据格式和交互逻辑 传输层:TCP/UDP,负责端到端(进程间)数据传输(可靠 / 高效) 网络层:IP 协议,负责跨网络路由转发(寻址) 数据链路层:处理物理介质上的帧传输(如以太网帧) 二、TCP 与 UDP 核心对比 对比维度 TCP(传输控制协议) UDP(用户数据报协议) 连接性 面向连接(三次握手建连,四次挥手断连) 无连接(直接发送,无需建连) 可靠性 可靠(重传、序...
网络编程:IO模型与高并发
核心要点速览 五大 IO 模型:阻塞 IO(低并发)、非阻塞 IO(忙等)、IO 多路复用(高并发核心)、信号驱动 IO(极少用)、异步 IO(理想模型) IO 多路复用:select(位图,FD 上限 1024)、poll(动态数组,轮询)、epoll(Linux 首选,O (1) 事件驱动) 同步 vs 异步:同步需等待 IO 就绪 / 完成(阻塞 / 非阻塞 / IO 多路复用),异步无需等待(内核回调通知) 高并发模型:Reactor(事件驱动)、多线程 Reactor(主线程 epoll + 子线程池处理任务) 核心选择:百万级并发选「epoll + 线程池 + ET 模式」,中高并发选「epoll/poll + 有限线程」,低并发选「BIO + 线程池」 一、同步 IO 与异步 IO核心定义 同步 IO:线程发起 IO 请求后,必须等待 IO 操作(就绪或数据拷贝)完成才能继续执行,线程主动参与等待过程。 典型:阻塞 IO、非阻塞 IO、IO 多路复用(select/poll/epoll)。 异步 I...
并发编程:线程同步
核心要点速览 数据竞争:多线程并发读写共享资源(至少一个写操作)的未定义行为 互斥锁:std::mutex(基础)、lock_guard(RAII 推荐)、unique_lock(灵活,配条件变量) 条件变量:wait()(阻塞 + 释锁)、notify_one()/notify_all(),需配互斥锁 + 谓词(解虚假唤醒) 原子操作:std::atomic(硬件级原子性,无锁),核心内存序(relaxed/acquire/release/seq_cst) 读写锁:std::shared_mutex(读共享、写独占),优化读多写少场景 常见问题:死锁(固定加锁顺序避免)、虚假唤醒(谓词检查解决)、活锁 / 饥饿(延迟 / 公平锁缓解) 一、线程同步的目标 保证数据一致性:避免多线程读写共享资源导致的结果不可预测。 控制执行顺序:确保线程按业务逻辑要求的顺序执行(如生产者先生产,消费者后消费)。 二、核心同步机制1. 互斥锁:独占式临界区访问 核心原理:通过 “加锁 - 操作 - 解锁”,保证同一时间仅一个线程进...
数组与字符串:字符串
核心要点速览 C 风格字符串:以'\0'结尾的字符数组,依赖cstring库函数,无安全检查(易溢出) C++ std::string:动态管理、安全便捷,支持 SSO(小字符串优化),提供丰富成员方法 拷贝关键:C 语言strcpy不安全、strncpy需补'\0'、strlcpy安全非标准;C++ 直接用拷贝构造 / 赋值 /assign 一、C 风格字符串(char[])本质是以'\0'(空字符)为结束标记的字符数组,'\0'是字符串终止的核心标识。 1. 初始化(易错)1234567// 正确写法char str1[] = "hello"; // 自动添加'\0',数组长度6(h e l l o \0)char str2[] = {'h','i','\0'}; // 手动添加'\0',长度3char str3[10] = "hi&qu...
数组与字符串:数组
核心要点速览 数组名:本质是首元素地址,仅 3 种场景不退化(sizeof、&数组名、decltype) 数组传参:一维退化为指针(丢失长度),二维必须指定第二维长度 C 风格字符串:以'\0'结尾的字符数组,strlen与sizeof计算逻辑不同 数组 vs vector:数组编译期定长、手动管理;vector 动态扩容、自动管理 一、数组名与指针1. 特性数组名 通常等价于首元素地址,仅 3 种场景保留数组类型特性(不退化)。 2. 数组名不退化的 3 种场景 sizeof(数组名):计算整个数组的字节总大小(非指针大小) &数组名:获取指向 “整个数组” 的指针(类型为数组类型(*)[长度]) decltype(数组名):推导为数组类型(如decltype(arr)为int[5]) 3. 数组初始化(C++11+) 聚合初始化简化:可省略等号,多维数组支持部分初始化 12int arr[] {1,2,3}; // 等价于 int arr[] = {1,2,3}int mat[2...

