最近几年,程序员面试中的做题环节越来越不受欢迎。很多人都在问:为什么会这样?其实原因很简单,现在的面试做题方式和实际工作需求出现了严重脱节。
2015年发生过一个著名事件。Homebrew的作者Max Howell去谷歌面试,因为没能在白板上写出“翻转二叉树”的算法而被拒绝。这个事件在当时引起了很大讨论,直到现在仍然是大家热议的话题。
想想我们平时的工作场景:
但算法面试要求的是:
在白板上手写代码
没有任何工具帮助
时间压力很大
还要边写边解释思路
这种反差让很多有经验的开发者感到困惑。有位技术负责人说得很好:“工作中明明调用现成api就能解决的问题,面试却非要手写底层算法,这就像考驾照非要考生背发动机原理一样。”
更让人无奈的是,很多擅长做题的人在实际工作中表现并不好。有些能熟练写出复杂算法的候选人,连基本的Git操作都不熟悉。而一些笔试成绩一般的人,反而能快速解决实际工作中的技术问题。
为了应对算法面试,一个特殊的“刷题”生态逐渐形成,这引发了不少问题:
时间投入太大
准备面试的程序员通常要花几百个小时刷题,背诵各种解题模板。但工作中真正用到这些知识的机会很少。有位后端工程师分享,他为了面试刷了400多道题,工作两年后只用到过其中一道题的思路。
筛选机制不合理
过度强调做题能力,可能导致企业错过这两类人才:
有丰富项目经验,但很久没接触算法的高级工程师
自学成才,实践能力强但缺乏系统算法训练的开发者
相反,一些擅长应试但实际能力不足的人反而更容易通过面试。
能力评估失真
有些人通过短期突击刷题,面试时表现很好,但入职后实际工作能力跟不上。这种情况不仅让企业付出代价,也让认真工作的开发者对做题面试更加反感。
人工智能的发展让传统算法面试面临更大挑战。现在已经有AI工具能够识别面试题目并实时生成答案,有些甚至能帮助用户通过大公司的技术面试。
有一个数据很能说明问题:某款面试辅助工具在36天内就实现了百万美元的年收入预测,这从侧面反映了大家对算法面试的态度。
在AI时代,考察“能不能手写算法”已经意义不大。更重要的是评估候选人:
如何分析问题
如何设计解决方案
如何与AI协作完成任务
如何保证代码质量
这些能力都无法通过传统的白板编程来考察。
算法面试的高压环境本身也存在问题。在面试官的注视下手写代码,很容易让人紧张,导致实际能力强的人发挥失常。
这种面试方式对某些群体尤其不友好:
转行的开发者可能缺乏系统的算法训练
有阅读障碍的人难以快速理解题目
长期做业务开发的工程师可能忘记一些算法细节
这与行业提倡的多元化理念相违背,也让更多人开始反思算法面试的合理性。
程序员反感的不是技术考核,而是脱离实际的考核方式。现在很多公司已经开始尝试新的面试方法:
项目展示
让候选人展示做过的真实项目,讲解其中的技术选择和解决方案。这种方式能更好地考察实际工作经验。
代码审查
提供一段真实的代码,让候选人进行审查和优化。这能看出一个人的代码品味和工程能力。
系统设计
讨论如何设计一个系统或功能,考察架构思维和问题分析能力。
结对编程
和面试官一起解决一个实际问题,模拟真实的工作场景。
这些方法的好处:
更接近实际工作
能全面评估能力
减少死记硬背
降低心理压力
给面试者的建议:
如果你正在准备面试:
还是要适当准备算法题,毕竟很多公司还在用
重点理解算法思想,而不是死记硬背
多准备项目经验的分享
练习在压力下保持冷静
给企业的建议:
如果你在招聘技术人员:
根据岗位需求设计面试内容
结合多种考核方式
提供更接近实际工作的面试环境
关注候选人的综合能力
面试方式的改变需要时间和实践。好的技术面试应该既能评估候选人的能力,又能让候选人展示真实水平。随着行业的发展,相信会有越来越多公司找到更合理的面试方法。
对于开发者来说,重要的是持续学习,提升解决实际问题的能力。对于企业来说,需要不断优化招聘流程,找到真正合适的人才。这样才能实现双赢。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!
很多童鞋可能年后有自己的一些计划,比如换份工作环境,比如对职业目标有了新的打算。当然面试这一关不得不过,大概又不可能系统性的复习,这里罗列一些 重点 面试的知识点和文章,
什么是webpack和grunt和gulp有什么不同?什么是bundle,什么是chunk,什么是module?什么是Loader?什么是Plugin?如何可以自动生成webpack配置?webpack-dev-server和http服务器如nginx有什么区别?
多问问应聘者高层次的知识点,如果能讲清楚这些概念,就说明即使应聘者没怎么接触过 JavaScript,也能够在短短几个星期之内就把语言细节和语法之类的东西弄清楚。
面试比棘手的技术问题要多,这篇文章整理了37个JavaScript基本面试问题和解答,这些仅仅是作为指导。希望对前端开发的你有所帮助!
React常见面试题:React中调用setState之后发生了什么事情?React中Element与Component的区别?优先选择使用ClassComponent而不是FunctionalComponent?React中的refs属性的作用是什么?React中keys的作用是什么?
题目大意为:JS 环境下,如何让 a == 1 && a == 2 && a == 3 这个表达式返回 true ?这道题目乍看之下似乎不太可能,因为在正常情况下,一个变量的值如果没有手动修改,在一个表达式中是不会变化的。
10道JavaScript题目:累加函数addNum、实现一个Person类、实现一个arrMerge 函数、实现一个toCamelStyle函数、setTimeout实现重复调用、实现一个bind函数、实现一个Utils模块、输出一个对象自身的属性
面试开场白总缺少不了自我介绍,一方面是面试官想听听你对自己的介绍,顺便有时间看看简历上的描述,是否与口述一致。另一方面就是看看你简历上做过什么项目,用到了哪些技术栈,一会儿好提问你。
把面试当做学习,这个过程你会收益很大。前端知识很杂,可能实际工作中用到的技术,像框架都是跟着公司的要求走的,像我最近也在看React啦,Vue和React都对比着再学习
vue上手可以说是比较轻松而且简单,如果你用过angular,react,你也会很喜欢vue。vue的核心思想依旧是:构建用户界面的渐进式框架,关注视图的变化。这也是为什么新建的文件是结构是template script style
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!