目录
- C++优劣势
- 适配行业
- 目标岗位(c/c++和一门golang)
- 35岁
- C/C++语言
C++优劣势
C++劣势在于他不是做业务开发的
不能与golang、python、java这种gc语言相比
用C++来写业务,如果没处理好,会使得整个进程退出
而使用java这些语言,很难把整个写崩溃
C++适合写基础架构,C++的后端并不是做业务开发。拿C++与Java相比本身就是耍流氓的行为。而C++就适合一直做技术,但是java这些不得不面临必须得去理解业务。
适配行业
量化、安全、高性能、CDN、游戏服务、自动驾驶(一辆车上的N多个sensor的通信)、基础架构、虚拟化、网络开发、存储、推荐算法、流媒体服务器、金融业务
目标岗位(c/c++和一门golang)
量化:C/C++,PYTHON
安全:
高性能计算:(gpu、网络)
cdn:
游戏服务:
自动驾驶:
基础架构:
虚拟化:
dpdk网络开发:
(不区分c/c++,语言只是工具)
存储:
(越往上走越靠近gc,越往底层越靠近c/c++)
流媒体服务:
推荐算法:
嵌入式:
桌面开发:(适合毕业前几年)
35岁
找一个垂直领域(网络开发、存储),qt开发做十年,包括业务开发做十年,只懂业务,不懂底层。
C/C++语言
1、数据结构/算法:哈希、红黑树、列表链表、B树B加树
2、设计模式:单例、策略、观察者、工厂模式、迭代器模式、过滤器模式
3、标准库:STL、C++新特性
(写的C式的C++,用上新的东西反而成为一种负担,要以解决问题为目的)
Linux工程管理:makefile/cmake、git/svn、htop/top、netstat、tcpdump(tcp抓包)、iperf
每一家公司代码框架都会一样,可能业务不同,但是底层的东西相近。学的时候不要倾向于某一个框架。要当做计算机素养去学
网络:网络编程(select、poll、epoll)(多线程多进程)(阻塞非阻塞)(同步异步)(业务、实现网络框架(且不能仅仅停留在框架上,))、网络原理(eth、ip、udp/tcp、http、实现tcp协议栈(自己实现的对代码理解是不一样的))
能够有积累的(业务、C/C++设计的风格、计算机素养)。换一个公司底层设计开发是不一样的
4、基础组件:内存池、线程池、数据库连接池、请求池、原子操作、ringbuffer、无锁队列、定时器方案、死锁检测、内存泄露、日志、网络块、共享内存、probuf
做C和C++的一定要有造轮子的能力,轮子:软件设计的固定模式,如果有20-30个轮子,水平不会太差,看很多源码,就很相似,会有本能知道要怎么做。
5、中间件:mysql、redis、nginx、grpc、mq(消息队列)
(mysql这些自己本身就是一个进程),慢慢形成自己的技术栈。不要以工作的要求耽误自己对技术的追求,工作肯定以业务为主
6、框架(适配行业):比如游戏开发skynet、从前面内容再去看待框架就很好理解、openresty(cdn/waf)、dpdk(网络)、spdk(存储)、cuda(gpu)、workflow(网络编程范式)。而这些需要以前面为基础,很多代码内容也都是似曾相识
7、devops:运维和部署、docker、k8s。站在整个产品上看开发。
8、性能分析:kernel(磁盘、网络、内存、内核)、分析问题的时候就取决于计算机素养,本身对计算机的理解。bpf/ebpf、火焰图、中间件、gtest(测试用例)
9、分布式:分布式数据库TiDB、分布式文件系统ceph、分布式协同etcd
技术能力:随着年限开发,能不能进这家公司看开发能力,在这家公司走的多远取决于软实力。在没有开发能力,开发能力不扎实时,软实力就没用。所以基本功扎实,软实力也很重要(组织能力、沟通能力、管理能力)。软实力需要多看(历史、哲学、人物传记、小说),运气只是时间的问题。考虑整个职业