如何在较短时间内(6个月+)成为一名基本合格的后端开发工程师 - 语言准备篇(C++)
秋招现在已经进行了一半,越来越多的小伙伴无论是通过牛客私信还是微信的方式都表示过,今年算法好难找,明明我的算法简历挺好的为什么就没有 offer, 算法怎么转开发等等问题。
针对这些问题,我写一下我准备的过程,这是一个系列,所以可能会比较多篇。
积极的自我审查
当你有了上述疑问的时候,一定是哪里出了问题,外部环境的变数我们无法操控,我们能做的就是积极的自我审查,从基础知识储备、项目、算法、心态等各个方面对于自己进行一个更为客观的评估。例如你以前的目标是算法工程师,那么是不是可以先审查一下自己是否已经达到了工程师的及格线,包括但不限于:
基础知识储备
对于开发语言的熟悉程度
开发语言的基础语法
开发语言的数据结构及底层实现
OOP
多线程以及并发
(Java)JVM
对于操作系统的熟悉程度
对于数据库的熟悉程度
MySQL 使用、特性及底层实现
Redis 使用、特性及底层实现
(大数据方向)hbase 的了解
对于计算机网络的熟悉程度
对于分布式理论的了解情况
Google 大数据三大论文(Google File System、MapReuce 以及 Bigtable)
Google 去中心化分布式系统论文三件套(Percolato、Spanner 以及 F1)
《分布式系统原理介绍》 刘杰
CAP
项目
对于项目背景的了解
项目所涉及技术栈情况
你所负责项目的部分
遇到的问题
最终达成的效果以及解决问题的方式
算法
数据结构
算法基础
枚举
模拟
递归 & 分治
贪心
排序
前缀 & 差分
二分
算法进阶
搜索
DP
字符串
数学
图论
计算几何
题库
剑指 offer
leetcode
acwing
心态
身边都是 offer 收割机的心态
简历一直挂、笔试一直挂、面试一面就挂的心态
转开发的原因
对于我自己来讲,我算是比较早决定转开发的,大概是在 19 年 2 月份寒假的时候,扫尾了一下手里最后一个机器学习比赛,但是还是错过了 3 月份开始的实习投递,现在回忆一下微信实习面试的题目,真的很遗憾。
研究生之后,很自然的选择了很多机器学习、深度学习相关的课程进行学习,也不断的参加着 kaggle、天池、科赛等各种大大小小平台的比赛项目,从单纯的数据挖掘比赛到 CV 比赛基本都参加过,最好的名次是第四名,也算是摸到了奖金,cover 了一张 1080 ti 的投入,再参加完那场比赛之后就开始思考来年的秋招要准备什么方向,因为自己的理论准备还是不太充足的,而且当时手里也没有 paper,对于 19 年来说,算法已经足够内卷了,或者说整个互联网行业都在疯狂的卷,更别提你们现在面对的 20 年招聘。
考虑到自己本科和研究生在做项目的时候一直都没有丢下 C++,最后是决定以 C++ 为中心进行复习,以后端开发为目标。
大家也可以自己衡量一下利弊以及准备的难易情况,自已选择自己的方向,我这边后面的内容只会以 C++ 进行展开,因为入职之后也是刚刚转 Java,因此对于 Java 的部分会在后面的分享中写出。
官方文档 - 你最好的助手
是的,我没有像其他人一样推荐大家一上来就去看书或者参加一些课程,虽然后面也会推荐一些关键书籍,但是毕竟看书索引的效率是远低于查阅官方文档的效率。
我这里的意思就是,希望大家无论是在准备招聘过程中,还是实际工作中,以官方文档为中心展开,尤其是对于一些关键函数的参数列表,官方文档都会解释的很清楚。
同时如果涉及以及版本变更、升级的任务,官方文档是你唯一能参考的地方。
额外的一点,官方文档大部分为纯英文,也能够有效地锻炼基础的英文阅读能力。
附上 C++ 文档连接
各种博客 - 学会过滤
最开始,准备面试所需要的知识,我也是搜索引擎一通乱搜,这时候你会发现一个问题,一个问题的解答,你能够在各种博客看到各种转载,因此这里只是一个小小的提示,对于 CSDN、简书等博客的博文,一定要做好过滤工作,不要学习错误的知识,要及时做到知识更新。
爱上读源码
如果让我选择去年能收获一些 offer 的主要原因,我会归因于三个原因,其中一个原因就是读源码。
因为我选择的是 C++ 语言,首先是比较快速的对于 C++ 的基础语法进行了一个复习、学习的过程,使用的书籍是 《C++ Primer》(注意呀,不是 plus,是 primer),primer 这本书就像一本参考书,你在第一遍学习 C++ 的时候可以看,你在工作查文档的时候也可以看,它能够帮你解决 C++ 表层的问题,例如一些基础语法的使用、类的使用等,但是它的缺点又足够明显,就是不够深,如果你想查看 unordered_map 底层怎么实现、C++ 里面怎么用到红黑树等问题,那么这本书暂时不能帮到你。
这时候就有一本贯穿秋招的一本书,十分推荐大家不断阅读 《STL 源码剖析》这本书,这本书我在准备秋招以及面试过程中,认真读了 2 遍,翻找复习知识应该是很多次了。
下面给大家画一下我当时看的重点:
前期准备
- template
第2章 空间配置器(allocator)
new 实现
空间配置器
第一级配置器
第二级配置器
内存池
第3章 迭代器(iterators)
迭代器
traits
__type_traits
第4章 序列式容器(sequence containers)
vector
list
deque
stack
queue
priority_queue
slist
第5章 关联式容器(associattive containers)
rb-tree
set
pair
map
multiset
multimap
hashtable
hash_set
hash_multiset
hash_map
hash_multimap
第6章 算法(algorithms)
copy
next_permutation
第7章 仿函数(functors)
- 看的较少,了解
第8章 配接器(adapters)
- 看的较少,了解
另外还有两本书推荐,分别是 《深度探索 C++ 对象模型》 和 《Effective Modern C++》,前者的阅读要求比较高,我是只读完了前三章节,这本书有利于帮助大家理解 C++ 对象模型以及各种支持的底层实现机制,更好的理解抽象和实际之间的平衡。后者的话学习要求不算很高,简单理解就是便于大家理解 C++11,无论是面试、工作还是和朋友吹水都用的上(逃)。
还有一些 C++ 的书单,因为自己没有读过,就不在这里推荐了,不用想你们肯定也知道是哪几本。
今天先到这里,以上是语言准备篇(C++)的内容。
下期是数据库篇。
love & peace
全部评论
(2) 回帖