From 0702cae7c77669be09db649d8fd79a5e99aebac7 Mon Sep 17 00:00:00 2001 From: linlongchen Date: Tue, 7 Jan 2020 22:54:22 +0800 Subject: [PATCH] update note --- _posts/2020-1-4-learn_cpp.md | 38 +++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/_posts/2020-1-4-learn_cpp.md b/_posts/2020-1-4-learn_cpp.md index d8f5241..aacd2a0 100644 --- a/_posts/2020-1-4-learn_cpp.md +++ b/_posts/2020-1-4-learn_cpp.md @@ -7,19 +7,21 @@ comments: true author: lemonchann --- -经常被邀请回答类似如何学习C++和C++后台开发应该具体储备哪些基础技能的问题。所以写这篇文章,总结自己的C++后台开发学习路径,分享具体有哪些技能树是必须要点的,希望能给后来想从事后台开发的同学一点参考,能帮你少走些弯路就更好。工欲善其事必先利其器,好的书籍能让学习事半功倍,所以每个技能点之后我会推荐一些书,都是我读过且口碑不错的书,供参考。 +经常被邀请回答类似如何学习C++和C++后台开发应该具体储备哪些基础技能的问题。所以写这篇文章,总结自己的C++后台开发学习路径和点过的技能树,希望能给后来想从事后台开发的同学一点参考,能帮你少走些弯路就更好。 -分享的是我的学习路径,如果你也能顺着这个学习路径认真学一遍,我想通过大部分大厂面试是没有问题的。后续还会继续分享关于C++编程和后台开发技术,感兴趣的同学可以关注我和专栏。 +工欲善其事必先利其器,好的书籍能让学习事半功倍,所以每个技能点之后我会推荐一些书,都是我读过且口碑不错的书,供参考。 + +**分享的是我的学习路径,如果你也能顺着这个学习路径认真学一遍,我想通过大部分大厂面试是没有问题的。后续还会继续分享关于C++编程和后台开发技术,感兴趣的同学可以关注我和专栏。** ## 计算机基础综合 -考过CS或者软件工程研究生的同学可能对这个标题`计算机专业基础综合` 不陌生,是的,我说的就是专业课代号408的**计算机基础综合**。这门专业课包含:数据结构、计算机组成原理、计算机网路、操作系统。 +考过CS或者软件工程研究生的同学可能对这个标题不陌生,是的,我说的就是专业课代号408的**计算机基础综合**。这门专业课包含:数据结构、计算机组成原理、计算机网路、操作系统。 为什么提起这门课程呢,因为基础知识太重要了!这是科班区别于培训班的最大不同,理论知识不一定马上能用于项目上,但当与人讨论起某个技术问题时你能够知道它深层次的原因,看问题的角度会更加全面和系统。 打个比方,你可能听过堆栈的名词,但知道它的具体结构和不同吗?学完数据结构就明白了;你知道计算机会算加减乘除,但具体是如何实现的呢?组成原理会告诉你;知道程序执行的时候怎么区分指令地址和数据地址的吗?操作系统会告诉你答案。 -所以,如果你大学不是计算机相关专业,或者是本专业但是没有好好学习基础的话,强烈建议你务必抽时间好好学习这几门课程。 +所以如果你大学不是计算机相关专业,或者是本专业但是没有完全吃透基础的话,强烈建议你务必抽时间好好学习这几门课程。 #### 推荐书: @@ -75,25 +77,29 @@ author: lemonchann ## C++和C语法基础 -学任何语言首先要懂的都是他的语法,C++的基础语句和语法和C是很像的,最大的不同在class和异常处理机制,还有模板的应用,所以有C基础语法学起来是很快,没有C基础也没关系,啃完下面推荐的书也差不多,光说不练假把式,看完之后趁热把课后习题敲一遍并且自己编译通过才算看完。 +**语法是一门语言的基础。**C++的基础语句和语法和C是很像的,最大的不同在class和异常处理机制,还有模板的应用,所以有C基础语法学起来是很快,没有C基础也没关系,啃完下面推荐的书也差不多,光说不练假把式,看完之后趁热把课后习题敲一遍并且自己编译通过才算看完。 #### 推荐书: [《C++ Primer 中文版(第 5 版)》](https://book.douban.com/subject/25708312/) 经典的入门书籍,不要拿大学教材XX强来对比,不是一个等级。 + + ## 标准库STL学习 -C++标准库提供了包括最基础的标准输入输出`iostrem`、各种容器`vector、set、string` 这些都是需要熟练掌握的。 +**STL提供了丰富的算法库支持和各种容器。**C++标准库提供了包括最基础的标准输入输出`iostrem`、各种容器`vector、set、string` ,熟练掌握标准库,不用重复造轮子(练手学习目的的造轮子除外)写出更C++的代码。 #### 推荐书: [《C++ Primer 中文版(第 5 版)》](https://book.douban.com/subject/25708312/) +[《STL源码剖析》]( https://book.douban.com/subject/1110934/ ) + ## C++进阶 -学完了C++基础你就能够在项目中用起来了,但是距离用好还有很大一段距离。不过没关系,你没踩过的坑前人已经踩过一遍,关于一些语言细节和更好的编码习惯有很多优秀的书籍可以查阅。站在巨人的肩膀上写出更健壮高效的代码。 +**学完了上面的C++基础只是会用,要用好还需要不断学习进阶。**站在巨人的肩膀上写出更健壮高效的代码,你没踩过的坑前人已经踩过一遍,关于一些语言细节和更好的编码习惯,有很多优秀的书籍可以学习。 #### 推荐书 @@ -109,7 +115,7 @@ C++标准库提供了包括最基础的标准输入输出`iostrem`、各种容 ## C++11新标准 -现行的大部分C++软件还是C++98的标准,C++98是C++的第一个标准,经历这么多年的发展,从前你需要从Boost库(一个在C++98年代的准C++标准)获得的对C++的扩充支持的大部分功能已经纳入了C++11和甚至C++2X更新的标准当中,你需要与时俱进拿起更加先进的生产工具了,工具就是效率。 +**新标准提供了解决现有问题更优雅、更C++的实现**。现行的大部分C++软件还是C++98的标准,C++98是C++的第一个标准,经历这么多年的发展,从前你需要从Boost库(一个在C++98年代的准C++标准)获得的对C++的扩充支持的大部分功能已经纳入了C++11和甚至C++2X更新的标准当中,与时俱进拿起更先进的生产工具,工具就是效率。 #### 推荐书: @@ -119,7 +125,7 @@ C++标准库提供了包括最基础的标准输入输出`iostrem`、各种容 ## Linux系统基础和shell script -如今**几乎**所有的互联网服务都是跑在linux系统上面的,如果你还对这个系统一无所知那更加谈不上后台开发了,所以要先学习linux系统操作,不如**文件管理,系统命令,文件系统,权限管理,系统服务**等等。 +**如今几乎所有的互联网服务都是跑在linux系统上面的。**对Linux系统一无所知那更加谈不上后台开发了,所以要先学习linux系统操作,不如文件管理,系统命令,文件系统,权限管理,系统服务等。 至于shell script 就类似win的批处理脚本,相信我,你在linux下干活早晚会需要它,所以趁早系统学起来。 @@ -135,9 +141,9 @@ C++标准库提供了包括最基础的标准输入输出`iostrem`、各种容 ## Linux环境高级编程 -如果说linux系统基础是打基础,那么打完基础之后就要学习一些更高级的技巧。上一阶段你已经能够完成熟练操作Linux系统,知道一些**常规的系统命令和服务,并且能够利用shell script写一些小工具**提高日常开发效率。 +**普通用户只需懂系统操作,软件开发人员还要懂编程接口。**上一阶段你已经能够完成熟练操作Linux系统,知道一些常规的系统命令和服务,并且能够利用shell script写一些小工具提高日常开发效率。 -我们的目标是星辰大海,你还需要更加深入的掌握linux系统编程技巧,**学习系统编程接口、系统调用api、网络编程套接字、进程间通信(IPC)**,这是本阶段的学习目的。 +我们的目标是星辰大海,作为软件工程师,还需要更加深入的掌握linux系统编程技巧,**学习系统编程接口、系统调用API、内存管理、进程间通信(IPC)**,这是本阶段的学习目的。 #### 推荐书: @@ -180,6 +186,16 @@ C++标准库提供了包括最基础的标准输入输出`iostrem`、各种容 +## 算法 + +如今校招社招大厂笔试都会考察算法,即使不是为了笔试作为软件从业者也应该经常练手,保持手感。学习算法是学习解决问题的通用性方法有助于提高逻辑思维能力。 + +算法可以在[牛客](https://www.nowcoder.com/activity/oj)或者 [leetcode](https://leetcode-cn.com/ )上刷题。在线刷题的好处是你可以每天定目标,享受刷题通过的快感,有正向反馈更容易坚持下来。 + +## 架构 + +学了这么多,怎么在项目上运用呢?你还需要根据 + ## 更多的练习 说了这么多,最最重要的还是练习 练习 练习,重要的事情说三遍。理论知识储备是必要条件,现在大家接触到的碎片化信息知识太多,高浓度的知识精华还是需要在大师的书本中汲取,所以看书是最正确和快速的学习路径,没有捷径可走。