Skip to content
Ider

沉淀我所学习,累积我所见闻,分享我所体验

Primary Navigation Menu
Menu
  • Home
  • About Ider
    • Who Ider?
    • Why Ider?
    • How Ider?
    • Where Ider?
    • What Ider?

Interview

2020-12-15
15 December
On December 15, 2020
In Knowledge Base(心得笔库), Programming Life(程序人生)

面过100场行为面试后

两年前,我在 Facebook 完成了100场面试的里程碑,分享一篇对于面试心得讲了讲面试对我带来的个人能力的提升。今年五月,我差不多在一年半的时间里又完成了100场面试让总数达到了200场。接着到了今年十月份,其中一类面试—行为面试(Behavioral Interivew) 我也完成了100场。感觉是个不错的时机来再来写篇文章分享一下,但这次我没有特别心得体会总结,就聊聊一些随意的想法。

 

美国科技公司对于软件工程师招聘比较常用三种面试形式:写代码(Coding),系统设计(System Design),行为面试(Behavioral)。对于大公司来说,他们常年都会很多招聘指标,也有大量的申请人,所以相对于中小公司,在大公司更容易获得面试方面的培养机会。(Facebook内部对不同类型的面试都有内部代号,但是因为不对新人记忆不友好,慢慢开始弃用了。)

当我作为面试者时,我对它们的难易程度排列为:系统设计>>行为面试>写代码。毕竟代码是可以通过刷题来提高的,行为面试也主要是讲自己的故事,而系统设计的广度和深度的把控就比较不确定了。

而当我变成面试官时,从另一个角度排列顺序就变成了:行为面试>系统设计>写代码。这排位主要根据我写面试反馈结论所花的时间来衡量:一般代码面试的结论我需要5-10分钟完成,系统设计则要15-30分钟,行为面试则尝尝花费我30-60分钟。主要原因是行为面试要做的内容记录就很多,次要原因是英文写作还是我的短板。因此我后来只做行为面试来锻炼我自己的英文写作,同时也让我享受挑战的乐趣。

 

之前的文章我讲了面试在广义层面带来的各种不同的好处,面试了所以不同类型面试后,我想再聊聊各类面试对于作为面试官的软件工程师在公司内的职业发展不同阶段所能带来的特定技能的锻炼和提升。进而让面试者从另一个角度来了解面试的意义和价值。
Read More →

2018-12-16
16 December
On December 16, 2018
In English Posts(英文写作), Knowledge Base(心得笔库), Programming Life(程序人生)

Insights from 100 Interviews

As our interview status recorded, I just have conducted 100 interviews at Facebook. I never did batch interviews (multiple interviews a day in consecutive days), so I’m feeling really excited about this accumulative achievement.
On this wonderful milestone, I’d like to share some of my experience and tips about being interviewer at Facebook, I hope you found this helpful.

Benefits as an Interviewer

There is no doubt that interviews are critical for company growth. However, I want to tell you more about the personal growth and benefits of being an Android interviewer.

  • Improving my verbal and written English
    Since English is my second language, interview is a great way for me to practice. I repeat similar conversation during interview, and this exposure increases my confidence in my speech; by providing post-interview feedback, I have increased the speed and quality of my writing.
  • Expanding my social network
    I felt so great when some colleagues suddenly stopped me and asked me “do you know you interviewed me?” then our conversation started very naturally (although, I’m really sorry, I didn’t actually remember the interview).
  • Business travel for recruiting events
    I got a chance to go back to my alma mater to give recruiting talk, which I previously never imagined. However, I also missed a couple trips to interview abroad due to my visa restriction.
  • Clarity on my work and teams
    Candidates often asked about my work and products at Facebook at the end of interviews. By thinking about and answering those questions, I clearly define my own duties, and the work of my team.
  • Polishing my technical skills and general Android knowledge
    The technical skills we use here are very Facebook specific, but I would hear a lot of different terminologies, libraries, architectures that are used by candidates. I can then follow up on these to keep up with the market.
  • Helping my friends apply for software engineer positions
    It’s fine to help friends to prepare for Facebook interviews, as long as we don’t leak the real questions we ask. So I can specifically tell my friends what interviews look like, and what skills they should focus on.
  • Better understand position and level requirements
    After seeing so many interview decisions, I get a better sense on the requirements for Android positions at each level. This also clarifies what gaps I need to fill to advance my own career.
  • Performance review and career growth
    To be honest, the number of interviews doesn’t play a key role on performance review at company. However all the benefits mentioned above helps me a lot on my growth.
2018-09-24
24 September
On September 24, 2018
In Programming Life(程序人生), Tangential Speech(漫话杂谈)

我的四次Facebook面试经历

在 FB 已经工作了已经快三年了,在这段日子里我学到了很多也成长得很快,一切似乎都有序地推进着,可回过头看加入 FB 的过程却有些一波三折。翻看邮件记录,我总共面了 FB 四次:头两次面完后我被拒了,第三次拿到了Offer但换成我拒了他们,直到第四次才达成一致加入进来。

 

第一次面试是在研究生刚毕业的时候,那会儿社交网络正火,对于 FB 和 Twitter 这些比较热门的公司都会收到很多简历,所以对于New Grad来说申请的门槛却要高很多,我也尝试网上申请但都石沉大海。

后来是通过 Interviewstreet (网站现在已经更名为 HackerRank 了)这个在线程序测试平台才拿到了面试机会。当时 Interviewstreet 上的题库很小但难度很高,只要做完8道题就可以解锁网站上公司申请功能。我当时只是觉得在上边做题很有趣,就一直不停地钻研着,也要感谢一位学长在题目解法上给了我很多的指点让我更快地领悟了各种算法的真谛。在艰难地完成了8道题后,我就随便点了网站上包括 FB 在内的几个知名公司提交了申请,我也没有觉得会有下文只是继续在上边做题来努力提高排位。

在我去 Seattle 面试 Amazon 的路上,我收到了 Interviewstreet 给 FB recruiter的引荐邮件。这让我感到非常惊喜,立刻表达了我强烈的兴趣,然后顺利安排了电话面试。电面一共面了两题,第一题很快就解决了,但是第二道关于二分查找的变体我却卡在了条件检查上了,最后是通过电子邮件把最后的答案发了过去。在邮件里我还把我写二分法的博客链接贴了上去来表达我是懂这个算法,好在面试官给了我 onsite 的机会。

因为那时候在忙着毕业的事情,还要带家人在美国游玩,所以把面试安排到了一个月以后。也因为如此,我并没有能够充分地去准备面试。


Read More →

2015-12-28
28 December
On December 28, 2015
In Algorithm Analysis(算法分析), Knowledge Base(心得笔库), Programming Life(程序人生)

聊聊刷题

在之前的《谈谈面试》中我讲述了我在面试上的经历和看法,而对于软件行业的面试很多都要求被面试者解决一些编程上的问题。这类面试有很多名字:算法题(Algorithm Question)、编程题(Programming Problem)、考代码(Coding Interview)等等,但基本形式都是:给出一道问题的描述和目的,要求写出程序能够接受相应的参数然后完成目标需求最终得到结果。

大部分常见的这类面试问题都被大家总结在了网上,可以直接搜索找到,或者在一些论坛的特定板块(比如未名空间的待字闺中,一亩三分地的面经)里见到讨论,甚至形成了在线测试网站(比如LeetCode、LintCode)直接验证程序的正确性。

由于面试题目的公开性,造就了软件行业特殊的面试准备过程:刷题。很多朋友也会问我:“出去面试还刷题吗?”准确地讲,我刷过算法题目,也经常后悔没有早在还在学校里时就开始刷题,那样就能更早地进入心仪的公司。但现在出去面试前基本都还是忙着正常的工作,不会专门去练习题目。

刷题的目是理解算法和数据结构

好比读书的时候每次老师教授了新的知识后都会布置习题,完成那些作业可能会让我们在考试中碰到原题而拿到高分,但正真的作用是帮助我们理解和消化所学的知识。从简单的理解:“程序=算法+数据结构”,要写好程序就必须去熟悉算法和数据结构,刷题就应该是完成这样的作用。如果题目做不出来,就说明连最基本写程序的能力都没有,自然很难得到公司的青睐。

我常常幻想如果我高考没有失常,能进入更好的学校学习计算机知识,甚至参加ACM小组,得到老师在算法上更好的点拨指导,也因为要参加计算机竞赛,我也会练习更多的题目,现在就不需要刷题了。但现实是在我就读的大学里,算法只是一门选修课,我也没有参加过任何计算机竞赛。但联想高中数学竞赛的培训过程,老师肯定会分类进行知识传授和练习。所以刷题也一样要分类进行强化训练。

LeetCode虽然是最火的题库,但是在我刷题的时候它只是简单的罗列一百多道题目(可参看我的不完全题解列表),所以当时我更倾向去做UVa上的题目。那上边有上千道题目,肯定是不可能做完的,但是有比较好的分类专区,可以专门的加强某一特定算法和数据结构的基础知识。

一开始我连最简单的二分查找(Binary Search)算法都写不好,但是在反复练习之后,我也能总结出二分法的实现,并汇总一些变形题目到博客里。刚毕业那会找工作,好多次面试都挂在了二叉树(Binary Tree)上,后来做遍各类遍历算法,总结了不同的实现方式,就不再担心关于树的操作。动态规划(Dynamic Programming)在我看来是面试时会碰到最难的问题,后来我发现这类问题的关键在于找到类似于数学中的“递归公式”,这样就可以找到递归的实现,之后利用空间来存放中间值来减少时间复杂度。
Read More →

2015-11-23
23 November
On November 23, 2015
In Knowledge Base(心得笔库), Programming Life(程序人生)

谈谈面试

一般人投入面试都是在需要换新的工作的时候才去,但我即使有着一份稳定的工作也会常常跑去面试一些感觉不错的公司。当你没有工作的时候,比如刚刚从学校里出来寻求一份生存的根本,和处在所谓的骑驴找马的状态去面试的心情是不太一样的。而即使找到了一匹好马,偶然出去面试一些公司也是非常有意义的。

首先不要浪费了每年免费的面试机会。很多公司对于没有成功的面试者都会关一年的“小黑屋”,这个意思是在这段期间内再申请公司内的职位将不被理会。很多人都想去大公司,但是又怕会面不上,所以我经常听到说“我先拿小公司练练手,再多刷刷题再去面大公司”。这没什么错,但是又怎么能保证练完手刷了题就能面上了。所以我个人更倾向当机立断地将简历投向这些心中的“梦想公司”(对于写简历和投简历又是另一门学问,可自行网上搜索)。如果有幸拿到了那些公司的面试,反而会更有压力,让自己变得更加积极地去准备面试。而且一般大公司的面试流程都很可以拖成几个月相信足够去针对性地了解这家公司常见的题目和面试形式。即使说因为种种原因没有成功,这样的一次亲身经历也有利于提高下次的表现。所以我总是会这样看待一家公司的面试“今年又有免费面试的机会了不能浪费了,今年不行明年还能再来”,而不是“面试的机会很宝贵不能浪费了,等准备好了再去”。另外,这些大公司对你的简历是真的会留底的,recruiter在找人的时候有可能真的会再翻出简历然后打电话给你。我现在就职的Twitter就是这样,最早联系上的时候一轮电面就再没有消息(残忍的默拒),半年后接到电话说Mobile组有空职,我当然兴致勃勃地又去面了然后加入了Android组。其他几家大公司,我也有类似的经历,先后失败了2、3次,现在都得到了到这些公司任职机会。
Read More →

Facebook
Twitter
LinkedIn
RSS
ZhiHu

Recent Posts

  • 三年居家工作感受
  • Pixel Watch智能手表和Pixel 5, 6 Pro 及 7 Pro手机
  • 我拥有过的无线耳机
  • 毕业工作一个月,我差点被开除
  • 我拥有过的移动硬盘
  • ProtoBuf 2.0 method count optimization for android development
  • 面过100场行为面试后

Categories

  • Algorithm Analysis(算法分析)
  • Article Collection(聚宝收藏)
  • Data Structures(数据结构)
  • Design Patterns(设计模式)
  • English Posts(英文写作)
  • Front Interface(界面构想)
  • IT Products(数码产品)
  • Knowledge Base(心得笔库)
  • Language Tips(语言初试)
  • Mathematical Theory(数学理论)
  • Mobile Development(移动开发)
  • Programming Life(程序人生)
  • Reading Notes(阅而后知)
  • Software Engineering(软件工程)
  • Special Tricks(奇技妙招)
  • Tangential Speech(漫话杂谈)

Tags

Aero Android API Bash Binary Search Bitwise Operation Book C/C++ Career Chrome Conference CSS Debug Device DOM Extension Framework Game Gradle Hearthstone HTML Initialization Intellij Interview iOS Java JavaScript jQuery Keyword Language Issues Mac Microsoft Mobile Modifier Objective-C PHP Principle Reference Regular Expression Static String Tools Tutorial UI XML

Blogroll

  • Ahmed's Blog
  • Gert Lombard's Blog
  • Gordon Luk
  • Jack & Allison
  • 开发部落

Archives

Designed using Chromatic. Powered by WordPress.