- Preface
- FAQ
- Guidelines for Contributing
- Contributors
- Part I - Basics
- Basics Data Structure
- String
- Linked List
- Binary Tree
- Huffman Compression
- Queue
- Heap
- Stack
- Set
- Map
- Graph
- Basics Sorting
- 算法复习——排序
- Bubble Sort
- Selection Sort
- Insertion Sort
- Merge Sort
- Quick Sort
- Heap Sort
- Bucket Sort
- Counting Sort
- Radix Sort
- Basics Algorithm
- Divide and Conquer
- Binary Search
- Math
- Greatest Common Divisor
- Prime
- Knapsack
- Probability
- Shuffle
- Bitmap
- Basics Misc
- Bit Manipulation
- Part II - Coding
- String
- strStr
- Two Strings Are Anagrams
- Compare Strings
- Anagrams
- Longest Common Substring
- Rotate String
- Reverse Words in a String
- Valid Palindrome
- Longest Palindromic Substring
- Space Replacement
- Wildcard Matching
- Length of Last Word
- Count and Say
- Integer Array
- Remove Element
- Zero Sum Subarray
- Subarray Sum K
- Subarray Sum Closest
- Recover Rotated Sorted Array
- Product of Array Exclude Itself
- Partition Array
- First Missing Positive
- 2 Sum
- 3 Sum
- 3 Sum Closest
- Remove Duplicates from Sorted Array
- Remove Duplicates from Sorted Array II
- Merge Sorted Array
- Merge Sorted Array II
- Median
- Partition Array by Odd and Even
- Kth Largest Element
- Binary Search
- Binary Search
- Search Insert Position
- Search for a Range
- First Bad Version
- Search a 2D Matrix
- Search a 2D Matrix II
- Find Peak Element
- Search in Rotated Sorted Array
- Search in Rotated Sorted Array II
- Find Minimum in Rotated Sorted Array
- Find Minimum in Rotated Sorted Array II
- Median of two Sorted Arrays
- Sqrt x
- Wood Cut
- Math and Bit Manipulation
- Single Number
- Single Number II
- Single Number III
- O1 Check Power of 2
- Convert Integer A to Integer B
- Factorial Trailing Zeroes
- Unique Binary Search Trees
- Update Bits
- Fast Power
- Hash Function
- Count 1 in Binary
- Fibonacci
- A plus B Problem
- Print Numbers by Recursion
- Majority Number
- Majority Number II
- Majority Number III
- Digit Counts
- Ugly Number
- Plus One
- Linked List
- Remove Duplicates from Sorted List
- Remove Duplicates from Sorted List II
- Remove Duplicates from Unsorted List
- Partition List
- Add Two Numbers
- Two Lists Sum Advanced
- Remove Nth Node From End of List
- Linked List Cycle
- Linked List Cycle II
- Reverse Linked List
- Reverse Linked List II
- Merge Two Sorted Lists
- Merge k Sorted Lists
- Reorder List
- Copy List with Random Pointer
- Sort List
- Insertion Sort List
- Palindrome Linked List
- Delete Node in the Middle of Singly Linked List
- Rotate List
- Swap Nodes in Pairs
- Remove Linked List Elements
- Binary Tree
- Binary Tree Preorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Postorder Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal II
- Maximum Depth of Binary Tree
- Balanced Binary Tree
- Binary Tree Maximum Path Sum
- Lowest Common Ancestor
- Invert Binary Tree
- Diameter of a Binary Tree
- Construct Binary Tree from Preorder and Inorder Traversal
- Construct Binary Tree from Inorder and Postorder Traversal
- Subtree
- Binary Tree Zigzag Level Order Traversal
- Binary Tree Serialization
- Binary Search Tree
- Insert Node in a Binary Search Tree
- Validate Binary Search Tree
- Search Range in Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Binary Search Tree Iterator
- Exhaustive Search
- Subsets
- Unique Subsets
- Permutations
- Unique Permutations
- Next Permutation
- Previous Permuation
- Permutation Index
- Permutation Index II
- Permutation Sequence
- Unique Binary Search Trees II
- Palindrome Partitioning
- Combinations
- Combination Sum
- Combination Sum II
- Minimum Depth of Binary Tree
- Word Search
- Dynamic Programming
- Triangle
- Backpack
- Backpack II
- Minimum Path Sum
- Unique Paths
- Unique Paths II
- Climbing Stairs
- Jump Game
- Word Break
- Longest Increasing Subsequence
- Follow up
- Palindrome Partitioning II
- Longest Common Subsequence
- Edit Distance
- Jump Game II
- Best Time to Buy and Sell Stock
- Best Time to Buy and Sell Stock II
- Best Time to Buy and Sell Stock III
- Best Time to Buy and Sell Stock IV
- Distinct Subsequences
- Interleaving String
- Maximum Subarray
- Maximum Subarray II
- Longest Increasing Continuous subsequence
- Longest Increasing Continuous subsequence II
- Maximal Square
- Graph
- Find the Connected Component in the Undirected Graph
- Route Between Two Nodes in Graph
- Topological Sorting
- Word Ladder
- Bipartial Graph Part I
- Data Structure
- Implement Queue by Two Stacks
- Min Stack
- Sliding Window Maximum
- Longest Words
- Heapify
- Problem Misc
- Nuts and Bolts Problem
- String to Integer
- Insert Interval
- Merge Intervals
- Minimum Subarray
- Matrix Zigzag Traversal
- Valid Sudoku
- Add Binary
- Reverse Integer
- Gray Code
- Find the Missing Number
- Minimum Window Substring
- Continuous Subarray Sum
- Continuous Subarray Sum II
- Longest Consecutive Sequence
- Part III - Contest
- Google APAC
- APAC 2015 Round B
- Problem A. Password Attacker
- APAC 2016 Round D
- Problem A. Dynamic Grid
- Microsoft
- Microsoft 2015 April
- Problem A. Magic Box
- Problem B. Professor Q's Software
- Problem C. Islands Travel
- Problem D. Recruitment
- Microsoft 2015 April 2
- Problem A. Lucky Substrings
- Problem B. Numeric Keypad
- Problem C. Spring Outing
- Microsoft 2015 September 2
- Problem A. Farthest Point
- Appendix I Interview and Resume
- Interview
- Resume
- 術語表
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
- Age, photo, ID number
提供客观数据,具体且简短,多使用动词如『优化』、『提高』等,不要在简历中包含年龄,照片,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
- handle corner cases
- 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
本小节部分摘自九章微信的分享。
- www.geeksforgeeks.org - 非常著名的漏题网站之一。上面会时不时的有各种公司的面试真题漏出。有一些题也会有解法分析。
- Programming Interview Questions | CareerCup - CC150 作者搞的网站,也是著名的漏题网站之一。大家会在上面讨论各个公司的面试题。
- Glassdoor – Get Hired. Love Your Job. - 一个给公司打分的网站,类似 yelp 的公司版。会有一些人在上面讨论面试题,适合你在面某个公司的时候专门去看一下。
- 面经网 | 汇集热气腾腾的求职咨询 - 面经网。应该是个人经营的一个积累面经的网站。面经来源主要是一亩三分地,mitbbs 之类的地方。
- 一亩三分地论坛-美国加拿大留学申请|工作就业|英语考试|学习生活信噪比最高的网站 - 人气非常高的论坛。
- 待字闺中(JobHunting) 版 | 未名空间(mitbbs.com) jobhunting 版,美华人找工作必上。
- 程序员面试:电话面试问答 Top 50 - 博客 - 伯乐在线 - 其实不仅仅只是 Top 50,扩展连接还给出了其他参考。
- 想加入硅谷顶级科技公司,你该知道这些 - 数据工程师董飞的求职分享,涵盖硅谷公司的招聘流程,简历的书写,面试中的考察内容,选拔标准等。Evernote 备份链接
- 求职在美国,面试攻略我知道 on Vimeo - Coursera 数据工程师董飞的视频分享。
Facebook 交流. Facebook 学长交流分享 - biaobiaoqi - 博客园 - Facebook 工程师的经验分享,Frank 对面试和简历部分的分享极其详细,信息量很大。 ↩
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论