正文
有趣的是,我并不是通过书本或正规的教育来学习这些知识的。相反,是因为我在实际工作中需要开发完成一系列功能部件,但我在这方面存在知识瓶颈。
所以我想,那就边学边做吧。
很多时候,我都陷入了分析瘫痪状态,在这种状态下,我过度分析了各种情形场景,最终无法取得进展。
那些艰难的时刻其实是最好的学习机会。我开始学习功能范围、监视、警报和文档方面的知识。这个过程的每一步都揭示出我需要学习更多的东西。不管是作为一个普通人还是软件工程师,过去2到3年都是我人生中成长最快的时期。
我如何准备面试
在经历了第一次求职面试中的各种艰难曲折后,我告诉自己,在未来的求职面试中我必须做好充足的准备。
我对自己擅长的、不擅长的以及可以改进的地方进行总结,从而为未来的面试做好充分准备。我将它分为三个类别:数据结构、算法和系统设计。
我的正式职业生涯的编程语言基本都是 PHP ,在大学里也学过 C++,所以我想尝试一些更简单、更不繁琐的面试。因为这个原因,我选择了Python。这是一门非常强大的语言,并且易于学习,支持许多开箱即用的数据结构,并且可以在白板上快速书写。我是通过 Youtube 上的一些视频教程学习 Python 的,此外还阅读了教学文档。我选择学习 Python 的另一个原因是,它具有很高的可读性,而且在白板上书写很容易。
首先是用 C++ 语言写的降序排序:
#include
using namespace std;
int main()
{
int arr[] = {1,10,0,4,5}
int n = size(arr)/sizeof(arr[0]);
sort(arr, arr + n, greater<int>());
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
以下代码是 C++ 和 Python 之间的一个简单的比较:
a = [1,2,4,5,1000]
a.sort(reverse=True)
print a
我积累的经验的是,很多应聘者在面试过程中会在简洁方面犯错。在45分钟的面试中,你需要用大部分的时间来解决实际问题。
吐血建议:选择一种简洁的编程语言,这样你就可以在白板上更快地写代码。
面试准备模式
我花了大约一个星期的时间在 LeetCode、HackerRank 和 Project Euler 中做了一些简单的测试,以便熟悉它们的接口,并让自己开始习惯使用 Python 编写代码。
第一周我对自己在某些编程语言方面的能力水平进行了摸底。我又花了一周时间来进行一些设计上的准备,并尽可能做到深入和广泛。
这对我来说是非常有趣的,因为我经常查看 iOS 应用,并试图弄清楚它们是如何开发出来的。例如,如何从头开始开发 Instagram?(
我在 Facebook 面试时曾被问到这个问题
)。
我的专业背景是 API 设计和服务导向式架构。因此,我借此机会展示了我将如何设计自己的 Instagram 版本。因为我在一些业余项目中积累了一点 iOS 应用编程经验,所以我在回答这个面试问题时可以稍微讲一下回调和推送等方面的内容。
我一开始讲的是我想在自己的 Instagram 版本中加入的一些功能:点赞、上传照片和简单的时间轴。我非常了解这些场景的功能,因此我能够构建一个非常可靠的 API。