校招|cvte2022届c++软开实习生一面二面记录

校招|cvte2022届c++软开实习生一面二面记录
最新回答
风吹过竹林

2023-03-27 13:27:10

CVTE 2022届C++软开实习生一面、二面核心考点总结如下

一面核心考点
  1. 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)或指针强制类型转换读取多字节数据的字节顺序。

  2. 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仅操作节点的迭代器失效。

  3. 网络基础

    三次握手与四次挥手

    三次握手:建立连接(SYN→SYN+ACK→ACK)。

    四次挥手:终止连接(FIN→ACK→FIN→ACK)。

    流量控制与拥塞控制

    流量控制:通过滑动窗口机制(接收方通告窗口大小)。

    拥塞控制:慢启动、拥塞避免、快速重传、快速恢复(如TCP Reno算法)。

  4. 算法题

    反转链表:需实现迭代(双指针法)与递归两种解法,注意边界条件(空链表、单节点链表)。

  5. 职业规划

    需明确短期(技术深耕方向)与长期(架构师/技术管理)目标,结合公司业务(如CVTE的智能硬件、教育科技领域)展开。

二面核心考点
  1. 并发编程

    进程、线程与协程

    进程:资源分配单位,独立地址空间,通信成本高(IPC)。

    线程:CPU调度单位,共享进程资源,需同步机制(如互斥锁)。

    协程:用户态轻量级线程,由程序控制调度,避免线程切换开销。

    进程通信方式:管道、消息队列、共享内存、Socket等,需对比优缺点(如共享内存速度快但需同步)。

    守护进程:脱离终端控制,后台运行,通过fork()+setsid()+chdir()+umask()实现。

  2. C++内存模型

    需理解栈(自动存储期)、堆(动态分配)、全局/静态存储区的分配与释放机制,以及内存泄漏的常见场景(如未释放动态内存、循环引用)。

  3. 工程能力

    Git分支管理

    主分支(main/master)用于发布,开发分支(develop)集成功能,特性分支(feature/*)开发新功能,修复分支(hotfix/*)紧急修复。

    合并策略:merge(保留历史)或rebase(线性历史)。

    数据库选择

    MySQL:关系型数据库,事务支持(ACID),适合复杂查询。

    MongoDB:文档型NoSQL,灵活模式,适合快速迭代。

    Redis:内存数据库,基于键值对,支持持久化,适合缓存或高频读写场景。

    索引优化

    索引并非越多越好,需权衡查询速度与写入性能(索引维护成本)。

    自增主键缺点:分库分表时需额外处理(如雪花算法),且可能暴露业务信息。

  4. 网络编程模型

    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):仅在状态变化时触发,需一次性处理完数据,效率高但实现复杂。

  5. 开放性问题

    最近阅读的技术书籍:需结合C++、系统编程或分布式系统领域(如《Effective C++》《Unix网络编程》《Redis设计与实现》)。

    工作意愿:需表达对公司业务的兴趣(如CVTE的智能交互、教育信息化方向)及稳定性预期。

总结

CVTE的面试侧重基础扎实度、工程能力与问题解决思路,需重点准备:

  • C++核心机制(编译、内存、并发)。
  • STL容器与算法底层原理。
  • 网络编程模型与Linux系统调用。
  • 实际项目中的工程实践(如Git流程、数据库优化)。
  • 清晰的职业规划与对公司业务的了解。