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
- University, degree, expected graduation date
- Highly recommended including GPA with scale/ranking
- Projects
- Industry experience (internships, competition, full-time)
- Interesting projects
- Links where applicable (github, apps, websites)
学校/学位/毕业时间(方便 HR 知道你何时毕业筛选简历),GPA 最好能附上权重,不同的学校 GPA 总分不一样。
Writing a great resume
- Focus on what you did
- Focus on Impact(metrics and numbers are a plus)
- Be specific and concise (1 page if at all possible)
- Pro tip: alawys start with an active verb
- example: built, optimized, improved, doubled, etc
- Don't include
提供客观数据,具体且简短,多使用动词如『优化』、『提高』等,不要在简历中包含年龄,照片,ID 号,有些东西与法律相关。
Coding interview
Goals of a coding interview
Protip: Think out loud!
- How you think and tackle technical problems
- How you consider engineering trade offs (speed vs. time)
- How you communicate in English about codes
- 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 实现。
- Data structures and algorithms
- implement, not memorize
- discuss complexity (space and time trade-offs)
- Common library functions are fair game
- Specific questions about concepts are rare
- Unless you claim to be an export or need the concept
During the interview
- 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
- Focus on getting a working solution first
- Iterate
- 举一两个例子,有可能的话还可以在白板上画出来帮助理解。问题的限制不是那么明确,确定和面试官理解的是同一个问题。
- 尝试获得一个能工作的 code
- 进行迭代,寻找更好的方法。记住测试自己的代码,选择简单但是典型的测试案例。
不要立即写代码,先明确思路,再写代码。Done is better than perfect
能否修改原数组,空间限制,时间限制。
大体方案要和面试官讨论。一定要和面试官多交流,思考过程和方法。
be yourself, 坦白地说出自己不懂的地方,没什么不好的,把知道的地方说清楚。
最近做的/最喜欢的/最具挑战性的项目是什么,不只是要把项目背景说出来,还要说出为什么喜欢,有哪些挑战,推理过程。
项目讨论的框架
- context: 简要描述项目背景,为什么要做,意义和影响何在。让面试官快速了解。
- action: 你在这个项目中做了什么,贡献是什么。
- result: 项目的结果,失败的项目也可以讲,在这个项目中学到了什么,得到了什么样的成长。
简历中提到的技术一定要熟悉。站在面试官的角度问自己会问自己什么问题。
面试之后,可以问面试官问题,着重问自己关心的问题。
behavior question
- motivation:动机从何而来,整个过程中做了什么。
- passion: 激情,哪种产品让你特别兴奋,为什么。
- team pair: 团队合作? 这里忘了
- disagreement: 怎么处理不同意见和冲突。
回答要具体,跟自己有关系,而不是泛泛而谈。
总结
- Think out loud, 不用担心自己的英语,把主要意思表达清楚就好了.
- 面试中多问问题,充分理解题意。
- 不要写 shit code, 提供典型案例测试自己的代码
- 多练习,可以找几个小伙伴进行模拟面试,交换角色,在白板上多写代码。
- 电话面试找一个安静的地方,把双手解放出来,便于写代码。
Reference
本小节部分摘自九章微信的分享。