2023-03-27 13:27:10
CVTE 2022届C++软开实习生一面、二面核心考点总结如下:
一面核心考点C++基础与编译过程
C++从源代码到可执行程序的过程:需掌握预处理(宏展开、头文件包含)、编译(语法分析、生成汇编代码)、汇编(生成目标文件)、链接(合并目标文件与库文件)的完整流程。
C++11新特性:重点考察智能指针(shared_ptr、unique_ptr、weak_ptr)、匿名函数(Lambda表达式)、自动类型推导(auto)、范围for循环等。
智能指针原理:
shared_ptr:引用计数,最后一个所有者释放内存。
unique_ptr:独占所有权,禁止拷贝,支持移动语义。
weak_ptr:不增加引用计数,用于解决shared_ptr循环引用问题(需结合shared_ptr使用)。
Lambda匿名函数捕获方式:值捕获([=])、引用捕获([&])、混合捕获([=, &x])。
大小端判断:通过联合体(union)或指针强制类型转换读取多字节数据的字节顺序。
STL容器与底层机制
常用容器:vector(动态数组)、list(双向链表)、unordered_map(哈希表)、map(红黑树)。
vector与list区别:
vector:随机访问快(O(1)),插入/删除中间元素慢(O(n)),扩容成本高(通常1.5或2倍增长)。
list:插入/删除快(O(1)),随机访问慢(O(n)),无扩容问题。
unordered_map与map区别:
unordered_map:平均O(1)时间复杂度,哈希冲突时性能下降(常用拉链法或开放寻址法解决)。
map:O(log n)时间复杂度,基于红黑树实现,元素自动排序。
迭代器失效:vector扩容或插入/删除元素时,所有迭代器失效;list仅操作节点的迭代器失效。
网络基础
三次握手与四次挥手:
三次握手:建立连接(SYN→SYN+ACK→ACK)。
四次挥手:终止连接(FIN→ACK→FIN→ACK)。
流量控制与拥塞控制:
流量控制:通过滑动窗口机制(接收方通告窗口大小)。
拥塞控制:慢启动、拥塞避免、快速重传、快速恢复(如TCP Reno算法)。
算法题
反转链表:需实现迭代(双指针法)与递归两种解法,注意边界条件(空链表、单节点链表)。
职业规划
需明确短期(技术深耕方向)与长期(架构师/技术管理)目标,结合公司业务(如CVTE的智能硬件、教育科技领域)展开。
并发编程
进程、线程与协程:
进程:资源分配单位,独立地址空间,通信成本高(IPC)。
线程:CPU调度单位,共享进程资源,需同步机制(如互斥锁)。
协程:用户态轻量级线程,由程序控制调度,避免线程切换开销。
进程通信方式:管道、消息队列、共享内存、Socket等,需对比优缺点(如共享内存速度快但需同步)。
守护进程:脱离终端控制,后台运行,通过fork()+setsid()+chdir()+umask()实现。
C++内存模型
需理解栈(自动存储期)、堆(动态分配)、全局/静态存储区的分配与释放机制,以及内存泄漏的常见场景(如未释放动态内存、循环引用)。
工程能力
Git分支管理:
主分支(main/master)用于发布,开发分支(develop)集成功能,特性分支(feature/*)开发新功能,修复分支(hotfix/*)紧急修复。
合并策略:merge(保留历史)或rebase(线性历史)。
数据库选择:
MySQL:关系型数据库,事务支持(ACID),适合复杂查询。
MongoDB:文档型NoSQL,灵活模式,适合快速迭代。
Redis:内存数据库,基于键值对,支持持久化,适合缓存或高频读写场景。
索引优化:
索引并非越多越好,需权衡查询速度与写入性能(索引维护成本)。
自增主键缺点:分库分表时需额外处理(如雪花算法),且可能暴露业务信息。
网络编程模型
Reactor与Proactor:
Reactor:同步I/O,事件驱动(如epoll),需自行处理I/O操作。
Proactor:异步I/O,操作系统完成I/O后通知应用(如Windows的IOCP)。
epoll、select、poll区别:
select:跨平台,但文件描述符数量受限(1024),需遍历全部描述符。
poll:无数量限制,但仍需遍历。
epoll:Linux特有,基于事件回调,仅通知活跃描述符,性能最优。
epoll触发方式:
水平触发(LT):只要数据可读/可写就触发,效率低但兼容性好。
边缘触发(ET):仅在状态变化时触发,需一次性处理完数据,效率高但实现复杂。
开放性问题
最近阅读的技术书籍:需结合C++、系统编程或分布式系统领域(如《Effective C++》《Unix网络编程》《Redis设计与实现》)。
工作意愿:需表达对公司业务的兴趣(如CVTE的智能交互、教育信息化方向)及稳定性预期。
CVTE的面试侧重基础扎实度、工程能力与问题解决思路,需重点准备: