Skip to content

Instantly share code, notes, and snippets.

@simonwoo
Last active October 2, 2016 19:02
Show Gist options
  • Save simonwoo/23c2c707e6e4555466fe96924a126c1f to your computer and use it in GitHub Desktop.
Save simonwoo/23c2c707e6e4555466fe96924a126c1f to your computer and use it in GitHub Desktop.

面试的三种形式

  • 电话面试: 尽可能用形象的语言把细节说清楚。
  • 共享桌面远程面试: 编程习惯。
  • 现场面试: 准备几个问题问面试官。

面试的三个环节

项目经验(遵从STAR模型)

  • Situation(简短的项目背景)
    • 项目规模,开发的软件功能,目标用户。
  • Task(自己完成的任务)
    • 让面试官对自己的工作一目了然,在用词上注意参与和负责。
  • Action(为了完成任务自己做了哪些工作,是怎么做的)
    • 做系统设计时,可以介绍系统架构的特点
    • 做软件开发时,可以写基于什么工具在哪个平台使用了哪些技术
  • Result(自己的贡献)
    • 如果是参与功能开发,可以说按时完成了多少功能
    • 如果做优化,可以说性能提高的百分比是多少
    • 如果是维护,可以说修改了多少个Bug

Example: Winforms是微软.NET中的一个成熟的UI平台(S)。本人的工作是在添加少量新功能之外主要负责维护已有功能(Task)。新的功能主要是让Winforms的控件风格和Vista, Windows7的风格保持一致。在维护方面,对于较难的问题我使用WinDbg等工具进行调试(Action)。在过去的两年中我总共修改超过200Bug(Result)。

面试官常见的提问:

  • 你在该项目中碰到的最大问题是什么,是如何解决?
  • 从这个项目中你学到了什么?
  • 什么时候会和其他团队成员(包括开发人员,测试人员,设计人员,项目经理等)有什么样的冲突,你们是怎么解决冲突的?

注意事项:

  • 了解,熟悉,精通的区别

技术面试

  • 扎实的基础知识: 编程语言, 数据结构和算法。要熟练掌握链表,树,栈,队列和哈希表等数据结构,尤其是链表和二叉树。重点掌握二分查找,归并排序和快速排序。
  • 高质量代码: 关注边界条件,特殊输入,错误处理。写代码之前最好做到先写测试用例。
  • 清晰的思路: 画图能使抽象问题形象化,举例能使抽象问题具体化,分解能使复杂问题简单化。 当一眼看不出问题中隐藏的规律的时候,可以试着用一两个具体的例子模拟操作的过程,这样说不定就可以通过具体的例子找到抽象的规律。 其次可以试着用图形表示抽象的数据结构。像分析与链表,二叉树相关的题目时,我们可以画出他们的结构来简化题目。 最后可以试着把复杂的问题分解成若干个简单的子问题,再一一解决。很多基于递归的思路,包括分治法,动态规划都是把复杂的问题分解成一个或多个简单的子问题。
  • 优化效率的能力: 当面试官提示还有更好的解法时,应努力寻找在时间消耗或者空间消耗上可以优化的地方。 要想优化代码的效率,我们要熟知各种数据结构的优缺点,并能够选择合适的数据结构解决问题,我们也要熟练掌握常用的算法。面试中最常用的算法是查找和排序。
  • 综合能力: 沟通能力,学习能力,知识迁移能力,抽象建模能力和发散思维能力。

应聘者提问

最好是与招聘职位和项目相关的问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment