在求职的时候,简历上项目会直接影响能否获得笔/面试机会。但是部分同学在书写简历的时候,往往都觉得没有项目可写。或者是求职岗位与自己的经历不太相符,不知道应该根据岗位补充些什么些项目。

我自己在补充项目经验的时候,会先从自己的熟悉编程语言出发,然后寻找一些比较常见的库或框架,然后利用这些库去试着做一些好玩的小项目。有精力的话会去仔细研读一些比较好的库源代码,了解实现的机制和原理。更深层次的可以参考知名库,然后可以试着自己写一个类似的库。毕竟对于没有实际大型项目经验的学生来说,造轮子更是能力的体现。

所以本文将把我所熟知的一些比较C++相关的类库以及一些面向初学者的小工具推荐给大家看看,希望大家能够从中找到补充自己项目经验的方向。更多一手经验分享可添加微信公众号【业余码农】。

常见C++库和框架

C++ Standard Library

C++标准库,常用的函数以及库基本都出自这个库,也是C++ISO标准的一部分.目前比较流行使用的是C++11标准,也有更新的C++14,C++17标准。每个标准都有版本独特的新特性。

Standard Template Library

标准模板库STL,提供了C++常用的模板类和函数,富含十分流行和常用的算法和数据结构。STL创始人可能都没有想到,STL现在最常用的场景竟是在算法竞赛和算法刷题中。

Boost

同样是大量C++库的集合,下一代标准的新特性往往会出自于Boost中。

Qt

跨平台的应用程序和用户界面框架,应该是最广为人知的图形库了,能够很容易的建立图形程序,同时附带十分丰富的开发文档,能够用于快速开发桌面界面应用。

QCustomPlot

一个基于Qt的绘图控件,可以很简单的画出各种曲线和图谱,对于一般用户来说上手十分容易。

ROOT

一个用于数据处理和分析的框架,常在科研机构中被使用。

MFC

微软封装的一个Windows API库,能够很方便的建立桌面应用。

Boost.Asio

一个通过异步操作完成网络和底层I/O编程的跨平台的C++库。Asio的争议挺多的,有人觉得写得不容易,也有人觉得性能不够好。

Muduo

陈硕编写的,是一个用于Linux多线程服务器的C++非阻塞网络库。这是一个比较高质量的基于Reactor网络库,代码十分简洁,非常适合初学者阅读学习。

WebSocket++

基于C++/Boost Aiso的websocket 客户端/服务器库。

OpenMP

一个可用于并行计算的框架,可直接在代码中添加比较简单的指令来实现程序的并行化,大大降低了并行编程的难度和复杂度。

OpenSSL

一个可实现安全通信以及加密的开放源代码库,广泛应用在网页服务中上。

SQLite

一个轻量级的关系数据库,只有几百KB,可以正确嵌入到你的项目中。

Cocos2d-x

一个开源的移动2D游戏框架,可以构建2D游戏,互动图书,演示和其他图形应用程序,同时能够跨平台使用。

OpenCV

非常流行和热门的开源计算机视觉类库,实现了大量图像处理和计算机视觉方向上的通用算法。

VTK

一个用于三维计算机图形学,图像处理和可视化的开源免费软件系统。

ITK

一个开源的、跨平台的开源图像分析系统,与VTK相结合通常用于医学影响的可视化和分析处理。

Geant4

粒子探测器模拟引擎,在高能物理或核物理的仿真计算中经常用到。

FFmpeg

一个用来记录、转换数字音频、视频,并能将其转化为流的开源程序,可非常简单的通过这个软件对视频进行常见操作。

FreeImage

一个免费开源的图像处理库,支持现在多媒体应用所需的通用图片格式和其他格式。

常见编译器

Clang

由苹果公司开发。

GCC

GNU编译器集合。

Microsoft Visual C++

MSVC,由微软公司开发。

集成开发环境

Code::Blocks

免费的跨平台集成开发环境。

Microsoft VisualStudio

自微软的集成开发环境,应该是目前Windows系统下最流行的IDE。

Qt Creator

于Qt框架的跨平台的C++开发环境。

CMake

跨平台的免费开源软件用于管理软件使用独立编译的方法进行构建的过程。

文本编译器

Visual Studio Code

微软2017年推出的一个轻量但功能强大的跨平台源代码编辑器,提供及其强大的扩展插件和功能,业界口碑极好。

VIM

全键盘操作,脱离鼠标。熟练使用起来效率奇高。不过初学者入门稍难,有耐心者可用。

Notepad++

Windows下的免费开源编辑器,十分小巧。

UltraEdit

之前比较常用的编辑器,功能很强大,但貌似要收费。

Sublime Text

界面好看,具有非常丰富的快捷命令和扩展插件,我个人常用。

以上包含的C++常用库,各种类别的都有。对于C++初学者而言,可以从这些类库中寻找感兴趣的库进行使用以及深入研究。

而对于缺项目的校招同学而言,也可以从这些库中寻找能够实现个人项目的题目。比如比较常见的项目可参考以下方向:

  1. 仿muduo,实现个人网络库
  2. 基于Qt,QCustomPlot,OpenCV等库实现图像分析处理系统
  3. 基于FFmpeg实现视频流处理
  4. 基于Asio网络库实现聊天室
  5. 基于各种网络库实现网络服务器/web服务器/http服务器等
  6. 基于常用库实现文件操作和处理软件等
  7. 文件压缩加密、解压解密等处理
  8. 基于Cocos2d-x或unity3d实现小游戏制作
  9. 简单的日志系统
  10. 等等了…