C++实战项目推荐

文章目录
  1. 回答一(腾讯科技 后台开发工程师)
    1. 方向一:学做小游戏
    2. 方向二:学算法
    3. 方向三:学习 Linux 编程
    4. 方向四:学习网络编程
    5. 其他
    6. 开源项目
  2. 回答二
    1. 摒弃掉一个思维上的 “误区”
    2. 1、写一个Json库
    3. 2、写一个红黑树
    4. 3、写一个 STL
    5. 4、写一个 NoSQL
    6. 5、写一个高并发内存池
    7. 6、写一个线程库
    8. 7、写一个网络库
    9. 8、写一个服务器框架
    10. 9、写一个 WebServer
    11. 10、写一个操作系统内核
  3. 回答三
    1. C++ 开源项目
    2. 小项目练手

初学者一定要注意编程能力是写出来的,不管你去写啥,只要不断的写,你就会感觉到编程能力的提升

编程本质上还是一项技能,熟能生巧在这里一定是适用的。

当你写到1w、10w行、几十万行的时候,一定会感受到量变到质变

回答一(腾讯科技 后台开发工程师)

2,652 人赞同了该回答

代码就是要多写,不管写什么,只要写多了,水平就会从量变到质变。庸人写一万小时可以变成匠人,天赋异禀的人要成为绝世高手也需要一万小时,没有捷径。

但是人是有惰性的,学习的时候需要选择有趣味性、有成就感的东西来练手,否则就坚持不下去。当然了,更重要的是,学了以后能够为找工作积累经验,据我总结,至少有4个方向:

方向一:学做小游戏

比如说贪吃蛇、连连看、打飞机、2048、坦克大战等等。可以学做控制台游戏、qt 做游戏、unreal 做游戏,后两个方向都有详细教程。

如果只是想练习 C++ 积累代码经验,做控制台或者 qt 游戏就可以了

如果自己对游戏非常感兴趣,以后想从事游戏客户端开发,可以学习 unreal。

qt 做游戏的教程:用C++编写游戏容易吗?有什么开源的小游戏吗?能分享一下吗?

unreal 的教程一大堆,自己去买书就可以,我的文章以后也会分享用如何 UE4 做小游戏,有兴趣的可以关注。

方向二:学算法

《算法竞赛入门经典》,刷 Leetcode,记得尽量用 STL,把 C++ 搞熟

入了算法的坑,只有时间不够用的,不存在不知道做啥的情况,因为很多题目几天做不出来太正常了。

现在面试一般都有算法题,掌握常用算法基本上是及格线,算法学好是加分项。各大厂校招待遇最高的一般都是算法岗。

当然,如果想从事算法方向的工作,光看这一本书还不够,还需要吃透西瓜书

方向三:学习 Linux 编程

unix环境高级编程》,熟悉其中的命令,然后自己动手造轮子,把很多命令重新实现一遍**。

比如说 ls、find、tree、sort,很多命令随便一个都是上千行,一年之内实现十个命令就能学很多东西了。

在实现命令的同时把 Linux 的文件系统、进程模型都搞熟了,收获巨大

方向四:学习网络编程

《Unix网络编程》,然后自己做些网络程序,比如说 http 服务器、聊天服务器、文件服务器、代理服务器等等。

如果还有时间,可以学习一些网络框架、rpc等等。

对网络编程熟了,无论以后从事客户端还是服务器端开发,都很轻松

上面的四个方向,随便进入一两个,大学四年写几万行代码,找工作就已经碾压很多人了,记得把学习的代码放在 Github 上,这个可是面试官提前了解你的很好途径

其他

看 STL 源码,慢慢看懂并将其添加注释,放在 Github 上

将 STL 中没有的容器算法写成 STL 的风格实现,这样也有成就感,但是比较枯燥,不如像 Leetcode 上 ac 一道又一道的题目然后看着数字增涨那样激励人心。

开源项目

另外,开源项目看哪些呢?随便找几个库的源码就可以学很久了:

A list of open source C++ librariesen.cppreference.com/w/cpp/links/libs

回答二

1,189 人赞同了该回答

各位校招走 C++ 开发岗的小伙伴看过来!
本人是21届哈工大机械硕士
走的是 C++ 后台开发岗位
今年秋招拿下10+offer
拿过字节 阿里 腾讯的约 50w的 sp

摒弃掉一个思维上的 “误区”

很多搞 C++ 的小伙伴 包括曾经我自己 特别是后端方向的

或多或少都有过一个这样的疑惑 「搞 C++ 到底可以写哪些项目呢?」

在项目这个问题上 对于像我一样的非科班生 首先应该摒弃掉一个思维上的「误区」

拿我们机械举例 我们的课题是机器人

机器人作为一个交叉学科 在课题项目上所用到的东西就像「一锅乱炖」 电路设计,运动控制,视觉算法,机械结构,QT界面,PID优化 调参,维修,拧螺丝,搭硬件平台等等

这种类型的项目是会涉及到一些 C++ 比如用来写 QT界面 调算法API 控制下位机等等

但是目前求职市场上的 C++ 岗位以「后端技术栈」为主 也就是企业那边希望你的项目里面涉及到的技术是「数据库 操作系统 计算机网络」等等那一套

而不是「调调算法API 写写QT界面 控制机器人那一套」

总而言之 如果你要找互联网的 C++ 相关开发岗位

对于我们机械来说 课题所涉及到的项目最大的问题是「广而不精 不对口」

也就是说 虽然你可能会觉得「我在课题上投入了挺多工作量的 而且做的东西好像也挺复杂挺高端的啊 而且也涉及到了写代码啊 python啊 C++啊 面试官肯定会被我做的东西所吸引的吧」

但实际上呢 你做的再高端 付出的工作量再多 和企业那边的「需求是不对口的」

而且就算涉及到了一些编程的东西 也是一些「简单的CRUD 调调算法API 完事」

就算你把这段经历写在简历上 面试管面试的时候也是大概率不会感兴趣的 别人需要的是 C++后端开发

如果你是做这种类型项目的话 可能投递机器人相关公司的开发岗位会好一点

如果你想找互联网相关的开发岗位 就得自己取挖掘渠道 寻找切合相关技术栈的项目去做了

那么到底对于 C++ 技术栈的小伙伴 到底可以尝试哪些项目呢?

C++ 作为一门贴近底层的语言 不像 Java 那样快速的搭建一个业务系统 整不出一些「好玩儿」的东西 只能写一些轮子类型的项目

于是在给小伙伴们分享一下 我在准备秋招的一年多时间里 所搜集到的那些具有可以拿来练手的 C++ 项目

1、写一个Json库

链接: https://github.com/miloyip/json-tutorial/blob/master/tutorial01/tutorial01.md

2、写一个红黑树

链接: https://github.com/william-zk/RB_Tree

3、写一个 STL

链接: https://github.com/Alinshans/MyTinySTL

4、写一个 NoSQL

链接: https://www.lanqiao.cn/courses/1341

5、写一个高并发内存池

链接: https://blog.csdn.net/qq_41562665/article/details/90546750

6、写一个线程库

链接: https://github.com/Winnerhust/uthread

7、写一个网络库

链接: https://github.com/chenshuaihao/NetServer

8、写一个服务器框架

链接: https://www.bilibili.com/video/av53602631?from=search&seid=9029288577396826503

9、写一个 WebServer

可以参考一些书 《Linux高性能服务器编程 还有陈硕的那本书 等等 WebServer 应该很多人都有做。。。

链接: https://github.com/linyacool/WebServer

10、写一个操作系统内核

搜一下「MIT 6.828」感觉课程里的一个作业都可以拿来当做一个项目了

链接: https://github.com/[woai3c](https://www.zhihu.com/search?q=woai3c&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A1692382930%7D)/MIT6.828

全是压箱底的干货 整理不容易
发布于 2021-01-22 22:36

回答三

1,800 人赞同了该回答
学习完 c++ primer?

请问学习完是什么状态,而《C++ Primer》是哪一版?课后习题全都自己做过了?

如果你学习完,指的是把书看完了一遍,那容易忘是必然的,又不是读唐诗宋词,谁能不忘?再说,把自己当活字典有何用?

如果是第四版,我建议你再去看第五版,了解 C++ 11 的语法,基于 C++ 11 标准进行练手,在当前环境下,意义要更大一些。

课后习题实际隐藏着很多小项目。譬如:

  • 第七章引入了两个类:Screen 和 Window_mgr,这实际是一个写字板程序的雏形,有没有想过继续完善下?结合 GUI 框架做出一个小玩意来?
  • 从第十二章到第十三章,逐步引入以下类:StrBlob -> StrVec -> String,这实际是在指导你,从底层实现 STL 基础模板?有没有想过将 String 类完善一下?譬如如何实现 c_str() 的功能?你的 String 效率与 STL 有何区别?能否超越?vector 呢?(这个很难超越)set 呢?(这个有可能)
  • 当然还有诸如 Folder 和 Message 类,实际是一个邮件管理系统的雏形,这样的例子不胜枚举。

所以,如果你真的认真做了习题,或是深入思考过这些题目,我觉得应该是不愁练手的。

而你表现的如此急切,倒是有点缘木求鱼的感觉。

==============干货分割线==================

C++ 开源项目

好的 C++ 开源项目不胜枚举,如:

都很值得去研究学习,但你是否能够一口去吃这些胖子,深表怀疑。大多数人,应该是头晕眼花,不明所以的。

小项目练手

自己想做点小项目练手,我也可以提供一些思路:

  • 高精度计时器:参考 QueryPerformanceCounter function (Windows)
  • STL 容器类:上面提到了。
  • 自己实现智能指针:其实还是习题的范围。
  • 实现类似 Qt 底层的信号槽
  • 实现一个 mini GUI 库
  • 实现一个类似 http://alleg.sourceforge.net/ 或 SDL 这样的游戏引擎,并做一个小游戏。
  • 实现一个简易的序列化框架,想想如何将对象存取于磁盘上。
  • 有人抱怨 c/c++有什么非常好用的字符处理库吗?你来实现一个 std::string 的工具库?
  • 将上面这些东西,都封装成 dll/so/lib 的形式,供自己或更多人日后使用。

经历以上过程的洗礼,C++ 能忘就忘了吧,没关系~

以上内容摘自知乎问答