零基础C++后台开发学习路线

个人介绍:

首先介绍一下自己吧,我是一名非科班硕士,本硕某985,本科对于编程这块的学习很浅显,数据结构都没学过,基本上到了研一才开始认真学习这块知识。这篇文章实际上是我自己入门编程过程的总结,在大学期间对于c++,java等编程语言的学习比较迷茫,也走过一些弯路,比如盲目刷题,明明不懂却靠记住代码去满足自己的收获感,一路走来,踩了很多坑,下面分享一下我自己总结的学习路线,希望能够帮助到大家。

本人offer情况

猿辅导后端开发(sp);快手C++开发(sp);字节跳动后端开发;深信服C++开发(sp);intel软件开发工程师;华为软件开发;拼多多服务端开发;电信天翼云;浦发银行总行信息科技岗;中国农业银行;中兴通信;触宝科技;作业帮;709所、710;电科29所、30所等等…

后台开发包括的知识点有很多,主要包括语言基础,算法与数据结构,linux编程基础,linux内核,操作系统,计算机网络,数据库,设计模式等

语言基础

首先是推荐几本必读书籍

  • c++ primer第五版
  • C和指针
  • effective c++
  • STL源码剖析
  • 深入探索c++对象模型
  • 深入理解C++11:新特性解析与应用
    img

建议初学者在阅读c++primer的时候尽量多的完成课本的习题,可以帮助对C++语法的记忆和理解

​ 当认真看完这本书的时候相信就会对c++有一定的了解 (当时花了2个月认真的把这本书从头到尾看了一遍,感觉收获很多)

img
​ 学习c++的同学还是应该对c语言有一定的了解,在c语言中,指针是一个看起来很麻烦的东西,但也正是因为指针使c语言威力无穷,指针是一个难点,也是需要掌握的重点。

​ c和指针这本书通过对指针的基础知识和高级特性的共讨,帮助程序员将指针的强大功能融入到自己的程序中去。

img
​ EffectiveC++,这本书主要讲解了编写C++程序的过程中需要注意的一些条款,每个使用c++编程的人,都应该随时牢记这些条款,并随时贯彻这些条款,当然也是面试常考的。(如果此时认真读过了c++primer,相信这本书读起来会很快)

img
​ STL 源码剖析这本书讲解了C++底层实现,内容包括C++底层内存管理、各种容器的数据结构实现、常见算法的实现等,建议列为必读,可以帮助深入理解C++底层,同时也是对数据结构的复习和巩固。其中也有很多面试常考的知识点,如内存池的机制、traits技法、一些常用容器的底层数据结构等。(当然建议读这本书之前把数据结构好好看看,否则这本书会很难看懂)

img
​ **深度探索C++对象模型这本书讲解了C++面向对象特性的底层实现机制,**看完对于构造,析构,还有虚函数机制从编译器的角度有了一定的了解。对于一些问题有了更清晰的认识,而不是像以前只有表面认识,如构造函数析构函数中调用虚函数,构造函数能不能是虚函数,为什么析构函数一般定义为虚函数,拷贝构造函数,拷贝赋值运算符,默认构造函数等等

​ 建议多看几遍加深理解,这个基本是C++必问的知识点。看完这本书,对C++面向对象的理解帮助极大,建议必读。

img
深入理解C++11:新特性解析与应用

C++11常用新特性是C++面试中不可避免会被问到的重点问题,这本书详细地介绍了C++11新特性原理、实现及应用,非常值得研究,看完你会发现,C++真是博大精深,强烈推荐!

​ 在现有的比较流行的编程语言中,c++应该算是比较难学的,需要一定的时间去努力钻研,但相信读完这五本书后会对c++的理解会加深很多,而且学好c++以后对于其他语言的学习也会有很大的帮助(比如java,python等)。

​ 当然有兴趣的同学可以看看以下几本书加深对c++的理解

  • C++标准库
  • c++ template
  • c++编程思想

算法与数据结构

​ 数据结构与算法是程序的灵魂,是朴素的基础,学好它有助于理解各种上层抽象。在没有充分学习和理解数据结构与算法的基础上去学习面向对象、设计模式,是无法真正体会这些上层抽象的真正意义的,最终可能会导致学之泛泛,用之泛泛。

​ 对于教材推荐用数据结构(作者: 邓俊辉出版社: 清华大学出版社)

img

​ 这个可以当作课本学习,内容比较齐全,建议学习数据结构的过程中多动手写代码,因此推荐一本王道数据结构,作为配套的习题。这本书是考研用书,内容精炼,习题难度适中,初学者可以做上面的习题来巩固自己所学的数据结构知识。
​ 对于一些比较难懂的算法,比如红黑树,动态规划,回溯法,Dijkstra算法,Bellman-Ford算法,Floyd算法和SPFA算法等可以查看这本算法导论。

img
另外还有一本《大话数据结构》,这本书还有姊妹篇《大话数据库》、《大话设计模式》用非常通俗诙谐的语言解释复杂的数据结构及算法。

img
当然左神的《程序员代码面试指南》也是必不可少的,这本书的内容建议全部吃透,牛客上也有左神的算法课程,可以根据需要购买。现在牛客上也出了左神书中题目的在线编程题,可以去刷一刷。

**img

操作系统理论

操作系统理论部分的学习推荐以下三本书

  • 计算机操作系统(西电版)

  • 深入理解计算机系统

  • 程序员的自我修养

img
​ 建议可以以推荐的第一本书作为教材去学习,不懂的话可以看看深入理解计算机系统,相信第一本书的知识就很齐全了。

img
​ 程序员的自我修养介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,通过阅读这本书可以加深对底层的理解。

img

计算机网络理论

对于计算机理论部分的学习,推荐以下两本书

  • 计算机网络 第7版(谢希仁)
  • TCP/IP详解 (卷1)

​ 学习网络,可以先看谢希仁写的计算机网络这本书,讲解通俗易懂,可以让读者快速入门。前面的物理层和链路层可以快速看,了 解基本原理,有个大概印象即可,重点学习网络层、运输层和应用层,其中传输层的TCP和UDP是面试最常考的,非常重要。网络的知识比较容易理解,但是知识点比较繁杂,一段时间不看就很容易忘记,建议学习之后将各个知识点整理成文档或者笔记,有助于找工作前复习。

​ 学完计算机网络,可以基本建立计算机网络的知识体系,但是这本书深度不够,建议继续学习TCP/IP详解 卷1,作为对TCP/IP协议的深入,这本书讲解非常细致,看的过程中很容易陷入细节,对整本书系统学习的话比较花时间,如果时间有限的话,可以先选择性地学习一些章节,建议先将运输层的内容看完,有助于对TCP和UDP的深入理解,其他层的内容可以根据个人情况选择性的学习。

Linux系统编程和linux网络编程

对于linux部分的学习,推荐以下几本书

  • linux鸟哥私房菜(用于了解Linux基本命令)
  • unix环境高级编程(APUE)
  • unix网络编程卷1(unp)
  • TCP/IP网络编程(网络编程基础)
  • Linux内核设计与实现第三版
  • Linux高性能服务器编程
    ​ linux基础:鸟哥私房菜,用于了解基本概念和常用linux命令,可以不通读,选着看。

​ linux系统编程:首推当然是《unix环境高级编程》(APUE),如果你把这本书吃透,那肯定是没问题。但是这本书毕竟太厚了,我建议把它当作一本工具书来查阅。

​ linux网络编程:首推《unix网络编程》(UNP),同样是一本大部头书,分三卷。
APUE和UNP这两本大部头书,确实非常值得研究,不过如果精力不够的话,linux系统编程可以去B站找个视频看一看,网络编程的话,推荐《TCP/IP网络编程》这本书,基本上几天就能看完,把上面代码全部敲一遍就基本入门了

**img
​ linux内核:强推《Linux内核设计与实现》,相比于Linux内核源码剖析,这本书对于初学者来说更为友好和精炼一些,很少设计到具体的代码,主要从大的方向来讲解linux各个模块的设计,对于理清楚linux框架和整个大的思路很有帮助。本书基于linux2.6内核详细描述的主要内容包括:进程管理、调度、时间管理和定时器、系统调用接口、内存寻址、内存管理、页缓存、VFS、内核同步、可移植性、调试技术等。此外,本书还讨论了Linux 2.6颇具特色的内容,包括CFS调度程序、抢占式内核、块I/O层以及I/O调度程序。

提升篇:

​ 游双的《Linux高性能服务器编程》强烈推荐,全是干货。内容比较全面,分为3个部分:第一部分对Linux服务器编程的核心基础——TCP/IP协议进行了深入的解读和阐述,包括TCP/IP协议族、TCP/IP协议,以及一个经典的TCP/IP通信案例;第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多线程编程、进程池和线程池等内容,原理、技术与方法并重;第三部分从侧重实战的角度讲解了高性能服务器的优化与监测,包含服务器的调制、调试和测试,以及各种实用系统监测工具的使用等内容。基本涵盖了整个网络编程的所有内容,学习完基础再来看这本书,一定会有大有收获的。

img
推荐两个源代码学习TinyHttp和陈硕老师muduo基础网络库

  • TinyHttp是一个超微型http服务器,分析这段源码前,需要对网络协议,Unix编程,以及HTTP有一定的了解,它采用c语言编写,直接采用的是linux的socket接口编写的,可以更加底层的让读者明白一个浏览器的请求是如何被http server响应的。
  • muduo是陈硕老师编写的基于Reactor模式的C++网络库,采用基于对象的方法编写的一套基础网络库。muduo将网络通信的每个过程抽象为c++对象,大量采用了c++11标准和stl来进行实现,书中还采用了较多的设计模式,这对于我们将知识融汇贯通都非常有帮助。最重要的是网上关于muduo的学习视频和资料都有很多!链接:https://pan.baidu.com/s/1KnCB8A6HFY8DXySVXGpglg 提取码:lv41

对于数据结构、计算机网络、操作系统、计算机组成原理,这四门是计算机专业必修的专业课程,也是非常重要的基础课程,也是计算机考研专业课所考内容。王道推出的考研书籍和视频课程值得一看。最后再推荐两本书:

  • 《后台开发 核心技术与应用实践》值得推荐,是腾讯某工程师所著,这本书有点东拼西凑的意思,其实也是这位工程师心中所认为C++后台开发必备的技能和基础知识,干货还是很多的,可以浏览一下。
  • 《王道程序员面试宝典》,王道出品,必须的是精品,全是干货

数据库和设计模式

对于数据库和设计模式主要推荐以下几本书

  • *数据库系统概念*
  • mysql必知必会
  • Redis设计与实现
  • 大话设计模式

​ 在面试中,数据库一般问的不多,但建议还是要掌握,可以先看看数据库系统概念,了解数据库的基础知识,同时学习mysql必知必会熟悉数据库的基本操作,如果时间充裕的话最好看看Redis****设计与实现,这也是面试中经常被问的。
​ 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的,因此如果没有机会接触大型项目的话,很难锻炼这方面的能力,建议对于校招而言,在设计模式这块的学习可以作为知识点的扩展学习,大话设计模式这本书。以情景对话的形式,用多个小故事或编程示例来组织讲解23个设计模式,可以作为学习主要的教材。
总结
​ 接着说一下c++和java工作岗位需求的问题,目前Java岗确实远多于C++岗。但从简历数量来说,Java的简历是远远多于C++,也从另一方面反映出C++岗其实竞争比Java岗小很多。

​ **由于c++语言本身就属于比较难学的语言,入门所花的时间比java/python这些语言更长,万事开头难,建议大家认真先把语言基础和数据结构学好,相信对这两方面有一定了解后就会对c++开发这条路充满信心,同时也能为后面的学习打下基础。只要大家耐住寂寞,*坚定目标,*努力耕耘,静下心来学习积累,相信最终都能取得满意的结果。

关注微信公众号,回复“C++电子书”可以获得以上电子书资料哟!赶快关注吧!
在这里插入图片描述

发布了27 篇原创文章 · 获赞 70 · 访问量 9396

猜你喜欢

转载自blog.csdn.net/qq_23905237/article/details/104902660