程序员面试中徒手写代码的意义?小白指南_代码指南教程

今天看了一篇文章,分析讲解了技术人员面试中,现场编写代码的意义,我觉得说得非常在理。其实我在本科的时候,就有一次有机会面试谷歌的实习生。但是因为在徒手写代码的时候,失败了,成了我毕生的遗憾。也造成了我在这类面试中的恐惧心理。当时,我只是一名大三学生,我 C 语言课程成绩优秀,算法课成绩一般,但是我很有动手能力,做过不少网站和项目,还在学校的网站设计大赛拿奖。

程序员面试中徒手写代码的意义?小白指南

今天看了一篇文章,分析讲解了技术人员面试中,现场编写代码的意义,我觉得说得非常在理。

程序员面试中徒手写代码的意义?小白指南_代码指南教程

其实我在本科的时候,就有一次有机会面试谷歌的实习生。但是因为在徒手写代码的时候,失败了,成了我毕生的遗憾。也造成了我在这类面试中的恐惧心理。当时,我只是一名大三学生,我 C 语言课程成绩优秀,算法课成绩一般,但是我很有动手能力,做过不少网站和项目,还在学校的网站设计大赛拿奖。我认真做了学过课程的大作业,都是照着最高要求做的,比如实现数据库引擎,实现编译器等等。我自我感觉不错,可是,仍然在面试官让我写出围棋提子算法的时候,一脸茫然。

我觉得这非常不公平,只是因为我对这种冷僻的问题没有研究,对算法的套路不熟悉,就遭逢此让人遗憾一生的失败,实在难以服气。

工作多年后,我也成为了一名面试官,我就非常反对在面试中考徒手编程,但是后来我发现,识别一个优秀程序员,着实没有什么好的方法,如果不用徒手编程的话,我们识别一个好的程序员的概率更加低下。所以,我做出了退让,候选人必须过手写代码这一关,但是我不会考算法套路,我们都知道,很多人朗朗上口的深度优先,广度优先,回溯法,线性规划等等,在你实现一个电商业务系统的时候,或者在你实现一个对账系统的时候,或者在你实现一个网站管理后台的时候,用到的概率微乎其微,就算要用,也不会自己去写,因为经常会写出漏洞百出的代码,使用已经存在的类库要稳妥得多。所以对于真实工作来说,这些套路被一些同学喷成是屠龙之术,我觉得也无可厚非。

所以,我当时要求候选人写这样一种代码,仅仅根据直觉,就一下子知道解法是什么,只要智力正常,有初中数学水平就可以随口讲得头头是道。越是这样的题目,越能进入我惯用的题库。我举个例子,计算两个数字之和。这个看似很简单的题目,是很多 ACM 比赛的入门题,加法是任何编程语言内嵌的方法。如果候选人想得太过简单,我就会提示,编程语言的变量都有取值范围,我出的这道题目,不限制两数的取值范围。

这样一来,就不如表面那么简单,但是仍然知道怎么做。首先要选取合适的变量作为容器,其次要按步就班来计算求和。最后可能要考虑很多的情况,比如正负数,浮点数等等。但是,想不出来这个怎么做的人,少之又少。但是写不出来的人,比比皆是。

我此前的想法是,能用嘴说得头头是道,说明候选人智力正常,能用笔写出来,说明候选人是个熟手,不怕繁琐,是个耐烦的人,因为我们的日常工作琐事,往往就是需要细致耐心,有时候甚至是个重复的工作,如果不耐烦,畏惧繁琐,可能就不是很好的候选人。另外不能把自己的想法写出来,说明对自己惯用的语言并不熟练,不一定是个熟手。

我秉持这样的理念很多年。类似这样的题目,我知道还有不少。我有个同事也秉承类似的理念,跟我不同他坚持需要有一点绕弯的题目。他想考察候选人会不会奋力争取,能不能与面试官充分沟通,在提示之下到底能不能被循循善诱找出正确答案。一方面考察沟通,一方面考察智力,一方面还考察候选人的性格。我觉得这也是不错的方式。

有一次,我在拉钩或者知乎上回答别人对编码面试的质疑,我解释过我的理念,我觉得自己还是比较理直气壮的,我说,编码面试确实不能证明一个候选人有多好,但是,测试出了这个候选人的下限有多低。最不济,候选人还是一个可以熟练写出代码的人。

今天看到的文章是这篇 《为什么时至今日编码面试依然这么糟糕?》 ,这篇文章从另一个角度解释了这个问题。我觉得这个作者解释得也比较好。

我们当然会在面试中看走眼,不过,这种看走眼,有两种情况,一个是放进来错误的人,另一个是拒绝了优秀的人。这两种情况来看,放进来错误的人,成本是非常高的,但是拒绝了优秀的人,成本则很低(对于优秀的顶级企业来说尤其如此)。

通过艰难的徒手编码测试,对一个人的心性,毅力,能力都是一种有效地证明,所以,抬高了录用的门槛,极大降低了“错放”的概率,哪怕增加了误拒的概率,但是综合来看成本是降低了。再加上企业有很好的品牌,就更不惧没有人来面试了。

最后,我也想说跟文章作者一样的话。作为候选人,你已经足够优秀了,这个世界上一定有适合你的岗位。一场面试什么都说明不了,因为面试官背后的种种想法,都是希望在统计意义上去优化成本和收益,对于个体的候选人来说,不具备什么绝对的说服力,运气成分很大。所以,千万不要因为过不了编码面试就气馁。

海计划公众号
(0)
上一篇 2020/03/24 05:44
下一篇 2020/03/24 05:44

您可能感兴趣的内容

  • github-markdown-css指南攻略_GitHub Markdown 样式的一个简洁 CSS

    github-markdown-css指南攻略 官方网址:https://sindresorhus.com/github-markdown-css/ GitHub:https://…

    2020/03/06
  • ypppt菜鸟教程_高质量的免费PPT模板下载网站

    ypppt菜鸟教程 官方网址:http://www.ypppt.com/ 简介描述:高质量的免费PPT模板下载网站 优品PPT模板网是一家专注于分享高质量的免费PPT模板下载网站,…

    2020/03/10
  • 知乎小白入门_网络问答社区,连接各行各业的用户

    知乎使用说明 官方网址:https://www.zhihu.com 简介描述:网络问答社区,连接各行各业的用户 知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和…

    2020/03/06
  • ES6 Map 原理指南教程_map小白知识

    ES6的Map的键可以是任意的数据结构,并且不重复。那么map的底层原理是啥呢?Map利用链表,hash的思想来实现。首先,Map可以实现删除,而且删除的数据可以是中间的值。而链表的优势就是在中间的任意位置添加,删除元素都非常快,不需要移动其他元素,直接改变指针的指向就可以。而在存储数据很多的情况下,会导致链条过长,导致查找效率慢,所以我们可以创建一个桶(存

    2020/03/22
  • node.js如何删除注册表?小白知识_node小白基础

    注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用

    2020/03/24
  • 程序员在职场工作中会担心什么?小白基础_职场入门基础教程

    最近热点的事件比较多,“996.ICU”事件风波,各大互联网公司裁员美其名曰“优化”,跳槽出去又碰见“寒冬”,偏偏恰逢你中年的时候有个代名词名曰“中年危机”。这让很多人非常的焦虑,正所谓祸兮福所倚,福兮祸所伏,你焦虑说明你还是有忧患意识的,古人云生于忧患,死于安乐。所以其实职场人更担心的是死于安乐,停止了你学习进步的脚步。“996.ICU”事件风波996由来

    2020/03/29
  • Jest单元测试框架小白教程_测试使用说明

    Jest
    facebook推出的js单元测试的语言
    1.首先需要在项目文档中安装jest包
    2.创建需要进行单元测试的源代码函数
    3.创建测试文件,包含实际的测试代码
    1 安装Jest
    1.1 初始化package.json
    在命令行工具中输入以下命令,初始化前端项目并生成package.json:npm init -y
    1.2 安装Jest及相关依赖
    在命

    2020/03/20
  • web前端性能优化指南指南教程_性能基础知识

    前端需要性能优化么?性能优化一直以来都是前端工程领域中的一个重要部分。很多资料表明,网站应用的性能优化对于提高用户留存、转化率等都有积极影响。可以理解为,提升你的网站性能,就是提升你的业务数据(甚至是业务收入)。性能优化广义上包含前端优化和后端优化。后端优化的关注点更多的时候是在增加资源利用率、降低资源成本以及提高稳定性上。相较于后端,前端的性能优化会更直接

    2020/03/24
  • webpack-encore入门基础教程_简单和强大Webpack API

    webpack-encore入门基础教程 GitHub:https://github.com/symfony/webpack-encore 简介描述:简单和强大Webpack AP…

    2020/03/11
  • Element 表格导出为Excel表格教程视频_表格攻略教程

    一、安装xlsx和filesavernpm install –save xlsx file-saver二、在表格组件中引入安装的2个文件import FileSaver from “file-saver”;
    import XLSX from “xlsx”;三、HTML结构 <el-table :data="tableData3" style="wid

    2020/03/22
  • 设置nginx中文件上传的大小限制度入门教程_上传小白入门

    通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题: 用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_size这个参数,否则会中断在nginx的请求中,在php中是无法记录到访问的. 一般上传大文件流程,首先修改php.ini文件: 参数file_uploads

    2020/03/29
  • sidr教程视频_创建侧栏和响应式菜单的最佳 jQuery 插件

    sidr教程视频 官方网址:http://www.berriart.com/sidr/ GitHub:https://github.com/artberri/sidr 简介描述:创…

    2020/03/06
  • OS.js小白常识_浏览器的JavaScript Web桌面实现

    OS.js小白常识 官方网址:https://www.os-js.org/ GitHub:https://github.com/os-js/OS.js 简介描述:浏览器的JavaS…

    2020/03/06
  • typescript中类型断言理解小白攻略_断言入门基础教程

    typescript中类型断言好理解也好用类型断言是个好用的玩意,虽然typescript很强大,但是有时还不如我们知道一个值的类型,导致在开发过程中总是报一些令人头痛的类型错误。使用断言,简单来说就是先做好一个假设,使得编译通过。我一开始接触类型断言时是有点不明白的,后来我了解到原因是 “**类型断言更像是类型的选择,而不是类型转换”。**我发现不少博客文

    2020/03/22
  • Vue3.0 响应式数据入门攻略_响应式攻略教程

    “别再更新了,实在是学不动了”这句话道出了多少前端开发者的心声,”不幸”的是 Vue 的作者在国庆区间发布了 Vue3.0 的 pre-Aplha 版本,这意味着 Vue3.0 快要和我们见面了。既来之则安之,扶我起来我要开始讲了。Vue3.0 为了达到更快、更小、更易于维护、更贴近原生、对开发者更友好的目的,在很多方面进行了重构:使用 Typescript

    2020/03/23
  • HTTP中的2XX状态码使用帮助_状态码入门攻略

    HTTP状态码分类1XX ——信息,服务器收到请求,需要请求者继续执行操作2XX——成功,操作被成功接收并处理3XX——重定向,需要进一步的操作以完成请求4XX——客户端错误,请求包含语法错误或者无法完成请求5XX——服务器错误,服务器在处理请求的过程中发生了错误2XX状态码状态码英文名称中文描述200OK请求成功,一般用于GET或者POST请求。201Cr

    2020/03/23