FLAG等大公司最看重以下四个方面:Communication, Problem Solving, Coding, and Testing.
作为应试教育培养模式下出来的我们,刷题能力自然是不在话下的。LeetCode被很多人刷穿,已经不是什么新闻。而且确实大家需要刷一定量的LeetCode。不然,找工作基本就无缘了吧。
正所谓,光刷题是不行的,但不刷题,则是万万不行的。
但埋头刷题,肯定不是最有效的方式。不然,也不会出现诸如此类的抱怨,我又被某某某面试官黑了。这种惨案,尤其是Google比较突出,因为在Google家面试的过程中,他们特别强调交流。所以我们平时刷题就需要按照上面提到的四个方面来要求自己。
第一是communication。一定要和考官交流思路,不明白的地方一定要问清楚。输入是什么,输出是什么,有哪些假设等等,这都能体现在交流能力上。
第二是problem solving。要展示自己的解决问题的策略。比如选数据结构什么的,一定要讲明白为什么要用各种算法和数据结构。所以,大家平时刷题,一定要注意掌握好基础,要知其然,也要知其所以然。为啥要用不同的数据结构和不同的算法,他们各自的优缺点,这些都应该掌握。
第三是coding。在前面两步的基础上,写出来干净正确的代码。这一步应该最明显,大家也最下功夫的地方了,我们一般都会强调刷了多少多少题了。但刷题的过程中,一定要结合四个方面来刷,别光看题目数量。要一道题一道题掌握好。
面试的时候,千万别一上来就觉得,这题我熟悉,然后就兴高采烈开始写code。一定一定要展现好第一第二点,和面试官聊完各种tradeoff,再动手写代码不迟。写代码是为了展现你的动手能力。但交流能力和解决问题能力则体现在前面两步中。
第四是testing。一定要回去验证自己的代码。这个过程中需要分析一下代码的复杂度(时间复杂度和空间复杂度都要分析)。写完代码,一定要遏制住冲动,兴冲冲和面试官说,我写完了。一定要给面试官说,我代码写出来了,我需要跑两个例子,验证一下我写的代码是正确的。这才能体现出一个好的程序员的能力。
我觉得咱们大部分人,刷题能力肯定不会太差的。大家只要认真花个几个月到半年的时间,去认真学数据结构和算法,应该都能刷个四五百题。
大家都是刷四五百题,有人能拿到offer,好多人还能拿到好几个,我想区别在于我们的训练过程。
作为国人,如果想在FLAG找工作,我觉得最重要,也是我们最轻视的,其实是交流能力。说难听点,其实就是我们的英语表达能力没好好重视和训练好。
拿到题目,吭哧半天,完全不知道在说啥,不能清晰表达自己的观点或是想法。那你coding或是其他能力再高,面试官也没有机会得知了。所以,一定要平时训练好这方面,多mock,不会表达的东西,平时就应该通过mock注意到,想办法解决掉。
怎么去训练以上的能力呢?有详细解析过程的算法教程,帮助才最大。Uoffer CS 刷题班帮你掌握重要高频的数据结构与算法。