学了C++不知道怎么搞后台开发?先看看这份学习路线吧!
作者:AJ
在去年结束的秋季招聘中,后台开发或服务器开发的岗位需求一度火热,甚至超过了算法岗。不少同学从诸神黄昏的算法岗战场上退下,转向更偏向工程能力的后台开发岗,从而造成后台开发岗位竞争的大爆发。
后台开发工程师主流使用的编程语言有C++、Java、PHP以及目前慢慢流行的Golang等。本文就将以C++的角度,讲讲如何学习和准备后台开发的岗位。
一、语言基础
无论是C++开发还是Java开发,对于一个码农而言,最重要的就是对于编程语言的熟悉。同样,无论从事哪种类型的岗位,首当其冲的就是要掌握好语言基础。
C++是一门博大精深的编程语言,不仅拥有继承于C语言的过程化程序设计思想,还包含有面对对象(OOP)的设计理念。强大而又复杂。相对来说,C++的学习成本较高,语言里面的坑较多。语言基础的学习路线如下:
1 语法基础
重点掌握:(务必熟悉底层机制原理)
- 指针和引用的概念
- 指针与内存关系
- 程序编译过程
- static、const、#define的用法和区别
- C和C++区别
- 内存模型
- 内存中的栈和堆分配
2 面对对象基础
(务必熟悉底层机制原理)
- 面向对象理解
- 析构函数
- 构造函数
- 拷贝构造
- 多态
- 纯虚函数和虚函数
- 虚函数实现机制
- 虚函数表
- 访问限定符 public、private、protected
- 继承原理、虚继承、菱形继承
- 静态绑定和动态绑定
- new/delete和malloc/free
- 重载、重写和隐藏
3 语法进阶
(务必熟悉底层机制原理)
- 智能指针
- 左值、右值引用和move语义
- 类型转换方式
- 常用的设计模式
- 线程安全的单例模式
- 内存溢出和内存泄漏
- C++11新特性
- 静态链接库和动态链接库
4 STL标准模板库
(务必能进行源码剖析)
- 迭代器、空间配置器理解
- 常用容器特点、用法以及底层实现vector、list、deque、set、map、unorderedmap
5 推荐书籍
- C++Primer》可作为工具书,随手查阅
- 《EffectiveC++》深入了解C++的程序设计规范
- 《STL源码剖析》剖析STL的源码底层,非常具有学习价值
- 有精力还可以看《深度探索C++对象模型》《more EffecticeC++》
二、算法与数据结构
对于普通人而言,算法的学习最重要的是能够形成基本的算法思维,懂得从程序设计的角度对高重复性的操作做优化。这其中基本算法思想的掌握和常用数据结构的理解是必不可少。这方面的学习更倾向于多看多想多练。
1 常见算法类型
(务必能够手撕代码)
- 排序算法(冒泡、插入、选择、快排、希尔、堆排、归并、桶排、基数、计数)、字符串操作、数组操作、递归、回溯、分治、动态规划等
2 常用数据结构
(务必熟悉底层原理和实现)
- 链表、栈、队列、树(二叉树、平衡二叉树、红黑树、B树、B+树、哈夫曼树、字典树)、跳表、图
3 推荐书籍
- 《大话数据结构》适合入门学习
- 《剑指offer》必刷66题
- 《算法导论》尽量看,能啃完就是大神
三、计算机网络
网络相关的东西不是很多,关键在于对常见网络协议簇的认识和理解,以及一些常规操作底层设计实现的剖析。比如:
| 输入www.baidu.com会发生什么
| 微信扫描登录会发生什么
1 重点掌握知识点
- OSI七层模型
- TCP/IP五层模型
- TCP/IP协议总结
- TCP、UDP区别
- TCP三次握手、四次挥手
- TCP状态转换
- TCP状态中TIME_WAIT
- TCP连接建立需要为什么不是两次握手
- TCP第三次握手失败会出现什么
- TCP长连接和短链接及优缺点
- TCP拥塞控制-慢启动、拥塞避免、快重传、快启动
- TCP如何保证可靠性传输
- TCP如何解决粘包、拆包问题
- TCP为什么可靠
- UDP如何实现TCP可靠传输
- IP地址和子网掩码
- ARP解析过程
- DNS原理
- HTTP状态码
- HTTP1.0、HTTP1.1、HTTP2.0区别
- HTTP和HTTPS区别
- HTTPS加密过程
- 非对称加密和对称加密算法
- Nagle算法
2 推荐书籍
- 《计算机网络自顶向下方法》教材书,可放手边查阅
- 《TCP/IP详解》重点了解TCP、IP、UDP协议实现
四、数据库
数据库的一般使用其实不难,但是对于不同数据库的特性、实现机制、应用场景和性能优化方面却能够难倒一大批面试者。同样数据库本身也是非常好的项目实例,往往能够从中学习到许多程序设计的思想和模式。因此,对数据库要明白怎么用、为什么用、怎么用得好这几个方面的问题。
1 重点掌握
- 数据库类别
- 关系型数据库和非关系型数据库区别
MySQL: - SQL常见语句
- MySQL内链接,外链接(左链接、右链接、全链接)
- MySQL索引类型和原理
- MySQL事务实现原理ACID
- MySQL数据存储引擎
- MySQL主从复制原理、作用和实现
- MySQL日记系统redo log、binlog、undo log
- MVCC实现原理
- Sql优化思路
- 范式理论
- 数据库高并发解决方法
Redis: - Redis支持的数据类型
- Redis持久化
- Redis 架构模式
- 主从复制
- 一致性哈希算法
2 推荐书籍
- 《高性能 Mysql》能够加深对Mysql的理解和使用
- 《Redis设计与实现》比较全面的书,可以多看看
五、操作系统
操作系统的问题会集中在进程和线程,但是这一类的问题往往会以开放题的形式出现。主要考察的是对操作系统组件以及运行过程的理解。比如:
| 开机登录系统发生了什么?
| 复制粘贴是怎样操作的?
1 重点掌握
- 物理内存和虚拟内存
- 缓存IO和直接IO
- 作业调度算法
- 线程和进程
- 进程和线程的调度
- 线程的创建和结束
- 线程状态
- 线程间通信与线程同步机制
- 互斥锁和信号量
- 线程池
- 消费者和生产者
- 死锁
- 并发和并行
2 推荐书籍
- 《深入理解计算机系统》很全面的书,这一本就够用了
六、Linux系统
对Linux系统的熟练使用是后台开发/服务器开发的必备技能点。这年头,不会几个Linux指令都不好意思说自己是敲代码的。(客户端和前端的同学表示不服)不管怎样,对于Linux系统的掌握无论在哪个方向上,都会有用武之地的。
1 Linux系统操作和命令
- top命令
- ps命令
- netstat命令
- awk命令
- find命令
- grep命令
- wc命令
- sed命令
- head和tail命令
- 正则表达式
- 如何查找出现频率最高的100个IP地址
- linux如何统计文件中某个字符串出现的频率
- linux启动的第一个进程
- linux查看端口占用
- linux查看CPU和内存使用
- Linux查看系统负载命令
- Linux调试程序
- Linux硬链接和软连接
- core dump
- cmake和makefile
- Shell脚本基本语法和使用
2 推荐书籍
- 《鸟哥私房菜》入门足够了,多敲多写才能更快掌握
七、Linux网络编程
后台开发是离不开网络编程的,甚至简单来说,后台开发就是用厉害点的电脑去处理大规模的网络请求。所以作为一名合格的后端开发人员,对Linux网络编程的熟悉是必不可少的。
1 重点掌握
- 孤儿进程、僵尸进程和守护进程
- 进程间通信方式signal、file、pipe、shm、sem、msg、socket
- 线程同步机制线程:互斥量、锁机制、条件变量、信号量、读写锁
- fork返回值
- 五大IO模型:阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O、异步I/O
- IO复用机制
- epoll与select/poll
- LT水平触发和ET边缘触发
- Reactor和Proactor模式
- 反向代理、负载均衡
2 推荐书籍
- 《UNIX环境高级编程》APUE 比较难啃,可以挑着看
- 《Unix网络编程》UNP 同样比较难啃,可以挑着看
- 《Linux多线程服务器端编程》Muduo网络库,推荐看看源码实现
- 《深入理解Nginx》深入了解基于C的web服务器实现
八、项目准备
如果以上的东西你都已经准备好了,那么相信你已经了具备C++后台开发能力。但是要记得,一个大型线上项目的开发,从来都不纯粹是单一语言的设计和实现。
因此用C++或者用Java或者用Golang或者用Python的区别或许没那么大,它们都有擅长的地方,毕竟存在即真理。所以,如果你真的有精力的话,不妨还可以了解一下更深层次的技术:
- 海量日志处理和并行计算开发
- 分布式技术框架、中间件等 Dubbo、Spring Cloud 、Zookeeper 、Kfaka
- 流媒体分发技术CDN
- ...
当然,这些都不是非常必要的。但是绝对是亮点!此外,你可以准备一些基础向的相关项目:
- 网络库,可参考Muduo或者Nginx实现
- web服务器/http服务器,可实现基本的http响应请求和处理
- 简易版STL库,展现C++的综合代码能力
- 局域网聊天室开发,涉及到网络编程实现在线群聊
- 分布式日志系统
- 简易版数据库设计
- 可参考一些C++常用库,造一些轮子或者做些有趣的小工具。
本文所介绍的整体学习路线可覆盖绝大多数大厂的面试题目和考察范围,如今学习资料太多,选择路线清晰的适合自己的才最重要。资料不必多,能理解掌握才是最关键的。根据上述学习路线,我总结出一份复习文档。关注微信搜索业余码农即可获得全套答案总结。
学了C++不知道怎么搞后台开发?先看看这份学习路线吧!的更多相关文章
- 2019最新WEB前端开发小白必看的学习路线(附学习视频教程)
2019最新WEB前端开发小白必看的学习路线(附学习视频教程).web前端自学之路:史上最全web学习路线,HTML5是万维网的核心语言,标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次 ...
- web前端开发初学者必看的学习路线(附思维导图)
很多同学想学习WEB前端开发,虽然互联网有很多的教程.网站.书籍,可是却又不知从何开始如何选取.看完网友高等游民白乌鸦无私分享的原标题为<写给同事的前端学习路线>这篇文章,相信你会有所收获 ...
- 学大数据一定要会Java开发吗?
Java是目前使用广泛的编程语言之一,具有的众多特性,特别适合作为大数据应用的开发语言.Java语言功能强大和简单易用,不仅吸收了C++语言的各种优点还摒弃了C++里难以理解的多继承.指针等概念. J ...
- 适合普通大学生的 Java 后端开发学习路线
大家好,我是帅地. 接下来的一段时间,帅地会总结各种技术栈的学习路线,例如 Java 开发,C++ 开发,python 开发,前端开发等等,假如你没有明确的目标,或许可以按照我说的学习路线来学习一波, ...
- 给大一的学弟学妹们培训java web的后台开发讨论班计划
蓝旭工作室5月大一讨论班课程计划 课时 讨论班性质 讨论班名称 主要内容 主讲人 第一讲 先导课 后台开发工具的使用与MySQL数据库基础 后台开发工具的基本使用方法与工程的创建,MySQL数 ...
- 后台开发小白必学服务器框架——UDPServer
毕业后加入了一家大型的互联网公司的音视频产品部门做后台开发,其实我本身是学习自动化的,研究生的方向嵌入式系统,对互联网可是一知半解,因此能进入这样一个大公司还是很幸运的. 刚开始工作的半年应该是在上份 ...
- 【转】C++后台开发之我见
工作也快两年了,偶然看到自己以前写过的一些技术博客,发现自己自毕业后一直没有更新过自己的技术博客,趁现在是刚过完春节快要回公司工作之际,谈谈我个人对后台开发的一些个人见解,希望能够对在校的学生或者刚刚 ...
- 【转】C++后台开发应该读的书
转载自http://www.cnblogs.com/balloonwj/articles/9094905.html 作者 左雪菲 根据我的经验来谈一谈,先介绍一下我的情况,坐标上海,后台开发(也带团队 ...
- (67)c++后台开发
还记得自己在学校的时候,一直都比较注重的是:编程语言+数据结构与算法.没错,对于一个在校的计算机专业的学生,这是很重要的方面.但是,这往往不够,或许是因为毕业前一直没有进入企业实习,以至于自己在毕业之 ...
随机推荐
- mysql查看变量
在MySQL客户端执行如下命令查看MySQL的数据存放位置: show global variables like "%datadir%"; 查看端口号 show global v ...
- Linux常见指令x-mind
- SpringBoot 1.5.x 集成 Quartz 任务调度框架
Quartz 有分 内存方式 和 数据库方式 内存方式任务信息保存在内存中, 停机会丢失, 需手动重新执行, 数据库方式: 任务信息保存在数据库中, 重点是支持集群. 内存方式 RAMJobStore ...
- 887A. Div. 64#模特的数学技巧(字符串处理)
问题出处:http://codeforces.com/problemset/problem/887/A 问题大意:对于给出的一串二进制数,能否通过去掉一些数字,使之成为十进制下64的倍数 #inclu ...
- 【网络流】Modular Production Line
[网络流]Modular Production Line 焦作上的一道,网络流24题中的原题.... https://nanti.jisuanke.com/t/31715 给出了1e5个点,但是因为最 ...
- MySql 按日期条件查询数据
本周内: select * from wap_content where week(created_at) = week(now) 查询一天: select * from table where to ...
- Linux基础篇六:Linux文件属性和类型
-:代表文件 s: sorket文件 b:block块设备 (磁盘,光驱等) c:字符设备 l:连接文件 p:管道文件 d:代表目录文件 为了更加区分- (文件的具体类型),系统提供了file命令更加 ...
- 吴裕雄--天生自然python机器学习:决策树算法
我们经常使用决策树处理分类问题’近来的调查表明决策树也是最经常使用的数据挖掘算法. 它之所以如此流行,一个很重要的原因就是使用者基本上不用了解机器学习算法,也不用深究它 是如何工作的. K-近邻算法可 ...
- day11-random模块-随机
import random # 一.随机小数: print(random.random()) # 0.848972270116501结果是0-1之间的随机小数 print(random.uniform ...
- WebElement--定位经验
通常,我们这页面中定位一个元素,如果HTML中明明有却定位不到,我们一定会从这两个方面考虑. 第一:是不是页面中有多个iframe/frame结构,很多情况下我们需要通过切换iframe/frame结 ...