技术面试的主题
1.简要自我介绍:
- 姓名、学校、专业
- 做过的项目与实习
- 个人主要成就
2.技术评估:
- 构建与开发算法
- 编程
- 计算机基础知识
- 数据结构
- 现实世界问题解决能力
- 设计问题(主要针对博士生)
没有脑筋急转弯问题(因为这不能反映你的编程能力)
3.你对面试官的问题
如何准备技术面试
- 复习计算机基础知识-回想你大一那年
- 复习算法和数据结构
- 练习写代码,特别如果你疏于练习;集中精力在你最强的语言上
1.练习在白板上或者白纸上写代码
2.我们需要的是实际的代码:高质量、高效率、高简洁、无打字错误
3.语言选择不是问题-面试官会让你自己选你最强的语言编程
技术面试中的要点
两条原则
1.谷歌并不是在找那种已经精通某种技能、可以解决相应问题的工程师。
2.谷歌要找的是那种有热情和能力去解决他们从未遇到的问题的工程师。
相对于知识本身,谷歌更加重视你的系统思考、快速学习能力、口头表达能力和品格。
谷歌关心你是如何解决问题的。把你想的说出来,并提出问题。
- 我们的问题是深入全面的。我们想知道你是如何思考复杂问题的。
- 能给出正确答案很好,但不是必须的-你的思考过程是最重要的。
如果面试官问你的问题,你已经之前在网上看到过,应该怎么办?
诚实说出来。面试官会转而考察你在已知方案情况下,解决问题的速度。
比给出正确答案更重要的是
当我们问了一个技术问题,我们希望你:
- 把问题分类
- 快速先提出一个简单的解决方案
- 优化你的解决方案
- 与面试官交流你的思路
1.你的解决思路与解决方案同样重要
2.提出假设并合理推断
3.提出多种多样的解决思路
两个技术面试样题
1.“Reverse the words in a sentence”
你可能很快指出这是个逆序问题,给出了你的解决方案。
但是面试官关心的是,你真的看明白题目的要求了吗?是每个字母都反过来,还是每个词?你注意看了吗?这两者的处理方式相同吗?按词进行逆序,以什么作为分隔符呢?标点符号应当如何考虑?这句话需要输入吗?如何完整设计含有输入功能的逆序程序呢?
等等,问题会逐渐加深。
2.“Describe a good algorithm for sorting amillion numbers”
这题也是一样,你会记得问面试官数字的类型吗?是int还是float?你用什么算法?各自的时间、空间复杂度是多少?你的程序估计消耗内存是多少?million变成trillion应该怎么做?多线程应当如何设计?若10台电脑一起跑,有1台死机了怎么办?如果是断网了怎么办?
因为是让你解决实际的问题,所以这些问题都要考虑进去。问题的深度会逐渐加深。