C++的后端和客户端的岗位有什么区别吗?

大家好,我是程序员YT

不少同学学习c++的初衷就是想去做后端,从而衍生出一个问题:C++后端和客户端的岗位有什么区别吗?

那很多同学深度了解之后却发现,c++有后端吗?

其实传统意义来说,C++ 是没有服务端的。就是 C++ 它不是适合做服务器开发。

那为什么又出现了C++ 服务器开发这个词呢?

这其实很多的时候,是由于我们口语表述的时候,把它叫做C++ 后端,但实际上它不是C++ 的后端。

这个后端就是backend,英文单词就是back end。

其实它是一种对外提供支持服务的意思,对外提供服务、提供功能、提供支持的这一层。

其实很多的时候,大家所熟知的,比如做的这种SDK,也有把它叫做后端;包括有些人做的这种自动驾驶的功能,也把它叫做后端;

也有把智能座舱的也叫做后端;包括做路由器开发的,也有的可能把它也叫做后端。

就是这一层,看不见摸不着的,都把它叫做后端。

那对应来说,客户端开发呢?

客户端开发它会有些不一样,它是那种桌面的客户端,也就是 C++ 的客户端。

基本上都是做的桌面,你能看得见的这一类型。

用的方案基本就是这么几套:

要么就是QT;

要么就是MFC;

或者说Linux下面这种GTK ,GTK它这种很少

大多数情况下用的可能都是QT或者MFC或者win 32以及 Windows Form,就是WPF这一套这种客户端开发。

那所谓的 C++ 的服务端呢?

真正传统意义把它叫 C++ 服务端的,我认为这种岗位在boss直聘上面有,但是这种岗位数量不多。

而且那种岗位你把它真的叫做服务端可能会有点难。

因为它跟传统的这种 java 的后端,是有很大区别的。

java这种后端,你会发现他提供的就是这种接口服务

那这里就要额外讲一下: C++ 的后端和 java 的后端,它们的区别在哪里?

我们先说java的后端。

我们比如说,以淘宝为例,在淘宝上面比如看到这个商品的信息,这是 java 提供给你的。

然后比如说我们看到的购买商品的整个流程,这是 java 实现的。

这种接口,它就不会用 C/C++做。

那 C/C++ 在哪工作呢?

淘宝上面我们看到那种商品的图片,这种图片存在哪里?

它有个分布式文件系统,那这个分布式文件系统,就很有可能用 C/C++ 写的。

因为这种功能,这种基础设施功能,用 C/C++ 做会更好。

因为他的接口简单,但是性能要求比较高,

但是比如说商品的这种流程,比如在购买的时候,或者在看到这种商品信息的时候,它就会用 java。

因为他的接口很多繁杂,整个过程间接口会很多,而且偏业务,那这种功能它会选择用 java写。

所以就实现功能来说,这种基础设施开发,那就更偏向c/c++。

所以,如果说大家想选择c/c++做开发,那就的正视一点:

c/c++的方向是很多且各个方向的差距是很大的,不能用后端这两个字去笼统的涵盖它的技术方向!

举个例子:

就比如做音视频的,同样做音视频,不同的公司方案都不一样;

即使做安防,比如海康和大华,他们的软件代码都不一样,都是做安防的;

再比如说做这种存储的,就从做存储设备到这种云存储的厂家,它都是不一样的。

乃至包括做游戏的都叫做游戏,但是做游戏的也都不一样,比如做这种MMO的、包括这种SLG的、包括这种MOBA的这种游戏

它都会不一样。

而且它底层来说,它的方案代码也不一样。即使同样是MMO,比如说做魔兽世界的和做这种传奇类的,那这种它都会不一样

所以大家得去正视这一点,它是客观存在的,改变不了。

大家如果选择了 C/C++ 语言,就得去接受它各个方向都不一样,而且差别很大。

那有朋友说了,我学c/c++,那我总得选择一个方向去专精吧

我的建议是:

如果是应届生的朋友,暂时就不要去挑方向。就在 Linux 上面用 C/C++,然后校招的时候所有的方向都投。

都不要去细分,比如说以后到底是做游戏还是做存储,还是去做音视频。

不要去考虑这个事情,就在 Linux 上面用 C/C++ 做一两款产品,自己能用给别人也能用的产品级项目,然后后面所有方向都海投。

这是选择c/c++方向学习同学最好的上岸姿势。

而难点就是在于,如何去选择,去做好一两个这样可产品化的项目,这一点尤为重要。

倘若有些同学就是对某一个方向有自己的执念,我就非做这个方向不可了,那也是在Linux上用c/c++上开发的基础上,在项目的选择上可以偏向做这个领域的项目,在项目中去体现大家爱好方向的技术内容,而不是all in某一个方向。

毕竟c/c++虽然大方向的岗位是不少,但那也是因为方向多,就单点来说去all in 实在是非明智之选。

如果大家也有技术选型/学习困惑/offer选择的问题,也欢迎大家投稿@程序员YT

全部评论

相关推荐

new和malloc的区别?c++里new了数组怎么释放?32位系统的指针变量占多大字节?int*呢?空类呢?c++多态?为什么需要虚析构?虚析构实现原理?c++可以不写构造函数吗?编译器默认除了构造还会有什么?深拷贝和浅拷贝区别?智能指针哪个c++版本引入的,作用?用过哪些容器?项目里用了哪些容器?为什么用qlist?qmap什么是key?模板的好处?什么时候会用?设计模式了解哪些?自己写过吗?单例模式怎么写?单例要返回非静态指针类型怎么弄?队列和栈的区别?osi七层以及相应协议?网络层的协议?应用层?一些项目问题...网络加密算法知道哪些?tcp的三次握手四次挥手回收写过吗?写服务器基本模...
AI牛可乐:哇,你分享了好多面试经验呢,听起来你准备得很充分呢!👍 关于你提到的技术问题,我来帮你解答一下吧: 1. `new` 和 `malloc` 的区别?`new` 会自动调用构造函数,而 `malloc` 只负责分配内存。`new` 数组释放时用 `delete[]`,比如 `delete[] myArray;`。 2. 在32位系统中,指针变量通常占4个字节,`int*` 也是如此。 3. 空类的实例通常占1个字节,但具体实现可能不同。 4. C++多态允许我们通过基类指针或引用来调用派生类的函数。需要虚析构是因为基类指针可能指向派生类对象,不使用虚析构可能导致派生类析构函数不被调用。 5. 如果不写构造函数,编译器会提供一个默认构造函数。默认构造函数会进行成员变量的默认初始化。 6. 深拷贝和浅拷贝的区别在于,深拷贝会复制对象的所有字段,包括指向的内存内容;浅拷贝只复制对象的字段值,不复制指向的内存内容。 7. 智能指针是在C++11版本引入的,用于自动管理内存,防止内存泄漏。 8. 常用的容器有 `vector`、`list`、`map` 等。具体使用哪个容器取决于项目需求。 关于你问的其他问题,我简单回答一下: - `QList` 通常用于需要频繁插入和删除的场景。 - `QMap` 的 `key` 是映射表中的键值。 - 模板的好处是提高代码复用性,减少代码冗余。 - 设计模式有很多种,比如单例模式、工厂模式等。单例模式可以通过静态成员函数实现。 现在,悄悄告诉你一个小秘密,点击我的头像,我们可以私信聊天哦~🎉 那么,你平时在项目中都用过哪些容器呢?有没有什么特别的经验或者技巧可以分享的呢?😊
点赞 评论 收藏
分享
评论
10
19
分享

创作者周榜

更多
牛客网
牛客企业服务