《c/c++求职》-c/c++后端开发
经验之谈
- c++后端岗位(包括了c++语言和c++技术体系)是周期较长的领域,需要放到战略高度,可能第一份工作工资较低,技术累计和方向要想对。
- go职位,一般都是从c++或是java转过去的,一般校招很少直接招进。
- 进入一家公司,关于做“核心技术”还是“螺丝钉”(浮躁的问题), 这个问题的核心是自己能力的提升,自己能力提升之后,公司就会让你做“核心技术”
- 公司很多时候学习到的是业务层面的内容,提升自己不只是需要业务层面,还需要自己有时间去提升(没有实习或是工作经验,就要自己多提升自己)。
市场需求
c++服务器开发招聘公司(随意统计,不全面):
全国:腾讯、深信服、浪潮、字节跳动
成都:大华、网易互娱、招银网络、蚂蚁occeanbase、海康、oppo、vivio、京东、盛邦安全、91ACT、百度
- c++后台开发培养时间很长,对于腾讯c++后台开发,选人很谨慎,高手才有机会。
- 熟悉掌握常用内容,比如操作系统常用api函数、条件变量(虚假唤起)、互斥体(整形变量同步,CAS原理),信号量,临界区等;一定要了如执掌,注意细节,不能用的时候才去查。
技术要求
如何学习c++
- 学习c++语要结合操作系统常用api函数
参考:《linux系统编程》,《windows核心编程》,man手册)
后来的语言,java,python,go都内置了很多SDK,而c++在不断的发展之中。
操作系统常用api函数(?c++函数库中)
eg:recv,MSG_PEEK,实现内存拷贝不删除
- c++中的函数库,中间很多不安全的
内存泄漏:程序设计理念:内存交给程序设计语言;pthon:内存这么重要,要交给操作系统
字符串匹配,不安全的操作,strcpy,strncpy
- c++语言学习
面向对象是主流
掌握常用的c++的语法,除非你是研究编译器的
c++的新标准;c++11(一定要掌握,国外公司很普及)。c++14, c++17, 优化改进大量语言,适用于快速编程,比如关键字的改变;
对于常用stl库(多线程工具库),VS2013, gcc4.8对于c++11兼容很好。
- 项目
- 需要基础知识扎实之外,看开源项目
- 注意项目的细节,小而巧的东西,重要的是你在项目中学到了什么?
即时通讯项目flamemingo
简单的http服务器
- c++提升技能
- 需要基础知识扎实之外,认认真真看开源项目
- 注意项目的细节,小而巧的东西(适合自己),重要的是你在项目中学到了什么?
高性能高并发服务器开发技术栈
学习要求:单机服务做到极致,当单机解决不了问题,拓展到多机,之后引入“数据一致性”,“负载均衡"问题,以及其他技术
技术栈
- c/c++语法, c++ api函数
- 多线程编程
- 同步操作:条件变量(虚假唤起),互斥体(整形变量不加锁,cas),信号量,临界区等
- 网络通信(网络编程+网络知识,不能走两个极端),epoll,socket编程,有多清楚就需要有多清楚。
- 数据库部分:非数据库运维人员(增删减查,权限理论,建表建库,查表查库,根据大数据分表分库,数据库索引包括数据结构,数据库锁的层级)
经验性总结(高级阶段)
内存泄漏,智能指针,写时复制,迟滞,池化思想,推荐书,《提高c++的编程技术》
设置日志模块(性能与成本结合),
断线重连,服务的水平扩展和垂直扩展,心跳,如何设计通讯协议
c++后端转行
可行性方案:windows转linux,弱化界面部分;客户端转服务端;核心是:保证技术栈统一
其他行业转c++后端很难
参考文献
- 网络技术面试题-范蠡live总结()
- 微信公众号:高性能服务器开发