一个月拿下字节、阿里、百度三家offer,程序员速成经验看这篇就够了!

499 阅读5分钟

我有一个想法,不一定对

我觉得高水平的程序员是可以速成的。

目前的自己也算是个高水平的程序员吧,一口气拿下了字节、阿里、百度三家公司的offer。

当我还是一名普通的程序员的时候,我认为成为大神需要两个阶段:

阶段一:从普通程序猿成为熟练开发者

阶段二:从熟练开发者成为资深架构师

第一阶段需要你的专项的技术能力,第二阶段需要你成熟的技术体系。完成这两步,也许我们可以离大神更进一步。

不知道你有没有遇到过这种情况,明明刷了400-500道题,都快刷吐了,也没啥成效。而隔壁大佬随便刷个几十道都能进大厂。这就是很典型的例子。

成为高水平的程序员,重点不在于“训练”,而在于**学习方法有捷径。**找对了学习方法,速成就不是问题。

我自己就是个典型,当初找工作的时候口号喊得可响了,要笨鸟先飞!然后天天给自己搞题海战术,也不复盘,也不总结。面试不知道翻车多少回。

回想起当时的境况,我真的觉得自己是个傻*。直到我室友,像关爱智障一样的,给了我一套算法小抄。仿佛打开了提升算法技能的开关,天知道我当时有多感谢他...

这份算法小抄里包括了大厂面试中常考的算法及数据结构。像什么二分法、双指针、排序算法等等。还举例了常考题的解题思路和模板。是真的香!分享给跟我一样渴望成为编程大佬的同学!!

而且,这套小抄的神奇之处在于:他套上模板就能使用。

拿一道面试常考的双指针来举例:

使用条件

滑动窗口(90%)

时间复杂度 O(n) (80%是双指针)

要求原地操作,只可以使用交换,不能使用额外空间(80%)

有子数组 subarray / 字符串 substring 的关键词 (50%)

有回文 Palindrome 关键词(50%)

复杂度

时间复杂度: O(n)

  • 时间复杂度与最内层循环主体的执行次数有关

  • 与有多少重循环无关

空间复杂度: O(1)

只需要分配两个指针的额外内存

Lintcode例题

LintCode1879.两数之和VII(同向双指针)

LintCode1712.和相同的二元子数组(相向双指针)

LintCode627.最长回文串(背向双指针)

LintCode64:合并有序数组

部分代码模板

Java

Python

做完例题之后,再去领扣上找几道类似题目练练手,感觉立马就有了,其他算法知识点也是如此,举一反三,贼好用。

需要模板的小伙伴,也可以si我**【算法模板】**,或戳这里

这里分享一下其他常考知识点的解题思路:

二分

排序数组 (30-40%是二分)

当面试官要求你找一个比 O(n) 更小的时间复杂度算法的时候(99%)

找到数组中的一个分割位置,使得左半部分满足某个条件,右半部分不满足(100%)

找到一个最大/最小的值使得某个条件被满足(90%)

双指针

滑动窗口 (90%)

时间复杂度要求 O(n) (80%是双指针)

要求原地操作,只可以使用交换,不能使用额外空间 (80%)

有子数组 subarray /子字符串 substring 的关键词 (50%)

有回文 Palindrome 关键词(50%)

BFS

拓扑排序(100%)

出现连通块的关键词(100%)

分层遍历(100%)

简单图最短路径(100%)

给定一个变换规则,从初始状态变到终止状态最少几步(100%)

二叉树与分治

• 二叉树相关的问题 (99%)

• 可以一分为二去分别处理之后再合并结果 (100%)

• 数组相关的问题 (10%)

除了学习方法有“捷径”,我还觉得,那些编程水平很高的程序员,都很会刷题。

不是像我当初那样搞题海战术,而是有针对性的刷题。

原先我刷题的时候,都觉得压力很大。因为刷太多都没效果。所以对于我来说,刷题并不能激发我的兴趣。但是后来朋友拉我去听了令狐老师的**算法讲座**。豁然开朗。

因为他将算法面试中常考的知识点和考察频率都罗列出来了,这样去刷题就很有针对性。我想那些编程大佬应该也是这么学习的吧。

这里分享一个面试算法的常考知识点及考察频率。如果你想要快速提升自己的算法能力,可以照这个方法试试看。

同时这个讲座还有**免费试听**,感兴趣的朋友可以去听。

除此之外,再班门弄斧的分享一下我上岸的经验吧,我上岸之前有“临时抱佛脚”的习惯,所以我不光是按照考点的考察频率去刷题,还根据每个大厂的不同喜好去刷。

比如像这样,有针对性的去刷**企业题库**,我就不信上不了岸。

分享几道我之前在**lintcode**上刷过的题,大家也可以来练练手:

804 · 不同岛屿的数量II

294 · 简化链表

549 · 最常使用的k个单词(Map Reduce)

660 · 用Read4从文件中读取N个字符 II-多次调用

734 · 形式为a^i b^j c^k的子序列数量

1076 · 两字符串ASCII的最小删除和

现在刷题可以给我带来很大的成就感,希望大家也能找到编程学习的正确方法论,快速进阶为高水平的大佬!!

码字不易,麻烦给个赞或评论吧。