|
这个问题必须强行答一波!!
各位实习/校招走C++后台开发还在找项目的同学看过来!!
我是去年本科拿到 BAT等 大厂offer,也是 C++ 后台开发方向。
今年指导过好几个学弟拿到 C++ 后台开发大厂offer。
我真的是幕了!! 他们好几个都 40w +,今年太香了!
看完这个回答,相信一定对你也有用。
首先,学完 C++ Primer 是哪种学完?
有做那些练习题吗?还是说只是像看小说一样看完了。
另外,相信看到这个问题一定是一些刚学C++不久的同学
其它答主提到的如 Google Chrommium之类好是好,但是不适合初学者! 大家别被误导了!!
大家都说学 Java 可以写各种后台服务,但是 C++ 除了 Web Server 都不知道写什么。
在这里,我给大家一些提供一些 C++ 项目的思路:
- 游戏,比如贪吃蛇、五子棋、坦克大战,是不是觉得很简单?给大一做的?那你可以单机的基础上,加入网络编程,去做一个联机的游戏,在这个过程你会涉及到网络编程、序列化、反序列化、协议制定、状态同步等知识!
- TinySTL,也就是去模仿实现 STL 各种类库,比如 Vector、Map这些,从源码去理解 STL
- 网络库、网络编程,可以去写网络库,参考 muduo,或者 WebServer ,Redis Client、RPC、FTP 等和网络编程相关的
- 写一些库,比如 json、xml解析库、加解密、压缩解压缩等等这种小工具、类库,不仅能锻炼 C++ 编程,还能提高一些类似编译原理、密码学方向的知识。
初学者一定要注意编程能力是写出来的,不管你去写啥,只要不断的写,你就会感觉到编程能力的提升。
编程本质上还是一项技能,熟能生巧在这里一定是适用的。
当你写到1w、10w行、几十万行的时候,一定会感受到量变到质变,可以看看这个回答,相信对你也有启发:
你的编程能力从什么时候开始突飞猛进?
编程没有捷径可以走,一定是不断的练习。
在这里我给大家推荐几个学习 C++ 的开源项目,尤其适合校招同学,记得 @编程指北 点赞收藏呀!
一、webbench
Webbench是Radim Kolar在1997年写的一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。
非常适合用来学习网络编程,代码量也不大,适合初学者:
项目地址:http://home.tiscali.cz/~cz210552/webbench.html
二、Lightweight Web Server
听说今年人均一个web server??那这里也给大家推荐几个,都比较类似,核心用到的技术点和思想就是epoll、threadpool、one loop per thread、日志等。
这里推荐两个:
https://github.com/linyacool/WebServer (牛客大佬)
https://github.com/imarvinle/WebServer
主要特性如下:
状态机解析HTTP请求,目前支持 HTTP GET、HEAD方法
- 添加定时器支持HTTP长连接,定时回调handler处理超时连接
- 使用 priority queue 实现的最小堆结构管理定时器,使用标记删除,以支持惰性删除,提高性能
- 使用epoll + 非阻塞IO + 边缘触发(ET) 实现高并发处理请求,使用Reactor编程模型
- epoll使用EPOLLONESHOT保证一个socket连接在任意时刻都只被一个线程处理
- 使用线程池提高并发度,并降低频繁创建线程的开销
- 同步互斥的介绍
- 使用RAII手法封装互斥器(pthrea_mutex_t)、 条件变量(pthread_cond_t)等线程同步互斥机制,使用RAII管理文件描述符等资源
- 使用shared_ptr、weak_ptr管理指针,防止内存泄漏
什么?你说不想卷WebServer?好咧,那咱们来点其它的轮子:
三、libjson
这是一个超级高效的JSON解析器,并且高度可定制的,非常轻巧。
主要特性:
- Lazy or aggressive JSON Parsing
- 100% JSON compliant
- C++ interface
- Language independent C interface
地址:https://sourceforge.net/projects/libjson/
其它不错的json库: https://github.com/cesanta/frozen
好吧,你说也不想写json解析器,那咱们来看看key-value存储?
四、KV存储
这是一个基于LSM结构的KV存储,levldb常常被用作各类数据库、存储系统的存储引擎,估计在BAT都能找到它的使用。
设计思想值得学习,LevelDB是一个持久化存储的KV系统,和Redis这种基于内存的KV系统不同,LevelDB不会像Redis一样大量使用内存,而是将大部分数据落到磁盘上。LevleDB在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储文件中是依次顺序存储的,而应用可以自定义key大小比较函数,LevleDB会按照用户定义的比较函数依序存储这些记录。
地址:https://github.com/google/leveldb
还可以学习下RPC框架,目前使用C++做后台开发的语言的公司基本都有一套自己的微服务框架,所以可以尝试自己去写一个非常初级的rpc框架,学习下网络通信、序列化、服务注册、服务发现等知识,这里推荐几个,有非常成熟的,也有比较适合学习的:
五 RPC框架
这是它的简介:c++11, high performance, cross platform, easy to use rpc framework.
It's so easy to love RPC. Modern C++开发的RPC库就是这么简单好用!
是的,这是一个使用modern C++ 开发的rpc框架,rest_rpc为用户提供了非常简单易用的接口,几行代码就可以实现rpc通信了,来看个 :
这是一个加法服务,是不是很简单?
地址: https://github.com/qicosmos/rest_rpc
另外的一些成熟RPC框架:
百度:https://github.com/brpc
google:https://www.grpc.io
搜狗:https://github.com/sogou/workflow、https://github.com/sogou/srpc
srpc特性:
这些成熟的rpc框架可以去学习下设计思路和整体实现
六、序列化
RPC框架都会用到序列化框架,那这里也可以顺便学习下pb,看pb是如何做到高效、扩展性好的。
地址:https://github.com/protocolbuffers/protobuf/
七、MiniOS
这个其实更属于 C 语言,但是C++方向的也可以作为项目,典型的比如 xv6(mit 6.828)、哈工大 linux 0.11
八、手写 STL
可以看下这个github仓库,比较完善了:
https://github.com/Alinshans/MyTinySTL
在这,顺便送大家一份我整理的包含几十本经典 C/C++ 电子书大全合集:
获取方式可以看看这篇文章,附带了电子版的PDF下载链接,赶紧收藏起来吧:
C++ 必读书籍推荐
另外,看完 C++ Primer 只能算 C++入门级,还需要看很多书,写很多代码才能达到,熟练,在这也给大家一个学习路线吧:
C++入门路线
在这里也给初学的同学一份书单吧,慢慢啃~
1. 《C++ Primer》
这本书基本包括了 C++ 11 的全部特性,最好把前面三部分:C++基础、C++标准库、类设计者的工具都看一遍,我当时花了一个多月断断续续看到了第16章模板那里。
2. Effective 系列:《Effective C++》、《More Effective C++》、《Effective STL》
第一本是重点,光看《C++ Primer》缺少实践的话,大概率还写不出合格的 C++ 代码,而《Effective C++》就是通过 55 条非常具体的做法告诉你什么样才是符合 C++ 编码规范的,可以缩短你写出合格 C++ 代码的时间,减少踩坑,强烈推荐必读,后面两本优先级稍低,可以有时间再读。
3. 《STL 源码剖析》和《深度探索 C++ 对象模型》
看完 Primer 和 Effective,你应该已经能够比较熟练的使用C++了,但是还缺少对 C++ 底层实现机制的认识。比如虚函数表、成员变量布局等,同时对于 STL 库可能也仅仅停留在使用上。
推荐的这两本可以分别完善你在 C++ 底层实现和 STL 源码、原理上的认识。
以上书籍同时建议和侯捷老师的视频配合服用,效果更佳。
直接在 B 站搜索「候捷 C++」即可,主要有以下几个系列:
- 《C++内存管理》
- 《STL源码分析》
- 《C++ STL与泛型编程高级》
- 《C++11 新特性》
侯捷 C++ 视频课程一直都被看过的同学广为推荐,最近发现 B 站关于侯捷老师的 C++ 视频课程几乎全部被下架了,于是自己搜集了一套非常全的视频,大家赶紧去下载保存备用:
侯捷C++全套视频|含下载方式
到这里,C++基本入门了,,,后面修行就靠个人了哈哈哈
然后,还有些同学想学习网络编程,这里推荐几本书,挺不错的:
Linux 下网络编程核心的包括网络 IO 和系统编程两个部分:
- 进程间通信方式: 信号量、管道、共享内存、socket 等
- 五大 IO 模型:同步、异步、阻塞、非阻塞、信号驱动
- 高性能 IO 两种模式:Reactor 和 Proactor( 但是 Linux 下由于缺少异步 IO 支持,基本没有 Proactor
- 多线程编程:互斥锁、条件变量、读写锁、线程池等
- IO 复用机制:epoll、select、poll(破解 C10K 问题的利器)
推荐的书:
- 《Unix网络编程》
- 《Unix环境高级编程》
- 《Linux高性能服务器编程》
- 《Linux多线程服务器端编程》
觉得不错的话,可以关注我, 帮我 @编程指北 点个赞哟,让知识分享给更多需要的同学~ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|