c++ 后台开发岗技能知识树

Posted 云霞川

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 后台开发岗技能知识树相关的知识,希望对你有一定的参考价值。

c++ 后台开发岗技能知识树

本质都是实力的提高,包含软实力和硬实力

学的深不深,跟你的基础有关

核心的点一定要在

硬技能:

1.语言

对象的声明周期:垃圾回收,对象声明周期,标准库,异常处理,日志分析,如何写出高效的代码(对面向对象的理解),设计模式,gdb的使用

2.数据结构与算法

线性结构,树形结构,图形结构

b树 b+树

dij算法,最小生成树,二分查找,堆排序,跳表,散列表,布隆过滤器,哈希表等

3.数据库mysql&nosql

关系型数据库mysql 基本配置

sql语句 建表 索引 存储过程 工作原理

存储引擎的原理 innodb/myisam

数据库连接池的做法 原理

如何做成异步的mysql请求

sql注入 分库分表 读写分离

缓存redis

redis的使用编译安装

redis命令使用

redis连接池

redis异步

redis集群 雪崩 击穿

4.网络原理

看ip地址 看端口 ping telnet ifconfig

网络体系模型

tcp 三次握手 四次挥手

滑动窗口 慢启动

状态机

udp 实时型 不带拥塞控制 udp原理

http http2.0 http3.0

session cookie

网络安全,加密

wireshark windows

tcpdump linux

5.操作系统

cpu

内存

磁盘

外设

文件操作,系统操作

程序编译,运行

shell/vim的使用

linux系统性能监控参数 ps/netstat/df

进程管理

内核态/用户态 只有通过系统调用,采用中断

内存管理,内存池的使用,内存泄露

磁盘的文件系统,文件缓存,虚拟文件系统

磁盘io

6.网络编程

socket编程 tcp udp

网络io模型

阻塞/非阻塞

同步/异步

io多路复用epoll/poll/select

epoll reactor proactor

time_wait/close_wait 大量

C10K/C1000K/C10M

libevent/libev 写成ntyco,libco

7.分布式-rpc

rpc开放的框架 grpc tars brpc srpc

服务与服务之间的

微服务

简单rpc设计/序列号,反序列号

容灾,服务注册,服务发现,高并发,高可用,降级熔断,分布式锁,多台机器共用一把锁

8.云原生

了解腾讯云,阿里云的产品

docker 现成保存 解决环境一致性问题

docker的编排 docker的网络

k8s管理

软技能:能做多高的位置,更加难提高,沟通能力,协调能力各种

沟通能力

组织能力

协调能力

跨部门需求分析

走的远不远 高不高 决定于你的软技能

C++ 后台开发知识点及学习路线

校招形势

在去年结束的秋季招聘中,后台开发或服务器开发的岗位需求一度火热,甚至超过了算法岗。不少同学从诸神黄昏的算法岗战场上退下,转向更偏向工程能力的后台开发岗,从而造成后台开发岗位竞争的大爆发。


后台开发工程师主流使用的编程语言有C++、Java、PHP以及目前慢慢流行的Golang等。本文就将以C++的角度,讲讲如何学习和准备后台开发的岗位。


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++》

 

C++ 后台开发知识点及学习路线

二、算法与数据结构


对于普通人而言,算法的学习最重要的是能够形成基本的算法思维,懂得从程序设计的角度对高重复性的操作做优化。这其中基本算法思想的掌握和常用数据结构的理解是必不可少。这方面的学习更倾向于多看多想多练。

 

1 常见算法类型

(务必能够手撕代码)

  • 排序算法(冒泡、插入、选择、快排、希尔、堆排、归并、桶排、基数、计数)、字符串操作、数组操作、递归、回溯、分治、动态规划等

  • 如何准备算法可见历史文章


 

2 常用数据结构

(务必熟悉底层原理和实现)

  • 链表、栈、队列、树(二叉树、平衡二叉树、红黑树、B树、B+树、哈夫曼树、字典树)、跳表、图

 

3 推荐书籍

  • 《大话数据结构》适合入门学习

  • 《剑指offer》必刷66题

  • 《算法导论》尽量看,能啃完就是大神

 

C++ 后台开发知识点及学习路线

三、计算机网络


网络相关的东西不是很多,关键在于对常见网络协议簇的认识和理解,以及一些常规操作底层设计实现的剖析。比如:


        | 输入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可靠传输

  • ARP解析过程

  • DNS原理

  • HTTP状态码

  • HTTP1.0、HTTP1.1、HTTP2.0区别

  • HTTP和HTTPS区别

  • HTTPS加密过程

  • 非对称加密和对称加密算法

  • Nagle算法

 

2 推荐书籍

  • 《计算机网络自顶向下方法》教材书,可放手边查阅

  • 《TCP/IP详解》重点了解TCP、IP、UDP协议实现

 

C++ 后台开发知识点及学习路线

四、数据库


数据库的一般使用其实不难,但是对于不同数据库的特性、实现机制、应用场景和性能优化方面却能够难倒一大批面试者。同样数据库本身也是非常好的项目实例,往往能够从中学习到许多程序设计的思想和模式。因此,对数据库要明白怎么用、为什么用、怎么用得好这几个方面的问题。


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设计与实现》比较全面的书,可以多看看


 

C++ 后台开发知识点及学习路线

五、操作系统


操作系统的问题会集中在进程和线程,但是这一类的问题往往会以开放题的形式出现。主要考察的是对操作系统组件以及运行过程的理解。比如:


    | 开机登录系统发生了什么?

    | 复制粘贴是怎样操作的?

 

1 重点掌握

  • 物理内存和虚拟内存

  • 缓存IO和直接IO

  • 作业调度算法

  • 线程和进程

  • 进程和线程的调度

  • 线程的创建和结束

  • 线程状态

  • 线程间通信与线程同步机制

  • 互斥锁和信号量

  • 线程池

  • 消费者和生产者

  • 死锁

  • 并发和并行

 

2 推荐书籍

  • 《深入理解计算机系统》很全面的书,这一本就够用了


C++ 后台开发知识点及学习路线

六、Linux系统


对Linux系统的熟练使用是后台开发/服务器开发的必备技能点。这年头,不会几个Linux指令都不好意思说自己是敲代码的。(客户端和前端的同学表示不服)不管怎样,对于Linux系统的掌握无论在哪个方向上,都会有用武之地的。


Linux系统操作和命令

  • top命令

  • ps命令

  • netstat命令

  • awk命令

  • find命令

  • grep命令

  • wc命令

  • sed命令

  • head和tail命令

  • 正则表达式

  • linux如何统计文件中某个字符串出现的频率

  • linux启动的第一个进程

  • linux查看端口占用

  • linux查看CPU和内存使用

  • Linux查看系统负载命令

  • Linux调试程序

  • Linux硬链接和软连接

  • core dump

  • cmake和makefile

  • Shell脚本基本语法和使用

 

2 推荐书籍

  • 《鸟哥私房菜》入门足够了,多敲多写才能更快掌握

 

C++ 后台开发知识点及学习路线

七、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的充分熟悉以及扎实的计算机基础和有相关的学习经历,就已经能够满足各大公司的要求了。当然如果有在基础架构分布式开发等方面的经验,就更是各大厂抢手的香饽饽。

 

本文所介绍的整体学习路线可覆盖绝大多数大厂的面试题目和考察范围,如今学习资料太多,选择路线清晰的适合自己的才最重要。资料不必多,能理解掌握才是最关键的。 

- EOF -

推荐阅读   点击标题可跳转

1、

2、

3、


关注『CPP开发者』

看精选C++技术文章 . 加C++开发者专属圈子