job hunting prepar

job hunting:

keep reading the gmails to summarize the experiemts. stop at the stared email

0) some sources:

  1.   open source elementary algorithms, with git hub online python code:  https://github.com/liuxinyu95/AlgoXY
  2. an well-rated algorithms by Robert Sedgewick with Java code, available in OU liberary: http://proquest.safaribooksonline.com/book/software-engineering-and-development/algorithms/9780132762571
  3. online blog about algorithms: http://decomplexify.blogspot.com/
  4. hadhoop class: https://www.coursera.org/course/datasci
  5. cracking the code interview, leetcode.com
  6. soulmachine leetcode pdf in Java and C++: https://github.com/soulmachine/leetcode  (in gmail, search for像我这种情况是不是就不用考虑FLAGMT之类的了?)

1) experiences:

a. cs master, new grad, software engineer
internship experience

Applied for : Mathworks, Epic, Akamai, Bloomberg, Riverbed, G

Phone : Mathworks, Epic, Riverbed, G

Onsite : G

Offer : G

105, +15%, 125 units(split to 250), 20(sign on), 7.5(relocation)

package相对来说是G家低的,自身实力有限拿不到更好的,于是等进去以后慢慢学习吧。

经验谈不上特别好的,但是希望能对过来看到的人有些用处也好,于是我斗胆介绍一下。

**************************************************
时间进度

G phone interview arrangement : 12月初
G phone interview : 1月初,1周后出结果
G onsite arrangement : 1月中旬
G onsite interview : 3月初,2天后出结果
G hiring committee : 半周后
G executive review : 1周后

**************************************************
面试准备

1). 我用的Cracking The Coding Interview和leetcode.com这两个资料.

12.10 ~ 12.20 Cracking The Coding Interview 看了OOD那一章以前,没有实际编程
,但是每道题的思路都看了琢磨了一下

12.20 ~ 1.10 LeetCode过完了,不是做完了。第一遍做,大部分题都没思路,有的看
不懂题。绝大多数题目是自己想一会儿,然后自己做,不行了上网搜答案,然后在很多
版本中挑一个比较好的。什么叫“好”? 自己能理解的,通俗易懂的就叫好。

1.10 ~ 2月底 因为上学,所以集中的编码少了,但是跟着一群好友组团看面经,看思
路。代码量少,但是收获颇多。

2). 收获最大的是做LeetCode Online Judge,做的时候自己的感觉是

解题方法越general越好,因为移植性高的方法能用到别的情景,别的题目。但是有时
候也没法强求。

LC的题解多上网搜一下,对比一下,用那种最通俗易懂的解法,最直观的解法。

LC的测试经常也会过不去,这时候可以积累经验,知道常出现的corner case。

3). 失误和遗憾

白板要多练习
平时做题要自己大声自言自语,就跟面试一样
想好算法再写code,我这样的水平没想好上来直接写就是找死。擦了写写了擦,这些修
改不是致命的,致命的是容易给自己制造混乱,影响思路,同时也制造紧张心情。

感觉这次面试比较幸运,没有面试官特意难为的情况。而且面试中经常有提示,整体跟
面试官交流得比较好。

b how to prepare the systems questions:

http://www.mitbbs.com/article_t/JobHunting/32643645.html

看了本版很多面经,获益良多,所以我也把我近期面试的过程写下来,并且给出一些我
对系统设计题的想法,希望对正在找工作的人会有一点帮助。我的背景非cs非ee,不过
和编程相关,而且平时自己也经常写写程序。cc150和leetcode各刷了两遍。这次只申
请了F和G,最后F悲剧,G offer。

由于我有一些iOS的经验,所以申请F时申请的是iOS developer的职位。
F电面只有一轮:
先问了一些近期做的项目,然后编程是实现UIControl里的几个method,比如addTarget
什么的。不难。电面过后一周就安排了onsite。

F onsite 有4轮,全是白人:
1. 问了一些behavior的问题,比如简历里写的项目什么的,然后还问了最喜欢
facebook app的哪个功能,有什么可以改进的地方,怎么改进。还有为什么想去
Facebook。这些问题我基本都已经准备过,所以应该都答得不错。最后给了一个简单的
coding题,就是逆序打印链表里的值。我说了三个方法,一个是递归,一个是用stack
(和递归也差不多),还有就是先反转链表,按顺序打印,然后再反转一次恢复原状。
面试官好像很满意,让我选一个方法写code。我说前两个方法都很容易写,所以我就选
第三个方法。总体感觉这轮面得不错。

2. 这轮开始的时间完了5分钟,所以只面了40分钟,要求设计facebook iOS app的news
feed,不需要考虑服务器端的情况,只需要说app端的实现方法。这个我之前稍微准备
了一些,可是从来没有面过系统设计题,实在不知道应该怎么说,而且不知道会被问得
多深入,所以基本上一直是很被动的跟着面试官的指示走。画了几个框框以后就开始被
问各种细节,比如从服务器读数据的格式是什么,写一下json的example,界面和后台
怎么传输数据,等等。总体感觉这轮答得不好。回去后想了一下,感觉回答的方式有些
问题。比如说实现一个功能有两种方法A和B,他问我用哪种方法,我就直接说我倾向于
用A。这种答法很不好。应该先说清楚A和B各有什么优缺点,然后我选A是因为什么。这
样的话就会让人感觉我对于A和B都了解的比较多。

然后中午吃午饭,我跟recruiter说了第一轮不错,第二轮的设计不好。他说没关系,
只要下午的两轮都答好了就没问题。不过现在看来,设计题还是非常重要的,因为问设
计题的一般都是比较senior的人,所以估计他们的意见比较重要。(这只是我的想法。)

3. 又问了一些最近的项目的问题。这些都是warm-up questions,所以都只需简短的
回答。然后出了一个编程题:有两个一样的树A和B,每个节点都有父指针,要求写一个
函数,参数是A的一个子节点x,和B的根节点,要求返回B中对应x的那个节点。也就是
说A的根节点未知。这题挺简单,所以我没怎么想就说了先找到A的根节点,然后同时对
A和B做一个DFS或者BFS来找出B中对应x的节点。面试官说可以,让我写代码,写完以后
分析了一下复杂度。然后就问有没有更好的方法,我马上就意识到不需要用DFS或者BFS
,只需要在找A的根节点时记录下当前路径就行了(只需记录每个子结点是父节点的第
几个孩子),然后按同样的路径扫一下B树。复杂度只有O(height),面试官好像还很
满意。这轮面试没有一下就想到最优解,所以我还比较担心会不会结果negative。

4. 上来又是先问了一些项目的问题,然后拿出电脑来让我看一段程序,找出里面的不
合理或者有错误的地方。我说了10分钟,每说一个错误他都记下来,最后他说可以了,
已经写满一页了。然后出了一个编程题,要求用trie tree进行字符串匹配,字符串里
有可能有‘?’,代表任意一个字符,trie的结构是面试官给的,也不需要构造tree,
只需要使用就行了,所以还是比较简单的。写的时候有一个小错误,在测试时候发现了
就改正了。总体感觉还不错,应该比第3轮答得好一些。

面试完了以后recruiter来接我,说第3轮的面试官已经提交feedback了(效率真高),
是比较正面的。所以我觉得第1,3,4轮都应该能拿到正面的评价,因为第1和4轮都答
的比第3轮好,第2轮比较悬。之前我了解到有人的feedbacks是两个正面两个负面,最
后加面一轮了以后拿到offer,所以我还比较乐观,觉得最多准备一下加面一轮系统设
计。

面试完了以后就是圣诞假期,所以一直没有消息,到了一月份写信问recruiter,他说
今天和hiring team见了面,他们说不move forward了。。。我感觉可能是那个系统设
计拿到比较负面的评价。还是面试经验不足,不知道怎么回答这样的题。

--------------------------------------
------
G是general hire,电面也是一轮,以前发过面经,特别简单,编程题是leetcode的原
题。

面完第二天就被告知准备onsite,然后就是圣诞假期。。。一月份收到F的据信以后没
多久,G的onsite才定下了时间。

G的onsite有5轮,没有遇到leetcode原题,题目就不发了,毕竟签了NDA,我就说一下
过程吧:
1. 面试官是同胞。题目不难,是有关树的(和leetcode中等难度差不多)。这轮感觉
答的不太好,确认题意用了不少时间,然后写code的时候有一些小的错误被指出了以后
改正了,写的也比较慢。写完以后让我说一下可能会有哪些corner case可以用来测试
,这个我好像说的还不错,面试官还比较满意。

2. 第二轮面试官又是同胞,真是幸运啊。题目是有关概率的,出了3道题。最难的那题
不怎么会做,是在各种提示下慢慢做出来的。非常感激同胞的帮助。

3. 面试官是白人,出了一题不太难,可是很麻烦,就像leetcode里的valid number那
样有很多corner case。所以我一开始先把最重要的test case写一遍,没有马上写代码
。写test case时面试官也一起帮着想了一些。这个上面花的时间有点多,面试官说现
在还剩下20分钟了,我觉得你可以开始写代码了。于是开始狂写。写完后发现有个条件
没判断,又用箭头加了几个地方,然后面试官说你这个test case好像没考虑到,我一
看确实是忘了,写test case时写了,然后写代码时忘了,于是再改了一下代码。最后
面试官说代码还行。我问他是不是有什么fancy的解法,他说:没有,你的代码还行,
我看过更差的。。。然后他再稍微看了看白板,说其实你写的挺好的。。。

4. 第四轮有点非典型,面试官是白人,一上来就说他今天脑子不是很清楚,然后想了
半分钟题目。。。。然后出了一题我从没见过的,除了暴力法不知怎么做。面试官说:
我不在乎代码,你主要说思路,然后写pseudo code就行了。我说了下最简单的暴力法
,他说很好,你先把代码写出来。我说应该还有更好的方法,他说你先别急,把简单的
写出来再说。于是我把代码简单写了一下,也就十几行,复杂度是n^6。然后他开始想
下一步怎么办(这时我都插不上话。。。),然后说是不是可以用一个数组保存一些数
值,然后把其中的两层循环去掉,我说是的(这也是我本来想说的),于是改了一下代
码,成了n^4。下面怎么优化就比较难想了,我在想(当然,想的时候也在不停的交流
),他也在一直想,不知是不是在想怎么提示我。我实在想不出怎么优化,感觉dp什么
的都没法用。因为题目是一个两维的问题,我索性先把它简化成一维的,他夸我这个简
化做的好,这样就比较容易解释了。于是在他再次提示下我想到了用sliding window的
方法,确实可以解。他说很好,我们没时间来证明这个方法了,不过你现在把复杂度降
到了n^3,我说是的(没有再写代码),好像没法再优化了吧,他说这应该是最优了。
然后他说我们开始的时间晚了几分钟,所以现在没时间继续讨论了,他会把这个也写进
报告里。回来以后我又想了一下,还是不知道怎么把一维扩展到二维。。。这轮实在感
觉很乱。

5. 最后一轮是系统设计题,白人面试官。给了题目以后我就问了一些问题,其中有一
个就是这个系统会有多少用户,需不需要考虑large scale。他说这个问题很好,平时
一般都是应聘者回答到一定程度以后他主动问他们,让他们开始考虑large scale的。
我说我也会从单机开始说,因为比较好解释,他说这很好。于是我先画了几个框,把
components分一下,然后具体讨论一下。说了20分钟以后面试官说:不错,现在我觉得
是时间开始讨论large scale的问题了,于是我就开始画master - slave等一些图。这
次面试吸取了教训,每说到一个问题的解决办法,我都不直接说怎么解决,而是说有哪
几个方法,每个方法的优缺点是什么,选这种方法的话会遇到什么问题,我觉得哪种方
法比较合适,等等。然后有时会问他有没有什么preference,他也会说他更倾向哪种方
法。整个过程都比较顺利,我每说到一个点,他都会记录下来,所以我就更有信心了。
最后我还说了一下前一天看的consistent hashing,还画图解释了一下。

面完觉得算法题都面得很一般,只有设计题还不错,总体感觉比面F的时候差多了,所
以感觉基本悬了,希望比较渺茫。没想到过了一周recuiter说HC已经过了,有一个team
也很快对我有强烈的兴趣,再过了一周就送到VP那里了,然后过了几天就收到电话给了
offer。这次真是运气好啊,估计同胞给我的评价比较好,然后系统设计那轮也还不错
,另外两轮的评价也不是太负面,所以就给过了。当然都是我的猜测,不过真得谢谢同
胞们!

下面主要说一下我怎么准备系统设计题的吧。我对large scale system没有任何实战经
验,G的onsite之前专门花了两天时间准备系统设计题。最主要的是把cc150的
scalability的那一章非常仔细的看一遍,不只是记住最好的方法,而是把每个方法都
记住,特别是那章最后那个关于cache的题,虽然碰到的题不是关于cache的,但是还是
可以换汤不换药的把方法套用上去。然后看了一下gfs,mapreduce,和big table的三
篇论文。由于时间不够,我只是仔细读了gfs,然后泛泛的看了一下mapreduce和big
table。虽然这些文章里的内容在面试时没有直接用到,但是有些思路还是相通的。然
后我把consistent hashing看了一下,感觉这是万金油,很多地方都能说。另外还看了
一下“秒杀99%系统设计题”的博文,最后在highscalability.com里随便找了两三篇文
章看了一下。其他的东西全都没时间看了,但是如果有时间的话肯定是看看比较好。

由于我只面了F和G,面试经验还是比较少的,所以说的东西不一定对,只希望对大家有
帮助。

c. http://www.1point3acres.com/bbs/thread-77453-1-1.html

投了肯定有100家以上,
一共面了30家,
11个onsite,
前7次都挂了,
后4次拿到了3家大公司和一家startup的Offer,
最后从了G家。
. 1point 3acres 璁哄潧
我的背景,
国内软件工程混沌过了4年,
毕业时连Java,C++的main都分不清,
一共没写过100行代码,
CS基础知识是极度零散与凌乱的。
误打误撞读了CS 一年的master,
12年9月入学,
13年1月底开始找工作,
当时的程度,
和本科毕业时,
没太多区别。
总结自己,
一共五点支持我,
撑了过来。
一为知识,
二为实践,
三为目标,
四为心态,
五为技巧。
第一,知识
掌握一门编程语言
我选了python,
因为语法和数据结构足够简单,
让我更加关注代码的作用 — 目的apply到数据结构上。
. 鐣欏鐢宠璁哄潧-涓€浜╀笁鍒嗗湴
入门:
codeacademy 学python basic
应用:
用python写了一遍CC150上能写的题目
这时候就逐渐看的懂Python Documentation了
数据结构与算法
数据结构:找自己学校的课件或网上教程,仔细研读了3遍
算法:其实对找工作用处不大,只要弄懂那些应用到数据结构上的常用算法(DFS etc)和Dynamic Programming就差不多了
3. 训练
就是训练用1中语言将算法应用到数据结构上;
方法就是刷题
我只刷了CC150,
完完整整刷了5遍,
最后每次面试,
都快速刷一遍。
4. CS素养:
刷完题后,以为自己还不错了,
但是每面还被拒,
发现与面试官随便聊聊,
就会暴露自己缺乏CS素养,
也就是CS基本常识,
以及各种知识的关系。
入门:
获取比较全面的CS知识最快的方法,
把主要的section死记了两遍,
偶尔可以应付面试官,
但是自己却没办法宏观把握和理解知识。
B. 中级:
深入学习:
a.数据结构
b. 算法
c. 数据库
d. 操作系统
如果能上CS的科目,
这4科是最好上的,
fancy的课可能对找一个general developer的帮助不大。
如果没上过,
就上online的课。
e. 推荐Berkley的CS的入门课,
建立起了CS思维过程
Structure and Interpretation of computer programming:
C. 进阶
全面吸收,囫囵吞枣;
以下知识只是为了完善知识体系,
快速学习的。
语言:
Java, C++
随便找本入门书,
花几个小时看一遍,
了解数据结构在这些语言里
都叫什么,
怎么使。
b. front end:
HTML, CSS, JQuery, XML
从W3C school 上快速看每一块内容。
c. Linux 指令
d. Web development:
Django
e. Mobile:
android: online course (udemy)
iOS: iOS Programming
f. Others
Design Pattern: online course (udemy)
Programming Pearls:
面google前花了两天看的,
如果说CC150和leetcode教了方法,
那么这本书就教了方法论,
亦即思考过程,
和从初级思考过程到高级思考过程的思考过程。
第二,实践
刷题和CS常识让自己有了lego,
但是并不自信,
因为没有作品。
.鐣欏璁哄潧-涓€浜�-涓夊垎鍦�
自己去写code,
build自己的作品。
鏉ユ簮涓€浜�.涓夊垎鍦拌鍧�.
可以自己写个side project,
比如我就写了个iOS的app。
也可以认真写写course project,
或者找老师做点项目。
第三,目标
1.一定
自己和周围很多ECE朋友的经验告诉我,
只要你想找CS的工作,
一定能找到。
所以别有备胎,
比如回国工作,
再继续读个书,etc。
当只有一个确定的目标,
一切都别的简单与坚定。
. more info on 1point3acres.com
2. 清单和资源
8月底,
已经毕业快3个月了,
还没找到工作,
觉得公司该面的都面了,
其实不然。
我花了两个小时,
把我所有想面还没面的公司列了出来,
一共25家;
我一一找资源,
看自己有没有人认识的人可以refer,
如果没有,
就去各大中文社区有没有可以refer的,
结果22家都被refer。
3. 结盟
找到身边一起招工作且态度积极的战友,
一起努力。
第四,心态
1.自信
当刷了那么多遍题,
做了那么多储备,
build出自己的作品,
自信便会出来,
突然某一天,
一个声音告诉自己,
I am ready.
2. 信念
其实欲望有多大,
信念就有多强。
还可以通过meditation,
天天幻想自己拿到offer的场景。
3. 越败越战
不断磨练自己的面试技巧
发现知识漏洞,及时补救
第五,面试技巧
介绍自己的background
精心准备自己的education background,
和自己所做的projects,
对着镜子自己演练熟了,
也可以找朋友做Mock interview.
准备3个问题
一定要问,
让牠们感受到你的兴趣和热忱。
微笑
从踏进公司大楼Onsite的时候,
就告诉自己时刻微笑,
一切问题都会解决。
最后,
希望大家都能找到心仪的工作。
. 1point 3acres 璁哄潧
如果需要refer Google,
可以发邮件给我,
grefermit AT gmail dot com
2)
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s