一图胜千言,成为熟练工。

C/C++ 这门语言与其他高级语言不同,它是离操作系统较近的语言。所以学好 C/C++ 体系的技术栈必须结合操作系统的运行机制来学习。展开来说,就是你必须掌握操作系统层面的几大基础知识,他们是汇编、编译链接与运行时体系、狭义的操作系统原理、多线程、网络编程。

第一个基础知识是汇编,我们学习汇编不是一定要用汇编来写代码,就像我们学习 C/C++ 也不一定单纯为了面试和找工作。
对于 C/C++ 的同学来说,汇编是建议一定要掌握的,只有这样,你才能在书写 C++ 代码的时候,清楚地知道你的每一行C++代码背后对应着什么样的机器指令,if/for/while 等基本程序结构如何实现的,函数的返回值如何返回的,为什么整型变量的数学运算不是原子的,最终你知道如何书写代码才能做到效率最高。掌握了汇编,你可以明白,在 C++ 中,一个栈对象从构造到析构,其整个生命周期里,开发者的代码、编译器和操作系统分别做了什么。掌握了汇编,你可以理解函数调用是如何实现的,你可以理解函数的几种调用方法,为什么printf这样的函数其调用方式不能是 __stdcall,而必须是 __cdecl。掌握了汇编,你就能明白为什么一个类对象增加一个方法不会增加其实际占的内存空间。
推荐王爽老师的《汇编语言(第 3 版)》和《老码识途 从机器码到框架的系统观逆向修炼之路 》。

第二个基础知识是编译、链接与运行时体系知识。作为一个开发者,要清楚地知道我们写的 C/C++ 程序是如何通过预处理、编译与链接等步骤最终变成可执行的二进制文件,操作系统如何识别一个文件为可执行文件,一个可执行文件包含什么内容,执行时如何加载到进程的地址空间,程序的每一个变量和数据位于进程地址空间的什么位置,如何引用到。一个进程的地址空间有些什么内容,各段地址分布着什么内容,为什么读写空指针或者野指针会有内存问题。一个进程如何装在各个 so 或 dll 文件的,这些文件被加载到进程地址空间的什么位置,如何被执行,数据如何被交换。
推荐《程序员的自我修养》这本书。

第三个基础知识是狭义的操作系统原理。这里加上“狭义”二字是因为从广义上来讲,以上所说的内容都是操作系统原理的范畴。狭义的操作系统原理这里包括操作系统如何管理进程与线程,虚拟内存与物理内存之间的对应关系,何为内存映射文件,进程之间如何通信等等。
推荐《现代操作系统》这本书。

第四个基础知识是多线程知识。严格来说,这点已经包括在第三点之中了,我之所以将其单独列出来,是因为多线程编程是我们做应用服务最常用的技术之一。最近面试过几个学历非常好的同学,对于一个进程中如果某个线程因为内存问题而退出,是否会导致整个进程退出的问题答不好,实在不应该。多线程知识其实不难学,立足于理解与实践而不是应付面试,可以学的很好。无论是 Windows 还是 Linux 操作系统,操作系统提供的线程同步对象就那么几种,Windows 常用的有临界区(关键端)、Event、互斥体、信号量等,Linux 有互斥体、信号量、读写锁、条件变量,这些知识点学过则会,不学则不会。这些线程同步原语花上几天就能搞得清楚,大多数同学不是学不会,而是不愿意学,但是偏偏喜欢在简历上写上自己熟悉多线程编程。面试的时候,被问到条件变量的虚假唤醒机制都说不清楚,非要说自己用过条件变量。这是一些同学犯的很低级的错误,如果真用过条件变量,如果不知道虚假唤醒机制,那一定写的代码是不对的。

掌握了常见的多线程同步原语之后,接下来可以找一些带多线程的项目去学习一下,不管是否带 UI 的都行。我推荐的一种方式是,使用 gdb 或者 Visual Studio 调试器将你需要学习的多线程程序中断下来,在多线程面板,看看这个进程一共有多少个正在运行的线程,分析每个线程的作用,然后研究下这些线程在何时何地创建的,为什么需要创建新的线程。尝试爱过几个人,面对爱情你会诚实很多;尝试研究几个多线程项目,面对多线程你会熟练许多。

第五个是网络编程,直白地说就是 Socket 编程。操作系统层面提供的 API 会在相当长的时间内保持接口不变,一旦学成,终生受用。理解和掌握常用的基础 socket API 不仅可以最大化地去定制各种网络通信框架,更不用说使用市面上流行的网络通信库了,最重要的是,它会是你排查各种网络疑难杂症坚实的技术保障。操作系统层面提供的网络模型就那么几种,无论像 Java/Go/Python 等语言如何封装,作为技术的源头,我们有什么理由不去掌握它呢?市面上关于网络编程的书很多,我在书中结合我这些年的工作经验总结了二十几个网络编程中的重点和难点,现在全部交给你。
推荐《TCP/IP 网络编程》一书。

以上是基于 C++ 技术栈来说,并没有包括算法与数据结构、数据库等方面的基本功,但是这些额外的也是应该需要掌握的。

推荐《C++ 服务器开发精髓》一书。

校招 C++ 大概学习到什么程度?相关推荐

  1. python之父头发-校招C++大概学习到什么程度?

    这个问题我会!大二以前一直都在学 Java 的,后来大二下开始转 Linux C++,在校招中也顺利拿到了百度.阿里.字节等大厂offer,其中不乏 sp.ssp,所以相信我的路线一定对你或者后来的学 ...

  2. 校招面试C++后台开发岗大概学习到什么程度?

    2020年对我而言必定是人生当中最重要的一年.因为实习的原因,我第一次体验了北京和上海的生活,匆匆且忙碌.这一年生活当中充斥着各种求职咨询,面试,做题,仿佛一夜回到了高三.不过,我是幸运的.从寒假实习 ...

  3. 我的校招季大概也是结束了。

    我的校招季大概也是结束了. 其实,不知道该写什么.这些天,腾讯的offer让我有些飘飘然,让我有些晕乎乎,我有的时候很看得起自己,有的时候又很看不起自己. 说到底,我觉得自己只是比别人执拗一点,坚持一 ...

  4. java要学mysql 吗_做JAVA开发需要把数据库学习到何种程度

    原标题:做JAVA开发需要把数据库学习到何种程度 做JAVA开发需要把数据库学习到何种程度?智递科技小编和大家一起探讨交流: 1.开发人员对DB的掌握,越深入,你能做的事情就越多. 2.完成业务功能, ...

  5. Java学习到什么程度可以找到月薪过万的工作?

    好程序员初步总结一下零基础小白Java学习到什么程度: 1.大多数公司,对于Java初级开发的要求是,会用SpringBoot+JPA做增删改查 2.所以零基础的Java小白,无需学太多的内容,只要掌 ...

  6. web前端学习到什么程度可以面试工作

    前端学习想要达到可以找工作的程度还是比较简单的,但是想要通过学习找到高工资的工作可就不容易了,如果只是想要找个普通的工作只要学了前端的基础知识,主流框架实现一定的兼容展示功能,在就是做几个前端 Web ...

  7. 零基础学习数据分析路线,学习到什么程度可以找到工作

    一.数据分析学习到什么程度可以找工作? 这个问题要看你准备面试的公司,具体情况差异较大.所以我只能从自身真实经验中总结一些建议,给出一些最基础的知识结构,供楼主参考. 首先,我觉得优秀的数据分析师应该 ...

  8. 武汉Java开发学习到什么程度可以找第一份工作?

    Java开发学到什么程度可以找到工作?相信很多人在学习之初都会问到这个问题,带着目标去学习才能让学习效果最大化.下面,我就给大家分析一下. IT行业技术更新的比较快,所以我们肯定是学现在企业需要的技术 ...

  9. Java 学习 swing 应该学习到什么程度?

    貌似很多人说企业java开发很少用到swing的.而且我(学生)自己也写了很长时间的swing界面.感觉那些界面太丑了.呵呵.可能是我水平不行,所以我想问一下,java swing在企业这一块应用如何 ...

  10. 软件测试python掌握到什么程度_软件测试学习到什么程度能顺利工作?

    展开全部 蜗牛学院根据行业e69da5e6ba9062616964757a686964616f31333433626563变化和企业用人需求整理了一份软件测试的学习路线,都是目前企业刚需的技术,可以参 ...

最新文章

  1. NLP文本生成模型数据准备及实战
  2. IDC:2018年中国制造业十大预测
  3. 清华出品:一文看尽AI芯片两类瓶颈三大趋势,存储技术开拓新疆界 | 附全文...
  4. AngularJS进阶学习
  5. Java并发编程笔记之ThreadLocal内存泄漏探究
  6. C/C++蓝桥杯1 备赛准备
  7. ubuntu18.04纯命令行安装chrome
  8. Node.js 抓取电影天堂新上电影节目单及ftp链接
  9. 每天一道剑指offer-包含min函数的栈
  10. 安排,Java智慧农业物联网项目视频2020
  11. GitHub简单入门
  12. 8瓶药水3只小白鼠问题
  13. oracle迁移达梦7手顺及注意事项
  14. 美国公司暂停镰状细胞基因疗法临床试验:两受试者发展为癌症
  15. matlab 非线性拟合残差,求大神帮助一下关于matlab非线性拟合的问题
  16. Linux开机流程Systemdgrub
  17. 一元二次不等式和一元三次不等式解法的思考
  18. Spring Integration概述
  19. Java中字符串开头,java中如何判断字符串是以什么开头
  20. 数字图像处理基础之--像素间的关系(邻接/连通)

热门文章

  1. 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)
  2. UOJ #357. 【JOI2017春季合宿】Sparklers
  3. UVALive - 5713 最小生成树
  4. c#面试3(选择题)
  5. Python学习-2.安装IDE
  6. [leetcode]Length of Last Word
  7. 英文拼写及语法检查软件
  8. 软件构造 第三章第三节 抽象数据型(ADT)
  9. 【搜索-剪枝-偏难】PAT-天梯赛-L3-015. 球队“食物链”
  10. 让/etc/profile文件修改后立即生效