前言

我希望可以把我从实习到秋招这一路以来的体会和经历分享给大家。作为一个还没有正式进入公司的在校学生,我在技术上还是一个实打实的”菜鸟“,但是作为一个应届求职者,我是"专业的"。本节我将从面经积累,价值观以及学习路线这三个角度介绍我的经验。

面经积累

我有一个习惯,就是记录和整理知识。从春招实习开始,我每一次面试都会录音,事后都会复盘。所有的面试记录,面试官问的问题,手写的算法题以及我个人面试的感受我都会记录下来。看过《深入理解计算机系统》的小伙伴都应该知道程序的执行是有空间局部性和时间局部性,其实面试官考察的知识点的范围也是如此。当你多次遇到同一个问题的时候就应该去把它记录下来。与其面对茫茫多的知识,不知从何入手,不如将自己遇到的问题一个一个”缓存“起来,建造一个属于自己的知识”字典“。当你的知识"字典"足够系统和完善,你就足以收获理想的offer。我的积累方案如下:
1.面试录音,及时复盘
2.事不过三,重复出现的问题单独归纳和整理
3.知识串联,通过关联的方式加强对琐碎知识点的记忆

价值观

我认为没有最好的学习方案,只有最适合自己的方案。

学习路线

实习和秋招的面试过程都是一场又一场的持久战,我在2年前也和大家一样对面试畏惧,对学习恐慌,非常迷茫。很庆幸自己走过了这2年,在此我会将我自己的学习方法和面试经验总结给大家。整个学习路线分为以下几个部分:编程语言学习,操作系统学习,服务器编程学习,计算机网络学习,分布式数据库学习,其他方面学习。

1.编程语言学习

编程语言千万种,到底该学哪一种?

我认为语言不分优劣,只分喜好,只看需求。本硕这几年我学过C/C++,JAVA,Python,Matlab,Golang,Javascript,用来用去还是C++和Golang适合我,但是我也不排斥去使用其他语言。

学习编程语言第一步:上课。如果你是刚入学的小白,那就去好好上课吧,计科老师说的一定比我好。如果你已经错过时机或者没办法天天去教室里上课,那么网课是我最推荐的。

在哪里可以搜索合适的课程:

Coursera:我最开始使用的渠道,当时看了很多北大的C++入门课程(比较简单现在只记得有个喜欢扔水瓶的老师)

B站:B站是非常好的渠道,如果你知道课程名直接去B站搜吧,肯定有up主上传了,点播放量最多时长最长的总没错,还有弹幕一起学,据说还不错。

我个人主要使用的语言是C++,所以我以C++学习为例:C++不容易学好,如果仅仅是学习语法或者写个算法题那一两周可能就可以上手。但是想用好C++还是需要很长时间的coding和源码阅读积累。我个人的方案是先看书,再实践,再看书这样的不断循环。道理大家肯定都懂,但是能够坚持做下来的太少了。

给大家推荐我看过的几本C++相关的书籍:

  • 《C++语言的设计与演化》:可以用来理解C++的设计思路,知其所以然
  • 《Effective C++ 》:很多关于C++方面面试问题的出处
  • 《More Effective C++ 》:《Effective C++ 》的进阶版
  • 《深度探索C++对象模型》:我目前还在看这本书,个人感觉还不错
  • 《C++ Primer》 :很多人推荐看完这本书,但是这本书内容太多了,我建议当一个字典,遇到问题去查。
  • 《STL源码剖析 》:C++代码的典型案例,还可以帮你理解数据结构的标准实现

C++项目那么多,到底该看哪一个?

只看书不coding永远都是空中楼阁,而且C++的知识点非常多且琐碎,一种需求可以有多种实现,如果不实战真的很难发现其中不同之处。所以需要一些项目练手。如果大家和我一样是后台开发方向,那么可以去找一些网络服务器相关的项目去练手,一方面可以加强对Linux操作系统的理解,又能增加网络知识,同时也可以锻炼C++ coding能力,一举多得。那么有哪些值得做的项目呢?

1.做别人推荐的好项目:

WebServer

我在实习前看的是大佬 (牛客id:健康成长天线宝宝啊 )的个人项目WebServer:https://github.com/linyacool/WebServer。基于他的项目和我后续看书的总结,在1-2个月的时间里我也实现了一个web服务器,这个项目是我简历上除了实习项目之外被问的最多的项目。

2.看STL源码:

STL源码,有各种C++高级技能的实现。推荐大家去看看STL里的快排实现源码,第一次看到真的很有意思。

3.开源项目:

下面是几个还不错的开源项目,如果当前有不错的基础可以去通过源码学习:

libevent:Libevent是一个轻量级的开源高性能网络库,采用事件触发,封装了以下三种事件的响应:IO事件,定时器事件,信号事件。

Memcached:Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态数据库驱动网站的速度。

Redis:Redis是一个基于纯内存的存储系统,虽然是C写的但是值得一看。

切记,项目当中实现功能只是一方面,测试和文档整理也很重要,项目的每一步都需要文档和数据的支撑。

2.操作系统学习

Linux发展到今天,早已超出我们的想象。如果不是想专门做操作系统这块的话,我的学习经验也许可以借鉴。首先我推荐大家看这本《深入理解计算机系统》 :

这本书十分经典了,每一次看都会有新的领悟,本书对于计算机体系结构的讲解非常细致,有很多非常有意思的Lab。这本书从程序执行的计算机角度开始,介绍了处理器的体系结构,程序的机器级优化,虚拟存储器,系统级IO,网络等等多个方面。推荐大家和 CMU 15-213 CSAPP 这门课一块看。

其次再推荐2本书:

《Linux内核设计与实现》: 建议和操作系统原理的课本结合一起看

《深入理解linux内核》 :讲2.6版本的内核

如果是面对秋招,我总结下来以下这些关键知识点是需要理解的:

  1. 进程和线程之间的区别
  2. 操作系统的调度算法
  3. 进程间通信的方式和区别
  4. 虚拟内存机制的作用
  5. 缓存的作用以及缓存替换算法
  6. 线程的实现方式
  7. 虚拟文件系统

Linux环境如何搭建

学习操作系统当然要配合Linux一起, 过去一般建议大家装个双系统比如Ubuntu16.04。如果大家觉得双系统麻烦或者虚拟机慢,那么我还有以下2种方式让大家在几分钟之内就可以获得一个稳定的Linux开发环境:

方法1: 买阿里云、腾讯云、华为云的服务器。买最便宜的,可以不用关机,远程ssh登录即可,无论手里是什么平台的系统,都可以一秒进入Linux,这也是我常用的方式。

方法2: 安装docker,花10min学习docker基本概念和操作,用docker安装Ubuntu16.04的镜像,然后进入容器。这个方法也是跨平台的,非常的简易,我会在后续专刊当中单独介绍docker的原理和使用方式。

3.服务器编程学习

服务器编程其实就是建立在对linux系统调用的理解以及网络协议的理解上的。如果这两块的知识比较好的话就可以动手实现一些简单的服务器,然后对比别人实现的,压测一下性能,这样就可以作为一个个人项目。下面几本书我建议大家可以选看:

《Linux高性能服务器编程》:必看
《UNIX 环境高级编程》:选看
《UNIX网络编程卷1》:选看
《Linux多线程服务器端编程》:选看
《深入理解Nginx》:选看

还有很多不错的开源库的实现,比如muduo库。造造轮子也能成为自己的一个项目,推荐大家在有时间的情况下去看看。

4.计算机网络学习

计算机网络这部分,我最开始看的是浙大的计算机网络课程。主要是专注于协议的原理和分层模型理解,因为计算机网络的原理还是比较琐碎的,建议大家多做些笔记和文档,不论对于记忆还是日后的复习都是很有用的。下面4本书值得一看:
《计算机网络原理:自顶向下方法》
《TCP/IP详解卷1》
《图解TCP/IP》
《图解HTTP》

计算机网络主要的常考知识点如下:
TCP/IP
1.分层模型
2.三次握手、四次挥手原理
3.拥塞控制
4.流量控制与滑动窗口
5.TCP与UDP比较
6.DDos攻击
7.close_wait,time_wait状态原因
HTTP
1.http/https 1.0、1.1、2.0
2.get/post 以及幂等性
3.http 协议头相关
4.Cookie Session 的比较
5.长连接与短连接,websocket的对比
Socket
1.IO模型
2.select ,poll,epoll原理和对比

5.分布式数据库学习

如果只是会MySQL基础可能是远远不够的,像是Redis,MongoDB等非关系型数据库也是当前的热门。分布式数据库,分布式存储是当前每个大公司都会非常重视的核心,所以数据库基础非常的重要。

  • MySQL入门建议可以看《MySQL必知必会》。原理比较少,基本都是语法和使用细节,适合先过一遍。关于原理可以看《数据库原理,编程与性能》。
  • Redis入门可以看《Redis设计与实现》这本书。非常详细的讲了Redis的底层数据结构,包括其集群部分也做了很好的解释。除此之外可以再去理解一下分布式的Raft算法,Gossip协议等等。

数据库常考知识点:

MySQL相关

  1. 索引:B树、B+树底层结构,索引失效条件
  2. sql语法
  3. 关系型数据库三范式
  4. 存储引擎:InnoDB和MyISAM对比
  5. 数据库的锁:行锁,表锁,页级锁,意向锁,读锁,写锁,悲观锁,乐观锁等等
  6. 数据库隔离级别:脏读、不可重复读、幻读
  7. 事务的ACID理论
  8. 查询优化:explain,慢查询,show profile
  9. 分布式:分库分表,读写分离

Redis相关

  1. Redis 特点
  2. Redis 底层数据结构:跳表,字典
  3. 数据淘汰策略
  4. 持久化方式:AOF,RDB
  5. 哨兵模式
  6. 集群同步方式

写在最后

最后我想说:秋招 = 心态 + 实力 + 面试技巧 + 运气

心态:建议大家保持一个积极的心态,不轻视自己也不高估自己,脚踏实地做好自己;

实力:建议大家加深自己某一个方面的深度,拓宽技术面的广度,只有深度+广度才能脱颖而出;

面试:我会在后面的专刊当中专门给大家分享我的面试技巧,希望大家可以参考;

运气:作为求职者我们没有足够的信息,无法预知某个公司岗位的难度,不要嫉妒别人的轻松,机会只给有准备的人,努力的人运气一般都不会差;

我目前还在慢慢的职业摸索阶段,也还是一个菜鸟而已,如果有任何错误的地方也欢迎大家指正修改。我的方法和经验不一定适合所有人,如果这篇文章真的可以帮助到未来求职的你也就达到我的目的和初衷。愿大家一起进步。

结语

在本节当中我主要介绍了我在求职C++后台开发方向的学习路线,在这中间有很多我一路走来从其他人身上学习到的技巧,也有一些我个人总结的经验,我相信对于不同的人来说没有绝对完美的提升策略但是一定有最合适自己的方案。希望我总结的路线可以给大家带来启发,帮助大家在求职的路上找到属于自己的成长路线。在下一节当中我将重点介绍我在算法方面的提升的策略。

感谢阅读,如果文中有任何错误欢迎你给我留言指出,也欢迎分享给更多的朋友一起阅读。

原文链接:https://www.nowcoder.com/tutorial/10018/2e34f0884bb94bcbb9dcd6b03c22469b

当然了,如果是自学C++的话,会比较困难,主要是C++语言本身很难学,最好能够有老师带着学,这里推荐一个ACM金牌大佬的免费C++课程,可以体验一下:
https://ke.qq.com/course/417774?flowToken=1031343

一些相关的学习视频:

链接:https://pan.baidu.com/s/1PS-n10vkKOfrY4eH_qtxQw
提取码:t0el

另外还整理一份面经, 包含各大厂C++ 等面经,C/C++交流群:960994558 学习资料已经共享在群里了,期待你的加入~

你都看到这了,不点个赞再走吗?

如何拿下BAT:我的学习路线(C/C++)相关推荐

  1. 熬夜怒肝,保姆级Python学习路线,起飞!

    想当初女朋友编程小白零基础,到如今在互联网大厂做算法工作,就是我带她漂进Python的海洋,从此一去不复返~ 我给她制订的学习路线十分适合萌新,总共分三步: 看视频 作项目 啃厚书 看视频 如果是零基 ...

  2. C/C++ Linux后端进BAT的学习路线(腾讯官方认证)丨Linux服务器开发

    我相信对于每一个程序员来说都有一个进入BAT的梦想,今天Hu先生给大家分享的是经过腾讯官方认证的一份C/C++Linux后端开发的知识点学习路线总结.大家可以根据知识点对比,看看自己目前还有哪些技术需 ...

  3. BAT老程序员分享:Linux C/C++ 开发程序员的黄金方向和学习路线!

    目前从事 Linux C/C++ 开发的程序员很多,尤其是像百度.腾讯.阿里这样的大公司,他们的网站流量巨大,业务逻辑复杂,会遇到很多瓶颈,需要开发底层服务来提高程序效率,快速响应用户请求. 这些公司 ...

  4. C++后台开发学习路线(已多人拿下腾讯后台开发)

    学习建议 对于技术岗位来说,软件基础知识可以说是个人的硬实力,是你通过面试的一大前提.说到基础软件的学习,对于很多没有基础知识的同学来说,可能有点力不从心.这么多软件基础知识,这么多技术书籍,应该从哪 ...

  5. 跨专业的我如何收获BAT微软等大厂意向书(学习路线分享)

    乔戈里粉丝的读者投稿,不错的文章,和这位兄嘚相聊甚欢,这位兄嘚最后去了微软,乔戈里感觉是个不错的选择. 大家好,我是小E.今天和大家分享一下自己最近一年找工作的经验. 先交代一下本人背景,本人是电子工 ...

  6. 浙大博士整理的计算机视觉学习路线(含时间建议分配)

    因工作需要,年初花了4个月左右时间学习了机器学习.神经网络相关的知识,工作日每天大概学习4-6个小时,周末每天大概10个小时,工作中的需求应对也得心应手了. 想快速入门的话,从自己的经验看,可以先不看 ...

  7. 双一流博士导师整理:最新的计算机视觉学习路线(含时间分配建议)

    因工作需要,年初花了4个月左右时间学习了机器学习.神经网络相关的知识,工作日每天大概学习4-6个小时,周末每天大概10个小时,工作中的需求应对也得心应手了. 想快速入门的话,从自己的经验看,可以先不看 ...

  8. 2021年9月最新的保姆级计算机视觉学习路线

    因工作需要,年初花了4个月左右时间学习了机器学习.神经网络相关的知识,工作日每天大概学习4-6个小时,周末每天大概10个小时,工作中的需求应对也得心应手了. 想快速入门的话,从自己的经验看,可以先不看 ...

  9. 2020年最新前端学习路线

    这段日子在 B 站上收到小伙伴最多的要求就是出一个前端学习路线,我能够充分的感受到大家抓耳挠腮加挠墙的迷茫~所以在这里给大家总结了一套前端学习路线.先从初级前端工程师所需的技能开始,然后一路升级到高级 ...

最新文章

  1. 40个常用的网站制作技巧
  2. a bytes-like object is required, not 'str' pickle.loads pickle.dumps
  3. mysql中文查询问题
  4. 51cto 网站挑错,你来干?
  5. 12.流水线设计方式
  6. elasticsearch6.2.4 与logstash与kibana版本6.2.4搭建同步使用
  7. c语言中math的库函数,C语言中math.h库中的常用函数
  8. The Generalist和Visualize Value在去中心化内容发布平台Mirror上发起众筹
  9. 建立本地rhel5.3的yum源
  10. Baxter实战 (四)ubuntu14.04安装kinect V2
  11. hdu1403(后缀数组模板)
  12. SpringBoot Security 整合 thymeleaf 模板自定义登录页面,按需提示错误信息
  13. 基于python实现Maxwell软件的自动仿真分析
  14. 目标检测数据集下载及算法训练教程
  15. 什么是微信公众号矩阵模式?
  16. MCAL中ADC的配置
  17. 为什么微信连接不上服务器失败怎么回事啊,微信为什么一直提示连接失败请检查网络设置...
  18. 如何做好aso关键词优化提升关键词排名
  19. Pytorch之经典神经网络CNN(七) —— GoogLeNet(InceptionV1)(Bottleneck)(全局平均池化GAP)(1*1卷积)(多尺度)(flower花卉数据集)
  20. 完美世界游戏客户端程序面试

热门文章

  1. 低功耗无线通信技术——ZigBee
  2. 门户单点登录实现与应用集成技术
  3. beamer设置指定页背景
  4. 智科1912刘嘉文的人工智能协会作业
  5. 基于 TI Sitara系列 AM64x核心板——程序自启动说明
  6. UnityVR-初识Unity-第三步-加入头盔手柄
  7. 思科AP修改AP名称通过WLC命令方式
  8. 看事物不应只看表象,顺应趋势才是王道
  9. 机器学习系列笔记六:主成分分析PCA[下]
  10. python中函数不包括参数函数二阶导数公式_参数方程的二阶导数怎么求????...