最近有同学问问:刚刚毕业,普通211本科。打算找C/C++方向的工作,目前在网上看到最多的有这几个方向:linux嵌入式C,C++服务器,C++客户端,C++界面(Qt/Mfc)这些方向未来哪个比较有发展性啊,或者说还有其他更好的方向。本人学渣一枚,大学没有好好学习,所以想确定一个工作方向认真积累学习;
那么狮今天就浅浅推荐一下C++服务器后台开发这个方向;基于linux环境和C++语言的服务器程序开发,像qq服务器、微信服务器、王者荣耀服务器等等。虽然现在各种高级语言大火,但是在高性能这一块,c++首选。这也是目前各个大厂,比如鹅厂,字节,京东,阿里等一线互联网企业都在招人的原因,而且中高端的人员还比较稀缺,公司内部挖人的事也不少见。所以别看现在java /python现在市场火热,但c++后台开发这块还是非常站的住脚的。
上面说了,顶级性能的项目上,基本都会使用C++。尤其是机器人、自动驾驶、AI等嵌入和实时系统,都是C++的主要应用方向,在这种层面,几乎没有竞争者。
比如熊厂的搜索引擎、推荐引擎等核心产品,鹅厂几乎所有产品都是C++开发。所以“学好c++将是通往大厂的敲门砖!”
如果学的好,能进BAT也是不错的,腾讯、百度、头条都招大量的Linux c/c++,阿里云也招,另外游戏引擎,高频交易等也是c++的专属领域。
当然也不是谁学了都能找到活干;什么样的人比较适合c/c++后台服务器开发?
- 从事业务开发多年,对底层原理理解不够深入的在职工程师
- 从事嵌入式方向开发,想转入互联网开发的在职工程师
- 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
- 从事非开发岗位(算法岗,运维岗,测试岗),想转后台开发岗位的在职工程师
- 工作中技术没有挑战,工作中接触不到新技术的在职工程师
- 自己研究学习速度较慢,不能系统构建知识体系的开发人员
- 了解很多技术名词,但是深入细问又不理解的工程师
- 计算机相关专业想进入大厂的在校生(本科及以上学历,有c/c++基础)
C++的性能固然强大,但它的范式和机制也给开发者造成很大的负担:
一是 项目开发效率低 ;
二是 学习困难,不好上手 ;
这也导致企业要想招一个合格的C++程序员十分困难!
在主流的编程语言中,c++对软件人才的编程能力要求最高,很多人由于畏惧的原因改学其他的编程语言。所以,学习C++技术的人员数量也很少,可以说十分稀缺。
如果你本身喜欢c/c++,同时也对Linux感兴趣,那就最好不过了。
既然是回答职业发展方向,那就先从找工作的视角看一下待遇如何,然后再看一下大厂的招聘要求都有什么,最后探讨一下C++学什么以及罗列出技术点。
这是刚刚狮打开某知名招聘网站;搜索北京-上海C++后台开发随手截的;深圳更不用说了,一搜前五个,四个都是鹅厂。。。(鹅厂是真爱C++,c++天下第一!!) 可以看的出薪资待遇还是非常不错的;学历要求也并没有那么高;基本上有个研究生学历的话校招简历绝对能过的。
至于技术要求的话狮就没有去截取了;毕竟各个大厂要求都不一样,对哪家厂子有意向的兄弟们,可以自行去看看;既然是一个方向的话,基本上都是大同小异的;这里狮就来一份知识点总结。技术上对标腾讯T9;话不多说,上干货!
腾讯核心技术学习路线总结T1-T9
c++语法基础
首先是入门阶段,除了基本的循环、变量、判断以外,至少需要掌握这些:
- 指针、引用、数组、内存
- 引用与指针区别
- 虚机制:虚函数、虚函数表、纯虚函数
- C 和 C++ 的一些区别,比如 new、delete 和 malloc、free 的区别
- 一些关键字的作用:static、const、volatile、extern
- 四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast
- STL部分容器的实现原理,如 vector、deque、map、hashmap
- 类的封装,构造和析构、静态成员、对象管理;
- 类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;
- 对象动态管理、友元函数、友元类、操作符重载;
- C++编译器对象管理模型分析;
- 运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载);
- 模板特化、偏特化,萃取 traits 技巧
- 继承、虚继承、菱形继承等
- 多态: 动态绑定,静态多态
- 重写、重载
- 智能指针原理:引用计数、RAII(资源获取即初始化)思想
- 智能指针使用:shared_ptr、weak_ptr、unique_ptr等
- 编译链接机制、内存布局(memory layout)、对象模型
- C++11 部分新特性,比如右值引用、完美转发等
一、精进基石
1.数据结构与算法
- 随处可见的红黑树
- 磁盘存储链式的B树与B+树
- 海量数据去重的Hash与BloomFilter,bitmap
2.设计模式
- 创建型设计模式
- 结构型设计模式
3.c++新特性
- stl容器,智能指针,正则表达式
- 新特性的线程,协程,原子操作,lamda表达式
4.Linux工程管理
- Makefile/cmake/configure
- 分布式版本控制git
- Linux系统运行时参数命令
二、高性能网络设计
1.网络编程
- 网络IO与select,poll,epoll
- reactor的原理与实现
- http/https服务器的实现
- websocket协议与服务器实现
2.网络原理
- 服务器百万并发实现
- redis,memcached,nginx网络组件
- Posix API与网络协议栈
- UDP的可靠传输协议QUIC
3.协程框架NtyCo的实现
- 协程设计原理与汇编实现
- 协程调度器实现与性能测试
4.用户态协议栈NtyTcp的实现
- 用户态协议栈设计实现
- tcp/ip定时器与滑动窗口
- 手把手设计实现epoll
5.高性能异步io机制io_uring
- 与epoll媲美的io_uring
- io_uring的使用场景
三、基础组件设计
1.池式组件
- 手写线程池与性能分析
- 内存池的实现与场景分析
- 异步请求池的实现
- mysql连接池的实现
2.高性能组件
- 原子操作CAS与锁实现
- 无锁消息队列实现RingBuffer
- 定时器方案红黑树,时间轮,最小堆
- 手写死锁检测组件
- 手写内存泄漏检测组件
- 手把手实现分布式锁
3.开源组件
- Libevent/Libev框架实战的那些坑
- 异步日志方案log4cpp
- 应用层协议设计ProtoBuf/Thrift
四、中间件开发
1.redis
- redis相关命令详解及其原理
- redis协议与异步方式
- 存储原理与数据模型
- 主从同步与对象模型
2.MySQL
- SQL语句,索引,视图,存储过程,触发器
- MySQL索引原理以及SQL优化
- MySQL事务原理分析
- MySQL缓存策略
3.Kafka
- Kafka使用场景与设计原理
- Kafka存储机制
4.gRPC
- gRPC的内部组件关联
- 基于http2的gRPC通信协议
5.nginx
- nginx反向代理与系统参数配置conf原理
- nginx过滤器模块实现
- nginx Handler模块实现
五、开源框架
1.skynet
- skynet设计原理
- sky net网络层封装以及lua/c接口编程
- sky net重要组件以及手撕游戏项目
2.分布式API网关
- 高性能web网关Openresty
- Kong动态负载均衡与服务发现
3.DPDK
- DPDK环境与testpmd/I3fwd/skeletion
- DPDK的用户态协议栈
- 千万级流量并发的dns处理
- 高性能数据处理框架vpp
- DPDK的虚拟交换机框架OVS
4.高性能计算CUDA
- gpu并行计算cuda的开发流程
- 音视频编解码中的并行计算
六、云原生
1.Docker
- Docker风光下的内核功能
- Docker容器管理与镜像操作
- Docker网络管理
- Docker云与容器编排
2.Kubernetes
- K8S环境搭建
- Pod与Service的用法
- K8S集群管理
- K8S二次开发与K8S API
七、性能分析
1.性能与测试工具
- 测试框架gtest以及内存泄漏检测
- 性能工具与性能分析
- 火焰图的生成原理与构建方式
2.观测技术bpf与ebpf
- 内核bpf的实现原理
- bpf对内核功能的观测
3.内核源码机制
- 进程调度机制
- 内核内存管理运行机制
- 网卡nic与网络协议栈的关系
- 文件系统组件
八、分布式架构
1.RocksDB
- 不一样的kv存储RocksDB的使用场景
- RocksDB的特殊操作
2.云原生分布式数据库TiDB
- TiDB存储引擎的原理
- TiDB集群方案与Replication的原理
3.分布式服务
- 内核级支持的分布式存储Ceph
- 注册服务中心Etcd
九、项目实战
1.图床共享云存储
- fastdfs架构分析和配置
- fastdfs存储原理
- 分布式fastdfs存储集群部署
- 高负载nginx/fastcgi
- 文件传输和接口设计
- 产品上云公网发布/测试用例
2.微服务即时通讯
- IM即时通讯项目框架分析和部署
- IM消息服务器/文件传输服务器
- 消息服务器/路由服务器
- 数据库代理服务器设计
- 文件服务器和docker部署
- 产品上云公网发布/公网测试上线
最后是推荐的一些学习书籍,大家可以自行购买实体书学习,想要电子版的也可以点击链接加入群聊【后端开发技术交流群】:https://jq.qq.com/?_wv=1027&k=8Q8ZY2kH
1. MySQL:《高性能MySQL 第3版》
2.Nginx: 《深入理解Nginx:模块开发与架构分析(第2版)》(陶辉)
3.Redis:Redis设计与实现 (黄健宏)
4.Linux内核:《深入理解Linux内核架构》 (郭旭 译)
5.数据结构与算法:《算法导论》(第3版)
6. 性能分析:《性能之巅 洞悉系统、企业与云计算》 8
7.MongoDB:《MongoDB权威指南》
8.Ceph:《Ceph分布式存储学习指南》(Ceph中国社区)
9.Docker:《Docker容器与容器云(第2版)》。
10.TCP/IP:《Tcp/1p详解卷一卷二卷三》 8
11.Linux系统编程:《Unix环境高级编程》
12.计算机:《深入理解计算机系统》
13. DPDK:《深入浅出DPDK》 8
14.k8s:《Kubernates权威指南》龚正等编著
15.bpf:《BPF之巅 洞悉Linux系统和应用性能》
最后祝大家接下来都能找到如意工作;最后温馨提示,不要忘记刷题哦,十年磨一剑,今日把示君;面试还是非常重要的,不仅要刷题,前辈们的面试经验也要多多学习一些~