分享一个技术面试小细节:别让变量名拖后腿
来自: 第二人生(公众号'码农姐妹')
最近在我们群里大家聊天,有姐妹聊起来工程师素养话题,当时推荐大家看看整洁代码这本书~
我随口说了一句“找工作的学生如果有精力可以看看,比如最近面试看到有人做题的变量名起的我看着就难受”,结果意外引起了大家的好奇和讨论。
一些典型的算法题命名bad case be like 👇:
刚好最近招聘季又来了,作为一个入行8年,常年面试别人的老后端,打算出个工程师素养系列技术专栏。今天聊聊写算法题时的一个小细节,「怎么给变量命名?」
写算法题就能随便命名吗?
现在网上有种观点很流行:“算法题跟八股文一样,跟实际生产脱节,挺没意义的”。
我却不这么认为。事实上,通过出算法题来考察面试者,能从多个方面对候选人进行评估。
一个候选人不知道的信息差: 除了题目A不A过(A = accept,刷题俚语),面试官会关注候选人做题时展现的代码风格。在最终评估候选人的工程素养时,这是一个重要的参考。而如何给变量命名,就是体现代码风格的重要细节。
毕竟招进来后都是要写代码的,有必要提前了解候选人的代码编写风格,是“奔放不羁”让人难以理解的写法,还是“整洁优雅”易读的写法。
在阅读代码时,我们最先注意到的是命名,包括类、函数和变量的命名。
命名本质上是在用言简意赅的自然语言,去描述一个抽象逻辑。命名的依据其实就是自然语言,核心在于“达意”,其“自解释”的性质与“注释”是同一个层面的作用。
在实际工作时候,我们有很大一部分时间在阅读代码。好的代码风格不仅能让人快速理解代码实现的功能,也便于后期的迭代维护,能够提高开发编程效率。
先看一些奇葩命名:
Stringdata=loadData(file)//国
外论坛得票第一,过于宽泛 in
tflag = getPersonFlag(person) ; if (flag) {…}//被
教材带歪的了 Li
st qt = new ArrayList();//能
猜到涵义是“其它“吗? St
ringstring=createQQMsg();//stri
ng的变量叫string真是绝了
我们再来看下面这段代码。前几天有个群友面试,正好遇到一道经典题,这是她贡献的答案。题目虽然是答出来了,但是编码风格并不清晰。
看一道经典算法题的解法
这个解答是可以A过的,但是从变量名风格的角度看,面试官却会眉头一皱。
1、变量 a 和 b 作为指针使用时,它们的名字过于简单,不够表意和直观。更好的命名可能是 left 和 right,以表示它们在数组中的位置和作用。 2、list这个变量名无法表达出它实际承载的业务语义,读代码的人会很困惑,这究竟是个什么list? 这里可能会有人有疑问,leetcode官方解答会看到很多list、map 的命名。但是实际上leetcode只是训练算法以及单个问题解决思路,并不提供工程素养参考。 3、变量 temp 用于存储临时的三元组,命名为 temp 过于泛化,不够明确。更好的命名可能是 triplet 或者 currentTriplet。 4、所有解答一行注释都没有。关键步骤注释的缺失,让接手这段代码的人很难快速理解代码的意图。 例如,代码中没有对输入数组 nums 的有效性进行注释说明,例如数组为 null 或长度小于3的情况,这在实际工程中是不可取的。注释应该说明为什么要进行这样的检查。 5、方法名 threeSum 是根据题目来的,但是如果在实际工程中,可以考虑更具体的命名,比如 findUniqueTripletsWithZeroSum。 6、另外,这里还使用了魔法数字(Magic Number),数字3用于检查数组长度,可以定义一个常量来表示这个特定的含义,比如private static final int MINIMUM_SIZE = 3。
那什么是好的命名呢?下面是一些常见的命名原则:
- 见名知意 ,好的命名让人对代码要做的事一目了然。
- 能读出来,userCnt要比uCnt 好很多。变量名如果读不出来会影响沟通的效率。工程师除了写代码,还要进行大量沟通,比如在code review的时候,能读出来的命名就比不能读出来的要有优势,沟通效率要更高一些。
- 约定俗成:如numErrors,num是常见缩写。bad case如AbstractClass缩写命名成AbsClass、condition缩写命名成condi都是不规范的缩写,让人望文不知义。
- 统一规范:是叫Num还是No? 研发团队内部有一个统一的命名规范即可。
在工作中,大家遇到过哪些奇葩变量名?关于变量命名,你有何心得和体会?想要一起交流如何优化代码风格?欢迎评论区留言或者进我们读者群来讨论~
我发的本组其他贴:
你的回应
回应请先 登录 , 或 注册相关内容推荐
最新讨论 ( 更多 )
- 暑期实习收到更好的offer可以跳槽吗 (乌云高空踏步)
- 芯片fab芯片测试工程师 (Tennessee)
- 工作上写不出代码很焦虑 (白日幻想家)
- 上海(日本)AI游戏创业团队WLB想润速来女性占比过半 (XGuaiMon)
- 为啥这种评论会被删呀 (在冬夜里行走)