algorithm-reading

Interview

本小节主要总结一些面试相关的优质资源。

Facebook workshop - Crush Your Coding Interview

Facebook 每年的5月份左右会在中国大陆的清北复交浙等高校做技术讲座,基本模式是两到三个工程师进行现场分享,Frank 会着重介绍一些面试流程和简历撰写的细节,信息量非常大!其他几个工程师则是介绍自己在 Facebook 所做的产品和企业文化,全程约两个半小时,后面是 Q & A 环节,对提问者有各种小礼物送出。我会说我拿到了F的官方T恤了吗 :) 质地还不错,布料摸起来比较舒服,logo 也不太明显。强烈推荐在这五所高校附近的 CSer 们前去围观!本校的就更不要错过了啦~

咳咳,进入正题,以下为自己对当晚 Facebook 工程师经验分享的一些总结,部分参考自浙大一位童鞋的总结Facebook 交流

大致的 slides 如下,没有在网上找到公开的,以下是自己根据照片总结的。

Resume

What to include on your resume

  1. University, degree, expected graduation date
    • Highly recommended including GPA with scale/ranking
  2. Projects
    • Industry experience (internships, competition, full-time)
    • Interesting projects
    • Links where applicable (github, apps, websites)

学校/学位/毕业时间(方便 HR 知道你何时毕业筛选简历),GPA 最好能附上权重,不同的学校 GPA 总分不一样。

Writing a great resume

  1. Focus on what you did
  2. Focus on Impact(metrics and numbers are a plus)
  3. Be specific and concise (1 page if at all possible)
  4. Pro tip: alawys start with an active verb
    • example: built, optimized, improved, doubled, etc
  5. Don't include
    • Age, photo, ID number

提供客观数据,具体且简短,多使用动词如『优化』、『提高』等,不要在简历中包含年龄,照片,ID 号,有些东西与法律相关。

Coding interview

Goals of a coding interview

Protip: Think out loud!

  1. How you think and tackle technical problems
  2. How you consider engineering trade offs (speed vs. time)
  3. How you communicate in English about codes
  4. Limits of what you know
    • Don't feel bad if you don't get all answers right

What is covered?

Use your comfortable coding language (C++ Java would be better)

之前听 Google 的工程师说是尽量使用 C++ 和 Java 实现。

  1. Data structures and algorithms
    • implement, not memorize
    • discuss complexity (space and time trade-offs)
    • Common library functions are fair game
  2. Specific questions about concepts are rare
    • Unless you claim to be an export or need the concept

During the interview

  1. Clarify your understanding
    • ask questions until you fully understand problem space and constraints
    • validate or state any assumptions
    • draw pictures to help you better understand problems
  2. Focus on getting a working solution first
    • handle corner cases
  3. Iterate
  1. 举一两个例子,有可能的话还可以在白板上画出来帮助理解。问题的限制不是那么明确,确定和面试官理解的是同一个问题。
  2. 尝试获得一个能工作的 code
  3. 进行迭代,寻找更好的方法。记住测试自己的代码,选择简单但是典型的测试案例。

不要立即写代码,先明确思路,再写代码。Done is better than perfect

能否修改原数组,空间限制,时间限制。

大体方案要和面试官讨论。一定要和面试官多交流,思考过程和方法。

be yourself, 坦白地说出自己不懂的地方,没什么不好的,把知道的地方说清楚。

最近做的/最喜欢的/最具挑战性的项目是什么,不只是要把项目背景说出来,还要说出为什么喜欢,有哪些挑战,推理过程。

项目讨论的框架

  1. context: 简要描述项目背景,为什么要做,意义和影响何在。让面试官快速了解。
  2. action: 你在这个项目中做了什么,贡献是什么。
  3. result: 项目的结果,失败的项目也可以讲,在这个项目中学到了什么,得到了什么样的成长。

简历中提到的技术一定要熟悉。站在面试官的角度问自己会问自己什么问题。

面试之后,可以问面试官问题,着重问自己关心的问题。

behavior question

  1. motivation:动机从何而来,整个过程中做了什么。
  2. passion: 激情,哪种产品让你特别兴奋,为什么。
  3. team pair: 团队合作? 这里忘了
  4. disagreement: 怎么处理不同意见和冲突。

回答要具体,跟自己有关系,而不是泛泛而谈。

总结

  1. Think out loud, 不用担心自己的英语,把主要意思表达清楚就好了.
  2. 面试中多问问题,充分理解题意。
  3. 不要写 shit code, 提供典型案例测试自己的代码
  4. 多练习,可以找几个小伙伴进行模拟面试,交换角色,在白板上多写代码。
  5. 电话面试找一个安静的地方,把双手解放出来,便于写代码。

Reference

本小节部分摘自九章微信的分享。