• Stars
    star
    157
  • Rank 238,399 (Top 5 %)
  • Language
    C
  • License
    MIT License
  • Created over 3 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Linux C/C++ 学习笔记、内含视频 + 电子书 + 项目等,专注于 C++ 技术栈!

programming-cpp

“programming-cpp”,中文意思为“编程 C++”,“C++”是这个仓库的核心含义,此处只写 C++ 相关技术栈,是一个关于“C++”的 github 仓库,在线阅读:Linux C/C++学习笔记汇总

本 github 专栏主要记录我大学期间,一路摸索 C++ 学习路线,以及个人 C++ 学习笔记、相关项目,特此分享出来,希望能帮助到大家。

C++、Java、Go 作为后台开发三大语言,从学习难度、以及校招、社招上来看,C++ 并不具备任何优势,虽然大学期间我走的是 Linux C/C++ 路线,以及校招也是 C++ 技术栈去面试,C++ 方向在面试中更加偏向底层,以及对算法要求能力更高,但是希望大家想清楚了,在决定是否要选择这门语言作为校招/社招求职技术栈,以及个人职业生涯的起点。

对于后台开发方向,一定要有一门语言深入掌握,根据我对校招/社招岗位需求,以及自身一路走来的判断:

  • Java:建议
  • C++/Go:不建议、不排斥
  • Python/PHP:不建议

C++ 方向

一、要不要选择 C++

对于方向的抉择,很多人都选择了 Java 或者 Python 方向,Java 或者 Python 方向确实学的人多,岗位需求很多,入门能比 Linux C/C++ 方向容易一些,但是往深了学,各有各的难度,先敲定了方向,再深入学习。

Linux C/C++ 方向,国内真正掌握的人,其实是极少数,这个方向的学习人数也是相对比较少的,入门一般首选 C 语言或者 Python,C、C++ 在编程排行榜也是经久不衰的,排名靠前,如果喜欢,有兴趣,走这个方向是可以的。

Linux C/C++ 方向,国内很多大公司都有招聘这个方向的岗位,BAT 都有,尤其腾讯,底层架构都是 C++ 写的,百度核心搜索很多模块也是 C++ 写的,阿里云也在招聘 C++ 方向的工程师,这个方向,学的不错的,根本不用担心找工作的问题,学的一般的,其实就比较难找了。

Linux C/C++ 的效率是比 Java、Python 快一些的,更偏向于底层,能直接操作内存,对于编程思维、逻辑能力的提升是有帮助的;其实学习这个方向,是有一点枯燥的,不像 Python 爬虫、Java、前端能做出一些有趣的东西,小程序开发出一些产品,都能很快用于实战,获得编程的乐趣,进一步刺激自己学习。

C++ 方向没有那么多有趣的东西可以做,在很长的一段时间内,要靠自己的兴趣去坚持学习。

二、C++ 选择经历

2.1、上

我在大三的时候,用 C++ 写过五子棋、内存监控工具、压缩工具、以及实现一些比较复杂的数据结构,实现网络编程的并发模型;当你学习 Linux C/C++ 方向到一定程度的时候,你会找到这个方向的乐趣,跟其他方向完全不一样的乐趣,不过,前期真的很难,有一段时间极其痛苦,是要经过很长一段时间的学习,才能有一定的效果,如果对这个方向,真的没有啥兴趣,最好选择走前端、Java、Python 等是最好的选择。

Linux C/C++ 方向,入门稍微难一点,一旦选择了要走 C++ 方向的,在心态上面,要做好准备,一定不能有畏难心里,做好接触底层、复杂逻辑的分析、以及具备面向过程 + 面向对象的思想;就是退一步讲,我学习了 Linux C/C++ 方向,具备了编程思维和熟悉了 C++ 语言,以后去公司上班了,也能很快的上手 Java、Python 等方向(我说的上手指的是语言基础很快的学习,要想深入,还得花大把的时间)。

按照目前身边人找工作的情况,普遍来说,Java、Python、前端、数据分析、测试方向都要比 C++ 好找一些,更容易找到工作,虽然我是走的 Linux C/C++ 方向,但是对于对底层没有兴趣,对 C 语言没有兴趣的人,不建议走这个方向。

2.2、下

我一路走过来,真的很痛苦,在校期间都想过放弃这个方向,曾经想学个 Java 可能会好一些(身边学习 Java 的人还是挺多的),每当快放弃的时候,又想到都学了这么长时间了,再坚持坚持,就这样一路走过来了;我是觉得自己真的挺幸运的,有时候,真的不一定非要头铁 C++ 方向,要看整个市场行情,顺势而为,选择好方向,在深入!

对于 Java 还是 C++ 方向的选择,没有哪个方向一定好找工作,没有哪个方向一定工资待遇高,互联网这行,尤其是靠技术说话的,这些都取决于你自身的技术能力。

选择走 C++ 方向的,一定要走 Linux C/C++,面向网络编程,学会 Linux 至关重要!

大厂特别喜欢考察计算机基础知识,对于基础掌握的如何,在很大程度上将决定你是否能进入大厂,一定要重视基础知识的学习;秋招准备:基础 + 算法 + 项目,加上自己的方向(C++、Java、Python、前端等),其中每个环节都得准备到位,才能最大程度上拿到大厂 offer,意识很重要,有了意识,再看具体的学习路线。

个人履历

普通本科毕业,非科班学生,在校一路自学编程、摸索打法,实习过腾讯、百度,秋招拿到过 BAT、美团、京东、商汤科技等大厂 offer,毕业在 BAT 大厂搬砖。

  • 2014.9 - 2018.6 普通一本,非科班学生
  • 2017.7 - 2017.9 腾讯暑期实习,并转正留用
  • 2017.9 秋招,拿到过 BAT 美团 京东等大厂 offer
  • 2018.1 - 2018.3 百度入职前实习
  • 2018.7 毕业入职 BAT 大厂搬砖
  • 2019.4 绩效+价值观均获得优秀,授予人生第一笔股票
  • 2020.7 晋升成功

兵马未动、粮草先行,得把这些意识深深的扎下去,扎入到骨髓中,我最喜欢的十句话送给各位:

  • 认真的人,自带光芒!
  • 天下武功,唯快不破!
  • 帮助别人就是帮助自己!
  • 心中无敌,方能无敌于天下!
  • 三步走战略,五大能力提升!
  • 思想过硬、作风过硬、技术过硬!
  • 人生需要布局,得有战略、打法!
  • 一辈子很长,要和有趣的人在一起!
  • 今天最好的表现,是明天最低的要求!
  • 以武会友、以剑论道、仗剑天涯,潇洒人生!

编程学习

三步走战略:

  • 看视频/书 + 敲代码 + 记笔记(视频为主、书为辅)
  • 算法 + 基础 + 技术栈

五大能力提升:快速的学习能力、应用业务的能力、解决问题的能力、信息检索的能力、有效资料判断力。

  • 快速的学习能力:指的是面对新的技术领域,自己从未接触过的技术,能不能在有效的时间内,把它学会、弄懂,这就是学习能力;
  • 应用业务的能力:指的是技术到位了,能不能用于项目中,用于实际问题中,在工作中尤为重要,学好跟用起来差距还是挺大的,听懂了不一定会做题,这就是学以致用;
  • 解决问题的能力:指的是根据现有的技术,现有的资源、举一反三、触类旁通、灵活运用,能否解决一个技术难题、攻克困难的能力;
  • 信息检索的能力:指的是利用互联网上面的一切资源,利用各种搜索技术、各种网站、各种论坛、快速的找到你所需要的资源(视频、电子书、图片等等等)的能力;
  • 有效资料判断力:指的是现在互联网上面,优质资源有,但是劣质的资源更多,随手一搜,一大片,你是否具有一定的判断力呢?就 Java 视频一大堆,哪个是比较优质的呢?有效资料判断力可以帮助你少走弯路,节省大把的时间,这就是学会筛选的能力。

认清自我的能力、独立思考的能力、分析问题的能力等等这些能力,时刻无处不在,但是跟五大能力是有本质的区别,培养方式与提高也是完全不一样的。

C++ 学习笔记

(系统性学习C++笔记)

Linux C/C++学习路线(2019版)

对于 Linux C/C++ 方向,入门较难,初学者直接走这个方向,是很容易丧失信心的,市场对应的工作岗位不是那么多,找对应的工作岗位难度较大一些。

我是在大学的时候走的这个方向,主要是因为自己 C 语言学的比较好,而我又想去腾讯,腾讯后台是 C++ 方向,就选择了走这个方向,后面也是如愿去了腾讯。

对于方向的抉择,目前来看的话,市场上需要最多的就是 Java 和 算法岗,还有一些前端岗这些方向都是不错的,选择走 C++ 方向的话,一定要想清楚了。

C++ 这条路注定难走!(一定要想清楚自己是否真的要选择这个职业方向)

一、汇编

  1. 学习底层知识需要懂一些硬件和汇编的基础!
  2. 如何理解计算机中的寄存器和栈!
  3. 写出人生的第一个汇编程序!
  4. 用汇编写循环(loop)
  5. 汇编要掌握的基础知识(上)
  6. 汇编要掌握的基础知识(下)

二、Linux

  1. 手把手教你安装 Red Hat 64 位虚拟机,跨入Linux大门!
  2. Red Hat7版本本地仓库yum源的配置
  3. Linux 文件属性与用户组
  4. Linux 用户环境
  5. find+SUID+SGID+SBIT,软硬链接+重定向的学习!
  6. Linux基础,tar、grep与正则表达式!
  7. Linux 进程基础知识
  8. Linux下守护进程与远程登录服务器
  9. Linux日志,计划任务,主机名,系统时间!
  10. Linux 网络简单配置

三、C 语言基础

  1. 我为什么建议大家一定的会 C 语言
  2. C 语言程序设计-->入门篇
  3. C 语言程序设计-->常量和变量
  4. C 语言程序设计-->数据类型及运算符
  5. C 语言程序设计-->必会的 Linux
  6. C 语言程序设计-->结构化程序设计
  7. C 语言程序设计-->数组
  8. C 语言程序设计-->指针
  9. C 语言程序设计-->函数
  10. C 语言程序设计-->结构体、共用体、动态存储分配、define、typedef

四、C 语言实战

  1. 一起学习 Linux C/C++ 之旅
  2. C 语言中的一些不足
  3. char *str1 和 char str2[]的详解
  4. strlen()、strcmp()、const
  5. 实现strcpy()和strstr()函数的多种方法
  6. C语言中内存对齐与结构体!
  7. 二级指针的应用场景
  8. 三级指针的应用场景
  9. UNIX内核源码-->通用链表

五、数据结构实战

  1. 从零开始学习数据结构-->入门篇
  2. 从零开始学习数据结构-->链表
  3. 从零开始学习数据结构-->线性表
  4. 从零开始学习数据结构-->栈
  5. 从零开始学习数据结构-->队列
  6. 从零开始学习数据结构-->矩阵+串
  7. 从零开始学习数据结构-->哈希表
  8. 从零开始学习数据结构-->散列桶
  9. 从零开始学习数据结构-->二叉树
  10. 从零开始学习数据结构-->二叉树方法实现
  11. 从零开始学习数据结构-->线索二叉树
  12. 从零开始学习数据结构-->树、森林与二叉树的转换
  13. 从零开始学习数据结构-->大堆+小堆
  14. 从零开始学习数据结构-->二叉搜索树(BST)
  15. 从零开始学习数据结构-->AVL树之旋转算法
  16. 从零开始学习数据结构-->AVL树之插入算法
  17. 从零开始学习数据结构-->AVL树之删除算法
  18. 从零开始学习数据结构-->红黑树
  19. 从零开始学习数据结构-->图之邻接矩阵
  20. 从零开始学习数据结构-->图之邻接表
  21. 从零开始学习数据结构-->图的遍历
  22. 从零开始学习数据结构-->图的非连通遍历

六、C++ 基础

  1. 从C语言如何过渡到C++,思维的转变是关键!
  2. Makefile和gdb的是LinuxC/C++必备技术
  3. C++从零入门学习系列(1)-->类与对象
  4. C++从零入门学习系列(2)-->this指针
  5. C++从零入门学习系列(3)-->构造函数与析构函数
  6. C++从零入门学习系列(4)-->引用,拷贝构造,赋值语句
  7. C++从零入门学习系列(5)-->默认函数,深拷贝与浅拷贝,深赋值与浅赋值
  8. C++从零入门学习系列(6)-->写时拷贝,引用计数器模型
  9. C++从零入门学习系列(7)-->C++中string数据类型
  10. C++从零入门学习系列(8)-->array和string的运算符重载
  11. C++从零入门学习系列(9)-->C++中四种类型转换
  12. C++从零入门学习系列(10)-->友元函数<<的模板化
  13. C++从零入门学习系列(11)-->const,引用本质,内联,默认/占位参数
  14. C++从零入门学习系列(12)-->友元函数 运算符重载const、static
  15. C++从零入门学习系列(13)-->函数模板、类模板
  16. C++从零入门学习系列(14)-->new和delete
  17. C++从零入门学习系列(15)-->继承
  18. C++从零入门学习系列(16)-->多态
  19. C++从零入门学习系列(17)-->异常
  20. C++从零入门学习系列(18)-->流类库和文件

七、STL

  1. C++进阶系列之STL(1)-->STL学习思想
  2. C++进阶系列之STL(2)-->剖析List部分源码
  3. C++进阶系列之STL(3)-->SGI版本空间配置器
  4. C++进阶系列之STL(4)-->STL的框架实现
  5. C++进阶系列之STL(5)-->函数适配器
  6. C++进阶系列之STL(6)-->vector,deque,list相关操作
  7. C++进阶系列之STL(7)-->set,map相关操作
  8. C++进阶系列之STL(8)-->仿函数
  9. C++进阶系列之STL(9)-->find_if(),plus,for_each()的用法
  10. C++进阶系列之STL(10)-->STL查找、排序、替换、集合算法
  11. STL 代码实战 --> 大量实战 demo

八、Boost 库

  1. C++进阶系列之Boost库智能指针(1)-->智能指针VC版
  2. C++进阶系列之Boost库智能指针(2)-->VS/Linux版的auto_ptr
  3. C++进阶系列之Boost库智能指针(3)-->scoped_ptr
  4. C++进阶系列之Boost库智能指针(4)-->scoped_array
  5. C++进阶系列之Boost库智能指针(5)-->shared_ptr(上)
  6. C++进阶系列之Boost库智能指针(6)-->shared_ptr(下)
  7. C++进阶系列之Boost库智能指针(7)-->shared_array
  8. C++进阶系列之Boost库智能指针(8)-->weak_ptr和intrusive_ptr

九、网络编程

  1. 文件I-O
  2. Linux进程环境
  3. Linux下的几种特殊进程
  4. 进程间通信-->信号
  5. 进程间通信—->文件
  6. 进程间通信-->管道
  7. 进程间通信-->管道深入
  8. IPC入门
  9. 进程间通信-->信号量
  10. 进程间通信-->共享内存
  11. P-V操作
  12. 进程间通信-->消息队列
  13. 线程
  14. 互斥量和条件变量
  15. 生产者与消费者
  16. 读写锁
  17. 读锁优先的实现
  18. socket网络编程
  19. 多进程网络服务
  20. 多线程网络服务
  21. 线程池网络服务
  22. 套接字设置
  23. Linux I/O复用-->select()
  24. Linux I/O复用-->poll()
  25. Linux I/O复用-->epoll
  26. 静态库与动态库的制作

十、设计模式

  1. C++进阶系列之设计模式(1)-->设计模式的核心思想
  2. C++进阶系列之设计模式(2)-->单例模式
  3. C++进阶系列之设计模式(3)-->工厂模式和原型模式
  4. C++进阶系列之设计模式(4)-->建造者模式和抽象工厂模式
  5. C++进阶系列之设计模式(5)-->代理模式和桥接模式
  6. C++进阶系列之设计模式(6)-->装饰模式和适配器模式
  7. C++进阶系列之设计模式(7)-->备忘录模式和策略模式
  8. C++进阶系列之设计模式(8)-->中介者模式和命令模式
  9. C++进阶系列之设计模式(9)-->迭代器模式和模板模式

十一、内核+数据库

  1. Linux内核基础-->AT&T汇编与x86汇编的区别
  2. 源码解读之工具-->Source Insight
  3. C开发Mysql客户端

十二、C++ 项目

  1. 大数运算
  2. 哈夫曼压缩解压缩
  3. 多进程
  4. 多线程
  5. 线程池
  6. poll模型

C++ 资料大礼包

打法专栏:https://github.com/puge-up/programming-play

内含实习、校招、社招进大厂打法,以及学习路线、技术成长、职场晋升等内容,那边资料大礼包包括:

  • C++ 编程规范
  • C++ 个人简历
  • 如何应对面试等
  • 。。。

一、视频

(黑马全套C++视频)


大学期间学习编程最核心的方式之一就是看视频,这套完整的黑马 C++ 视频我看了至少 2 遍,其对我的帮助非常大,有走 C++ 方向的可以参考下我这个视频,走编程方向首选黑马视频,黑马讲的质量是真的可以。

二、电子书

(Linux/C/C++ 电子书)

先分享这些 pdf,关于 C、C++、计算机基础 pdf 这类电子书太多了,基本上都是大学期间收藏的,这个我得后续整理下分享给大家,有喜欢看 pdf 的就非常方便了。

三、C++项目

(六大 C++ 实战项目)

六大项目:

  1. 大数运算:加减乘除等模块
  2. 哈夫曼压缩解压缩:文本/图片的压缩解压缩工具
  3. 多进程:
  4. 多线程:
  5. 线程池:
  6. poll模型:

吃透这六大项目,校招 C++ 项目模块将不再是问题!


获取方式:wx搜索公众号【程序员谱戈】,后台回复:C++资料,即可获取以上资料大礼包。

如果百度网盘链接失效,请发【邮件】联系我,说明你的来意即可,我会通过邮件发送给你对应的资料。


声明

  • 网名:谱戈
  • 邮箱:[email protected]
  • 微信:puge2021
  • 公众号【程序员谱戈】,欢迎关注
  • 知识星球:BAT黑马实验室
  • 交流群:校招、社招、技术群欢迎加入
  • 所有文章均原创,严禁抄袭,违者必究

非常经典的一句话送给各位:

一个剑客,和对手狭路相逢,他发现对方竟是天下第一剑客,这时候他明知是死,也必须亮出宝剑!没有这个勇气就别当剑客,倒在对手的剑下不丢人,要是不敢亮剑,那才叫丢脸。

这也是我为啥这么多年了,还一直喜欢《亮剑》这部剧的原因,主要是精气神,这比啥都重要!