0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么程序员面试时会要求白板编程

工程师人生 来源:网络整理 作者:工程师吴畏 2018-11-20 16:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在技术评估中的检查方法

白板编程可以检查出两方面的技能:

从一开始就可以写简洁的代码,以及

知其代码之所以然。

这两大技能对于一个出色的软件开发人员是至关重要的。通过进行白板编程,这两种技能都能被准确地检验出来。

从一开始就写简洁的代码。

不管我们是否喜欢,现代软件工程主要在于知道足够的模式,并在正确的规则中使用正确的模式。

几天甚至几周后的工作的结果,通常只是修改几百行的代码。

表面上看,原来的开发人员在写代码时需要多少协助并不重要。他们可能在写代码之前,在脑子里就已经想好所有细节了。或者也有可能他们写每一行代码的时候都查阅了API文档、实例、或者语法指导。

但是当我们深入探究的时候,就会发现这其中有很大差异。

理解概念要比理解现象更重要。

一段代码变得越复杂,仅仅依靠一些开发模式的知识去开发就会变得更难,甚至理解代码都会很艰难。

好的白板编程练习,可以检查出一个人到底是理解概念,还是通过记住大量模式来掩盖其基础知识的匮乏。

当我们问到“你最擅长哪种编程语言?”我们其实并不是想要简洁的代码。我们只是在寻找一个切入点,能深入了解一个人,看看他到底有多大能耐。

这里简单总结一下根据“候选人熟悉哪一领域”来决定“在面试中需要涉及哪些方面”:

面向对象编程——多继承,虚拟方法,对象构建与析构顺序,异常处理。

前端——异步逻辑与终止,REST API,验证用户输入。

算法与数据结构——动机,用法,平均及最差情况下的复杂度。

后端与架构——内存模型,垃圾处理机制,多线程,线程锁机制,benchmarking, profiling。

函数式编程——Lambdas,curring,排序操作,一元。

内核层次——文件系统,网络,POSIX,协议,标准的检验与分析工具。

测试——单元测试,逆向测试和端对端测试,必要测试,基于模型的测试,测试驱动的和行为驱动的开发,集成测试。

和候选人谈到上面这些的时候,最好的方法是从举一个例子开始。最好的例子就是让他们自己写一个短小简单的例子。

实际中,候选者写的大多数代码片段都是不完美的。这就提供了一个绝好的机会,看看候选者到底有多少知识。

白板编程很有用,是因为:

有限的写代码空间。

有限的写代码速度。

修改很麻烦,最好要避免。

没有补全,语法高亮和其他IDE的牛逼功能。

想明白代码到底要干嘛。

过一遍代码片段是如何运行的,这是非常好的练习。做技术面试的时候,绝对不要跳过。

如果代码写的是一个算法,有人可以写出所有步骤,有人可以考虑到特殊情况,有人可以写出不变式(invariants)并能证明。有人可以根据每个独立循环结构和递归调用解释其复杂性。

如果代码是面向对象编程,有人可以明确指出其具体功能,对象在何时如何被创建,如何被销毁,什么时候以什么样的顺序会调用构建与析构函数,以及异常出现会怎样,内存布局看起来是什么样的。

I代码是否整洁,或是否包含明显的bug,这非常重要。

观察候选人认真解释代码每一步实现的功能,可以了解他们的思考与说话方式。以及他们在其他领域有多深的了解。

最后,这些都是在技术面试中要用到的检验技巧。而不是使用API和使用IDE完成特定任务的技巧。

白板编程很有用,是因为:

白板上的内容或多或少是不变的。

用不同颜色的笔标出“候选人的原始代码”、“面试官的评论”、“候选人评论”,可以很好的将对话可视化。

不用白板是否有办法做到上面这些技巧呢?

能,也不能。

对于写整洁的代码,我觉得可以让候选人在自己的笔记本电脑上写。

但是要有这些条件:

代码要用投影仪投射在大屏幕上

字体要非常大。

关掉大多数IDE的牛逼功能。

要知道,在不熟悉的操作系统、键盘甚至是编辑器上,相比在白板上编程可能会更难。要么让他们在自己的电脑上写程序,要么确认你提供的环境他们能够接受。

至于理解代码的部分,白板要更有利。

理想情况下,如果是投影仪的影像就是投放到白板上,我会让候选人把投放投射的白板上,面试官再拿几支记号笔。

不过我要说明白,电脑上不允许使用“快速修改”之类的功能。

如果只有两个人的话,打印机又在旁边,那就用用大字体打印出代码,然后用几支彩色笔去分析也非常好。

教学可以帮助练习这些技巧。

我经常被问到,一个人要如何掌握上面的这些技巧。我的答案就是:教学(teaching)。

这对面试官和应聘者都是有益的。

我自己对我的知识水平有一个简单标准。如果我可以对一个领域不做准备就能进行讨论的话,我就算是有丰富的知识了。

在软件领域,这就意味着不用点退格就写出完美的代码,然后能一步一步解释它是做什么的。

如果你是那种经常要被叫过去解释一个算法或者API的人,那你基本上就不会对白板编程面试感到有困难。

白板编程是面试的必要环节么?

不可否认,白板编程很有帮助。但没有它也可以。

如果有一个大屏幕可以显示代码,如果屏幕本身就是个白板,可以在上面用彩色笔进行注释。

我个人喜欢鼓励别人走到白板前。而且这样做有什么不好呢?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    90

    文章

    3723

    浏览量

    97435
  • 程序员
    +关注

    关注

    4

    文章

    956

    浏览量

    31007
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    面试必看!排队自旋锁32位变量的域划分与核心作用

    核心数据结构的域含义模糊不清,导致面试时错失高分。今天这篇文章,我们就从面试视角拆解 32 位变量的域划分、各域作用,再结合流程图理清工作机制,帮你彻底吃透这个考点。
    的头像 发表于 02-09 16:54 920次阅读
    <b class='flag-5'>面试</b>必看!排队自旋锁32位变量的域划分与核心作用

    面试必看:排队自旋锁之MCS锁的实现原理与关键考点

    在并发编程面试中,“锁” 是绕不开的核心话题,而自旋锁作为轻量级锁的代表,其优化方案更是高频考点。
    的头像 发表于 02-09 16:51 852次阅读
    <b class='flag-5'>面试</b>必看:排队自旋锁之MCS锁的实现原理与关键考点

    Claude Code在国内怎么使用?AI编程人员必看的完整指南!

    这两年,AI编程工具层出不穷,但最近 Claude AI 在程序开发者圈子里备受欢迎,越来越多程序员发现使用Claude的体验非常接近“一个懂工程的搭档”,而不是简单的代码生成器。 但问题也随之而来
    的头像 发表于 01-23 14:09 5953次阅读
    Claude Code在国内怎么使用?AI<b class='flag-5'>编程</b>人员必看的完整指南!

    如何成为编程高手

    的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想像力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。开阔的思维对程序员来说很重
    发表于 12-29 06:57

    芯盾时代SDP助力企业应对核心机密泄露危机

    无论你是程序员、文案、财务,无论你想撸代码、出海报、做报表,各式各样的AI总能满足你的需求,让你的工作更加轻松。
    的头像 发表于 12-26 11:49 851次阅读

    探索S32K344白板:多功能硬件开发平台的深度剖析

    探索S32K344白板:多功能硬件开发平台的深度剖析 在当今电子技术飞速发展的时代,一款功能强大且全面的开发平台对于电子工程师来说至关重要。NXP的S32K344白板就是这样一款极具潜力的硬件开发
    的头像 发表于 12-25 10:55 773次阅读

    大理的AI野心藏不住了——风花雪月中千名程序员探讨人工智能

    2025 年12月4日至6日第二届CCF程序员大会暨大理人工智能与应用国际开发者大会在大理圆满落幕。
    的头像 发表于 12-24 17:45 893次阅读
    大理的AI野心藏不住了——风花雪月中千名<b class='flag-5'>程序员</b>探讨人工智能

    AI面试,正在变成一场没有人的表演

    优化了数十份简历后,拿到了心仪面试;有人靠实时辅助软件,顺利通过了某国企的AI视频初筛。 当企业用AI快速筛选简历、用虚拟人进行第一轮面试时,求职者也开始用AI武装自己,试图以技术对抗技术。 一个怪圈已然形成: 企业部署AI以求效率,
    的头像 发表于 12-23 16:36 8069次阅读
    AI<b class='flag-5'>面试</b>,正在变成一场没有人的表演

    程序员最常见谎言

    了。 28我已经测试过了,这个功能没问题,可以上线了。 29别担心,这个问题很快就能解决。 30代码快写完了,已经完成 90% 了 。 希望大家对程序员多一些容忍以及谅解! 各位程序员你们都被我说中了哪些?说说你们的观点
    发表于 12-10 08:24

    编程序段的定义介绍

    已经由操作系统自动设置为代码段的段基址,数据段的段基址则需要程序员手动装入DS中; ASSUME伪指令用于指定每一个数据段所对应的段基址寄存器。如上面的代码中CODE段的段基址寄存器为CS,DATA段
    发表于 11-21 08:19

    奔赴热AI,码力全开!Talkweb House@1024程序员日系列活动圆满收官

    1024程序员日”系列活动至此划上了一个圆满句号。本届1024程序员节以“AI构建世界,智能引领未来”为主题,广邀技术大咖、产业领袖、企业代表与全球开发者齐聚星城
    的头像 发表于 10-27 18:59 962次阅读
    奔赴热AI,码力全开!Talkweb House@1024<b class='flag-5'>程序员</b>日系列活动圆满收官

    开鸿智谷“以赛促学、以赛选才”|1024程序员节暨开源鸿蒙构建大会圆满落幕!

    10月24日,由开鸿智谷联合主办的长沙1024程序员节暨开源鸿蒙构建大会在长沙圆满落幕。本次活动以“湘聚长沙,共赴热AI”为主题,通过技术分享与实战竞赛相结合的方式,着力培养“开源鸿蒙+AI”领域
    的头像 发表于 10-27 17:58 860次阅读
    开鸿智谷“以赛促学、以赛选才”|1024<b class='flag-5'>程序员</b>节暨开源鸿蒙构建大会圆满落幕!

    无法在调试中连接到PSOC4怎么解决?

    您好,我有一块使用 PSOC4 CY8C4013SXI-410 制作的小板。非常简单的设备,它只有三个 GPIO 引脚并通过 5 引脚 SWD 进行编程。我遇到的问题是程序员能够看到该设备但无法对其进行编程
    发表于 07-22 06:02

    跟老齐学Python:从入门到精通

    础的学习者介绍一门时下比较流行、并且用途比较广泛的编程语言,所以,本书读起来不晦涩,并且在其中穿插了很多貌似与Python 编程无关,但与学习者未来程序员职业生涯有关的内容。 获取完整文档资料可下载附件哦!!!! 如果内容
    发表于 06-03 16:10

    程序设计与数据结构

    的地址)出发,采用推导的方式,深入浅出的分析了广大C程序员学习和开发中遇到的难点。 2. 从方法论的高度对C语言在数据结构和算法方面的应用进行了深入讲解和阐述。 3. 讲解了绝大多数C程序员开发
    发表于 05-13 16:45