update note

This commit is contained in:
lemonchann
2020-01-07 00:39:20 +08:00
parent c4c8386781
commit 44dfbadb74

View File

@@ -7,9 +7,9 @@ comments: true
author: lemonchann
---
最近经常被邀请回答一些如何学习C++和C++后台开发应该具体储备哪些基础技能的问题。所以写这篇文章总结自己的C++后台开发学习路径,分享具体有哪些技能树是必须要点的,希望能给后来想从事后台开发的同学一点参考,能帮你少走些弯路就更好。工欲善其事必先利其器,好的书籍能让学习事半功倍,所以每个技能点之后我会推荐一些书,都是我读过且口碑不错的书,供参考。
经常被邀请回答类似如何学习C++和C++后台开发应该具体储备哪些基础技能的问题。所以写这篇文章总结自己的C++后台开发学习路径,分享具体有哪些技能树是必须要点的,希望能给后来想从事后台开发的同学一点参考,能帮你少走些弯路就更好。工欲善其事必先利其器,好的书籍能让学习事半功倍,所以每个技能点之后我会推荐一些书,都是我读过且口碑不错的书,供参考。
分享的是我的学习路径,如果你也能顺着这个学习路径认真学一遍,我想通过大部分大厂面试是没有问题的。
分享的是我的学习路径,如果你也能顺着这个学习路径认真学一遍,我想通过大部分大厂面试是没有问题的。后续还会继续分享关于C++编程和后台开发技术,感兴趣的同学可以关注我和专栏。
## 计算机基础综合
@@ -75,7 +75,7 @@ author: lemonchann
## C++和C语法基础
> 学任何语言首先要懂的都是他的语法C++的基础语句和语法和C是很像的最大的不同在class和异常处理机制还有模板的应用所以有C基础语法学起来是很快没有C基础也没关系啃完下面推荐的书也差不多光说不练假把式看完之后趁热把课后习题敲一遍并且自己编译通过才算看完。
学任何语言首先要懂的都是他的语法C++的基础语句和语法和C是很像的最大的不同在class和异常处理机制还有模板的应用所以有C基础语法学起来是很快没有C基础也没关系啃完下面推荐的书也差不多光说不练假把式看完之后趁热把课后习题敲一遍并且自己编译通过才算看完。
#### 推荐书:
@@ -83,7 +83,7 @@ author: lemonchann
## 标准库STL学习
> C++标准库提供了包括最基础的标准输入输出`iostrem`、各种容器`vector、set、string` 这些都是需要熟练掌握的。
C++标准库提供了包括最基础的标准输入输出`iostrem`、各种容器`vector、set、string` 这些都是需要熟练掌握的。
#### 推荐书:
@@ -93,7 +93,7 @@ author: lemonchann
## C++进阶
> 学完了C++基础你就能够在项目中用起来了,但是距离用好还有很大一段距离。不过没关系,你没踩过的坑前人已经踩过一遍,关于一些语言细节和更好的编码习惯有很多优秀的书籍可以查阅。站在巨人的肩膀上写出更健壮高效的代码。
学完了C++基础你就能够在项目中用起来了,但是距离用好还有很大一段距离。不过没关系,你没踩过的坑前人已经踩过一遍,关于一些语言细节和更好的编码习惯有很多优秀的书籍可以查阅。站在巨人的肩膀上写出更健壮高效的代码。
#### 推荐书
@@ -109,13 +109,19 @@ author: lemonchann
## C++11新标准
现行的大部分C++软件还是C++98的标准C++98是C++的第一个标准经历这么多年的发展从前你需要从Boost库一个在C++98年代的准C++标准获得的对C++的扩充支持的大部分功能已经纳入了C++11和甚至C++2X更新的标准当中你需要与时俱进拿起更加先进的生产工具了工具就是效率。
#### 推荐书:
[深入理解C++11](https://book.douban.com/subject/24738301/)
## Linux系统基础和shell script
> 如今**几乎**所有的互联网服务都是跑在linux系统上面的如果你还对这个系统一无所知那更加谈不上后台开发了所以要先学习linux系统操作不如**文件管理,系统命令,文件系统,权限管理,系统服务**等等。
>
> 至于shell script 就类似win的批处理脚本相信我你在linux下干活早晚会需要它所以趁早系统学起来。
如今**几乎**所有的互联网服务都是跑在linux系统上面的如果你还对这个系统一无所知那更加谈不上后台开发了所以要先学习linux系统操作不如**文件管理,系统命令,文件系统,权限管理,系统服务**等等。
至于shell script 就类似win的批处理脚本相信我你在linux下干活早晚会需要它所以趁早系统学起来。
#### 推荐书:
@@ -129,9 +135,9 @@ author: lemonchann
## Linux环境高级编程
> 如果说linux系统基础是打基础那么打完基础之后就要学习一些更高级的技巧。上一阶段你已经能够完成熟练操作Linux系统知道一些**常规的系统命令和服务并且能够利用shell script写一些小工具**提高日常开发效率。
>
> 我们的目标是星辰大海你还需要更加深入的掌握linux系统编程技巧**学习系统编程接口、系统调用api、网络编程套接字、进程间通信IPC**,这是本阶段的学习目的。
如果说linux系统基础是打基础那么打完基础之后就要学习一些更高级的技巧。上一阶段你已经能够完成熟练操作Linux系统知道一些**常规的系统命令和服务并且能够利用shell script写一些小工具**提高日常开发效率。
我们的目标是星辰大海你还需要更加深入的掌握linux系统编程技巧**学习系统编程接口、系统调用api、网络编程套接字、进程间通信IPC**,这是本阶段的学习目的。
#### 推荐书:
@@ -143,7 +149,7 @@ author: lemonchann
## Linux网络编程套接字
> 在同一台机器上进程间的通信IPC有多种方式可以是通过**消息队列、FIFO、共享内存**等方式。网络编程套接字是指:分布在不同机器上的程序通过系统提供的网络通信接口,跨越网络将不同机器上的进程连接起来,实现跨机器的网络通信。一般有**UDP套接字、TCP套接字、Unix Domain当然如果你是通信从业者对SCTP套接字肯定也不会陌生。**
在同一台机器上进程间的通信IPC有多种方式可以是通过**消息队列、FIFO、共享内存**等方式。网络编程套接字是指:分布在不同机器上的程序通过系统提供的网络通信接口,跨越网络将不同机器上的进程连接起来,实现跨机器的网络通信。一般有**UDP套接字、TCP套接字、Unix Domain当然如果你是通信从业者对SCTP套接字肯定也不会陌生。**
#### 推荐书:
@@ -155,12 +161,12 @@ author: lemonchann
## 数据库和存储
> 程序运行时数据都在内存当中,一个后台服务系统一般来说都需要考虑数据落地的问题,这时就会涉及到数据库选型问题。数据库分为关系型数据库和非关系型数据库。
>
> **关系型数据库指采用了关系模型来组织数据的数据库代表是MySql。
> 关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。**
>
> **非关系型数据库以键值对存储且结构不固定每一个元组可以有不一样的字段每个元组可以根据需要增加一些自己的键值对不局限于固定的结构可以减少一些时间和空间的开销。代表有redis、memcached腾讯内部组件ckv也是非关系型数据库**。
程序运行时数据都在内存当中,一个后台服务系统一般来说都需要考虑数据落地的问题,这时就会涉及到数据库选型问题。数据库分为关系型数据库和非关系型数据库。
**关系型数据库指采用了关系模型来组织数据的数据库代表是MySql。
关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。**
**非关系型数据库以键值对存储且结构不固定每一个元组可以有不一样的字段每个元组可以根据需要增加一些自己的键值对不局限于固定的结构可以减少一些时间和空间的开销。代表有redis、memcached腾讯内部组件ckv也是非关系型数据库**
#### 推荐书:
@@ -170,5 +176,17 @@ author: lemonchann
[redis官方文档](https://redis.io/documentation) [redis中文网](http://redis.cn/)
关于redis还有很多应用比如基于redis的分布式锁的应用高并发抢红包模型等这个后面可以再写一篇文章。
> 关于redis还有很多应用比如基于redis的分布式锁的应用高并发抢红包模型等这个后面可以再写一篇文章。
## 更多的练习
说了这么多,最最重要的还是练习 练习 练习,重要的事情说三遍。理论知识储备是必要条件,现在大家接触到的碎片化信息知识太多,高浓度的知识精华还是需要在大师的书本中汲取,所以看书是最正确和快速的学习路径,没有捷径可走。
但是,光看是不行的,编程和技术是也是一门现代手艺活,你还需要不断的打磨手艺,就如一万小时定律所说:
> 人们眼中的天才之所以卓越非凡并非天资超人一等而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成世界级大师的必要条件。要成为某个领域的专家需要10000小时按比例计算就是如果每天工作八个小时一周工作五天那么成为一个领域的专家至少需要五年。这就是一万小时定律。
怎么打磨提高编程技术能力呢?找项目,**找感兴趣的**东西用代码去实现它,兴趣是最好的老师,这点在编程和技术学习上也完全适用,人们总倾向于去做快速获得的愉悦感的事情,比如打一盘游戏。技术的提高是一个长期的过程,三分钟热度肯定是难以成功的,所以要用技术做自己感兴趣的东西和带趣味性的编程,比如写个爬虫小程序抓取网站数据或者写个小游戏,再或者自己造轮子给自己用,并乐此不疲的优化轮子。这样每走一步都能获得一点成就感,激励自己继续走下去,慢慢的就会有质的飞跃。