共计 3797 个字符,预计需要花费 10 分钟才能阅读完成。
在快完结的秋季招聘中,后盾开发或服务器开发的岗位需要一度炽热,甚至超过了算法岗。不少同学从诸神傍晚的算法岗战场上退下,转向更偏差工程能力的后盾开发岗,从而造成后盾开发岗位竞争的大暴发。
后盾开发工程师支流应用的编程语言有 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+ 树、哈夫曼树、字典树)、跳表、图
[外链图片转存失败, 源站可能有防盗链机制, 倡议将图片保留下来间接上传(img-hxJLkMWK-1604040668260)(/img/bVcIdoh)]
3 举荐书籍
- 《大话数据结构》适宜入门学习
- 《剑指 offer》必刷 66 题
- 《算法导论》尽量看,能啃完就是大神
三、计算机网络
网络相干的货色不是很多,关键在于对常见网络协议簇的意识和了解,以及一些惯例操作底层设计实现的分析。比方:
| 输出 http://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 ++ 后盾开发岗而言,对 C ++/Linux 的充沛相熟以及扎实的计算机根底和有相干的学习经验,就曾经可能满足各大公司的要求了。当然如果有在基础架构分布式开发等方面的教训,就更是各大厂热门的香饽饽。
本文所介绍的整体学习路线可笼罩绝大多数大厂的面试题目和考查范畴,现在学习材料太多,抉择路线清晰的适宜本人的才最重要。材料不用多,能了解把握才是最要害的。