lurk 发表于 2023-10-3 19:19:35

校招C++大概学习到什么程度?

我是一名准大三学生,大一学了C语言和数据结构,大二学了一年java基础和web开发,想在大三自学C++以后投C++岗位,想问各位前辈C++的学习路线以及校招想要进大厂大概需要学习哪些知识。

伊阳进 发表于 2023-10-3 19:20:16

这还不简单,看看腾讯,字节这些大厂面试题就知到了
1. 【腾讯】C++岗-微信面经
2. 【腾讯】C++岗-暑期实习后台开发(已拿offer)
3. 【腾讯】C++岗-WXG事业群实习-三轮面经
通过面经可以看出,C++ 这块需要掌握的

[*]指针与引用的区别,C 与 C++ 的区别,struct 与 class 的区别
[*]struct 内存对齐问题,sizeof 与 strlen 区别
[*]面向对象的三大特性:封装、继承、多态
[*]类的访问权限:private、protected、public
[*]类的构造函数、析构函数、赋值函数、拷贝函数
[*]移动构造函数与拷贝构造函数对比
[*]内存分区:全局区、堆区、栈区、常量区、代码区
[*]虚函数实现动态多态的原理、虚函数与纯虚函数的区别
[*]深拷贝与浅拷贝的区别
[*]一些关键字:static, const, extern, volatile 等
[*]四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
[*]静态与多态:重写、重载、模板
[*]四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr
[*]右值引用
[*]std::move函数
[*]迭代器原理与迭代器失效问题
[*]一些重要的 STL:vector, list, map, set 等。
[*]容器对比,如 map 与 unordered_map 对比,set 与 unordered_set 对比,vector 与 list 比较等。
[*]STL容器空间配置器
等等。
根据书来学就可以了,然后学到一些重点,可以重点关注一下。
书籍推荐:
1、《C++Primer》,这本书内容很多的,把前面基础的十几章先看一看,不用从头到尾全啃,后面可以字典来使用。
2、《STL 源码剖析》,必看书籍,得知道常见 STL 的原理,建议看个两三遍。
3、《深度探索C++对象模型》,这本主要讲解面向对象的相关知识,可以帮你扫清各种迷雾。
视频推荐:
可以在 B 站侯捷老师讲的视频,不适合初学者,讲的大部分都是进阶,大家 B 站搜索侯捷就行
面试题:
学完之后可以通过面试题复习,这里整理了:
15万字C++开发面试手册出炉(C++和计算机基础全有)​mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100011759&idx=1&sn=d57d89b2abefb6ed8370cf56928ed070&chksm=4e43a53b79342c2d81dd60222ff01df14cef4a4264350514e6221db1abe380ffabfd223b08bc#rd​mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100011759&idx=1&sn=d57d89b2abefb6ed8370cf56928ed070&chksm=4e43a53b79342c2d81dd60222ff01df14cef4a4264350514e6221db1abe380ffabfd223b08bc#rd书籍下载看这里:
少走弯路,必读计算机经典书籍推荐(含下载方式)​mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100010970&idx=1&sn=91f14c2c08e9fb8a0539c55b7459d60a&chksm=4e43a00e79342918ed8052851f455faa705a6a137eefec91ee04debc885302bc86c5032f5368#rd​mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkx不过呢,除了C++,计算机网络和操作系统这块也经常会问,需要掌握的有
计算机网络

物理层、链路层:

[*]MTU,MAC地址,以太网协议。
[*]广播与 ARP 协议
网络层

[*]ip 地址分类
[*]IP 地址与 MAC 地址区别
[*]子网划分,子网掩码
[*]ICMP 协议及其应用
[*]路由寻址
[*]局域网,广域网区别
传输层(主要就是 TCP)

[*]TCP首部报文格式(SYN、ACK、FIN、RST必须知道)
[*]TCP滑动窗口原理,TCP 超时重传时间选择
[*]TCP 拥塞控制,TCP 流量控制
[*]TCP 三次握手与四次挥手以及状态码的变化
[*]TCP连接释放中TIME_WAIT状态的作用
[*]SYN 泛洪攻击
[*]TCP 粘包,心跳包
[*]UDP 如何实现可靠传输
[*]UDP 与 TCP 的区别
[*]UDP 以及 TCP 的应用场景
应用层

[*]DNS 原理以及应用
[*]HTTP 报文格式,HTTP1.0、HTTP1.1、HTTP2.0 之间的区别
[*]HTTP 请求方法的区别:GET、HEAD、POST、PUT、DELETE
[*]HTTP 状态码
[*]HTTP 与 HTTPS 的区别
[*]数字证书,对称加密与非对称加密
[*]cookie与session区别
[*]输入一个URL到显示页面的流程(越详细越好,搞明白这个,网络这块就差不多了)
书籍推荐:零基础可以先看《图解HTTP》,当然,也可以直接看《计算机网网络:自顶向下》这本书,这本书建议看两遍以及以上,还有时间的可以看《TCP/IP详解卷1:协议》。
帅地也写过一个极简入门教程:
计算机网络入门简介​www.iamshuaidi.com/359.html​www.iamshuaidi.com/359.html操作系统

总结起来大致:
1、进程与线程区别
2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量
3、互斥锁与自旋锁的底层区别
4、孤儿进程与僵尸进程
5、死锁及避免
6、多线程与多进程比较
7、进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket
8、管道与消息队列对比
9、fork进程的底层:读时共享,写时复制
10、线程上下文切换的流程
11、进程上下文切换的流程
12、进程的调度算法
13、阻塞IO与非阻塞IO
14、同步与异步的概念
15、静态链接与动态链接的过程
16、虚拟内存概念(非常重要)
17、MMU地址翻译的具体流程
18、缺页处理过程
19、缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法
书籍推荐:《现代操作系统》
书籍下载看这里:
少走弯路,必读计算机经典书籍推荐(含下载方式)​mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100010970&idx=1&sn=91f14c2c08e9fb8a0539c55b7459d60a&chksm=4e43a00e79342918ed8052851f455faa705a6a137eefec91ee04debc885302bc86c5032f5368#rd​mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100010970&idx=1&sn=91f14c2c08e9fb8a0539c55b7459d60a&chksm=4e43a00e79342918ed8052851f455faa705a6a137eefec91ee04debc885302bc86c5032f5368#rd操作系统和计算机网络面试题

一、计算机网络 45 道

1. 为什么需要三次握手?两次不行?
2. 为什么需要四次挥手?三次不行?
3. TCP与UDP有哪些区别?各自应用场景?
4. HTTP1.0,1.1,2.0 的版本区别
5. POST和GET有哪些区别?各自应用场景?
6. HTTP 哪些常用的状态码及使用场景?
7. HTTP状态码301和302的区别,都有哪些用途?
8. 在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?
9. HTTP 如何实现长连接?在什么时候会超时?
10. TCP 如何保证有效传输及拥塞控制原理
11. IP地址有哪些分类?
12. GET请求中URL编码的意义
13. 什么是SQL 注入?举个例子?
14. 谈一谈 XSS 攻击,举个例子?
15. 讲一下网络五层模型,每一层的职责?
16. 简单说下 HTTPS 和 HTTP 的区别
17. 对称加密与非对称加密的区别
18. 简单说下每一层对应的网络协议有哪些?
19. ARP 协议的工作原理?
20. TCP 的主要特点是什么?
21. UDP 的主要特点是什么?
22. TCP 和 UDP 分别对应的常见应用层协议有哪些?
23. 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?
24. 保活计时器的作用?
25. TCP 协议是如何保证可靠传输的?
26. 谈谈你对停止等待协议的理解?
27. 谈谈你对 ARQ 协议的理解?
28. 谈谈你对滑动窗口的了解?
29. 谈下你对流量控制的理解?
30. 谈下你对 TCP 拥塞控制的理解?使用了哪些算法?
31. 什么是粘包?
32. TCP 黏包是怎么产生的?
33. 怎么解决拆包和粘包?
34. forward 和 redirect 的区别?
35. HTTP 方法有哪些?
36. 在浏览器中输入 URL 地址到显示主页的过程?
37. DNS 的解析过程?
38. 谈谈你对域名缓存的了解?
39. 谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?
40. HTTPS 的工作过程?
41. HTTP 和 HTTPS 的区别?
42. HTTPS 的优缺点?
43. 什么是数字签名?
44. 什么是数字证书?
45. Cookie 和 Session 有什么区别?
答案看这里:Java面试题必知必会(附答案)
二、操作系统 32 道

1. 简单说下你对并发和并行的理解?
2. 同步、异步、阻塞、非阻塞的概念
3. 进程和线程的基本概念
4. 进程与线程的区别?
5. 为什么有了进程,还要有线程呢?
6. 进程的状态转换
7. 进程间的通信方式有哪些?
8. 进程的调度算法有哪些?
9. 什么是死锁?
10. 产生死锁的原因?
11. 死锁产生的必要条件?
12. 解决死锁的基本方法?
13. 怎么预防死锁?
14. 怎么避免死锁?
15. 怎么解除死锁?
16. 什么是缓冲区溢出?有什么危害?
17. 分页与分段的区别?
18. 物理地址、逻辑地址、虚拟内存的概念
19. 页面置换算法有哪些?
20. 谈谈你对动态链接库和静态链接库的理解?
21. 外中断和异常有什么区别?
22. 一个程序从开始运行到结束的完整过程,你能说出来多少?
23. 什么是用户态和内核态
24. 用户态和内核态是如何切换的?
25. 进程终止的方式
26. 守护进程、僵尸进程和孤儿进程
27. 如何避免僵尸进程?
28. 介绍一下几种典型的锁?
29. 常见内存分配内存错误
30. 内存交换中,被换出的进程保存在哪里?
31. 原子操作的是如何实现的
答案看这里
15万字C++开发面试手册出炉(C++和计算机基础全有)除此之外,还得掌握 MySQL

下面这些是我认为比较重要的知识点:
1、一条 sql 语句是如何执行的?也就是说,从客户端执行了一条 sql 命令,服务端会进行哪些处理?(例如验证身份,是否启用缓存啥的)。
2、索引相关:索引是如何实现的?多种引擎的实现区别?聚族索引,非聚族索引,二级索引,唯一索引、最左匹配原则等等(非常重要)。
3、事务相关:例如事务的隔离是如何实现的?事务是如何保证原子性?不同的事务看到的数据怎么就不一样了?难道每个事务都拷贝一份视图?MVCC 的实现原理(重要)等等。
4、各种锁相关:例如表锁,行锁,间隙锁,共享锁,排他锁。这些锁的出现主要是用来解决哪些问题?(重要)
5、日志相关:redolog,binlog,undolog,这些日志的实现原理,为了解决怎么问题?日志也是非常重要的吧,面试也问的挺多。
6、数据库的主从备份、如何保证数据不丢失、如何保证高可用等等。
7、一些故障排查的命令,例如慢查询,sql 的执行计划,索引统计的刷新等等。
对于 2-4 这四个相关知识,面试被问到的频率是最高的,有时候面试会让你说一说索引,如果你知道的多的话就可以疯狂扯一波了,记得我当时总结了一套扯的模版:
先说从 B 树角度说为啥索引会快-》趁机说一下索引的其他实现方式-〉不同引擎在索引实现上的不同-》系统是如果判断是否要使用索引的-〉明明加了索引却不走索引?
只有你对各种数据结构和索引原理都懂,你才能扯的起来,对于事物和锁也是,当时面试官问了我事务是如何保证一致性的,刚好我研究过 ,redolog,binlog,undolog 这些日志,然后和面试官扯了好久。
书籍:《MySQL必知必会》和《MySQL技术内幕》
具体可以看我写的 MySQL 学习路线:
肝完了,我的 MySQL 学习之路​mp.weixin.qq.com/s/uo5_wD1iYySNwQRfDJaHLA​mp.weixin.qq.com/s/uo5_wD1iYySNwQRfDJa最后就是网络编程

网络编程这块,有些公司还是问的挺多的,特别是 IO 多路复用,同步非同步 IO,阻塞非阻塞啥的,当时面腾讯基本每次都问,,,,学习 C++ 这块还是要重视一下,下面我说一下比较重要的吧。
1、IO多路复用:select、poll、epoll的区别(非常重要,几乎必问,回答得越底层越好,要会使用)
2、手撕一个最简单的server端服务器(socket、bind、listen、accept这四个API一定要非常熟练)
3、线程池
4、基于事件驱动的reactor模式
5、边沿触发与水平触发的区别
6、非阻塞IO与阻塞IO区别
书籍:可以看一看《Unix网络编程》
书籍我给大家弄好了
少走弯路,必读计算机经典书籍推荐(含下载方式)

活跃概况 发表于 2023-10-3 19:21:07

程度:市面上多数面试题都要能答的出来,面试题我之前在别的问题下回答过,直接看这个吧:
假如你是面试官,你都会问c++和linux系统知识那些问题呢?希望各位大神能够集思广益 ?C++学习路线:先推荐你个C++学习仓库,如果基础不好的话先补基础知识,视频学习和看书因人而异,视频推荐清华大学郑莉老师的视频,书籍的话《C++Primer》和《EffectiveC++》足矣,更重要的是实践,书中的代码都自己敲一遍,课后题都自己做一遍,自己尝试动手写个小项目。
校招还是多刷算法题吧,校招更多的就是背面经和考算法。

youxibiao 发表于 2023-10-3 19:21:13

C++ 学习路线及推荐学习时间:

一、C++基础(3个月)

1、面向对象的三大特性:封装、继承、多态
2、类的访问权限:private、protected、public
3、类的构造函数、析构函数、赋值函数、拷贝函数
4、移动构造函数与拷贝构造函数对比
5、深拷贝与浅拷贝的区别
6、空类有哪些函数?空类的大小?
7、内存分区:全局区、堆区、栈区、常量区、代码区
8、C++与C的区别
9、struct与class的区别
10、struct内存对齐
11、new/delete与malloc/free的区别
12、内存泄露的情况
13、sizeof与strlen对比
14、指针与引用的区别
15、野指针产生与避免
16、多态:动态多态、静态多态
17、虚函数实现动态多态的原理、虚函数与纯虚函数的区别
18、继承时,父类的析构函数是否为虚函数?构造函数能不能为虚函数?为什么?
19、静态多态:重写、重载、模板
20、static关键字:修饰局部变量、全局变量、类中成员变量、类中成员函数
21、const关键字:修饰变量、指针、类对象、类中成员函数
22、extern关键字:修饰全局变量
23、volatile关键字:避免编译器指令优化
24、四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
25、右值引用
26、std::move函数
27、四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr
28、shared_ptr中的循环引用怎么解决?(weak_ptr)
29、vector与list比较
30、vector迭代器失效的情况
31、map与unordered_map对比
32、set与unordered_set对比
33、STL容器空间配置器
参考书籍:《C++ Primer》(第5版)、《STL源码剖析》、《深度探索C++对象模型》
二、计算机网络(1个月)

1、OSI7层网络模型:应用层、表示层、会话层、运输层、网络层、链路层、物理层
2、TCP/IP四层网络模型:应用层、运输层、网际层、接口层
综合OSI与TCP/IP模型,学习五层网络模型:
从上向下架构:应用层、运输层、网络层、链路层、物理层
链路层:
3、MTU
4、MAC地址
网络层:
5、地址解析协议
6、为啥有IP地址还需要MAC地址?同理,为啥有了MAC地址还需要IP地址?
7、网络层转发数据报的流程
8、子网划分、子网掩码
9、网络控制报文协议ICMP
10、ICMP应用举例:PING、traceroute
运输层:
11、TCP与UDP的区别及应用场景
12、TCP首部报文格式(SYN、ACK、FIN、RST必须知道)
13、TCP滑动窗口原理
14、TCP超时重传时间选择
15、TCP流程控制
16、TCP拥塞控制(一定要弄清楚与流量控制的区别)
17、TCP三次握手及状态变化。为啥不是两次握手?
18、TCP四次挥手及状态变化。为啥不是三次挥手?
19、TCP连接释放中TIME_WAIT状态的作用
20、SYN泛洪攻击。如何解决?
21、TCP粘包
22、TCP心跳包
23、路由器与交换机的区别
24、UDP如何实现可靠传输
应用层:
25、DNS域名系统。采用TCP还是UDP协议?为什么?
26、FTP协议(了解)
27、HTTP请求报文与响应报文首部结构
28、HTTP1.0、HTTP1.1、HTTP2.0对比
29、HTTP与HTTPS对比
30、HTTPS加密流程
31、方法:GET、HEAD、POST、PUT、DELETE
32、状态码:1、2、3、4、5**
33、cookie与session区别
34、输入一个URL到显示页面的流程(越详细越好,搞明白这个,网络这块就差不多了)
参考书籍:《计算机网络》(第5版)、《TCP/IP详解卷1:协议》、《图解HTTP》
三、操作系统(1个月)

1、进程与线程区别
2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量
3、互斥锁与自旋锁的底层区别
4、孤儿进程与僵尸进程
5、死锁及避免
6、多线程与多进程比较
7、进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket
8、管道与消息队列对比
9、fork进程的底层:读时共享,写时复制
10、线程上下文切换的流程
11、进程上下文切换的流程
12、进程的调度算法
13、阻塞IO与非阻塞IO
14、同步与异步的概念
15、静态链接与动态链接的过程
16、虚拟内存概念(非常重要)
17、MMU地址翻译的具体流程
18、缺页处理过程
19、缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法
参考书籍:《Unix环境高级编程》、《Linux多线程服务器端编程》
ps:操作系统的内容看起来不是很多,实际上每个问题答案的底层原理要弄懂还是很考验基本功的。比如:互斥锁与自旋锁的区别,实际上涉及到阻塞时线程的状态是不一样的。互斥锁阻塞的线程是挂起的,此时系统会优先执行其它可执行的线程,就会将阻塞的线程切换到可执行线程,而当临界区执行的时间非常短时,此时线程切换频繁、开销较大,此时就会采用自旋锁的方式,让阻塞的线程处于忙等状态。
四、网络编程(1个月)

1、IO多路复用:select、poll、epoll的区别(非常重要,几乎必问,回答得越底层越好,要会使用)
2、手撕一个最简单的server端服务器(socket、bind、listen、accept这四个API一定要非常熟练)
3、线程池
4、基于事件驱动的reactor模式
5、边沿触发与水平触发的区别
6、非阻塞IO与阻塞IO区别
参考书籍:《Unix网络编程》
ps:网络编程掌握以上几点就够了,要搞明白还是要花很久时间的。
五、数据结构与算法及刷题(2个月)

1、数组
2、链表
3、栈
4、队列
5、堆
6、二叉树:二叉搜索树、平衡树、红黑树
7、B树、B+树
8、哈希表及哈希冲突
9、排序算法:冒泡排序、简单选择排序、插入排序、希尔排序、归并排序、堆排序、快速排序
(要求能够面试时手写出堆排序和快速排序)
10、二分法:旋转数组找target
11、回溯法:全排列、复原IP地址
12、动态规划(掌握基本的动态规划的几个题其实就够了,如:斐波那契数列、接雨水、股票的最佳买入时机)
参考书籍:《大话数据结构》
ps:建议刷题与数据结构算法同时进行,这样理解得更深入。刷题网站leetcode,刷完《剑指offer》其实就能解决大部分面试手撕了。
六、mySQL数据库(7天~15天)

1、数据存储引擎:InnoDB、myISAM、Memory
2、数据库索引类型及原理:B+树索引、哈希表索引
3、锁:悲观锁、乐观锁
4、事务:事务的四大特性(ACID)、事务并发的三大问题、事务隔离级别及实现原理
5、多版本并发控制实现机制(MCVV)原理
参考书籍:《高性能MySQL》
ps:这里也可以参考本人写的博客:mysql知识点总结。
七、项目(2个月)

如果时间够的话就可以写一个项目,当然大部分人写的项目都是一个烂大街的项目,也就是“web高性能服务器”。其实就是根据陈硕大神写的《Linux高性能服务器编程:使用muduo C++网络库》进行改编,当然啦,读懂这本书还是很耗时的,学习其中的思想也会受益匪浅的。
总结

按照上面推荐的内容来学习的话,要学习得深入一点的话1年的时间肯定需要的,甚至2年也不足为其。当然对于非科班的学生来说,大部分都没有充足的时间的,这时候建议尽量把C++基础、计算机网络、操作系统、网络编程、数据结构与算法这五个部分的内容学得很扎实,大概6个月的时间。
然后说一下我本人的学习情况:
2020年3~8月:疫情在家大概3月份开始准备学习C++,因为在家效率极低,玩三天学一天,到7、8月份也只是会用C++,然后写了个MFC的小项目练了练手。
2020年9月:前半个月学习计算机网络,后半个月学习深入理解计算机系统(当然第一遍只看懂个大概)
2020年10月-12月:写多线程服务器项目(即改编muduo),这个过程中伴随学习网络编程、操作系统、C++各种知识(之前C++只学了皮毛)
2021年1月-2月:学习数据结构与算法并刷题,刷了不到200题。(其中寒假在家玩了半个月)
2021年3月:开启海投模式,先投了一批小公司,基本都简历挂,总算有几个小厂给了面试机会,边面试边复习。3月中旬开始投大厂,除了美团一面挂,字节、腾讯、百度面试都很顺利,没挂过,清明之前拿到了字节的口头offer。
2021年4月:字节的正式offer邮件。
(说实话我的学习效率不是很高,因为我喜欢睡懒觉。)
资料推荐:无意中发现一位大佬的 C++ 刷题 pdf 笔记
<hr/>作者:华中大守门员
来源:实习总结及C++后端开发学习路线总结_笔经面经_牛客网

一抹白云 发表于 2023-10-3 19:22:02

不邀自来,把2019-2020年过去一年间自己学习C++的经验和过程分享出来,希望帮助到后来学习C++的在校生和小白们。
首先分享一下我自己以前准备校招过程中做的一些学习笔记,比如C++、计算机基础等的笔记分享给你,也正是因为这些笔记的存在才顺利拿到的字节跳动SP的offer!
普通双非学校出身的我是如何拿到抖音研发岗SP的?
http://pica.zhimg.com/v2-eff87aead9e1c802d58765f0a2156f14_r.jpg?source=1940ef5c

自己一个字一个字当时跟着视频中做

阿秀个人在学习C++过程中的笔记链接:https://pan.baidu.com/s/18XAu8OTsJmX_sfZ1qpmCcw   提取码:fw8s图解操作系统、网络、计算机组成PDF下载!那些让你起飞的计算机基础知识~1、背景介绍

我是普通二本的计算机专业,本硕都是。不好意思拉知乎上各位高材生的后腿了,毕竟985满天跑,211遍地是,哈哈。
我研二上开始自学 C++ ,然后慢慢学习操作系统、计算机网络、数据库、Linux等,一直到 2020 年秋招阶段慢慢开始投简历,在这过程中投递简历将近100份,笔试54场,面试三十四场。
最后拿了 6 个 offer(字节跳动研发岗SP、华为通用软件开发、百度C++研发、B站后端研发、深信服C++研发以及农业银行研发岗),最后在字节跳动尘埃落定了。
互联网一二线大中厂校招面经PDF版本合集(阿里、百度、字节等)2、C++学习过程

以下内容摘自个人C++学习路线文章:拓跋阿秀:能拿BAT、TMD等国内互联网大厂的C++学习过程分享~萌新入门

我在 2019 年 8 年之前对C++的认识只停留在 “Hello world” 水平上,本科时期学的全忘光了,面向对象三大特性:封装、继承、多态,我就记得一个多态。出于想要掌握一门工业级别的语言的初衷,去年这个时候我开始了C++ 的学习之路。
也有人问我为什么选择 C++ 而不是 Java ,我能说是喜欢 C++ 的严谨和不好学吗...“我在 B 站上大学” 对我而言并不是一句玩笑话,第一反应就是去B站上看看有没有相关视频,再三选择最终确定了 黑马机构出版的
2017 黑马 C++ 教学视频_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili,楼主当时开着 1.5 倍速很快就看完了,还跟着视频里敲了不少代码,这个视频会教你一些最基本的 C++ 常用知识比如多态、继承之类的,但是都不是很深,只是大概提了一下。看完之后大概懂了 C++ 有哪些知识点了,可后来证明,我确实有点想多了。

http://picx.zhimg.com/v2-204d47abda06eac3c0aff9283185c758_r.jpg?source=1940ef5c
黑马的视频很快就看完了,又开始看经典的 C++ 书籍,我选择了《C++Primer 5th》,这本书相当不错,共分为 19 章:前 8 章为变量、循环等基本知识,第 8-12 章为标准库的知识比如容器算法等,第 13-19 章设计拷贝重载等知识。课后习题基本都做了一下,并且从网上找了正确的习题答案,进行查漏补缺,自己也在书上也做了不少笔记,大概花了 3 个月左右的时间过了一遍这本 C++ 圣经。

http://pic1.zhimg.com/v2-8ec4b19b19f03b97254d718a809caff8_r.jpg?source=1940ef5c
在看前 8 章期间就已经直接去力扣开始怼题了,怂什么,就是干,干就完事了,在实战中学习进步,哈哈!大概是在 2019.9 月开始到 2019.12 月期间前前后后刷了 180 多道力扣。

http://pic1.zhimg.com/v2-174351b45327d990d1234f3e436a42c8_r.jpg?source=1940ef5c
在 11.13 号那天最疯狂,我一晚上提交了 29 次,清楚地记得刷了 7 道题,那天我是夜里三点回宿舍睡觉的,最后一道题卡了我 2 个多小时才做出来。
最近发现三位谷歌大神写算法刷题资料,支持Java、C++、Go三种语言,其中对于面试中考察较多的链表、树、动态规划、数组等知识点讲解的都很全!如果你算法能力比较弱,比如互联网大厂面试中手撕算法比较差的话,那要好好看看了。
能白嫖,速来!三份Github高星LeetCode刷题PDF笔记!!支持Java、C++、Go三种语言!渐入佳境

时间来到了 2019.12 月末,在学习《C++Primer》与刷题过程中,我知道了还有 STL 这种新奇的东西,也知道了另外四本经典的 C++ 书籍《Effectcive C++ 》、《More Effectcive C++》、《STL 源码剖析》、《深度探索 C++ 对象模型》。

http://picx.zhimg.com/v2-722ed9e3d13518a02e1d08d83606e28e_r.jpg?source=1940ef5c
我一口气全买了回来,看完《C++Primer》后一头扎进《STL 源码剖析》这本书里看,可是看的我云里雾里,完全不知作者侯捷老师在书中所云为何物。遂转而去看《Effective C++》越看越觉得自己是头猪,也越看越了解到C++的博大精深,花了大概一个月的时间看完了这本书后又接着去看《More Effective C++》,这个时候学校也快放假了,就把两本Effective C++带回家了,打算寒假在家接着看。
在坐火车回去的路上我也没闲着,把 B 站的
[侯捷]C++ STL 体系结构与内核分析--从平地到万丈高楼_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili的视频下载在 ipad 上,一边坐火车一边看视频。
2019年寒假期间在家刷完了两本 Effective C++,又看了侯捷老师的其他 C++ 视频:
侯捷C++手把手教学(上),适合新手_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili侯捷手把手教学C++(下)已补充完毕_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili[侯捷]C++内存管理--从平地到万丈高楼_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili[侯捷]C++程序的生前死后--解密 CRT Startup code_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili除了前两个视频是开2倍速看的,其余的均是仔细慢慢看的。侯捷老师真不愧是 C++ 大师啊,真不是吹的,被侯捷老师深深折服了。
当时2019年寒假的时候家里有人生病住院了,我去陪床,把自己的ipad带着,一边陪护病人一边刷C++视频,233~后来的事情大家也知道了,过年期间疫情爆发了,后期导致迟迟不能回学校。在此期间也知道了C++跟网络编程联系很大,决定去看看网络编程与 C++ 结合的一些案例。
持续充电

经过查阅资料,最终三本书走进了我的视线:《TCP/IP 网络编程》、《Linux 高性能服务端编程》、《Linux 多线程服务端编程:使用 muduo C++ 网络库》,最先看的是游双老师的那本《Linux 高性能服务端编程》,看了几天只有一个感觉:我去,这什么啊,这种书居然有那么多人推荐。
后来证明,还是我自己太菜了,水平不到看不懂而已233~转而去看《TCP/IP 网络编程》,确实不错,是本很好的书,我还去 github 上找了别人做好的笔记,一边看别人的笔记一边看书,最后又在别人的笔记基础上删删改改形成了自己的笔记,把书中的例子也敲了个遍。

http://pic1.zhimg.com/50/v2-e643b8450a5ff4a430ef9eaf9bc12c85_720w.jpg?source=1940ef5c
然后再把丢开的那本《Linux 高性能服务端编程》拿过来看,感觉真的完全不一样了,游双老师在书里说的也能理解了,一边看书一边照着书中敲代码,加深理解。
也确实感谢这两本书,后来在这两本书的基础上写了一个烂大街的 Web 服务器作为自己的项目写在简历上了,其中也参考了 tinyhttpd兜兜转转终于可以回校了,在 2020.5 月份回的学校,回校后里面就把《STL 源码剖析》这本书捡起来看,越看越觉得跟视频中讲的一模一样,我看的很快,不到十天就看完了。然后手中就只剩下最后一本 C++ 经典书籍:《深入探索C++ 对象模型》了,我依然是先查阅了别人总结好的笔记资料,然后在别人的基础上修修改改,形成自己的笔记的。

http://picx.zhimg.com/50/v2-65cbe5b3ac59f1987a135b227c3ae306_720w.jpg?source=1940ef5c
至此, C++ 算是正式入门了,看了这么多书,你特么告诉我才入门?哈哈,听起来也许是个悲伤的故事,但是,是的。
后来就忙于秋招也没有继续看别的 C++ 书籍,只是把以前看的书进行二轮甚至是三轮回顾了,因为有以前的基础,所以在回顾的时候速度也是很快的,《 C++Primer 5th 》大概花了 15 天就二刷完了,两本 Effective C++ 也是的。
后期上升

上述那些 C++ 书籍基本上足够应付校招了,后面在看书过程中发现自己在 C++ 并发上欠缺不少东西,又去买了《C++ 并发编程实战》,没事就翻着看看。与此同时也在看 muduo 那本书,B 站真的是宝藏网站,只是抱着尝试的心态搜索了一下,居然真的发现B站上有作者陈硕的讲解视频:
c++高性能服务器网络编程(陈硕)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili针不戳。
以上就是我过去一年里学习 C++ 的大致历程,其实真正发力的时间是在 2019.8 - 2020.1 月期间,并没有多少时间,其余时候都是偷奸耍滑去了~~
其实学完了这些还是不足以应对比较大型的 C++ 项目开发,你可能还需要接着看《 C++ 沉思录 》与《 C++ 模版元编程 》以及其他的优秀书籍接着进阶。
好的 C++ 开发者从来不怕找不到工作,就是因为想要学好它不容易,换一种思路就是好好学好它对于你以后的裨益可能是你无法想象的,即使你日后从事 Java/Go 的工作,因为语言的原理都是相通的。
种一棵树的最好时间是十年前,其次就是现在,加油!
结语

在不知不觉间,才发现自己居然看过不少书了。有时候功夫到了自然结果就出来了,没有什么其他特别的方法和诀窍的,有时候你会觉得困惑、迷茫、不明白,可能只是时间还没到。冲就完了,哈哈。
前段时间的某天我突发奇想,想看看知乎上计算机领域内评分最高的Top 20 经典书籍有哪些?

http://pica.zhimg.com/v2-fbdabf0bb1e95dbe08a1c7aac125d988_r.jpg?source=1940ef5c
分别抓,哦不,手动收集了知乎计算机经典图书推荐问题下的高赞回答后得出的好书集锦,选择标准就是每本书都在推荐版上出现过 5 次及其以上!!
最终将抓到进行数据清洗和合并,得到一份计算机领域类的书籍榜单!
说实话让我觉得有些意外,因为Python类和机器学习类书籍确实不少,不过Top 3却是一等一的经典!
就是下面这三本,现在免费分享一下自己以前抓到的豆瓣上计算机领域内评分最高的Top 20 经典书籍

[*]深入理解计算机系统(原书第3版)
[*]计算机程序的构造和解释(原书第2版)
[*]程序员的自我修养: 链接、装载与库
免费下载!告诉你知乎计算机领域内最经典的Top 20 书籍有哪些~<hr/>---update1---

其实对于一些学校不是985/211学校的学生而言,简历是很重要的,你需要在10秒之内给筛选简历的HR一个“你还不错,值得一面”的信息,这可不是一件容易的事。
下面贴一下个人简历修改过程吧。
以下内容摘自个人简历修改文章:拓跋阿秀:一份百投百中的计算机校招简历是如何迭代足足26版的?首先需要明确一点的就是简历上只是你展示自己的一种途径,最终决定面试成功与否的关键在于简历内容,而不是简历本身,如果你本来就很水,简历做得再好也没啥用。
笔者在以前秋招的时候足足修改了自己简历26版之多,现在拿出我第 1 版、 15 版、 26 版的简历为大家展示其中的变化,以下分为专业技能、实习经历、项目经验、奖项荣誉等这几个部分分别叙述。
专业技能
来吧,直接看三版区别。

http://pica.zhimg.com/v2-b202d234a8b0b034f64687ab42054628_r.jpg?source=1940ef5c

第1版专业技能

http://picx.zhimg.com/v2-f0938fc6841f530220211d55fd6b43d9_r.jpg?source=1940ef5c

第15版专业技能

http://picx.zhimg.com/v2-0ba7d4e6a987c35f3fb925442f78926c_r.jpg?source=1940ef5c

第26版专业技能

要点
1、技能栈可能是简历中最重要的两项之一(另一个是实习/项目),如果不匹配的话面试官也没兴趣问下去。比如你是 C++ 岗位,但是写了很多熟悉CNN深度学习、tensorflow框架啥的,挺厉害的,但是抱歉,我们不招你这样的。
2、用好动词:了解、熟悉、掌握、精通四个等级,一般不建议写精通,因为你可能会被怼到怀疑人生。
3、把技能栈描述清楚,并且适当展开。比如不要光秃秃地写一句“熟悉数据结构与算法”,适当展开一下,比如我熟悉十大排序中的快排、归并、堆排,但是其实还有计数排序和桶排序我没有写出来,留了一手。因为面试官很多时候看你会什么反而不问你什么,他会默认你会这些东西,他问一些拓展的点,如果你拓展的能答出来,那写在简历上的还能不会吗?
比如你可以写“冒泡、快排”,不写归并,这样面试官问的时候可能会问“除了冒泡快排,你还知道什么排序?”这个时候你再把你藏起来的归并说出来,并且手撕一下。这一回合下来肯定很加你的面试分啊,面试官以为考查到了你不会的点,其实这都是在你的计划之内的。正所谓虚虚实实,虚则实之,实则虚之~满满的都是套路啊。
4、注意细节部分。该大写大写该小写小写,比如 C++ 而不是 c++、Java而不是 java、Python而不是python、MySQL 而不是 mysql、Redis 而不是 redis,往往细节决定成败,一点一滴慢慢做起。
实习经历
不知道你们发现没有,在实习经历这一栏字是越来越多的,描述也是越来越具体的。

http://picx.zhimg.com/v2-f01c63ff08a93474d778dd37e932bf23_r.jpg?source=1940ef5c

第1版实习经历

http://picx.zhimg.com/v2-0a3c08cfa70ba735102da2a8797a4064_r.jpg?source=1940ef5c

第15版实习经历

http://pic1.zhimg.com/v2-edb297a593da714cd33036b906f55561_r.jpg?source=1940ef5c

第26版实习经历

要点

1、对于互联网公司来说,实习是加分项,特别是大厂实习,非常加分!所以小伙伴们能去实习一定要去实习。
2、实习过程中要注意找实习中的亮点、难点所在,不要老老实实的把整天写SQL这种杂活一板一眼的写出来了,适当包装自己的工作并不过分,毕竟“面试造火箭,工作拧螺丝”,面试可能是最难的一关了。
3、好好描述实习经历。这里并没有什么固定的模板,一般来说可分为:实习背景、所用技术、实习难点、实习成果、个人收获。
实习背景:尽量精简一点,或者像下面我所写的项目背景那样写
所用技术:尽可能贴合当前应聘的岗位,把用到的技术说出来。或者你也可以像我这样,我当时实习是一个爬虫岗位,用的是 Python,跟 C++ 其实并不相关,所以我尽量避免 Python 字眼的出现。学着灵活一点~
实习难点:可以按照“针对XXX问题,采用XXX技术,成功实现了XXXX,最终XXXXX”这样的格式来写,描述清楚。
实习成果:最好要有具体的指标说明,比如阿秀简历中的“7*24小时”、“32条”、“20W*”都是具体的量词,不要说“极大地提高了XX效果”,这种虚的话。如果你不知道具体指标,自己瞎编一个,不要太离谱就行。。。
个人收获:站在面试官的角度来说,他是希望看到你在一段实习经历中学到了什么的,所以最好也要有个人收获说明。Github开源!清华大学计算机系课程攻略共享计划(附赠离线版资源)!
项目经验
因为笔者实习经历本来就不是很好,并不匹配我要应聘的岗位,所以我把重点放在了项目上,准备的项目真的是花了大心思了,看这三版变化你就能够看出来了。


http://picx.zhimg.com/v2-b8da1099fbb41cf7078596ac04d685b5_r.jpg?source=1940ef5c

第1版项目经验

http://picx.zhimg.com/v2-c7ac491318ec4ec2aded938e5826d901_r.jpg?source=1940ef5c

第15版项目经验

http://pica.zhimg.com/v2-b97a0b6389476a50f931b6a01ef452dd_r.jpg?source=1940ef5c

第26版项目经验1

http://picx.zhimg.com/v2-36ada31631b42f0217b32a2d6b74d348_r.jpg?source=1940ef5c

第26版项目经验2

http://pica.zhimg.com/v2-3e861e371a5985be7e96ab3315d3092c_r.jpg?source=1940ef5c

第26版项目经验3

要点
1、项目数量不套太多,2-3 个足够了,太多了反而不好,把最想介绍的、把握最大的放在第一个。
2、自己准备的项目千万要注意贴合岗位要求,或者你像我这样直接把实验室的项目拿出来,包装一下。
3、项目描述一定要清晰明了,好好描述。可以参考上面的实习经历,大致分为:项目背景、所用技术、项目工作(自己承担的工作)、项目成果、个人收获,重点描述个人工作部分,这是灵魂所在。简要说来就是“针对XXX问题,采用XXX技术,成功实现了XXXX,最终XXXXX”,或者像我那样写也是可以的。
4、建议你每次面试的时候都用手机录音再进行面试复盘,听一听自己在面试过程中哪里答的不好,针对性的对简历进行修改,这样你的简历才能逐渐完美。
奖项荣誉

因为简历篇幅有一页多,但两页又不太够的样子,所以在第 26 版简历中我把两个比较有含金量一点的奖项单独拎出来介绍了一下,把简历凑到了两页左右。


http://pic1.zhimg.com/v2-51d8dd56e9fbb41e265123d56215eb1c_r.jpg?source=1940ef5c

第1版奖项荣誉与等级证书

http://picx.zhimg.com/v2-55dc808ac966d8a3b527f84cc54392dc_r.jpg?source=1940ef5c

第15版奖项荣誉与等级证书

http://picx.zhimg.com/v2-cb017ede2c76d48fe4a9073b32b3d777_r.jpg?source=1940ef5c

第26版奖项荣誉与等级证书

要点
1、该加粗加粗。比如第15版中我就把两个“一等奖”和“六级”字眼加粗了,像本科的可以在这里写上一些社团经历或者参加的比赛之类的,毕竟你在学校里呆三四年还是要拿一点事情出来证明你这四年事干了点事,如果没有的话,那就把你室友的经历借来使使,注意不要说漏嘴了就行。
2、如果要写上个人评价也是可以的,但麻烦有点新意和个人思考在里面,不要千篇一律的写自己“爱看书、爱学习”之类的,太假了...那你可以写自己爱看书,比如在“每年当当网消费XXX元,每年固定看 5 本技术书;热心于网络课程,在 B 站学习 Java/C++/前端知识,我在 B 站学知识”等还是可以写一写的。
忠告

对于我们普通人而言,要找到一份不错的互联网工作并没有那么容易。希望大家早做准备,平时多积累,不要等到每年的七八月份快找工作的时候,再去准备写简历,那个时候你很可能发现自己啥也没有,过往经历和技术栈就跟一张白纸一样,两眼一抹黑,啥也写不出来。
有意识的去积累可以写在简历上的内容,稳扎稳打、步步为营、一步一个脚印到最后你才能收获满满的果实,相信我到后期你的收获可能会远远超出自己的预期,那些你以前想也不敢想的公司居然会变得触手可得。
这是我最终的秋招总结,还有其他内容,包括如何写简历等都放在个人的专栏里了。

<hr/>
写了这么多手都酸了,如果我的上述回答对你有所帮助的话,帮@阿秀学长点个赞吗,感谢!
卑微求个赞ing。。。算了,再给你分享一个宝贝吧,这回应该总不会白嫖我了吧,一个赞就足够!

http://picx.zhimg.com/v2-a3afa662748228aec7a43670c3159f67_r.jpg?source=1940ef5c
最近发现三位谷歌大神写算法刷题资料,支持Java、C++、Go三种语言,其中对于面试中考察较多的链表、树、动态规划、数组等知识点讲解的都很全!如果你算法能力比较弱,比如互联网大厂面试中手撕算法比较差的话,那要好好看看了。
能白嫖,速来!三份Github高星LeetCode刷题PDF笔记!!支持Java、C++、Go三种语言!对了,如果你也是跟我以前一样,现在还在学校里读书,并且是打算在毕业后直接参加工作的话,那么不妨看看下面这篇文章。
这篇文章会告诉你如果打算毕业后找工作,那你应该准备些什么,需要提前做哪些准备,也会安利一个很好用的网站,是纯免费的,可以说每一个计算机专业打算找工作学生的福音。
这个网站主要是帮助应届生求职的,有笔面经、校招信息、大厂真题、各岗位练习题、还可以直接投递简历,都是和企业合作的,跟官网投是一样的,据我所知这是是现在校招网站做的最好的了,所以信息更新的非常快,里面有笔面经、校招日程、各种内推码以及很多大厂真题和练习题。
最重要的他!是!免!费!的!
拓跋阿秀:计算机专业的学生想要找工作,需要提前做哪些准备?推荐阅读

最后再送上一些干货,下面是一个高赞回答合集,建议你点赞&收藏,千万要Mark住啊,丢了可能就找不到了,因为你大学学习计算机期间绝对用得上,其中有好几个都是收藏过万的回答。
记得收藏的时候帮学长 @阿秀 点个赞呀!!不要只收藏不点赞啊, (๑•̀ㅂ•́) ✧ 拒绝白嫖,人人有责!
如果有计算机学习、校招求职、考研、读研感兴趣的小伙伴也可以点击下方卡片关注下阿秀鸭
拓跋阿秀​www.zhihu.com/people/tuo-ba-a-xiu一直致力于分享计算机学习、校招相关、硬核技术等,让你们不再让我走过的弯路!
1、如果你也是准备校招的同学,可以看下这里,这是一些前人总结的历届校招上岸分享文章汇总。
这是由字节跳动、阿里、腾讯三位计算机学长共同维护的计算机校招技术岗各方向学习路线合集(C++、Java、Golang、前端等)&计算机校招历届上岸分享合集,已经开源到github上了。
最新版!计算机校招历届上岸互联网中大厂分享集锦最新版!计算机校招技术岗各方向学习路线合集(C++、Java、Golang、前端等)2、学习编程其实没你想的那么难,完整复盘我系统准备校招&自学的那一年,好好阅读下去,对你肯定有所帮助。
你的编程能力从什么时候开始突飞猛进?3、对于一些想要转行或者读研的朋友,下面两个回答肯定能帮到你!
计算机学校期间如何发力,才能毕业后冲击30-40w年薪的offer ?学校生涯还剩两年,学C++(达到可以找工作的标准)时间够用吗?4、如果你决定不了到底学习C++还是Java,不妨来看看这个回答!还有就是建议多看经典书,而不是什么《七天教你学会Java》、《21天C++从入门到精通》系列,这类型的书完全是浪费时间,让你走歪路!
如果一定要在C++和JAVA中选择,是C++还是Java?有哪些你看了以后大呼过瘾的编程书?5、Linux C/C++ 方向自学的完整路线,很多人不知道学习完 C++ Primer 能做什么项目练手,这个回答不可错过!
拓跋阿秀:Linux C/C++ 方向自学路线,万字长文为小白新手打造 | 已拿字节后端研发offer387 赞同 · 16 评论文章学习完 C++ Primer 能做什么项目练手或者看什么好的开源项目源码?6、如果你准备时间不多,就抓住重点,在最短的时间内搞定必要的数据结构和算法而去面试
如何在最短的时间内搞定数据结构和算法,应付面试?7、我自己在学习计算机过程中看过的优质网课,这些精品课程你的大学四年绝对够用了。
数据结构,计算机网络,数据库,计算机组成原理,操作系统有哪些好的网课值得推荐?1130 赞同 · 25 评论回答

pdacn 发表于 2023-10-3 19:22:59

首先……我组招实习,C++也是主要使用的编程工具(目前使用C++11及部分14特性)
Coldwings:专注给阿喀琉斯修脚——寻求同行者然后到什么程度呢……
简单来说,基础课程知识合格(我们真在代码里手写各种数据结构、各类离散数学相关计算,并与OS中各层抽象打交道)。
其次…私以为就算是学生,上学过程中接触过两三种语言也很正常,所以如果可以,会多几种语言有利于自身发展。
第三,如果在与实习工作领域方向有一定实践是加分的。
最后就是有兴趣和信心。
页: [1]
查看完整版本: 校招C++大概学习到什么程度?