校招形势前端
在去年结束的秋季招聘中,后台开发或服务器开发的岗位需求一度火热,甚至超过了算法岗。很多同窗从诸神黄昏的算法岗战场上退下,转向更偏向工程能力的后台开发岗,从而形成后台开发岗位竞争的大爆发。linux
后台开发工程师主流使用的编程语言有C++、Java、PHP以及目前慢慢流行的Golang等。本文就将以C++的角度,讲讲如何学习和准备后台开发的岗位。web
1、语言基础面试
不管是C++开发仍是Java开发,对于一个码农而言,最重要的就是对于编程语言的熟悉。一样,不管从事哪一种类型的岗位,首当其冲的就是要掌握好语言基础。正则表达式
C++是一门博大精深的编程语言,不只拥有继承于C语言的过程化程序设计思想,还包含有面对对象(OOP)的设计理念。强大而又复杂。相对来讲,C++的学习成本较高,语言里面的坑较多。语言基础的学习路线以下:算法
1 语法基础sql
重点掌握:(务必熟悉底层机制原理)数据库
指针和引用的概念编程
指针与内存关系后端
程序编译过程
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++》
2、算法与数据结构
对于普通人而言,算法的学习最重要的是可以造成基本的算法思惟,懂得从程序设计的角度对高重复性的操做作优化。这其中基本算法思想的掌握和经常使用数据结构的理解是必不可少。这方面的学习更倾向于多看多想多练。
1 常见算法类型
(务必可以手撕代码)
排序算法(冒泡、插入、选择、快排、希尔、堆排、归并、桶排、基数、计数)、字符串操做、数组操做、递归、回溯、分治、动态规划等
如何准备算法可见历史文章
2 经常使用数据结构
(务必熟悉底层原理和实现)
链表、栈、队列、树(二叉树、平衡二叉树、红黑树、B树、B+树、哈夫曼树、字典树)、跳表、图
3 推荐书籍
《大话数据结构》适合入门学习
《剑指offer》必刷66题
《算法导论》尽可能看,能啃完就是大神
3、计算机网络
网络相关的东西不是不少,关键在于对常见网络协议簇的认识和理解,以及一些常规操做底层设计实现的剖析。好比:
| 输入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.一、HTTP2.0区别
HTTP和HTTPS区别
HTTPS加密过程
非对称加密和对称加密算法
Nagle算法
2 推荐书籍
《计算机网络自顶向下方法》教材书,可放手边查阅
《TCP/IP详解》重点了解TCP、IP、UDP协议实现
4、数据库
数据库的通常使用其实不难,可是对于不一样数据库的特性、实现机制、应用场景和性能优化方面却可以难倒一大批面试者。一样数据库自己也是很是好的项目实例,每每可以从中学习到许多程序设计的思想和模式。所以,对数据库要明白怎么用、为何用、怎么用得好这几个方面的问题。
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设计与实现》比较全面的书,能够多看看
5、操做系统
操做系统的问题会集中在进程和线程,可是这一类的问题每每会以开放题的形式出现。主要考察的是对操做系统组件以及运行过程的理解。好比:
| 开机登陆系统发生了什么?
| 复制粘贴是怎样操做的?
1 重点掌握
物理内存和虚拟内存
缓存IO和直接IO
做业调度算法
线程和进程
进程和线程的调度
线程的建立和结束
线程状态
线程间通讯与线程同步机制
互斥锁和信号量
线程池
消费者和生产者
死锁
并发和并行
2 推荐书籍
《深刻理解计算机系统》很全面的书,这一本就够用了
6、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 推荐书籍
《鸟哥私房菜》入门足够了,多敲多写才能更快掌握
7、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服务器实现
8、项目准备
若是以上的东西你都已经准备好了,那么相信你已经了具有C++后台开发能力。可是要记得,一个大型线上项目的开发,历来都不纯粹是单一语言的设计和实现。
所以用C++或者用Java或者用Golang或者用Python的区别或许没那么大,它们都有擅长的地方,毕竟存在即真理。因此,若是你真的有精力的话,不妨还能够了解一下更深层次的技术:
海量日志处理和并行计算开发
分布式技术框架、中间件等 Dubbo、Spring Cloud 、Zookeeper 、Kfaka
流媒体分发技术CDN
...
固然,这些都不是很是必要的。可是绝对是亮点!此外,你能够准备一些基础向的相关项目:
网络库,可参考Muduo或者Nginx实现
web服务器/http服务器,可实现基本的http响应请求和处理
简易版STL库,展示C++的综合代码能力
局域网聊天室开发,涉及到网络编程实如今线群聊
分布式日志系统
简易版数据库设计
可参考一些C++经常使用库,造一些轮子或者作些有趣的小工具。
......更多灵感可查看历史文章
总结
在校园招聘中,对后台开发的面试大多仍是针对候选人的计算机基础。大多数学生在校内接触不到太多高并发高可用的服务场景,甚至能上线的项目都不多,所以也很难要求校招生可以真正具有后台开发的能力。
因此对于C++后台开发岗而言,对C++/Linux的充分熟悉以及扎实的计算机基础和有相关的学习经历,就已经可以知足各大公司的要求了。固然若是有在基础架构分布式开发等方面的经验,就更是各大厂抢手的香饽饽。
本文所介绍的总体学习路线可覆盖绝大多数大厂的面试题目和考察范围,现在学习资料太多,选择路线清晰的适合本身的才最重要。资料没必要多,能理解掌握才是最关键的。