C++校招学到什么程度可以找工作

每年一到秋招、春招,很多学 C++ 的同学都会有一个很现实的问题:C++ 到底学到什么程度,才算可以出去找工作?

这个问题没有一个绝对统一的标准,因为不同岗位、不同公司、不同方向,对 C++ 的要求差异很大。后台开发、客户端开发、游戏开发、音视频、搜索推荐、基础架构、自动驾驶、嵌入式,这些方向虽然都可能写 C++,但考察重点并不完全一样。

不过对于大多数校招同学来说,判断自己能不能开始投递,其实可以看一个更实际的标准:你是否已经具备“基础能答、代码能写、项目能讲、八股能过、算法不崩”的能力。 如果这几个方面基本都具备了,就已经可以开始找工作,而不是非要等到“全都会了”再投。

一、C++校招不用学到“精通”才能找工作

很多同学迟迟不敢投简历,不是因为完全没学,而是总觉得自己还差一点。比如 STL 还没完全吃透、模板还不够熟、操作系统还没背完、项目也还没优化到最好,于是不断拖延。实际上,校招看的不是你有没有达到工程师工作多年后的水平,而是你是否已经具备了进入岗位继续培养的潜力

也就是说,企业并不要求你在校阶段就把 C++ 学成“大牛”,但会要求你至少具备完整的技术框架。你可以某些地方不够深,但不能到处都只停留在入门。尤其是基础部分,必须足够扎实,因为这是校招面试最容易考、也最能拉开差距的部分。

C++面试常考题目类型都放入了专栏了:https://www.nowcoder.com/creation/manager/columnDetail/Mq7XWW

二、能找工作的 C++ 水平,大致要到什么阶段?

如果用比较直白的话来讲,C++ 想达到“可以投校招”的程度,至少要满足以下几点。

1. C++语法基础要比较完整

不是只会写 forif、函数和类,而是要对常见核心特性有系统理解。比如指针、引用、内存管理、拷贝控制、构造析构、继承多态、虚函数、运算符重载、模板、STL、智能指针、右值引用、move 语义这些内容,至少都要知道它们在解决什么问题、怎么用、常见坑在哪里。

校招面试里的 C++ 问题,很多不会让你默写特别复杂的代码,但会非常喜欢问概念区别、底层机制、使用场景和易错点。如果这些内容比较散、学得断断续续,就会很容易在面试中露怯。

2. 数据结构与算法要达到“能过笔试”的水平

校招不一定要求你刷到竞赛级别,但至少要能应对大多数笔试和部分手撕题。常见的数据结构比如数组、链表、栈、队列、哈希表、二叉树、堆、图,并查集,常见算法比如二分、双指针、滑动窗口、DFS/BFS、贪心、回溯、动态规划、排序、字符串处理,这些都最好练过。

一个很现实的标准是:LeetCode 热题和常见题型能独立完成不少,笔试不至于一眼不会,面试写代码不至于完全卡住。 只会背八股、不会写题,校招会很吃亏。

3. 计算机基础不能太薄

如果是 C++ 岗位,面试一般不会只问语言本身,操作系统、计算机网络、数据库往往都会问,尤其是后台开发、基础架构、服务端方向更明显。

你不一定每个点都要讲得特别深,但常见知识点要能形成基本框架。比如进程线程区别、线程同步、死锁、内存分区、虚拟内存、TCP/UDP、三次握手四次挥手、HTTP、索引、事务、锁,这些基本就是高频题库。

4. 至少要有一个能讲清楚的项目

项目不一定要特别“高大上”,但一定要自己做过、能讲明白。面试官最怕听到那种简历上写得很满,结果一问细节就答不上来的情况。

一个合格的项目至少要能讲清楚:

  • 项目背景是什么
  • 你的职责是什么
  • 你做了哪些模块
  • 遇到过什么问题
  • 你是怎么解决的
  • 最后效果如何
  • 如果重来一次,还能怎么优化

项目不在于多,而在于真。对校招来说,一个讲得透的项目,往往比三个讲不清的项目更有说服力。

5. 八股文要准备到“高频题不过分慌”的程度

很多同学不喜欢八股,但校招阶段它就是绕不开。尤其是简历还不够强、项目还不够硬的时候,八股几乎就是基础分。C++ 岗位的面试官通常会通过八股快速判断候选人的知识体系是否完整。

所以你不一定要把所有冷门问题都背下来,但高频问题必须过一遍,而且不能只背结论,最好能理解逻辑,不然一旦被追问就容易崩。

三、如果达到这些状态,基本就可以开始投了

你可以用下面几个问题来判断自己是否已经到了可投递阶段:

  • C++ 常见核心知识点能说出大概思路
  • 常见 STL 容器知道底层结构和使用场景
  • 算法题能做中等难度的常见题型
  • 操作系统、网络、数据库高频题基本看过
  • 至少有一个项目能连续讲 5 到 10 分钟
  • 面试时不至于被“你这个项目为什么这么设计”问到完全断掉
  • 笔试遇到常规题目不至于整张卷子都没思路

如果这些大部分都能做到,其实就已经可以开始找工作了。很多同学总想等“全部准备完美”再投,但现实是,投递、笔试、面试本身也是准备过程的一部分。 越早进入真实反馈,越容易发现自己的短板。

四、找工作前,C++校招生最该补的不是“更多”,而是“成体系”

很多同学的问题不是学得少,而是学得碎。今天看一点 STL,明天刷两道题,后天背几页八股,再过两天又换方向,结果每块都碰过,但串不起来。面试的时候最明显的表现就是:看着都眼熟,真正回答时说不顺。

所以真正到找工作前,最重要的不是无止境扩展知识面,而是把已有内容串成体系。把 C++ 主线、算法主线、基础课主线、项目主线分别理清楚,再通过模拟面试或复盘去补漏洞,这样提升会比盲目堆知识快得多。

五、C++校招必备八股文题目汇总

下面列一些校招中常见的 C++/计算机基础八股题,这里只列题目,不给答案,适合你自己整理复习。

C++基础

  • 指针和引用的区别
  • const 修饰指针有哪几种情况
  • define、const、constexpr 的区别
  • static 的作用
  • extern 的作用
  • inline 的作用
  • sizeof 和 strlen 的区别
  • 野指针和悬空指针是什么
  • malloc/free 和 new/delete 的区别
  • new/delete 的底层过程
  • C++ 内存分区有哪些
  • 堆和栈的区别
  • 结构体内存对齐为什么存在
  • 如何计算结构体大小
  • typedef 和 using 的区别
  • C 和 C++ 的区别

面向对象

  • 面向对象三大特性是什么
  • 重载、重写、重定义的区别
  • 构造函数可以是虚函数吗
  • 析构函数为什么一般写成虚函数
  • 虚函数表和虚函数指针是什么
  • 多态的实现原理
  • 纯虚函数是什么
  • 抽象类是什么
  • 什么是菱形继承,如何解决
  • public、protected、private 继承的区别
  • this 指针是什么
  • 类对象的构造和析构顺序

拷贝控制与资源管理

  • 深拷贝和浅拷贝的区别
  • 拷贝构造函数什么时候调用
  • 赋值运算符重载什么时候需要自己写
  • 什么是 Rule of Three / Five
  • RAII 是什么
  • 智能指针有哪些,区别是什么
  • unique_ptr、shared_ptr、weak_ptr 的区别
  • shared_ptr 的引用计数原理
  • weak_ptr 是为了解决什么问题
  • 什么情况下会发生内存泄漏

STL 与模板

  • vector 和 list 的区别
  • vector 扩容机制
  • deque 的特点
  • map 和 unordered_map 的区别
  • set 和 unordered_set 的区别
  • 红黑树的特点
  • 哈希表的底层实现
  • 哈希冲突如何解决
  • priority_queue 的底层结构
  • sort 的底层实现了解吗
  • 迭代器失效有哪些场景
  • 模板是什么
  • 模板特化和偏特化是什么
  • typename 和 class 在模板中的区别
  • 什么是可变参数模板

C++11 / C++14 / C++17 常问

  • auto 的作用和注意点
  • decltype 的作用
  • 左值、右值、左值引用、右值引用分别是什么
  • move 语义是什么
  • std::move 和 std::forward 的区别
  • 完美转发是什么
  • lambda 表达式怎么用
  • 智能指针是 C++11 哪部分的重要特性
  • emplace_back 和 push_back 的区别
  • nullptr 和 NULL 的区别

操作系统

  • 进程和线程的区别
  • 线程同步方式有哪些
  • 互斥锁和自旋锁的区别
  • 死锁产生的条件是什么
  • 如何避免死锁
  • 用户态和内核态的区别
  • 进程间通信方式有哪些
  • 线程间通信常见方式有哪些
  • 页面置换算法有哪些
  • 虚拟内存是什么
  • malloc 申请的内存一定在堆上吗
  • 一个程序从开始运行到结束经历了什么

计算机网络

  • OSI 七层模型和 TCP/IP 四层模型
  • TCP 和 UDP 的区别
  • TCP 为什么要三次握手
  • TCP 为什么要四次挥手
  • 如果握手只有两次会怎么样
  • TIME_WAIT 为什么存在
  • TCP 如何保证可靠传输
  • 流量控制和拥塞控制是什么
  • 滑动窗口是什么
  • HTTP 和 HTTPS 的区别
  • HTTPS 建立连接的过程
  • GET 和 POST 的区别
  • Cookie、Session、Token 的区别
  • 输入一个 URL 到页面显示经历了什么

数据库

  • MySQL 常见存储引擎有哪些
  • InnoDB 和 MyISAM 的区别
  • 什么是索引,为什么能加快查询
  • 聚簇索引和非聚簇索引的区别
  • B+ 树为什么适合做数据库索引
  • 什么情况下索引会失效
  • 事务的四大特性是什么
  • 并发事务会带来哪些问题
  • 脏读、不可重复读、幻读的区别
  • MySQL 的隔离级别有哪些
  • 乐观锁和悲观锁的区别

多线程与并发

  • 线程安全是什么意思
  • mutex、condition_variable、atomic 分别适合什么场景
  • 原子操作为什么快
  • CAS 是什么
  • CAS 会有什么问题
  • 生产者消费者模型怎么实现
  • 什么是线程池
  • 线程池的核心参数有哪些
  • future、promise、async 了解吗

项目相关高频追问

  • 你项目里最难的点是什么
  • 项目中遇到的 bug 是怎么定位的
  • 为什么选择这个技术方案
  • 如果并发量增大,你的系统哪里会出问题
  • 你的项目如何做性能优化
  • 如何保证模块解耦
  • 项目中如何设计接口
  • 项目中如何处理异常情况
  • 如果让你重构这个项目,你会怎么做

六、最后一句

对于 C++ 校招来说,真正能找工作的状态,不是“什么都学完了”,而是已经具备完整框架,并且能在面试里把基础、项目和代码能力稳定表达出来。

说得更直接一点:基础别太虚,算法别太差,项目别太假,八股别太空。 到这个程度,就可以大胆开始投了。

全部评论

相关推荐

04-18 01:20
已编辑
哈尔滨工程大学 C++
4.10一面mmt项目拷打1.故障码你怎么理解 排查思路2.负载优化思路3.项目这个内存泄漏怎么排查的4.讲一下这个增量的机制为什么换这个线程的调度策略不换另一个5.这个容器传的数据是什么?等等还有很多其实不深准备的很多都没问到八股环节(只记得一部分)1.如何理解C++智能指针?详细介绍2.shared_ptr的引用计数加--操作是否线程安全?怎么实现加一的3.能否在类内部将this指针赋值给shared_ ptr,会引发什么后果?4.请讲解C++中std:move的原理与使用场景?5.C++中malloc和new的核心区别是什么?6.能否通过malloc申请内存后强转为类的指针使用?7.调用malloc申请50M内存时,系统会立刻占用50M物理内存吗?8.C++中的vector是否是线程安全的?扩容机制9.一个线程对vector执行push_back,另一个线程同时读取front和back,该操作是否安全?10.若vector容量分配为150,一个线程push_ back.另一个线程读取,是香可以不加锁?11.对vector进行--边写(push_back)边读的操作,是否会出现线程安全问题?(只记得这些)手撕:从零实现删除链表倒数第n个节点,自定义链表结构鼠鼠一直在看项目很多八股都忘了,一半都没答上来,感觉面试官很好问题也会重复,给时间思考,手撕慢也一直在等我。我真是个飞屋。。感觉很辜负面试官4.13一面过 约二面4.15二面1.问一面问了八股没2.问简历上两个项目 讲亮点3.对内存泄漏有了解吗 你会怎么排查增长和泄露3.谈谈个人优势和优缺点手撕 从零实现一个智能指针然后然后给ta详细讲了一遍,问我是不是线程安全的,如果要想线程安全应该怎么改4.17 oc
查看21道真题和解析
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务