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++ 方向,入门较难,初学者直接走这个方向,是很容易丧失信心的,市场对应的工作岗位不是那么多,找对应的工作岗位难度较大一些。
我是在大学的时候走的这个方向,主要是因为自己 C 语言学的比较好,而我又想去腾讯,腾讯后台是 C++ 方向,就选择了走这个方向,后面也是如愿去了腾讯。
对于方向的抉择,目前来看的话,市场上需要最多的就是 Java 和 算法岗,还有一些前端岗这些方向都是不错的,选择走 C++ 方向的话,一定要想清楚了。
C++ 这条路注定难走!(一定要想清楚自己是否真的要选择这个职业方向)
一、汇编
二、Linux
- 手把手教你安装 Red Hat 64 位虚拟机,跨入Linux大门!
- Red Hat7版本本地仓库yum源的配置
- Linux 文件属性与用户组
- Linux 用户环境
- find+SUID+SGID+SBIT,软硬链接+重定向的学习!
- Linux基础,tar、grep与正则表达式!
- Linux 进程基础知识
- Linux下守护进程与远程登录服务器
- Linux日志,计划任务,主机名,系统时间!
- Linux 网络简单配置
三、C 语言基础
- 我为什么建议大家一定的会 C 语言
- C 语言程序设计-->入门篇
- C 语言程序设计-->常量和变量
- C 语言程序设计-->数据类型及运算符
- C 语言程序设计-->必会的 Linux
- C 语言程序设计-->结构化程序设计
- C 语言程序设计-->数组
- C 语言程序设计-->指针
- C 语言程序设计-->函数
- C 语言程序设计-->结构体、共用体、动态存储分配、define、typedef
四、C 语言实战
- 一起学习 Linux C/C++ 之旅
- C 语言中的一些不足
- char *str1 和 char str2[]的详解
- strlen()、strcmp()、const
- 实现strcpy()和strstr()函数的多种方法
- C语言中内存对齐与结构体!
- 二级指针的应用场景
- 三级指针的应用场景
- UNIX内核源码-->通用链表
五、数据结构实战
- 从零开始学习数据结构-->入门篇
- 从零开始学习数据结构-->链表
- 从零开始学习数据结构-->线性表
- 从零开始学习数据结构-->栈
- 从零开始学习数据结构-->队列
- 从零开始学习数据结构-->矩阵+串
- 从零开始学习数据结构-->哈希表
- 从零开始学习数据结构-->散列桶
- 从零开始学习数据结构-->二叉树
- 从零开始学习数据结构-->二叉树方法实现
- 从零开始学习数据结构-->线索二叉树
- 从零开始学习数据结构-->树、森林与二叉树的转换
- 从零开始学习数据结构-->大堆+小堆
- 从零开始学习数据结构-->二叉搜索树(BST)
- 从零开始学习数据结构-->AVL树之旋转算法
- 从零开始学习数据结构-->AVL树之插入算法
- 从零开始学习数据结构-->AVL树之删除算法
- 从零开始学习数据结构-->红黑树
- 从零开始学习数据结构-->图之邻接矩阵
- 从零开始学习数据结构-->图之邻接表
- 从零开始学习数据结构-->图的遍历
- 从零开始学习数据结构-->图的非连通遍历
六、C++ 基础
- 从C语言如何过渡到C++,思维的转变是关键!
- Makefile和gdb的是LinuxC/C++必备技术
- C++从零入门学习系列(1)-->类与对象
- C++从零入门学习系列(2)-->this指针
- C++从零入门学习系列(3)-->构造函数与析构函数
- C++从零入门学习系列(4)-->引用,拷贝构造,赋值语句
- C++从零入门学习系列(5)-->默认函数,深拷贝与浅拷贝,深赋值与浅赋值
- C++从零入门学习系列(6)-->写时拷贝,引用计数器模型
- C++从零入门学习系列(7)-->C++中string数据类型
- C++从零入门学习系列(8)-->array和string的运算符重载
- C++从零入门学习系列(9)-->C++中四种类型转换
- C++从零入门学习系列(10)-->友元函数<<的模板化
- C++从零入门学习系列(11)-->const,引用本质,内联,默认/占位参数
- C++从零入门学习系列(12)-->友元函数 运算符重载const、static
- C++从零入门学习系列(13)-->函数模板、类模板
- C++从零入门学习系列(14)-->new和delete
- C++从零入门学习系列(15)-->继承
- C++从零入门学习系列(16)-->多态
- C++从零入门学习系列(17)-->异常
- C++从零入门学习系列(18)-->流类库和文件
七、STL
- C++进阶系列之STL(1)-->STL学习思想
- C++进阶系列之STL(2)-->剖析List部分源码
- C++进阶系列之STL(3)-->SGI版本空间配置器
- C++进阶系列之STL(4)-->STL的框架实现
- C++进阶系列之STL(5)-->函数适配器
- C++进阶系列之STL(6)-->vector,deque,list相关操作
- C++进阶系列之STL(7)-->set,map相关操作
- C++进阶系列之STL(8)-->仿函数
- C++进阶系列之STL(9)-->find_if(),plus,for_each()的用法
- C++进阶系列之STL(10)-->STL查找、排序、替换、集合算法
- STL 代码实战 --> 大量实战 demo
八、Boost 库
- C++进阶系列之Boost库智能指针(1)-->智能指针VC版
- C++进阶系列之Boost库智能指针(2)-->VS/Linux版的auto_ptr
- C++进阶系列之Boost库智能指针(3)-->scoped_ptr
- C++进阶系列之Boost库智能指针(4)-->scoped_array
- C++进阶系列之Boost库智能指针(5)-->shared_ptr(上)
- C++进阶系列之Boost库智能指针(6)-->shared_ptr(下)
- C++进阶系列之Boost库智能指针(7)-->shared_array
- C++进阶系列之Boost库智能指针(8)-->weak_ptr和intrusive_ptr
九、网络编程
- 文件I-O
- Linux进程环境
- Linux下的几种特殊进程
- 进程间通信-->信号
- 进程间通信—->文件
- 进程间通信-->管道
- 进程间通信-->管道深入
- IPC入门
- 进程间通信-->信号量
- 进程间通信-->共享内存
- P-V操作
- 进程间通信-->消息队列
- 线程
- 互斥量和条件变量
- 生产者与消费者
- 读写锁
- 读锁优先的实现
- socket网络编程
- 多进程网络服务
- 多线程网络服务
- 线程池网络服务
- 套接字设置
- Linux I/O复用-->select()
- Linux I/O复用-->poll()
- Linux I/O复用-->epoll
- 静态库与动态库的制作
十、设计模式
- C++进阶系列之设计模式(1)-->设计模式的核心思想
- C++进阶系列之设计模式(2)-->单例模式
- C++进阶系列之设计模式(3)-->工厂模式和原型模式
- C++进阶系列之设计模式(4)-->建造者模式和抽象工厂模式
- C++进阶系列之设计模式(5)-->代理模式和桥接模式
- C++进阶系列之设计模式(6)-->装饰模式和适配器模式
- C++进阶系列之设计模式(7)-->备忘录模式和策略模式
- C++进阶系列之设计模式(8)-->中介者模式和命令模式
- C++进阶系列之设计模式(9)-->迭代器模式和模板模式
十一、内核+数据库
十二、C++ 项目
C++ 资料大礼包
内含实习、校招、社招进大厂打法,以及学习路线、技术成长、职场晋升等内容,那边资料大礼包包括:
- C++ 编程规范
- C++ 个人简历
- 如何应对面试等
- 。。。
一、视频
(黑马全套C++视频)
大学期间学习编程最核心的方式之一就是看视频,这套完整的黑马 C++ 视频我看了至少 2 遍,其对我的帮助非常大,有走 C++ 方向的可以参考下我这个视频,走编程方向首选黑马视频,黑马讲的质量是真的可以。
二、电子书
(Linux/C/C++ 电子书)
先分享这些 pdf,关于 C、C++、计算机基础 pdf 这类电子书太多了,基本上都是大学期间收藏的,这个我得后续整理下分享给大家,有喜欢看 pdf 的就非常方便了。
三、C++项目
(六大 C++ 实战项目)
六大项目:
- 大数运算:加减乘除等模块
- 哈夫曼压缩解压缩:文本/图片的压缩解压缩工具
- 多进程:
- 多线程:
- 线程池:
- poll模型:
吃透这六大项目,校招 C++ 项目模块将不再是问题!
获取方式:wx搜索公众号【程序员谱戈】,后台回复:C++资料,即可获取以上资料大礼包。
如果百度网盘链接失效,请发【邮件】联系我,说明你的来意即可,我会通过邮件发送给你对应的资料。
声明
- 网名:谱戈
- 邮箱:[email protected]
- 微信:puge2021
- 公众号【程序员谱戈】,欢迎关注
- 知识星球:BAT黑马实验室
- 交流群:校招、社招、技术群欢迎加入
- 所有文章均原创,严禁抄袭,违者必究
非常经典的一句话送给各位:
一个剑客,和对手狭路相逢,他发现对方竟是天下第一剑客,这时候他明知是死,也必须亮出宝剑!没有这个勇气就别当剑客,倒在对手的剑下不丢人,要是不敢亮剑,那才叫丢脸。
这也是我为啥这么多年了,还一直喜欢《亮剑》这部剧的原因,主要是精气神,这比啥都重要!