如何准备C++面试?
大家好,我是程序喵。
经常有读者向我提问,怎么C++项目?学历不高怎么办?要不要报个培训班?C++面试要刷题吗?等等问题,这篇文章我想统一回答下,希望自己的一点见解对困惑的朋友们能有一些帮助。
本文目录:
- C++都有哪些方向?如何选择?前景如何?
- C++面试都需要哪些技术知识?
- 如何准备C++项目?
- 如何准备面试?要不要刷题?
- 客户端开发与服务端开发的选择?
- 我学历不高,如何应对?
- 我非科班出身,如何应对?
- 是否应该报培训班?
C++都有哪些方向?如何选择?前景如何?
C++是一门多范式、高效的编程语言,绝大多数方向都可以使用C++开发,包括但不限于系统开发、游戏开发、嵌入式开发、音视频开发、中间件开发、界面开发、服务端开发,还会涉及到很多领域,比如自动驾驶领域、人工智能、量化领域等等。
我自己也是过来人,里面大多数方向的岗位都有关注过,要说推荐选择哪个嘛,这个可能还是要看个人的兴趣,有人对游戏感兴趣,有人对音视频感兴趣,有人对量化感兴趣,这些方向市场上我观察过,都有相关的岗位,特别是嵌入式、音视频和量化,这两年岗位还是蛮多的。
这里我最不推荐的就是C++界面开发,也就是大家常提起的C++桌面端开发,技术栈是QT或者MFC。用C++做界面开发早已过时,现在整个客户端开发领域,除了追求性能的大公司的几个APP,其他的大多都会采用大前端方案,小公司移动端或小程序很多都会选用uniapp 或 taro,桌面端很多公司也会选择electron 或 tauri,本质上都是html + css + js开发,包括现在遥遥领先的鸿蒙,也是使用ArkTS开发,可以说,客户端页面开发,早已是js的天下,如果有想做客户端界面开发的朋友,建议早点转型,不如去做前端开发。
C++面试都需要哪些技术知识?
C++的应用领域非常广泛,不同领域不同业务需要的基础知识大不相同,我这里只介绍通用的技术:
- 基础C++:基本语法、指针引用、智能指针、STL
- 进阶C++:面向对象、模板编程、异常处理、多态原理
- 性能调优:内存优化、性能优化、内存泄漏的分析与调试、crash的调试与分析
- 系统设计:架构设计、常用的设计模式、C++中如何实现常用的设计模式
- 其他:数据结构与算法、C语言、操作系统、网络编程、数据库(服务端需要)
我在知乎和公众号上都整理过C++面试题,详见:https://www.zhihu.com/question/451327108/answer/1868370927
如何准备C++项目?
不同领域的朋友需要准备不同的项目,甚至不同技术能力的朋友也需要准备不同的项目,新手朋友不知道怎么入手,可以去bilibili上找C++相关项目的视频学习跟着做一做,也可以跟着我的埋点SDK教程做一期。有一定技术基础的朋友,选择面就会很多,可以根据自己的兴趣爱好做对应的项目,比如做个音视频特效工具?做个播放器?做个RPC中间件?做个智能家居系统?都可以,我看还有很多做智能小车的项目,也挺有趣。不过做项目的过程中,建议遵循正规的开发流程,做好需求分析,任务拆解,架构设计,结构设计,测试驱动,性能profiling、性能优化、文档撰写等等。如果把这一整套文档 + 代码+ 效果都展示给HR 或 面试官,印象分肯定会高一些。
建议想进什么领域,就做什么类型的项目。记得有个朋友跟我提问,想做游戏开发,但还不想用游戏引擎,问我做什么项目可行?我都不知道怎么回复。。。
如何准备面试?要不要刷题?
刷题,一定要刷,现在技术面试很少有不考察算法能力的,一是考察思维能力,二是考察编码能力。
如何刷题?要不要每天都坚持刷题?如果你能每天都坚持刷一两道题,那自然最好,能始终维持着这种刷题的思维模式,当然,在准备面试前,突击三个月刷题其实也可以,我一般就是准备换工作的时候突击三个月算法,然后出去面试。关于刷题方法论,我之前在星球上做过分享,详见:https://articles.zsxq.com/id_o2rg4r6t0px8.html
如何准备面试?建议多进行几次模拟面试,可以付费去找模拟面试官,也可以投递一些简历给不太想去的公司积累些面试经验(可以,但原则上不提倡,小公司招聘本来就难,时间本来就宝贵,你还糊弄人家,想起了刘海柱...)。
重点环节,一定要提前准备,要提前想好面试官要问什么问题,提前准备好答案。比如自我介绍,介绍自己的项目经历,介绍自己在项目过程中遇到了哪些棘手的问题,如何解决的。如何做的项目性能优化,你的优缺点等等。可以输出文档,自己背下来?这里不是说要过度包装,而是要打有准备之仗,在确保所有信息真实的条件下,最大化展示自己的能力。可别自己有10分实力,面试中只能发挥3分。
态度端正,面试过程中一定不要傲娇,最好也不要顶撞面试官,要有礼貌,我面试时遇到那些没礼貌并且吵架的候选人,即使他能力很强,我也会挂掉,因为面试环节中有个重要的衡量标准,你愿意和他共事吗?他适合团队合作吗?很显然,我不愿意和他合作。如果把他招进来,影响了整个团队的氛围,每次推进他做事情,都要被喷一顿,甚至有时候再撂挑子不干了,那还怎么开展工作。
客户端开发与服务端开发的选择?
只要不做桌面客户端C++界面开发,其他的我个人觉得,都还好,都能扎根做下去。界面开发就不应是C++要干的活。
学历不高、学校不好、非科班出身,如何应对?
面对现实,焦虑无用、抱怨无用,尝试从其他方面证明自己的能力。已成既定事实,我们没法改变,也没必要抱怨,不如从现在开始努力,如果你能力很强又没法通过学历来证明自己,那就需要让别人从其他角度认可我们。我很建议这部分同学业余时间多钻研技术,可以写有影响力的技术博客,做有影响力的开源项目,通过项目作品集和技术影响力来弥补其他方向上的不足,证明自己的实力。当别人能够从这些方向认可你时,学历往往也就不那么重要了。
关于学历问题,我之前专门写过一篇文章,详见:https://articles.zsxq.com/id_7udfdtwd36az.html。
是否应该报培训班?
只建议基础非常薄弱的或者意志力薄弱的同学报培训班,其他同学建议自学,互联网技术迭代更新非常快,一定要具备良好的自学能力,如果学什么都靠别人教,那大概率会被淘汰。当然,学习路线,学习方法论最好还是多请教同方向的大佬。
有任何问题,欢迎留言或者私信与我交流,希望本文对你有帮助,祝成功。
