ToB企服应用市场:ToB评测及商务社交产业平台

标题: 万字长文 | 保姆级的背景服务器开发C++学习路线 [打印本页]

作者: 王國慶    时间: 2024-7-12 16:42
标题: 万字长文 | 保姆级的背景服务器开发C++学习路线
​媒介

  这一篇的主题是「Linux C/C++ 服务器/背景开发学习路线」。
 
  如许的文章信赖大家都见得不少了,写之前也非常忐忑,能不能和别的人写得不一样, 也定下了一个目的,这篇文章,不能是简朴的堆砌学习资源和书单保举,更要细化如何有效的去执行落地。
 
  夺取做到让看到的同学有一种相见恨晚的感觉哈哈哈。
 
  以是大家可以试着看一下,帮我检查下有没有到达预想的效果哈哈,希望不要被打脸???
 
  那就正式开始吧。
 
  这篇文章会有点长有点干,可以先去冲杯咖啡,逐步看~
 
正文 | 干货 | 收藏
​一、后端/背景/服务器开发?

  经常在各大公司雇用上看到后端、背景、服务器开发等等,有些同学经常被这些名词搞混。
 
  其实这些名词都是相近的,但是也有点区别,这里说说我的明白:

  背景一般和后端是一个意思,而服务器开发则稍微广义一点,不但包含了背景开发,而且也包罗支撑整个背景应用的底子开发,好比搜索引擎、微服务、RPC 框架、KV、存储、MQ 等。
 
  背景/后端重在业务处理,是偏向应用层开发,而服务器开发不但包罗应用层开发,更是囊括了整个支撑背景业务的相关组件的开发。
 
  那 Linux C/C++ 服务器/背景开发指的什么呢,其实就是基于 Linux 上 的 C++ 编程。
 
  但是相比 Java 系更夸大 Linux 系统编程、网络编程能力,有的还会涉及到服务端底层协议和网络框架开发。
 
  传统的 Java 、Go背景开发偏向 Web 开发,也就是吸收前端请求,通过微服务互相调用,完成业务逻辑处理,然后返回给前端。
 
  实际上在腾讯这边的 C++ 背景开发,也是雷同的,本身有非常成熟的基于 C++ 的微服务体系,大多数开发也只须要关注业务逻辑就好,不外还是会要求 Linux 系统编程、网络编程等能力。
二、背景开发都观察哪些?

一般来说 Linux C/C++ 背景开发方向涉及以下这些底子知识:

非必选加分项:

由于篇幅限制,这篇文章主要介绍底子知识的学习路线和方法,别的加分项以后再单独写。
三、C/C++

起首是语言的底子知识,一些关键字和实现原理等:

这里列出来的只是一些比力重要的部分,实际上可能只算 C++ 的冰山一角, 大家且学且珍惜吧,这不 C++11 还没整透彻,C++ 20 又出来了,生命不息,学习不止。
 
怎么学?
 
​1. 《C++ Primer》
   这本书根本包罗了 C++ 11 的全部特性,最好把前面三部分:C++底子、C++尺度库、类计划者的工具都看一遍,我当时花了一个多月断断续续看到了第16章模板那里。
  2. Effective 系列:《Effective C++》、《More Effective C++》、《Effective STL》
   第一本是重点,光看《C++ Primer》缺少实践的话,大概率还写不出合格的 C++ 代码,而《Effective C++》就是通过 55 条非常具体的做法告诉你什么样才是符合 C++ 编码规范的,可以缩短你写出合格 C++ 代码的时间,镌汰踩坑,强烈保举必读,反面两本优先级稍低,可以偶然间再读。
  3. 《STL 源码剖析》和《深度探索 C++ 对象模子》
   看完 Primer 和 Effective,你应该已经可以或许比力熟练的使用C++了,但是还缺少对 C++ 底层实现机制的认识。好比虚函数表、成员变量布局等,同时对于 STL 库可能也仅仅停留在使用上。
保举的这两本可以分别完满你在 C++ 底层实现和 STL 源码、原理上的认识。
  以上册本同时建议共同HJ老师视频服用,效果更佳。
直接在 B 站或其他网站搜索「HJ C++」即可,主要有以下几个系列:

我根本都看了,收获挺大的,建议看下,可以开倍速。
 
​看完以上资料,算是 C++ 入门了,应付面试也是足够的,根本到达了准确高效地使用 C++ 这一层面。​
 
是不是听到这有点瓦解,特么的看了这么多,才入门???
 
​假如你想在 C++ 语言上更进一步​,那么有以下的册本保举:
 
1、《C++ 语言的计划与演化》
   这本书是 C++ 之父 Bjarne Stroustrup 写的,关于 C++ 的前世今生,以及未来的演进方向,可以了解 C++ 的计划哲学。C++ 复杂的语言特性不停让人诟病,通过这本书,可以看到各种特性引入的目的,也更深入了解到了 C 和 C++ 之间关系。好比 C++ 里有个原则就是全部的实现机制都不能带来额外的运行时开销。
  我也正在看这本书。
 
2、《C++ 沉思录》、《C++ Templates》和《C++模版元编程》
   C++模板元编程属于别的一个天下了,一般公司里开发用得比力少,这个也是一个大坑,假如着实感兴趣可以去看看,感受下 C++ 的博大精深,不外这玩意我也不太会,也不保举你去花时间在上面。
  3、CppCon视频
   这是 C++ 社区构造的雷同开源峰会那种,每次都会讨论一些关于 C++ 的话题,没事去刷一个,还是挺故意思的。Youtube 直接搜 CppCon 即可找到。
  四、操作系统

操作系统这门课,我的感觉是易学难精,但是掌握到一样平常编程和面试够用还是比力容易的。
 
那么结业生大概说你去预备校招面试应该到达怎样的水平:

不必全看,两者任选一本都不错,我本身是细致看了第二本,由于是我们课本,同时挑着看了现代操作系统部分章节。
 
这部分看完你应该对下面这些话题有一个清晰认知了:

但是这还不敷,看完偏理论的书,当面试官问「进程和线程的区别」时。
 
大概只能答复出「进程是资源分配的最小单位,线程是CPU调度的最小单位,balabala…」如许准确却普通的答案。
 
但是假如你了解 Linux 内核的实现,就可以实际出发,讲讲 Linux 中进程和线程是如何创建的,区别在那里。
 
好比在 Linux 中进程和线程实际上都是用一个结构体 ​​task_struct​​​ 来表示一个执行任务的实体。进程创建调用 ​​fork​​​ 系统调用,而线程创建则是 ​​pthread_create​​​ 方法,但是这两个方法最终都会调用到 do_fork​​ 来做具体的创建操作 ,区别就在于传入的参数差异。
 
深究下去,你会发现 Linux 实现线程的方式简直太巧妙了,实际上根本没有​线程​,它创建的就是进程,只不外通过参数指定多个进程之间共享某些资源(如虚拟内存、页表、文件描述符等),函数调用栈、寄存器等线程私有数据则独立。
 
如许是不是非常符公道论书上的定义:同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用他们。
 
这也算符合 Unix 的哲学了— KISS(Keep It Simple, Stupid)。
 
但是在别的提供了专门线程支持的系统中,则会在进程控制块(PCB)中增加一个包含指向该进程全部线程的指针,然后再每个线程中再去包含本身独占的资源。
 
这算是非常正统的实现方式了,好比 Windows 就是如许干的。
 
但是相比之下 Linux 就显得取巧许多,也很简便。
 
对于进程、线程这块你还可以把 fork、vfork、clone 、pthread_create 这些模块关系彻底搞清楚,对你明白 Linux 下的进程实现有非常大的资助。
 
说了这么多,就是想夸大一下理论联系实际的重要性。
 
特殊是操作系统,最好的实践就是看下 Linux 内核是怎么实现的,当然不是叫你直接去啃 Linux 源码,那不是一般人能掌握的。
 
最好的方式是看书,书的脉络给你理得很清晰。
 
册本保举:
《Linux内核计划与实现》
   这本书恰到利益,即讲清楚了内核实现的要点,又不会通篇源码。
  这本书重点关注「第 3 章进程管理」、「第 5 章系统调用」、「第12章内存管理」、「第13章虚拟文件系统」、「第 15 章进程地点空间」
 
这些章节属于操作系统核心部分,别的如中断处理、块 IO、装备管理根据你本身兴趣选择看下就可以了。
 
根本上做到这里,操作系统就没什么大题目了。
五、盘算机网络

须要掌握的网络协议和知识:

计网知识比力繁杂,许多同学都反映网络很难学,一大堆的网络协议,依次学完后,还是不知道网络是怎么构成的。
 
这就是没有用对学习方法,导致只见树木,不见森林。
 
学习时,保举你捉住一条主线 ​**「一个数据包是如何发送出去的?」​**
 
带着这个题目依次去学应用层、传输层、网络层、链路层,思考这些层之间是如何串联起来的。
 
这就是自顶向下的思路,那自然要保举:
《盘算机网络:自顶向下方法》
   非常浅近易懂的描述了「一个数据包是如何发送出去的」,也不费时间,看惯了机工社的大黑书,看这种反而有种看小人书的感觉,有底子的话,一天左右就过完了。
  只有把握住了整个网络脉络主线才不至于被纷繁复杂的网络协议所搞晕,剩下的就是不停的细化,添补这些主干上的细枝末节。
 
​那么有哪些细节可以去添补呢?​
 
好比 ARP 工作过程、IP 地点、IP 分片、NAT(UDP 打洞)、链路层访问控制协议等等。
 
尚有最重要的 TCP 协议,TCP 也是面试和计网中最重要的概念:

这么多东西肯定须要背,但不要死记,最好带着题目去思考为什么要如许做。
 
这里列几个题目:

整个 TCP 的核心就是围绕着 **​可靠传输​ + ​高效传输(流量控制和窗口管理)**​
 
由于 TCP 的细节着实太多,自顶向下那本书有点不太够,以是你须要去看看:
 
《TCP/IP详解卷1:协议》
   这本书不要从头看,而是挑出此中涉及到 TCP 的章节
  到这里,对于整个网络以及 TCP 都应该有了一个全面而过细的认识。
 
但是计网中还是有一些故意思的题目,假如你没思考过,大概答复不出来。
 
好比:

这些题目只有当你真正明白了才能答复出,仅仅记住协议的话,估计很难应对灵活的面试题。
 
别的,网络部分还须要预备 HTTP、HTTPS,保举:
《图解HTTP》
 
最后别忘了本身答复一遍那被问烂了、写烂了的题目:
从 URL 输入到页面显现到底发生什么
 
越细越好,五百字以上吧,哈哈哈
​六、网络编程

C++ 背景开发根本是离不开网络编程的,其实乃至整个背景开发也可以看做是在做网络编程。
 
只不外别人的框架帮我们做了协议剖析、网络数据传输、解封包这些底层操作。
 
好比 SpringBoot 这种保姆级框架,根本上属于将一个框架醒目的事都干完了,以至于我们开发业务只须要定义吸收和返回包的数据格式,然后做逻辑处理就完了。
 
像序列化、解封包、IO 处理这种网络编程必备的脏活业务开发根本不会接触到。
 
但是网络编程技能还是很重要的,特殊是对于 Linux C++ 开发来说。
 
Linux 下网络编程核心的包罗系统编程和网络 IO 两个部分:

保举的书:

   这两本是砖头书,固然是网络编程和 Unix 系统编程方面的无出其右的圣经,但主要用途还是垫显示器(逃, 个人以为这种书不是面向读者的,具体缘故因由和如何阅读这种书在后文介绍。
  
   我强烈保举,这本书前半部分根本是在重复计网底子知识,但是反面几章关于高性能服务器程序框架、高性能IO、IO复用、定时器、多线程编程、线程池和进程池还是讲得非常全面到位的,值得一看,看完根本上对于整个网络编程就有了框架。
  
   这本书同样强烈保举,这是陈硕大佬写的书,说实话第一部分:C++ 多线程系统编程都直接把我看蒙了,没有想到 C++ 里要做到线程安全这么难,第一章我看了两三遍才看懂吧。。。这是难得的讲解 C++ 多线程编程的书。
  并且在书中,陈硕大佬用了一章讲解了 Muduo 网络库计划与实现,Muduo 比力适合学完底子的网络编程后继续进阶学习如何计划和写一个网络库,是一个高质量的 Reactor 网络库,采用 one loop per thread + thread pool 实现,代码比力简便,书和源码搭配着看作为学习网络编程方面来说是非常不错。
 
学完网络编程就可以写点小项目练手了,这里列举几个项目:

​七、系统级编程

作为 C/C++ 程序员,编写的程序不像 Java、Python 这些是在虚拟机上,直接就是在操作系统上运行,那么就必须了解操作系统底层机制和运行原理。
 
就和 Java 程序员要求了解 JVM 是一个原理,你得熟悉代码运行的平台,才能在出题目的时间准确定位到。
 
这里保举两本书:
1、《深入明白盘算机系统》
   不须要我多介绍了
2、《程序员自我修养》
别被名字欺骗了,这不是教你养生的,而是学了会掉头发的硬核知识
  两本书侧重点各不相同,CSAPP 非常巧妙的把数字电路底子、二进制与指令集体系、汇编语言、程序计划及优化、存储器体系结构、链接与装载、进程、虚拟内存这一堆来自各差异的盘算机学科的核心知识点串在一起,并以程序员的视角出现,以是这本书的英文名字叫 《Computer Systems A Programmer’s perspective》
 
而程序员自我修养则重在链接、目的文件、装载、库与运行时,看完这本书你会了解到一个 C/C++ 程序是如何被编译成目的文件的,以及 Linux 下目的文件的格式,差异目的文件又是如何被链接成一个可执行程序,在链接时如何处理符号、重定位、地点剖析等,以及静态链接、动态链接区别等等,最后可执行文件又是如何被加载进内存,如何和虚拟内存空间映射的。
 
你可能会以为这个又是只能用于面试,实际派不上用场的知识?
 
那简直大错特错,说真的,这两本书,我是反复看了三遍以上,当然后续看都是挑侧重点看的。
 
举个例子吧,写 C/C++ 的同学没少遇到这些编译错误吧:
 
​​undefined reference to xxx​​
 
​​Symbol key multiply defined (by xxx.o and yyy.o)​​
 
在我大一的时间遇到这些题目简直一脸懵逼,根本连报错都看不懂。
 
特殊是涉及到多文件编程的时间,经常傻乎乎的在头文件中定义变量,导致变量多重定义,这些题目没有学过链接知识的其实很难明白。
 
在实际编程也是经常会遇到的。
 
又好比​​extern​​​、​​static​​ 这些关键字是如安在编译链接时起作用,变量的申明与定义又有什么区别?
 
这部分可以算是真正的内功了,提升你对盘算机系统的明白,也有助于办理实际编程过程中会出现的题目,当然也会在面试中出现。
​八、数据库

数据库起主要学会 SQL 的使用,这里保举 《MySQL必知必会》
 
数据库原理方面可以看看《数据库系统概念》,这本书挺厚的,包含了从 SQL 到数据库计划再到数据库原理、分布式数据库都有,可以挑着看,好比关系模子、数据库计划(三大范式)、数据磁盘存储和构造方式、索引、并发控制等。
 
当然了整个数据库最重要的还是索引和并发控制(锁、MVCC等),这部分也是面试常考的:

这部分保举两本书:

   这两本主要对索引、innodb存储引擎、锁、并发控制讲得比力清楚,建议挑对应章节看。
  ​九、算法和数据结构

起首须要掌握常见的数据结构:

常见的算法:

视频可以看看 :

入门版册本可以看看:

稍微进阶点的:

   这本书强烈保举,难度适中,但是全面。
  终极版:

   这个量力而行就好了。。。
保举理由是:我不保举显得没有逼格(:
  有了底子的算法思想和数据结构储备,剩下的就是刷题了:

   建议必刷
  
   建议分类刷,先易后难,好比数组、二分、二叉树、动态规划,一个一个系列搞定,总结经验,保证 150 道简朴和中等以上吧
  最重要的是,保持手感,有空就刷一道。
十、网站和视频

有些同学喜欢看视频,那我也在这里统一保举一下吧
 

   你的一站式学习网站,用你想学的关键字在这搜就完了
  
   底子课程学习
  
   一些技术课程、公开课学习
  Linux C/C++ 可以去看看黑马的,我试看过几集 IO,讲得还是不错的,就是有点慢,个人以为不如看书。
 
刷题可以看看牛客左神的视频
 
盘算机网络可以看看 B 站韩立刚大概 mooc 哈工大的
 
操作系统可以看看学堂在线上清华的《操作系统》
 
​## 保举了这么多书,从哪看起?
一、浅谈学习方法​

假如你认真看过我前面介绍每一部分的学习路线时,可以发现我特殊夸大学习抓​主线​,并且将每一个底子知识的主线给大家列出来了。
 
这里再次强推,学习新东西的时间,重点是先对团体脉络、知识结构有一个大概的映像和了解,然后捉住这个领域的主线,顺着主干,突出重点去学习。
 
集中时间,速战速决,不要将时间线拉得太长,越长可能越坚持不下去,效果越差。
 
对于细枝末节的内容,可以留到实践的时间,用到了再去查!
 
假如一头扎进零碎的知识,去看手册、字典范的书,那必然是事倍功半的。
 
细节留给实践去补充,我们的时间要花在刀刃上,注重知识的体系性和框架的创建。
​二、常见题目​

说实话,其实这些册本或多或少都被各路大神保举过,确实经典。但是大神们却很少告诉你他们是如何去看的,该怎么去看这些书,难道一本本一页页的挨着啃吗?
 
​这部分才是我本日最想说的部分,「该如何去看大厚书」。
好比我背景就经常有同学问:

这些书该怎么看,可能过来人,预备过秋招的都比力清楚,但是作为还在大二、大三的会比力懵逼。
 
就拿我当时切身经向来说,在网上搜网络编程如何学习,许多人都保举 UNP、APUE。
 
好嘛,买来看,从第一页挨着挨着看,而且书中的示例代码我大部分也照着敲了,最后看了七八章,发现始终是在学一些 socket api 和 系统 api 的用法,没摸到网络编程的框架思维。
 
反面我又去搜,看到有人保举《Linux高性能服务器编程》,去豆瓣看了下了目录,好像正是我想要的东西。
 
直接找来 PDF 开始看,果然这本书才真正让我明白了网络编程的整个套路和框架,学到了各种变乱处理模式、计时器、信号处理、线程池这些网络编程中很重要的东西。
 
当然 UNP 和 APUE 也是不能丢的,这两本书我当做了字典查询,好比学到了 IO 部分,回去看 UNP 中关于五种 IO 模子的介绍。
 
用到 connect、listen、bind 这些函数,再回去看 UNP 第四章,不得不说,UNP 关于这些 socket API 的使用和各种异常情况的处理方式都介绍得非常具体和深入,不愧是网络编程领域的圣经。
 
但是初学者看却容易在细节中迷失,抓不到纲领,这也是这类书的缺点。
 
雷同 UNP、APUE 这种书本身是面向知识体系的,而不是面向读者,它们其实更像字典,把这个领域内的全部知识,非常过细的堆叠在一起,看上去就是平铺直叙,充斥着细节,对读者极其不友好。并且书里内容着实大而全,许多根本不消学。
 
好比 UNP 讲了 sctp 这种协议用法、多播、unix 域协议这些实际用得很少的东西,挨着看不但会看不下去,而且比力浪费时间。
 
但是它们又是经典的,确实是这些领域内涵体系性和深入性上都做得非常好的书。
 
什么书才是面向读者的呢?
 
那就是捉住该领域的核心主干,提纲挈领,领导读者由浅入深,同时又有肯定的细节,看完让人茅塞顿开。
 
好比《自顶向下》、《Linux高性能服务器编程》、《Linux多线程服务端编程》、《STL源码剖析》、《Effective C++》、《CSAPP》、《程序员自我修养》等都有各自想要论述的主线在内里,看起来也是一环扣一环,非常循序渐进。
 
我的看书方法就是对于面向知识体系那种堆砌细节的书,我们先浏览目录,做到对整本书有映像,再大抵看一些我们关心的部分,好比 UNP 和 APUE 中 IO、文件、进程控制、信号、线程、线程控制、根本套接字编程 这些是比力重要的模块,别的边角知识,可以用到再去查。
 
尚有一点,许多同学反映看不懂雷同 CSAPP 如许的书,那我们都知道,任何一本书根本上都是有前置依赖的。
 
没有掌握要求的背景知识去看肯定很吃力的。
 
就好比我大一下只有底子的 C 知识和一丁点盘算机导论知识,然后屁颠屁颠的跑去看 CSAPP(学长结业摆地摊卖书我瞎买的),那时间只知道这本书被誉为神书,但是看到前两三章就蒙了,真的有点难,对于当时的我来说太底层了,根本不知道在说啥,看过也只是看过,就像天空飞过鸟儿,但没有陈迹。
 
直到厥后大三再次拿起,我才意识到这本书的巨大之处就在于将盘算机差异学科知识有机的串在了一起。那时间看,更多是一种补充、深入学习以及完满了,由于许多知识分别在数字逻辑、汇编语言、操作系统这些课程中学过了。
 
以是要明确,你看不懂不是由于你笨没天赋,而是你有前置依赖的知识没有完成,还没学会走,就想跑了。
 
一般来说,每本书的首页会介绍看这本书须要哪些前置知识,可以关注一下。
 
尚有一种看书的方法,我在复习的时间采用过,那就是横向学习。
 
好比我复习操作系统,在《操作系统:英华和计划原理》中看到了关于内存、虚拟内存的各种介绍,看完理论再去看《Linux内核计划与实现》12 章「虚拟内存」、15 章『进程地点空间』,最后再去看《CSAPP》第 9 章『虚拟内存』,如许看下来,根本上内存这块明白得比力透了,这些书关于这块的介绍是各有优缺点的,正好互补。
 
又好比在《英华与计划原理》中介绍了进程加载和链接,其实讲得比力偏理论,看完还是以为似懂非懂。
 
那我又会去《CSAPP》看第 7 章「链接」,这一章根本讲清了静态链接、目的文件、可重定位目的文件、引用剖析、加载这些关于链接的核心概念,但是一个章节讲这么多,不免不敷深入。
 
我又会去看《程序员自我修养》这本书第 4 章「静态链接」、第 6 章 「可执行文件的装载与进程」、第 7 章 「动态链接」,这本书核心主题就是链接、加载,以是这一起看下来,对于链接、加载这块根本上搞得比力透彻了,大概没几个面试官有你清楚。
 
同样索引你也能从《数据库系统概念》、《高性能MySQL》、《MySQL技术黑幕》中挑选对应的章节,串起来看,取每本书长处,如许学习真的很高效也很深入。
 
这就是我在复习的时间采用的用知识点串联,跨多本书高效精准的复习方式,效果也很不错,春招十频频面试没有一次由于这些底子知识挂过。
 
啰嗦了一大堆,就是答复这些题目的:
   “有些书看的找不到重点,看不下去了,怎么办,好比深入明白盘算机系统,UNIX 网络编程,APUE,求指教”、“我不是科班 CSAPP 可能不是全部看得懂,该怎么办?”、“大佬,这么多书看得完吗”、“刚开始看这些书很痛苦怎么办”
  ​三、要花多久时间才能学完

这个欠好说,根据你的底子和学习效率差异,好比我大一、大二对于一些底子的知识学得比力认真,底子还算可以,按照如许一套走下来也就泰半年。大概每天花四五个小时以上吧。
 
假如真的是连计网、操作系统理论如许的东西一点底子都没的话,那估计得一年以上,毕竟这些内容根本覆盖了科班的核心课程,人家上三年课,你一年办理,已经算很快了好吧。
   一年真的足够从小白学起吗?
  感觉是差不太多的,但是估计得每天付出五六小时以上了,并且学习方法得当。
 
你去牛客就会发现,存在各路大三、研一自学转码的同学,最后还能成为 offer 收割机,以是,不要猜疑一年不敷,最关键的是你要找到准确的路线,然后执行下去。
   文中保举的书真的全部要看吗?
  当然不是,我本身都没看完,但是我的战略已经说过了,根本上大部分书都看了重要的章节,如许看起来是很快的。
 
并且随着你看书越来越多,底子越来越好,你会发现每本书前面几章都是铺垫底子知识,大部分可以直接跳过,举个例子
 
《Linux高性能服务器编程》这本书前几章是如许的:

你以为这些章节在看过《自顶向下》、《TCP/IP详解》之后尚有须要看吗?我反正是半天扫过去就完了。
 
最后,不管说再多方法,再多的路线,最终都须要本身花时间去啃、去执行。
​四、语言迷惑

尚有一个许多选择 C++ 方向同学都存在的迷惑,在这里我也想解释一下:
   C++ 语言特性多,又难学,许多都是底层开发才会用到,C++ 就是个坑,是否应该转 Java、Go 呢?
  当然不是的,的确在头条、美团、阿里这种业务部分使用 Go、Java 系更多,起首还是谁人观点,校招生对于企业来说都是一张白纸,面试官观察的是你的底子知识和聪明度,来决定是否有培养潜力,语言确实不重要。
 
那你可能会说,明明各种面经上经常出现 ConcurrentHashMap、虚表、虚函数实现机制如许和语言强相关的题目。
 
在我看来啊,面试深入问一些语言实现细节,其实不是在考你语言,而是看你是否有主动钻研的意识,是不是只停留在应用的层面,同时也借语言观察一些数据结构、操作系统方面的底子知识。
 
以是呢,我以为 C/C++、Java、Go 你深入学习哪一个都可以,关键还是找对相应的学习路线,不停坚持学下去,不要每天都停留在我到底是学 Java 好还是 C++ 好如许无解的题目。
 
别的,想对学 C++ 的同学说,可能你会发现身边同学都在搞 Java、Go 之类的,找工作缺少一些一起复习预备的朋友,有些乃至劝你别学 C++。那这个时间你肯定要坚定本身的选择,多在牛客大概网上找找同方向的朋友一起交流、学习。
 
说实话,就找工作这块来说,个人以为区别真的是不大的,不管从薪资、面试难度来说都是差不太多,更多的还是算法和底子知识。
 
而且也有不少同学 Java 进腾讯须要转 C++,C++ 进阿里、美团须要转 Java 的,这都不是事儿。
   那 C++ 目前应用场景有哪些呢?
  一句话,对性能大概执行效率要求比力高的应用,好比游戏引擎、infra、保举引擎、存储等,当然也能拿来写业务(没错说的就是鹅厂),也有做 C++ 客户端开发的,主要是 MFC、QT 等。
 
说实话,像游戏引擎、infra这类都是门槛比力高的,并且雇用的数量也有限,一般人很难进,而且目前互联网公司的业务部分大多使用的是 Java、Go这类语言。
 
以是 C++ 的需求量是相比 Java、Go 这类少许多的,但是同时学习 C++ 也没 Java 那么多,以是相对来说竞争还没那么大,并且 C++ 学的不错,你同样可以去面阿里、美团这种 Java 技术栈的公司,大厂根本不会限制语言的。
十一、关注公众号,免费领取PDF学习册本~


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4