CC学到什么程度可以找工作

大家可能听过“XXX是世界上最好的语言”,实际上的情况是每个语言都有它最适合的领域,Java适合Web,Python适合人工智能与数据分析,C/C++适合开发底层程序,即使是汇编也会在某些对性能要求极其高的项目中用到。当然了不是说某某某语言只能干什么,只是最适合,也可以用来干其他事,只不过很费劲,很麻烦而已,而且有很大可能达不到预期的效果。

目前国内的嵌入式开发非常火,而C/C++主要用于底层的嵌入式开发、驱动开发等,也用于WINCE等嵌入式系统的应用软件开发。

与Java和.NET比,C/C++是一种应用范围更广、运作效率更高的编程语言,软件开发行业一直流传着一句话:

没有学过C++就不是真正的程序员,没有掌握C/C++编程技术就等于没有抓住通向国际一流企业的敲门砖。

从目前就业市场上看,企业对C/C++人才有大量需求,但苦于招不到合适的人。

很多应聘者因为C/C++工作能力的缺乏而被用人单位拒之门外,C/C++人才职场正面临着“有人没活干有活没人干”的尴尬局面。

本篇收集自各招聘要求,基本包括了C/C++不同的发展方向和所要具备的知识和技能点,供参考学习。

一、嵌入式就业方向

岗位技能:

1、熟悉交叉编译的原理,熟练构造/使用交叉编译工具链

2、熟悉Linux(x86,arm)的内核裁减,配置,编译和部署

3、熟悉Linux根文件系统的组成,并能够配置,编译,使用buzybox等工具按照实际要求裁减,构造根文件系统

4、熟练运用C/C++语言进行Linux下应用程序编程

5、熟悉Linux下的多进程/多线程编程,理解进程/线程间同步/通信的概念和方法

6、了解Linux下内核模块的编程的原理和方法,能够修改/添加内核中的驱动程序

7、了解Uboot/GRUB/LILO等bootloader的配置,编译和部署

8、了解Socket编程……

嵌入式知识架构体系:

1、懂硬件

懂硬件的一些原理,至少能看懂原理图,会设计原理图加分;

PCB设计软件AltiumDesigner,PADS等;

会结构设计,会焊板,交付专业制板公司制板

2、C/C++语言和数据结构以及简单算法

基本C/C++语法、数据类型、数组、指针、结构体、链表、类、模板、文件操作、队列、栈等

3、Linux操作系统基础

Linux操作系统的概念、安装方法;

详细了解Linux下的目录结构、基本命令、编辑器VI、编译器GCC、调试器GDB和Make项目管理工具;

MakefileShell脚本编写等知识;

嵌入式开发环境的搭建;

SDK做二次开发

4、Linux网络编程

TCP/IP协议、socket编程、TCP/UDP网络编程、HTTP;

走物联网方向,更要了解一些与云存储相关的网络接口,比如亚马逊、阿里云等

5、外设协议与射频

简单通信接口:UART、I2C、SPI、CAN、USB、GPIO、WiFi、SDIO芯片;

网络通信接口:以太网;

其它输入接口:键盘、鼠标、AD器件、LCD、、2.4G等无线通信模块;

走物联网方向,务必要熟悉MQTT协议

6、了解嵌入式平台系统原理

系统资源、时钟控制器、电源管理、异常中断控制器、nandflash控制器等模块,为底层平台搭建做好准备;

Linux平台包括:内核裁减、内核移植、交叉编译、GNU工具使用、内核调试、Bootloader制作与原理分析、根文件系统制作,以及向内核中添加自己的模块,完整的移动软件

7、驱动开发

熟悉Linux的内核机制、驱动程序与用户级应用程序的接口,掌握系统对设备的并发操作;

熟悉所开发硬件的工作原理,具备ARM硬件接口的基础知识;

熟悉处理器各资源、掌握Linux设备驱动原理框架;

熟悉工程中常见Linux高级字符设备、块设备、网络设备、USB设备等驱动开发;

在工作中能独立胜任底层驱动开发,做好配置

二、桌面应用程序开发(MFC/QT)就业方向

岗位技能:

1、熟练掌握C、C++、ATL、COM等编程技术。

2、熟练掌握Windows系统编程,熟悉窗口、网络和多线程技术。

3、两年以上的嵌入式或windows平台QT应用软件开发经验.

4、熟悉QT跨平台框架,QT图形库和相应的开发工具。至少参加过一个完整的QT项目。

5、具备数据结构、面向对象、多线程和内存管理的基础和经验

6、掌握window/wince开发环境

7、熟悉通用的代码管理工具,例如SVN,GIT等

……

桌面应用知识架构体系:

1、C/C++语言、常用数据结构以及常用设计模式

基本C/C++语法;

数据类型、数组、指针、结构体、链表、文件操作、队列、栈、二叉树、单例;

工厂模式、策略模式等设计模式

2、控件和组件应用

VC++控件,组件、MFC文档类;

Menu、Windows消息;

sendmsg函数、动态链接库;

QtCore、QtGUI、QtMultimedia、QtMultimediaWidgets、QtNetwork、QtQML、QtQuick、QtSQL、QtTest、QtWidgets等Qt基本模块(QtEssentials);

应用QPainter绘图系统、QSS样式表,实现各种自绘窗口

3、操作系统原理和IDE

Windows核心编程、多线程、多进程、线程同步以及进程间的通信;

字符解析协议,如XML和Json;

熟悉VS和QT环境

4、网络编程

TCP/IP协议、socket编程、HTTP;

重点学习网络编程相关API;

了解HTTP协议及其实现方法;

熟悉UDP广播、多播的原理及编程方法;

掌握混合C/S架构网络通信系统设计;

QTCP、QHttp等实现网络编程;

异步非阻塞框架IOCP等

5、调试技术

IDA+windbg高级调试Windows;

产生dump文件进行代码调试;

使用DebugView工具调试

6、数据库设计

掌握SQL语言的实用技巧;

SQLite与Oracle、MySQL的使用方式及区别

7、良好的框架设计

三、图像处理与音视频开发就业方向

岗位技能:

1、熟悉图像处理基本法(边缘检测,区域提取,低通滤波,特征提取);

2、熟悉机器学习算法(例如LR,SVM,ANN等)和深度学习算法CNN等;

3、熟悉opencv,具有运动标检测、特征提取、物体识别相关开发经验者优先;

4、有OCR或字检测等相关研究或项经验;

5、熟悉linux开发环境,熟悉C/C++/Python等任语;

6、有良好的沟通能,责任强,善于协助与分享;

7、可熟练阅读在线英技术站、技术标准者优先。

……

图像处理与音视频知识架构体系:

1、C/C++语言和设计模式

基本C/C++语法、数据类型、数组、指针、类、模板等;

常用的设计模式

2、OpenCV/OpenGL知识体系和各种图像格式和视频格式

OpenCV的环境配置,数字图像处理相关知识;

图像滤波,图像识别,膨胀,腐蚀,直方分布图,二值化,灰度,目标识别、检测、定位等图像处理相关技术;

模式识别相关算法如二值化,SIFT特征,边缘轮廓检测等;

计算机图形学/计算机视觉/相机标定;

三维建模;

各种图像格式的基本概念;

rgbyuvjpg;FFmpeg常见编解码格式用法;

写MP4容器

3、操作系统原理和网络编程以及相关协议

Linux/windows操作系统核心原理、线程/进程;

tcp/udp协议rtmprtpRTSP

4、良好的算法能力

掌握深度学习算法原理和基本模型;

熟练使用深度学习开源框架(如TensorFlow,Keras,Caffe等);

人群、手势、人脸识别

5、良好的数学知识

熟悉matlab的使用、矩阵论;

具备阅读SCI论文等能力

6、开源代码

音视频:Live;webrtc;

图像处理:OpenCV源码

四、Linux后台服务开发就业方向

岗位技能:

1、精通Linux操作系统,具备扎实的Linux环境编程能力;

2、精通C++编程语言并具备丰富的面向对象编程经验;

3、精通网络编程并有高并发系统的开发经验;

4、熟悉MYSQL或其他大型数据库,能够快速根据需求完成高性能数据库设计;

……

Linux后台服务知识架构体系:

1、C/C++语言和设计模式

基本C/C++语法、数据类型、数组、指针、结构体、链表、文件操作、队列、栈等

2、操作系统基础

Linux操作系统的概念、安装方法,线程、进程;

详细了解Linux下的目录结构、基本命令、编辑器VI、编译器GCC、调试器GDB和Make项目管理工具;

MakefileShell脚本编写等知识

3、Linux系统编程与linux操作系统

重点学习标准I/O库,Linux多任务编程中的多进程和多线程;

进程间通信(pipe、FIFO、消息队列、信号量、共享内存、信号)同步与互斥,对共享资源访问控制等重要知识;

提升对Linux应用开发的理解和代码调试的能力;

Linux文件系统

4、网络原理与网络编程

TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、HTTP;

重点学习网络编程相关API;

熟悉HTTP协议及其实现方法;

对比网络框架,做源码分析,如ACE/ICE/ZMQ/Libevent/Muduo等

5、数据库、中间件

Mysql、redisnginxmongdb等中间件

6、集群与分布式架构

7、高性能组件造轮子的能力高并发IO

五、逆向与反外挂就业方向

岗位技能:

1、熟悉X86汇编、C/C++语言;熟悉PE文件格式;

2、熟悉windows或Android平台下反汇编,熟悉X86和arm汇编指令;

3、熟练掌握软件逆向静态分析、动态调试、代码跟踪等技术;

4、熟练使用OllyDBG,IDAPro、GDB等逆向工具;

5、熟悉反跟踪调试技术、脱壳技术;

6、了解各种通用加解密算法;

7、有andriod、IOS反汇编经验优先

……

逆向与反外挂知识架构体系:

1、C/C++语言的逆向表现与X86汇编语言

C语言/C++逆向语法表现,内存分布,X86汇编语言、数组和指针的逆向表现、函数的逆向表现;

学习逆向如果不掌握一些汇编,基本就是盲人摸象,能出成果就只能靠运气。

随着64位机器的普及,32位程序会越来越少,这块的学习难点在于64位CPU和32位CPU差异明显,甚至可以说是差异巨大,大家学习时要注意区分。

2、操作系统与windowsPE

操作系统进程/线程概念,互斥量、信号量、事件等;

PE头,导入/导出表;

重定位/资源/延迟加载导入表

3、游戏反外挂/HOOK/注入

基于注入的反外挂攻防;

基于HOOK的反外挂攻防;

基于CALL的反外挂攻防;

基于窗口的外挂检测;

游戏多开的逆向分析

4、加密/编码算法

基础的,比如异或、url编码等;

base64(出镜率极高)crc校验算法md5;

学习tea和aesdes

这里建议,可以先学习正向开发的部分算法。用不同的算法处理过的数据,会有一些特征;见得多了,很多时候可以在你研究逆向时给予很大帮助。

5、工具类

OD、CE、Windbg等调试工具;

wireshark、x64dbg、frida、visualstudio,其中有一些是开发工具,比如visualstudio;

虽然这些工具是开发工具,但是其中包含很多小工具,比如spy++、depends等

6、框架

逆向框架比较多,比如Cydia、xposed、substrate、ghidra等;

每个框架所适用平台和条件也略有差异,例如:

Cydia是在苹果下做逆向;

xposed是Android下逆向;

substrate是一种拦截方案;

ghidra是一个集成环境等

逆向与反外挂这一部分比较特别,它们的知识点没有尽头。

除了这些就业方向,还有智能硬件和可穿戴设备(智能硬件VR/C++,)、音视频解码(协议优化)、C++游戏开发(游戏方向,熟悉游戏引擎cocos2dx等)等就业方向可以选择。

智能硬件和可穿戴设备(智能硬件VR/C++)

岗位技能:

1、熟悉Unity3D引擎架构设计者优先;

2、熟悉网络编程和多线程编程;

3、熟练掌握C/C++,具有3年以上的C/C++软件开发工作经验;

4、有3D图形引擎开发相关经验;

5、对物理引擎有深入研究,并在游戏等实际应用中有过相关实践;

6、对图形学知识有深入了解,熟练使用DirectX、OpenGL或Metal,并有相关作品。

7、具有一定的英语水平,能够阅读外国学术文档。

8、有OculusRift,SamsungGearVR,或HTCVive开发经验者优先。

……

音视频解码(协议优化)

岗位技能:

1、熟悉音视频编解码处理算法,有相关领域一年以上工作经验;

2、熟悉ffmpeg体系结构,能够移植和优化该系统到移动客户端;

3、熟悉RTMP、HLS等流媒体直播协议(或者相关协议);熟悉vlc或者ffplay、mplayer架构者优先;

4、熟悉TCP/IP和Socket网络编程;

5、熟悉C/C++开发语言;

6、熟悉WINDOWSPC客户端软件开发

……

C++游戏开发(游戏方向,熟悉游戏引擎cocos2dx等)

岗位技能:

1、精通Linux操作系统下的C/C++软件开发;熟悉基础的数据结构和主流数据算法,了解棋牌算法等优先。

2、精通分布式系统设计原理,熟悉TCP/IP网络模型,熟悉网络异步通讯;

3、具有C/S结构软件系统的设计及开发经验;

4、熟悉数据库设计与SQL语言,精通MySql数据库尤佳;

5、熟悉Redis、MQ等开源技术尤佳;

6、熟悉protocolbuffer、json等协议;

7、熟悉主流软件开发流程,有Scrum等敏捷开发团队管理经验者尤佳;有很强的沟通协调能力。

……

往细了说,后端、客户端、游戏引擎开发以及人工智能领域都需要它。

往大了说,构成一个工程师核心能力的东西,都在C/C++里。

如果你希望把工作当成事业、深入了解软件编程的主心骨,那么C/C++这一类底层语言,是你必须要学习和掌握的。

尤其是C++,它作为C语言的延伸和强化,一直是大公司大厂钦点的开发语言。

如今自学成风,C/C++也不乏大佬自学……

但是,在初期找不到感觉和项目练手写代码的话,学习效率非常低。

找我获取编程视频课程+语法词汇解析+面试题库




转载请注明:http://www.aierlanlan.com/cyrz/4402.html