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

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

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

技术面试中常见的问题

  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 分钟过后还是没有任何思路,请求面试官提示,不要觉得不好意思——经过提示给出答案远强于没有答案
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,269评论 25 708
  • 当我最初开始参加编程面试的时候,我所有最心仪的公司都忽视了我。现在回头看那个时候,我发现自己当时去参加面试都完全没...
    bd3250545d54阅读 1,366评论 1 21
  • 这是一个很难记录的故事,因为一提起这个故事,我就会深陷在恐惧中。 悟能先生是一位中年上班族,至少我认识他的时候,他...
    limbopan阅读 198评论 0 0
  • 闲暇时,总喜欢摆弄摆弄阳台上的那些多肉绿植,或盆栽或水培。 一株株小小的多肉,在暖阳的照耀下,随意而安静地生长着,...
    墨痕愫语阅读 678评论 10 17
  • 人生有情,但是当人情与人生两难全时,怎么选择? 转眼进入职场两年了,从懵懂的小白,变成领导信任的助手,熟悉了一些职...
    星蘭阅读 337评论 0 1