Created
September 20, 2018 00:17
-
-
Save jianminchen/bc554a773bfd13b03dd0ac98b49ad29a to your computer and use it in GitHub Desktop.
Google offer, Leetcode practice, contest player
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
http://www.1point3acres.com/bbs/thread-443485-1-1.html | |
[经验总结] ECE硕士从找工作碰壁到拿到Google offer | |
(2)我自学了什么? | |
在刚毕业的时候,我对CS了解有限,尝试面试了很多公司的software职位,屡屡碰壁。在地里大佬经验帖以及逐渐积累的面试经历帮助下, | |
我找到了我需要加强/自学的东西,我个人总结成5个方面。 | |
一个重要的前提是精通一个编程语言,我从嵌入式C转为C++ 选择编程语言的过程中在C++与Java之间有过纠结,但当时的我认为C++与C更像, | |
更容易上手 | |
1. 算法与数据结构 (最重要的一环,所有的面试都会与之有关) | |
2. OOP/D (一开始我几乎完全不了解这是什么,也很后悔硕士的时候没有选OO这门课,有些面试还会涉及到design pattern,但是如果没有 | |
几年的工作经验以及一定的代码量,很难对design pattern有深刻的认识,所以在Junior position的面试中只需基础了解) | |
3. OS/多线程 (有ECE经验,基础还算扎实) | |
4. 数据库 (完全不会,自学MySQL,不精,对某些面试会有帮助) | |
5. 网络编程 (有ECE经验,基础了解,但我平时不是很常用) | |
如果用一个公式来概括software engineer面试大概需要什么的话就是 offer = 精通一门OO编程语言 + 非常强的算法与数据结构基础(包括 | |
写代码的能力)+扎实的OOP基础 + (一系列其他加分项)+ 有效的交流 | |
总结下来就是 算法与数据结构贼重要,OOP/D大多数面试都会涉及到,其他的部分不是所有的面试都一定用得到,但推荐至少有基础的学过。 | |
当然,如果你申请的职位与某方向有关(比如网络工程师),那计算机网络这个方向也会特别重要。 | |
(3) 我做了什么? | |
自学,查缺补漏+刷题-google 1point3acres | |
刷题是短时间提升你写代码能力以及面试能力的最有效的手段。直到刷了几个月题以后,我开始后悔为什么这么晚才刷。虽然有人会觉得刷题应付 | |
面试有些功利,但我觉得刷题是对你算法与数据结构能力的一种考察,也会对你谨慎全面思考问题的能力、逻辑思维能力有所帮助。 如果你的CS | |
基础很好,刷题不会对你的水平有很大提高,但是会帮助你快速的理解问题,将问题转化为逻辑模型,并用代码实现的这些能力有帮助。以Google | |
面试举例,有些Google的面试题很贴近生活,就好像你日常工作会碰到的问题一样,虽然考察的知识点也许不难,但是你需要在45分钟的时间内 | |
分析问题,与面试官交流细节,给出思路,写出代码,用test case简单测试,最后分析时间/空间复杂度。如果你给出的不是最优解,还会要求 | |
你优化。 如果你经常刷题训练自己,你的反应会更加迅速,拿到一道题就能有思路,提起笔就能开始写代码,这样你会有充足的时间去优化、去 | |
和面试官交流。 熟练的写出robust的代码>会做这道题。. 牛人云集,一亩三分地 | |
(4)我是怎么刷题的? | |
我刷题主要在leetcode。小弟才疏学浅,水平有限,与刷过几遍leetcode的大神不能比,目前leetcode进度70%,每周参加Leetcode Weekly Contest, | |
名次大多在100-200之间,最好一次前30(佩服一下ASM大神们)。稳定做出前三题,最后一道hard题看状态。. from: 1point3acres | |
1. 简单题。 对于新手来说,简单题是最容易上手且最容易做出来提升自信的题目。第一遍刷可以以AC为目标,但是我建议在刷题一段时间以后,回过头 | |
来看一看自己以前做过的题有没有更好的解法。我用某公司的onsite亲身经历来证明这一点。 题目如下,给定字符串A和B,A与B几乎相同但是仅多了一个 | |
char,求这个char。 这道题放在leetcode会是一道简单题,做法多种多样。在面试时,我先给出面试官两个最straight forward的解法,hashmap存char, | |
A+B-,找出count不为0的char 以及 pointer遍历两个字符串。随即又想到了异或的做法。 面试官要求继续优化,我想到了与binary search有关, | |
先设定字符串中没有duplicate,用binary search解决,之后对于任意字符串用binary search将时间复杂度优化为 average case O(logn) worst case O(n)。 | |
一道简单题在面试给出了4种解法,面试官expect的比一道简单题更多。 简单题会有不简单(elegant)的解法。 | |
2.中等难度题。 大量的去刷。这个难度的题与你面试中遇到的问题难度最为接近,你可以把这个难度的题当作面试的模拟。 | |
3.难题。 我个人把难题分为几种:好题、题目本身不难但是test case极为复杂、题目很巧三个类型。. 留学申请论坛-一亩三分地 | |
好题认真刷。什么是好题呢? 高频题或是不符合其他两种类型的题都算是好题。 | |
题目本身不难但是test case极为复杂 ex leetcode atoi 题目本身不算很难,但是你需要应对各种各样的test case 这类往往在leetcode通过率较低。 | |
如果你的面试时碰到了这样的问题,最重要的是和面试官交流,搞清楚如何应对每一种输入。负数怎么办,会不会出现小数,有leading zero怎么办, | |
overflow怎么办等等。 | |
题目很巧,这类题很tricky,如果你掌握了某个性质或者灵感爆发发现了某种规律,你1分钟就能做出来,但是如果你没有灵感爆发,你将做不出来这种题。 | |
这种题可以直接看答案了解一下就好了。以谷歌为例,谷歌明确表示了自己的面试不会出brain teaser或者 A~ha problem,就是指的这类题。 | |
在刷题的过程要给自己时间的压力,通常一轮面试45-60分钟,可以参加weekly contest锻炼自己的有限的时间内写代码的能力 | |
(5)我是怎么面试的? | |
不同的公司面试流程不同,有的公司喜欢问知识概念题,比如阐述一下xxx是如何工作的,有的公司喜欢问bq,比如亚马逊14条军规,但是几乎所有公司的 | |
onsite都会白板 coding。 | |
我应对白板问题的流程大概是: | |
面试官提出问题 -> 我重复面试官的问题并尝试转化为数学/逻辑模型 -> 想一个基本的test case 与面试官讨论expected输出 来保证我确实理解了题目 | |
-> 与面试官讨论assumption(比如输入是否保证valid,会不会出现overflow)-> 想几个corner case,一会写代码的时候需要注意 -> 给出一种思路 | |
(可以不是最优解)-> 写代码(think out loud 边写边解释)-> 用之前的test case跑一遍 -> 分析时间/空间复杂度 -> 面试官提出follow up或者 | |
优化 -> just do it |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment