用一个案例让你清楚成为Linux服务器开发工程师需要具备什么

随着业务市场的不断壮大,更便捷的开发语言也越来越受到市场的欢迎。Java,python还有新贵golang。
那c/c++语言的开发者市场在哪里。虽然说没有活干说的可能过于夸张,但是面临的事实就是比不了。可能初学一点Java,python等等就能找到一份不错的开发工作,但是如果你只会一点c,又不是校招的话,能找到哪些工作呢?

C,c++不同于Java。Java的技术路线是比较固定的,学好技术栈等待新技术的更新,并学会它,那在薪资上至少不会少。

而c/c++的话,不得不说,路子比较广。选择的方向比较多,这里就不一一说明,只讲Linux后台服务器开发。

在这里我会通过一个厨师的案例通俗易懂的讲述C/C++Linux服务器开发需要具备哪些技能。


1、基础功夫*


要想成为一个厨师的基础想必大家都清楚,也是一道菜最考验厨师的地方,那就是“刀工”! 你会切菜跟你能切好菜完全是两个区别。然而咱们要是从事服务器后台开发的基础就是“算法设计模式”,算法设计模式一共分为以下几种:

(1)排序与查找:插入排序、快速排序、希尔排序、桶排序、基数排序、归并排序

(2)常用算法:布隆过滤器、字符串匹配 KMP算法、回溯算法、贪心算法、推荐算法、深度优先,广度优先

(3)常用的数据结构:平衡二叉树、红黑树、B-树、KMP算法、栈/队列、布隆过滤器

(4)常用的设计模式:单例模式、责任链模式、过滤器模式、发布订阅模式、代理模式、工厂模式

2、工具

身为一个厨师,各种锅碗瓢盆那必须是要熟悉的吧,哪一道菜用什么工具那必须得一清二楚。咱们要想成为服务器开发工程师那也是一样的,也必须也得掌握各种工具,大致可分为以下几种:

(1)持久化 MySQL:MySQL安装配置与远程连接、数据操作源于SQL语句、存储过程与事务处理

SQL函数,运算,临时表等等

(2)消息队列 ZeroMQ:ZMQ编译安装与开发环境搭建、以及各种模式的实现等等

(3)缓存 Redis:Redis编译安装配置、客户端全局唯一ID保存机制、Redis消息队列机制 发布订阅等等

(4)反向代理 Nginx:Nginx开发介绍、反向代理负载均衡配置详解、自定义协议upstream开发等等

(5)Restful Http:Http第三方接口实现、异步Http请求、ngrok与Restlet、长连接与短链接

(6)协调服务 ZooKeeper:ZK编译安装与C API开发环境、集群管理与服务注册等等

(7)NoSQL MongoDB:MongDB安装与开发介绍、MongoDB备份与恢复、MongoDB文档操作

3、菜谱

菜谱这个东西对于一个刚学厨的人来说能起到不小的作用,毕竟集合了前辈的精华与经验在里面。咱们要想成为服务器开发工程师开源框架这个东西肯定要用到的,那有哪些勒?我来告诉你:

(1)TCP协议栈:基于DPDK的高性能用户态协议栈 f-stack、基于Netmap单线程协议栈 NtyTcp、精简版tcp协议栈 LWIP

(2)数据库:Redis数据库的C客户端库 hiredis、Facebook的嵌入键值的快速存储 RocksDB、用于Sqlite3的C++对象关系映射 hiberlite

(3)国际化:Unicode 和全球化支持的C、C++ 和Java库 IBM ICU、不同字符编码之间的编码转换库 libiconv、GNU gettext

(4)压缩:非常紧凑的数据流压缩库 Zlib、快速压缩和解压缩 Snappy、非常快速的压缩算法 LZ4、单一的C源文件,紧缩/膨胀压缩库 Miniz

(5)协程::纯c版的协程框架 ntyco、C++11实现协程库, golang风格 libgo、微信支持8亿用户同时在线的底层IO库 libco

…还有很多,我就不一一列举了。

4、调味

一道菜的好坏就是在于这里,放什么调料,放多少量完全决定了一道菜的口味,那什么是服务器开发工程师的调味品勒?两个字“网络”,也就是网络服务:

(1)源码实现:服务器IO核心— epoll编程实战、客户端多网络连接机制poll、文件IO管理select实战

(2)框架实战:高性能的时间循环 libev、跨平台异步I/O libuv、跨平台的C++库 Boost.Asio、事件通知库 libevent

(3)理论详解:阻塞型 BIO、异步IO AIO、非阻塞型IO NIO

5、试味

放完调料之后我们就得为这道菜试一下咸淡,是吧,当前面这些都理解完了 ,咱们还的学会测试,当你写了一个程序,你得测试他有没有问题,有没有bug,是吧 不然产品小姐姐可能要过来跟你谈谈人生,谈谈理想了,哈哈哈(跑偏了),测试也分为以下几个部分:

(1)调试库:Boost测试库 Boost.Test、内存调试性能分析工具 Valgrind、谷歌C++测试框架 GoogleTest、内存分配跟踪库 MemTrack

(2)测试库::单元测试框架 minUnit、测试用例编写 libtap、轻量级的C++单元测试框架 UnitTest++、自动化测试用例 gtest和luatest

(3)性能工具::高性能代码构建系统 tundra、Http压测工具 WRK、网站压测工具 webbench、高性能构建系统 FASTBuild

6、摆盘

会炒菜了,当然也得会摆盘!咱们服务器后台开发都是基于Linux系统的,所以你得会操作Linux系统,这几个你必须得了解:

(1)系统命令工具:进程间通信设施状态 ipcs、Linux系统运行时长 uptime、iostat、sar、mpstat、pmap、nmon、glances、strace

(2)基础命令工具:系统进程状态 ps、虚拟内存统计工具 vmstat、控制台的流量监控工具 vnstat

进程监控工具 atop,htop、内存使用状态 free

(3)网络参数工具:Linux网络统计监控工具 netstat、显示和修改网络接口控制器 ethtool等等

(4)磁盘参数工具:磁盘卸载 umount、读取、转换并输出数据 dd、文件系统系统 df等等

还有很多,我就不一一列举了,有想要具体大纲的可以后台私信我。

7、管理人员

菜做好了,就得喊服务员上菜了,要通知到位,要有一定的管理能力,在服务器开发中也是的,有一个工程化的管理,具体如下:

(1)架构工程:工程参数配置与编译 cmake、代码规范与命名规则、文件命名与变量命名规则、脚本配置工具 autoconf、代码工程组织架构 Makefile

(2)管理代码:分布式版本控制系统 git、远程仓库,标签管理等等

8、项目实战

在互联网行业中,你有项目经验跟没有项目经验完全是两个层次,出去面试也有很大的优势!

好了,今天的分享就到这里,大家看完应该就知道自己哪方面需要补充了。
每日分享15分钟技术摘要选读,关注一波,一起保持学习动力!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lingshengxueyuan/article/details/107042330