Giter Club home page Giter Club logo

learning-route's Introduction

c++后端学习路线

一、前言

​ 我认为c++是一门伟大的语言,他的前身c语言也是一门对整个计算机发展做出了卓越贡献的一门语言,但这也使得c++的历史包袱有点重,他的语言特性较为复杂,是一门不好学的语言。但如果能运用得当,他又是一门开发利器,零成本的抽象和极快的运行效率使得c++编写高性能软件具有得天独厚的优势。

​ 我写这条学习路线的目的也是因为,我在初学c++时踩了很多的坑,也走了很多的弯路,在初期浪费了很多时间,我希望这条学习路线能帮助后面的人能更好的入门c++,少走弯路。

二、学习方法

​ 每个人的学习方法都各不相同,我后面的学习路线都是书籍和视频相结合的,我个人也建议不要上来就啃书,上来就看书的话可能会觉得枯燥而且容易抓不住重点,但后期应把精力逐渐放到书籍上,因为视频里的内容都是老师们将知识变成通俗易懂的语言来让我们听懂,我们同样需要去书中领略一下知识本来的面目,视频相比于书籍,肯定有信息缺失,读一本好的书籍不仅是知识层面的传递,也是**与方法论的传递,还可以让你的好高骛远的心一点点抚平。好的书籍是经得住推敲的,你隔一段时间多看一遍就会又有新的收获,我平时是将书籍当做课后巩固反复观看和资料查询的物品。当然我提到的每个视频在后面我都会附上链接,如果视频的在线观看连接失效了,也可以去分享的百度链接里找,可自行取用。

​ 视频部分我分为两类,一类是理论视频,一类是实战视频。实战视频一定要跟着内容敲,每一个优秀项目的书写规范都很值得我们去剖析和思考,通过实战视频我希望你们也能养成良好的代码书写规范,一个真正的大牛他看别人的代码不一定能看懂,但别人看大牛的代码就很容易看懂。理论类视频我建议结合者书籍来做笔记,因为c++的知识量是很庞大的,而且很多知识点在学习初期是很少能结合到项目中的,如果只靠脑袋记得话很容易就忘记了。

​ 如果觉得看某个视频看不下去,不要硬看,我推荐的不一定适合任何人,一定要好好利用好B站这个平台,里面的学习资源相当丰富,找同类型的视频,直到找到适合自己的去看。把哔哩哔哩叫做B站大学也不是没有道理。

三、路线

第一阶段:入门

​ 第一阶段就是积累一下c++的基础知识,能熟练掌握c++面向对象的特性,还有c++的新标准和stl和泛型编程。这个阶段我是不建议直接去看那厚厚的书的,可以将书作为辅助物品,与书品内容相结合去记笔记

​ 如果是编程小白,没有编程语言的基础,我推荐优先去学习一下小甲鱼的C语言课程,让你有一些语言基础,提醒一下小甲鱼的讲课方式比较逗比,爱开车,如果不适应的话我也推荐去听一下郝斌老师的C语言课程,了解一下C/C++的指针这个强大利器。如果已经有一些语言基础的可以跳过C语言的学习,直接去学习黑马的C++课程,这个阶段我推荐的书就是《C++ Primer 第五版》,这本书适合已经有了一些编程语言基础的人去看

​ 这个阶段主要是让你对c++编程有初步的了解,为后面打下基础

郝斌C语言:https://www.bilibili.com/video/BV1os411h77o?from=search&seid=13772202421959055259

小甲鱼C语言:https://www.bilibili.com/video/BV17s411N78s

黑马C++:https://www.bilibili.com/video/BV1et411b73Z

第二阶段:打基础

​ 这第二阶段就开始真正的去了解C++了,这是时间最长的一个阶段,也是最重要得一个阶段,有了第一阶段对编程语言的了解,现在开始就可以去了解C++的优秀特性了,并为后面写项目打下基础。

​ 同时你需要了解Linux,因为C++后端程序几乎都是在Linux环境下编写并运行的,C++不像java这类语言将程序编译成字节码,然后通过虚拟机去翻译成二进制去运行,写一个程序就能随便在任意平台运行,C++的程序需要通过编译器直接翻译成二进制去运行到操作系统上,这也是C++的运行效率高的原因之一,所以window或Mac和linux上的程序稍微有些不同。这一阶段,我强烈建议强迫自己去适应在Linux环境下去开发程序,不一定要去对着黑框框一样的终端开发,你可以用一些带远程连接功能的编辑器去远程连接Linux去开发,目的是让你了解和熟悉C++程序在Linux的开发方式和运行逻辑,不需要去了解太多,只需了解一些Linux的基础命令和C++程序如何编译,越早熟悉Linux越好,Linux的入门我推荐一门视频。

​ 视频是黑马的linux系统编程,在这个阶段,你只需要看前82集即可,后续的课程我安排后后面的阶段看,对Linux和Linux下C++编程有个初步的认识和理解,视频中用过的每一个命令都要跟着敲下来,Linux的各种命令不是记下来的,因为他实在是太多了,纯粹是靠敲过了无数次形成的记忆,不要嫌慢嫌麻烦,这个阶段就是这样的,为了后面打基础。

​ Linux基础看完之后,就开始真正深入了解C++了,首先就是要了解C++的新特性,C++11里面有很多对开发帮助非常大的优秀特性,现在的很多新项目都是基于C++11开发的,然后就是C++STL的深度剖析了,这里我推荐侯捷老师的三门课程:STL泛型编程、C++11新特性、C++内存管理,侯捷老师的课在C++中是非常出名的,但讲的也比较深奥,所以STL部分的视频我推荐结合着《STL源码剖析》本书去看,C++11特性视频结合着《C++ Primer 第五版》这本书的C++11特性部分的章节去理解。然后在推荐一本《Effective C++》,这本书也是由侯捷老师翻译的,它并不是一本读一遍就够的书,也不是一本遇到问题就翻看的参考书,而是一本值得反复观看的书籍。

黑马Linux: https://www.bilibili.com/video/BV1KE411q7ee/?share_source=copy_web&vd_source=22890d8b67b5a87f5d99cc7f372915f1

侯捷C++:https://pan.baidu.com/s/18t-HIzbkmRZcPZ-cZ-TV2g?pwd=7rgg

第三阶段:编程核心

​ 必须了解的一点的是,从事技术岗的同学都需要好好掌握&学习计算机基本功,不管是前端还是后端,不管是Java还是C++,或者是JavaScript、Golang、Python等语言,都需要学习这几门基本功。因为计算机校园招聘主要以考察学生潜力为主,不会过多要求即战力,会看你的基本功扎实与否,所以某种程度上是需要夯实自己的计算机基本功的!计算机基本功,也就是被称作是计算机内功的四大门:操作系统、计算机网络、数据结构与算法、数据库。很多人都以为学Java就只是学习Java这一门语言即可,学习C++就只需要学习C++就可以,根本不需要去学习别的科目,这是万万不对的!而且这四门基础课也是学校里的必修课,是无论如何都逃不掉的。

​ 同时,为了后面实战打基础,我推荐学习一下黑马的设计模式,数据结构与算法的视频我推荐王卓老师的课程,讲的很清楚明白,操作系统我推荐清华大学的陈老师,推荐的主要原因是,他的课程章节安排与现在大学的安排基本一致,计算机网络的视频我还没有系统看过,我咨询了我身边的小伙伴,他们推荐这门韩立波老师的课程,至于数据库我推荐尚硅谷的mysql入门到高级开发,不仅讲了mysql的基础使用,还讲了数据库优化和引擎,是一门涵盖全面的不错课程。

​ 这一阶段是对一个程序员最重要的阶段,他决定了你以后的上限,一定要认真观看。

黑马设计模式:https://www.bilibili.com/video/BV1Mb411t7ut

王卓老师数据结构预算法:https://www.bilibili.com/video/BV1nJ411V7bd

陈老师操作系统:https://www.bilibili.com/video/BV1uW411f72n

韩立波老师计算机网络:https://www.bilibili.com/video/BV1Qr4y1N7cH

尚硅谷数据库:https://www.bilibili.com/video/BV1KW411u7vy

第四阶段:Linux阶段

​ Linux开发可以说是每个C++后台开发程序员必学的,如今后台的程序都是跑在linux上的,不懂linux是完全不合格的,这一阶段首先是要把第二阶段推荐的黑马Linux看完,学完这门课程可以让你了解到linux的方方面面,会接触到ssh,网络编程,系统编程,shell脚本编写等,几乎都是一个后端开发必备的。内容涵盖相当全面。当然,如果黑马的视频如果不适合你,我还推荐你可以看看牛客网的Linux C/C++服务器的开发,内容基本和黑马的差不多,该讲的内容里面基本都涉及到了。

​ 学完Linux的基础后就可以开始学习Linux网络编程了,后台开发工程师无时无刻不和网络打交道,学好linux平台下的网络编程,摸清楚linux网络协议栈的脾气是非常重要的,这个阶段我推荐两本书,学习C/C++ Linux相关的网络编程,必看的两本书分别是《TCP/IP 网络编程》和《Linux高性能服务端编程》,前者是本很好的书,原因就是手把手教你写代码,这是真的手把手教你写代码。唯一不好的点就是书中的很多知识讲的太浅了,很多功能和原理都只是一笔带过,不如《Linux高性能服务端编程》讲的深。

​ 这一阶段学完网络编程后才是真正的可以做正经的实战项目,我推荐写一个实战项目比如web服务器来加深自己对网络编程的理解的认识,推荐跟着牛客网的Linux C/C++服务器的开发的第五章的webserver实战教程去写,里面也详细讲解了HTTP协议的应用。

黑马Linux: https://www.bilibili.com/video/BV1KE411q7ee/?share_source=copy_web&vd_source=22890d8b67b5a87f5d99cc7f372915f1

牛客Linux服务器开发:https://www.nowcoder.com/study/live/504

第五阶段:提升

​ 这个阶段我推荐的课程是陈硕的网络编程实践课,这个课程讲述了在linux下进行网络编程的注意事项,强烈推荐,这个视频初期是围绕着C++的一个网络库:Muduo网络库讲的,同时这个视频作者也写了一本书《Linux多线程服务端编程:使用muduo c++网络库》,这本书我觉得可以反复观看,每一次观看都能有新的收获。开始我希望你能用Muduo写一个服务器项目,可以是聊天服务器,也可以是web服务器,了解muduo库的基本使用。最后我要求你能掌握muduo库源码,muduo是一个传统的基于事件回调的网络库,核心代码只有5000行,性能很高,非常适合新手学习,需要至少通读一遍muduo源码并理解。

*陈硕Linux网络编程:链接:https://pan.baidu.com/s/102o2lJYSeySGKoG_yLVngg?pwd=8klz *

​ 同时为了面试,你同样需要准备一些项目经历,第四阶段说的webserver可以算一个,但是提到C++面试项目就是webserver,总感觉有点烂大街,所以我再推荐几个练手项目,难度从低到高。C++是一门更加贴近底层的语言,不像java那样能快速搭建一个类似于电商系统这样的项目,大部分情况下C++更适合拿来做组件、库等底层组件。

​ 1、实现一个多线程网络服务器https://github.com/youcaiguai/NetServer ,本项目为C++11编写的基于『epoll』的多线程网络服务器框架,应用层实现了简单的HTTP服务器HttpServer和一个回显服务器EchoServer,其中『HTTP』服务器实现了HTTP的解析和get方法请求,目前支持静态资源访问,支持HTTP长连接;该框架不限于这两类服务器,用户可根据需要编写应用层服务。通过该项目你可以了解到部分C++11的语法和编码规范、学习巩固网络编程、网络IO模型、多线程、git使用、Linux命令、性能分析、TCP/IP、HTTP协议等知识。

​ 2、实现分布式网络通信框架-RPChttps://ke.qq.com/course/2261773#term_id=103626435 , 这个项目是基于muduo网络库实现的分布式rpc网络通信,通过这个项目让你了解分布式的概念,RPC通信原理,了解集群式服务器和分布式微服务区别,和分布式微服务优点。

​ 3、重写muduo网络库,看完陈硕大师的网络编程实战课和多线程编程书籍之后,相信你已经对网络编程有了一定的理解,在之前使用muduo是你应该发现了,muduo需要依赖boost库才能使用,而他里面用到的boost的特性,其实C++11里都有,所以希望你能结合C++11的语法和规范,重新实现一下muduo网络库,将其变成独属于自己的网络库,熟练掌握回调机制的服务器编写。

​ 4、从0开始手把手教你做的服务器框架,这个项目算是比较难的一个项目了,是一个高性能分布式服务器框架 的项目,是那种新手不建议尝试的难度,他将服务器的几个模块都手写出来了,分别是日志模块、配置模块、线程模块、协程模块、协程调度模块、IO协程调度模块、Hook模块、Socket模块、ByteArray序列化模块、TcpServer模块、Stream模块、HTTP模块、Servlet模块。这个项目建议是已经研究过几个简单框架的人再去研究这个项目,不然会比较吃力。

B站视频教程:https://www.bilibili.com/video/av53602631

服务器框架源码:https://github.com/sylar-yin/sylar

结语

​ 至此,你已经算是踏进了c++后台开发的门槛,往后就是需要看面经和刷题来去进行面试的准备,同时之前提到的重点书籍,也要反复观看。这条路线,我只列出了C++开发最基本的东西,还有很多额外的技术能力自己去按需掌握,比如redis呀、分布式呀、Nginx呀、docker等等相关技术能力。

​ 好的 C++开发者从来不怕找不到工作,即使你日后从事 Java/Go的工作,由于语言的原理都是相通的,所以你的学习成本会比别人小的多。

C++是世界上最好的语言!!!

C++天下第一!!!

learning-route's People

Contributors

theworlllllllld avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.