转自--程序员吴师兄
关注他
661 人赞同了该文章
GitHub,永远滴神!
首先分享一个最近在 GitHub 特火的一个 C++ 项目:C++ 快速入门指南。
地址:https://github.com/Light-City/CPlusPlusThings
这是一个适合初学者从入门到进阶的仓库。
这个开源项目的作者是一名研一才接触 C++ 的同学,目前已经拿到了鹅厂后台开发的 offer。
一开始他只是在 GitHub 上建立「C++ 那些事」只是作为自己的学习笔记。但没想到,两年内,这个项目受到越来越多人的追捧,并在本月初登上了热榜,于是他对整个项目的结构做了梳理规划,细分出了「基础」、「进阶」、「实战」板块,并将所有代码开源供大家学习,此外还专门为这个项目做了网站。
地址:https://light-city.club/sc/
它可以帮助初学者了解如何入门 C++,也可以帮助面试者如何深入 C++。
整个项目包括从入门到就业的全部环节,称得上是保姆式的编程指南。
我觉得这个项目是最符合题主要求的一个项目了。
说个题外话,想进大厂少不了学习算法,我写了三百篇算法题解,在 GitHub 上收获了 63k 的star,关于如何刷题有些话我想对你说。
写了三百篇算法题解,关于如何刷题有些话我想对你说mp.weixin.qq.com/s/Fc6_EfODhiqoQZ5AYLiuRA
我的不少粉丝拿到腾讯字节快手offer,因为用了这套算法刷题笔记:
BAT大佬写的Leetcode刷题笔记,看完秒杀80%的算法题!mp.weixin.qq.com/s?__biz=MzA3NzM0NzMxMA==&mid=100000618&idx=1&sn=756944c7216c7636d1b229bb010d553b&chksm=1f5223eb2825aafd5713d2fbf49b84bc26db6e99c5e69228301a544d3d6c9093f82e3b1e1e27#rd
推荐我自己搭建的一个不错的算法学习网站,讲解视频短,每个视频都精心规划过,全部都有动画过程,争取五分钟讲清楚。
AlgoMooc-一个专属于程序员的平台,和大家一起刷题www.algomooc.com
参考来源: https://mp.weixin.qq.com/s/bzE9NVkYxA5qq9T-l28j5g
作者:CodeSheep
C++主要还是做后台(服务端)开发比较多,包括:
通信公司后台开发
互联网公司后台开发
游戏公司后台开发
……
当然这个后台开发具体职责又有很多细分,比如:
有做数据处理和分析的
有做基础协议和通信的
有做服务端底层应用优化的
甚至还有做后台系统驱动和内核的
……
不管怎样,下面即将要介绍的这些学习路线和内容适用于以上所有情况。
C++和C语言确实是不同的语言,但是C++确实是对C语言的延伸,可以理解为在C语言里加入了面向对象的特性。因为只有面向对象特性的加持,代码才能更好的复用、扩展和工程化,这是大型项目的必备要素
除了C语言所有的底子之外,还需要学习C++的面向对象(封装、继承与多态)特性、泛型、模板、STL等等
推荐书籍(有先后顺序):《C++ Primer》、《Effective C++》、《C++ 标准程序库》、《STL源码剖析》《深度探索C++对象模型》
补充一个小建议:语言部分的学习建议不要拖太久,一定要规划好时间,一鼓作气,高强度给它压下来,否则容易把自己拖泄气。
基础四大件包括:数据结构和算法、计算机网络、操作系统、设计模式
这跟学什么编程语言、后续从事什么编程方向均无关,只要做编程开发,这四个计算机基础就无法避开。可以这么说,这基础四大件真的比编程语言重要!!!
具体介绍可以看我之前写的一篇回答。
计算机基础知识对程序员来说有多重要?897 赞同 · 29 评论回答
这部分会涉及到一些工具、编程环境、和具体编程实践,应该说这一部分学完,自己应该能做点东西出来、或者说能看懂一些实际项目的代码。
实践这部分,我也是结合我之前在通信公司的实际工作经历和所听所见,来聊一聊。
1、Linux操作系统的使用
很多人初学C语言、C++(包括我)都是在Windows环境上进行的,而实际企业级开发几乎不可能,所以Linux系统必须要会,我们别无选择。先谈使用。
包括:常见的Linux操作命令、基本的Shell编程。
推荐书籍:《鸟哥的Linux私房菜》
2、编译/调试工具
首先是跟编译相关的:编译工具!
我们知道很多人学C语言、C++都在类似Visual Studio这种集成IDE里进行代码编译,这个其实也用了编译器,只不过是微软自家的MS编译器,而且所有操作均可视化。而企业里开发很少会基于Windows系统,所以Linux平台上的编译器更为重要,最典型的当属 GCC,甚至有些公司有自己定制过的交叉编译工具,但没关系,只要 GCC熟悉,其他问题都不大。
其次,大家自学C语言、C++,都借助类似VS这种IDE,点按钮即可对源文件编译。而企业里实际项目的编译动作叫 make,编译的实际动作和过程都是写在 makefile文件里,所以makefile的书写规则建议学习!
最后说到调试工具,Linux平台上的 GDB调试工具要熟练使用,会借助于它进行调试。
推荐资料: 这部分没有书可推荐,英文好的同学可以直接看 GNU官网关于 GCC和 GDB的文档,中文材料可以看:《debuging with gdb》(中文版)和陈皓先生的《跟我一起写makefile》
3、Linux环境编程
还是那句话,企业里C语言和C++几乎都是基于Linux平台的,这一部分我们没办法避开
(1)Linux系统编程
众所周知,Windows系统编程里有各种各样的Windows API,同理Linux系统API的使用就更加重要。
(2)多线程编程
此处指的是多线程编程实践相关的东西,一般包括:线程、资源、信号、同步、互斥、锁等等一些具体的编程方法。
(3)网络编程
此处的网络编程主要指的是具体Linux系统上的网络编程 API和 IO函数的编程实践。
推荐书籍:这三部分综合在一起,推荐必看书籍包括《Unix环境高级编程》、《Linux高性能服务器编程》、《POSIX多线程程序设计》
下载链接:链接: https://pan.baidu.com/s/1MrfDkPF9aaoRTT3jL60bYw 密码: ufh5
手册类:
《C++程序设计语言(The C++ Programming Language)》
《C++标准程序库(C++ Standard Library Tutorial and Reference) 》
《The C++ IO Streams and Locales》
《The C++ Standard (INCITS/ISO/IEC 14882-2011)》
《Overview of the New C++ (C++11/14) 》
《The Standard C Library》
初级:
《C++ Primer》
《Accelerated C++》
《C++编程思想(Thinking in C++) 》
《C++程序设计原理与实践 (Programming: Principles and Practice Using C++ )》
《C++初学者指南》
《C++ Primer Plus》
《Visual.C++.2008入门经典》
《面向对象程序设计—C++语言描述》
《数据结构(C++语言版)第三版_邓俊辉》
实用:
《Effective C++ 》
《Effective STL》
《深入浅出设计模式》
《设计模式:可复用面向对象软件的基础》
《HeadFirst设计模式》
《大话设计模式》
中级:
《More Effective C++ 》
《Exceptional C++ 》
《More Exceptional C++》
《Exceptional C++ Style》
《C++编程规范(C++ Coding Standards) 》
《C++ 模板完全指南(C++ Templates: The Complete Guide)》
《Beyond the C++ Standard Library(Boost)》
《C和C++安全编码》
《深入理解C++11》
高级:
《C++设计新思维-泛型编程与设计模式之应用(Modern C++ Design ) 》
《C++模板元编程(C++ Template Metaprogramming)》
《C++ Concurrency In Action》
《Advanced c++ Programming Styles and Idioms 》
《Real-Time C++ Efficient Object-Oriented and Template Microcontroller Programming》
《Advanced_Metaprogramming_in_Classic_C 》
经典古老:
《C++的设计与演化(The Design and Evolution of C++ )》
《C++沉思录(Ruminations on C++) 》
《大规模C++程序设计(Large Scale C++ Software Design)》
《深度探索C++对象模型 (Inside the C++ Object Model )》
计算机网路:
《TCP/IP卷一》
《计算机网络:自顶向下》
《图解HTTP和图解TCP/IP》
《计算机网络》
操作系统:
《深入理解计算机系统》
《现代操作系统》
《Linux内核设计与实现》
《Unix网络编程》
数据结构与算法:
《算法导论》
《数据结构与算法(Java版)》
《算法图解》《啊哈算法》
《剑指offer》
LeetCode教科书式刷题网站
数据库:
《数据库原理》
《SQL必知必会》
《深入浅出MySQL》
《MySQL技术内幕:innodb存储引擎》
《高性能Mysql》
《Redis实战》
《Redis设计与实现》
分布式:
《分布式应用》
《大型网站技术架构》
《大型分布式网站架构设计与实践》
《分布式服务框架原理与实践》
《大型网站系统与Java中间件开发实践》
《从Paxos到Zookeeper分布式一致性原理与实践》
《大规模分布式存储系统》
云计算:
《OpenStack设计与实现》
《docker入门与实践》
《Kubenetes权威指南》
大数据:
《大数据技术原理与应用》
《Hadoop实战》
《Hadoop权威指南》