校招和实习是应届生步入职场的重要途径,是职业生涯的起点。
通过实习和校招进入的岗位,C++应届生能够更好地了解行业现状,明确自己的职业兴趣和发展方向。有的时候,实际工作中的体验甚至会引导你重新考虑和规划自己的职业道路。
并且许多大厂通过实习生项目筛选。表现优秀的实习生很可能被转为正式员工,这为应届生提供了直接的就业机会。
前提:学历、学校无明显弱势
1. 技术能力(面试常问知识点)
C++基础
重点需要掌握一些关键字、面向对象以及STL容器的知识特别是STL
- 指针与引用的区别
- C与C++的区别
- struct与class的区别
- struct内存对齐问题
- sizeof与strlen区别
- 面向对象的三大特性:封装、继承、多态
- 类的访问权限: private、protected、 public
- 类的构造函数、析构函数、赋值函数、拷贝函数
- 移动构造函数与拷贝构造函数对比
- 内存分区:全局区、堆区、栈区、常量区、代码区
- 虚函数实现动态多态的原理、虚函数与纯虚函数的区别
- 深拷贝与浅拷贝的区别
- 一些关键字:static, const, extern, volatile 等
- 四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
- 静态与多态:重写、重载、模板
- 四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr
- 右值引用
- std::move函数
- 迭代器原理与迭代器失效问题
- 一些重要的 STL:vector, list, map, set 等
- 容器对比,如 map 与 unordered_map 对比
- set 与 unordered_set 对比
- vector 与 list 比较
书籍推荐:《C++ primer》 《STL源码剖析》 《深度探索c++对象模型》
计算机网络
面试必问,不分校招社招,特别是如果去非Java系的大厂,比如说字节、腾讯这种
- 物理层、链路层
- MTU,MAC地址,以太网协议
- 广播与 ARP 协议
- 网络层
- ip 地址分类
- IP 地址与 MAC 地址区别
- 子网划分,子网掩码
- ICMP 协议及其应用
- 路由寻址
- 局域网,广域网区别
- 传输层(主要就是 TCP)
- TCP首部报文格式(SYN、ACK、FIN、RST必须知道)
- TCP滑动窗口原理,TCP 超时重传时间选择
- TCP 拥塞控制,TCP 流量控制
- TCP 三次握手与四次挥手以及状态码的变化
- TCP连接释放中TIME_WAIT状态的作用
- SYN 泛洪攻击
- TCP 粘包,心跳包
- UDP 如何实现可靠传输
- UDP 与 TCP 的区别
- UDP 以及 TCP 的应用场景
- 应用层
- DNS 原理以及应用
- HTTP 报文格式,HTTP1.0、HTTP1.1、HTTP2.0 之间的区别
- HTTP 请求方法的区别:GET、HEAD、POST、PUT、DELETE
- HTTP 状态码
- HTTP 与 HTTPS 的区别数字证书,对称加密与非对称加密
- cookie与session区别
书籍推荐:《图解HTTP》、《计算机网网络:自顶向下》、《TCP/IP详解卷1:协议》
操作系统
都要会,但是面试问的没有计算机网络相关的多
- 进程与线程区别
- 线程同步的方式:互斥锁、自旋锁、读写锁、条件变量
- 互斥锁与自旋锁的底层区别
- 孤儿进程与僵尸进程
- 死锁及避免
- 多线程与多进程比较
- 进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket
- 管道与消息队列对比
- fork进程的底层:读时共享,写时复制
- 线程上下文切换的流程
- 进程上下文切换的流程
- 进程的调度算法
- 阻塞IO与非阻塞IO
- 同步与异步的概念
- 静态链接与动态链接的过程
- 虚拟内存概念(非常重要)
- MMU地址翻译的具体流程
- 缺页处理过程
- 缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法
- 推荐书籍:《现代操作系统》
数据库MySQL
数据库一般主流的有MySQL和oracle。不过大部分公司都是用的MySQL 面试也是属于必问 毕竟工作crud才是常态
- 语句相关
- 索引相关
- 事务相关
- 锁相关
- 日志相关
- 缓存相关
推荐书籍:《MySQL必知必会》
网络编程
基本是面试的重灾区。很多公司都爱问。特别是IO多路复用,同步非同步IO,阻塞非阻塞。腾讯基本上都会问到
- IO多路复用:select/poll/epoll的区别 非常重要 几乎是必问的。回答思路是往底层靠
- 手撕一个最简单的server端服务器(socket、bind、listen、accept这四个API一定要非常熟练)
- 线程池
- reactor
- 边沿触发与水平触发的区别
- 非阻塞IO与阻塞IO的区别
推荐书籍:《Unix网络编程》
数据结构与算法
算法是最难速成的,从基础数据结构到各种算法的思路再到力扣刷题 需要大家提早准备
- 初学数据结构与算法
- 链表
- 队列
- 栈
- 哈希表
- 二叉树
- 图
- 十大排序
- 二分查找
- 算法思想
- 递归
- 深度与广度搜索
- 枚举
- 动态规划
力扣刷题:200-300道
推荐书籍:《剑指offer》
C++面试题整理领取
https://docs.qq.com/doc/DR2N4d25LRG1leU9Q
2.项目经验
简历上的项目经验对于展示你的技术能力、解决问题的能力以及团队合作精神极为重要。这些项目经验不仅反映了你的编程能力,还能体现你将理论知识应用于实际工作中的能力。
注意事项:
- 精简描述项目背景
简要描述项目的总体目标和背景。帮助面试官理解项目的商业或技术驱动因素。 - 明确你的角色和职责
详细介绍你在项目中的具体角色和职责。包括你负责的技术领域和你所扮演的团队角色。 - 突出使用的关键技术
列举开发项目时使用的关键技术、工具和框架,强调你的核心技能,如C++,Linux,多线程编程等。 - 描述技术实现
描述你如何运用C++和其他技术实现项目中关键的功能或组件。 - 展示解决问题的能力
透露一些项目中具有挑战性的问题以及你是如何解决它们的。 - 提供量化成果
尽可能提供量化的成果。 - 保持简洁
尽量使用简练的语言描述,使信息点清晰、准确。
常见问题
难点一:项目不知道哪里找
https://github.com/Light-City/CPlusPlusThings
难点二:找到的项目自己驾驭不了,实现不出来
难点三:项目实现了,就只是复刻,对于项目细节不求甚解
解决办法
继续巩固项目中所需要的技术知识,项目遇到困难,本质上还是你对项目中所需要用到的知识还没有学到位,这是一个很好的学习思路。
为什么我们说项目越大越好,因为大的项目,其中体现的技术点会越多,面试考察的时候,面试官就可以通过你的项目来考察你的技术掌握的广度和深度。
付费购买一些项目课程,对于实在没有办法自己吃透项目或是时间紧任务重的同学来说这是一条解决问题的途径
(推荐)付费项目课程
六个实战项目视频教程(含源码)
https://docs.qq.com/doc/DR0pxY3F4UEtzVUpu
- 后端项目:KV存储
- 音视频项目:ffmpeg+SDL播放器
- Qt项目:客户端与服务器架构系统
- 内核:内存管理实战案例分析
- 文件系统实现项目
简历书写辅导课,让你的简历避免出现雷点槽点
3.实习经历
实习经历重要还是不重要?
- 说法不一,但有实习一定是好的。
- 能参与实际的项目,累积项目经验
- 和更优秀的人一起公司 培养你的开发思维
- 有助于就业
为什么?
- 前面和大家讲的技术能力和项目,都是教学目的明确的,很难有实际真正拥有用户的项目。而实习能够让你参与到真实项目中去,这样你才能把理论技术与项目相结合,更好的提升自己的开发能力。
- 理论学习的思路是固化的,包括给你上课的老师,基本上也是脱离一线开发多年,缺乏最新的开发思维。实习能让接触到真实一线的开发人员是如何开发的,会很好的扩展你的开发思维
- 实习是很好能展现你的学习能力和接受能力的过程,通过实习导师的评测,获得好的实习结果,能让提早拿到offer。
选择大厂还是小厂?
小厂
- 优势
- 门槛低
- 没有很细的分工,能够有机会了解参与到整个项目
- 做事情没有太繁琐的流程, 步伐会比较快,能高效的完成任务
- 劣势
- 可能高水平的人不会太多,即使有,大概率也不会带你,都是负责人或是总监的头衔
- 做的事情会比较杂,不会很专注于技术
- 做事情不够规范,当慢慢的项目大了人多了反而效率大大下降
- 缺少针对性的培训和指导
大厂
- 优势
- 牛人很多,可能带你的导师就是一名大牛
- 做事规范,文档流程齐全,能够帮助我们形成很好的工作习惯
- 分工明确,可以专注于某个细分的技术领域。避免过多杂活分散自己的注意力
- 求职有大厂背书
- 能得到系统性的培训
- 劣势
- 做事效率不一定高,流程长
- 能接触到的领域比较窄,就是一颗螺丝钉
- 会存在一定的官僚主义
实习的标准
实习方向与求职岗位方向的相关性
实习参与项目与求职岗位的相关性
实习技术栈与求职岗位的相关性
4.简历书写
-
个人信息:
- 包括你的姓名、联系方式、电子邮箱地址。
-
职业目标(可选):
- 概述你的职业目标和你对C++开发岗位的兴趣。
-
教育背景:
- 你的学历信息,特别是与计算机科学、计算机工程或相关领域的学位。
- 列出任何专业的课程或认证,特别是与C++或软件开发直接相关的。
-
专业技能:
- 列表形式明确说明你在C++以及相关技术领域(如Linux、网络编程、嵌入式系统等)的具体技能。
- 可以包括熟悉的库、框架、工具(如STL、Boost库、Qt等)。
-
工作经验:
- 以逆序列出工作经历,每个职位包括工作时间、公司名称、职位以及具体的职责和成就。
- 突出你在以往职位中使用C++的经验和所带来的成效。
-
项目经验:
- 描述你在C++项目中担任的角色以及你的贡献。
- 包括任何公开可见的项目,如开源项目,并提供链接。
-
语言和工具:
- 你熟练的编程语言,特别是C++的各个版本(如C++11/14/17/20)。
- 列出你熟悉的开发工具、版本控制系统(如Git)以及IDE(如Visual Studio、Eclipse)。
-
附加技能:
- 如有,包括其他编程语言、软件架构设计、团队合作能力等。
-
荣誉奖项与成就(如果适用):
- 突出任何行业奖项或个人成就。
在书写简历时,确保语言准确、清晰,并且格式整洁。使用强有力的动词来描述你的经验和成就,确保内容具体、相关,并尽可能地量化你的成效。
5.岗位投递
200+ 24春招/25实习求职岗位整理
https://docs.qq.com/doc/DR2N4d25LRG1leU9Q
6.技术方向
7.薪资谈判
- 在面试前,了解行业标准薪资、同行的薪资水平以及公司的薪资范围。
- 明确自己的技能和经验如何为公司带来价值。
- 尽可能让雇主先报价,因为这将为你设定谈判的起点。
- 在谈判时保持冷静、清晰和专业。
- 即使薪资报价低于预期,也不要表现出失望或不礼貌的态度。
- 白菜价是没有议价空间的
- 议价主要自信来源于你的实习经历的匹配度以及技术面试时你的回答的深度和广度是否满意 以及就是你有同级别公司的有竞争力的offer 会是你很好的议价谈判条件