美文网首页
白板编程,编程面试中的特点

白板编程,编程面试中的特点

作者: 刀背藏身 | 来源:发表于2015-09-09 20:15 被阅读865次

    白板编程,编程面试中的特点

    原文链接:白斑编程浅谈
    选取了一些与己有关的东西

    技术面试中常见的问题

    1. 编码:考察面试者的编码能力,一般要求面试者在 20 ~ 30 分钟之内编写一段需求明确的小程序(例:编写一个函数划分一个整形数组,把负数放在左边,零放在中间,正数放在右边);
    2. 设计:考察面试者的设计/表达能力,一般要求面试者在 30 分钟左右内给出一个系统的大致设计(例:设计一个类似微博的系统)
    3. 项目:考察面试者的设计/表达能力以及其简历的真实度(例:描述你做过的 xxx 系统中的难点,以及你是如何克服这些难点)
    4. (已绝迹)脑筋急转弯:考察面试者的『反应/智力』(例:如果你变成蚂蚁大小然后被扔进一个搅拌机里,你将如何脱身?)
    5. 查漏:考察面试者对某种技术的熟练度(例:Java 的基本类型有几种?)

    以上,第一点几乎是面试中无法逃避的内容,而除了有上机编程的情况外,还有经常出现的情况是白板面试,在不使用熟悉的IDE或编辑器。(IDE可以智能提示,帮助编译,调试程序找出bug)

    白板编程面试的目的

    通过白板编程,面试官可以有效的判定出面试者属于前者还是后者,从而招进合适的人才,并把老油条或是嘴遁者排除在外。除了判定面试者的开发效率,白板编程还有助于展示面试者的编程思路,并便于面试者和面试官进行交流。

    白板编程的目标并不是要求面试者一下子写出完美无缺的代码,而是:

    • 让面试者在解题的过程中将他/他的思维过程和编码习惯展现在面试官面前,以便面试官判定面试者是否具备清晰的逻辑思维和良好的编程素养。
    • 如果面试者陷入困境或是陷阱,面试官也可以为其提供适当的辅助,以免面试陷入无人发言的尴尬境地。

    合适白板编程面试的题目

    首先是不适合白板编程的题目:

    • 这里边,毕业生常见的就是编程之美,july的算法博客,和leetcode。这些算是被问烂的编程题,很多面试者只求记住,不求甚解。(当然,作为被面试者,刷通leetcode也许对自己的算法能力提高很有帮助)
    • 脑筋急转弯类型的题目
    • 复杂库或API调用
    • 直接的基本算法

    适合的题目:
    技术面试题目不应该太难,也不应太简单,不能是脑筋急转弯,也不能直接来自网络。

    强烈注意《编程珠玑》《TAOCP》后边的练习题。

    • 不止一种解法,而有最优解
    • 考察点比较明确
    • 可延伸

    面试者该如何准备

    1. 拥有扎实的数据结构/算法基础
    2. 知道如何利用 前条件/不变式/后条件 这些工具编写正确的程序
      能够在白板(或纸上)实现基本的数据结构和算法(如果 1 和 2 做到这一步是水到渠成)
    3. 在 leetcode 或 careercup 上面进行过练习,了解常见的技术面试题目(我个人不鼓励刷题,但在面试前建立起对面试题的『感觉』非常重要)

    面试中:
    确定需求:输入,输出,数据范围,时间要求,空间要求,其他限制。

    • 先写出轮廓(大纲)
      白板编程没法复制粘贴,所以后期调整代码结构非常困难。因此我们最好在开头写出程序的大致结构,从而保证之后不会有大改;

    • 确定前条件/不变式/后条件
      我们可以通过注释的形式给出代码的前条件/不变式/后条件

    • 使用实例数据验证自己的程序
      尽管不变式足以验证程序的正确性,但适当的使用实例数据会大大增强代码的可信性

    • 使用缩写
      白板编程并不需要面试者在白板上写出能够一次通过编译的代码。为了节省时间,面试者可以在和面试官沟通的基础上使用缩写。例如使用 Iter 替代 Iterable,使用 BQ 替代 BlockingQueue。(此法尤其适合于 Java –_–#)

    • 至少留一行半行宽
      出于紧张或疏忽,一般面试者在白板编程时会犯下各种小错误,例如忘了某个判断条件或是漏了某条语句,空余的行宽可以帮助面试者快速修改代码,使得白板上的代码不至于一团糟。

    不会做怎么办

    1. 至少先给出一个暴力(Brute force)解法
    2. 寻找合适的数据结构(例如栈/队列/树/堆/图)和算法(例如分治/回溯/动态规划/贪婪)
    3. 从小数据集开始尝试
    4. 如果还是没有头绪,重新考虑题目的前条件,思考是否漏掉了条件(或是隐含的条件)
    5. 如果 3 分钟过后还是没有任何思路,请求面试官提示,不要觉得不好意思——经过提示给出答案远强于没有答案

    相关文章

      网友评论

          本文标题:白板编程,编程面试中的特点

          本文链接:https://www.haomeiwen.com/subject/qulpcttx.html