面试官问:你知道"茴"有几种写法吗?

引言

“你知道‘茴’字有几种写法吗?”这个问题源自鲁迅的小说《孔乙己》,小说中通过“茴”字的不同写法来隐喻知识的深浅与人的学识。虽然这看起来像是一个文学或文字游戏的问题,但在编程面试的语境下,它实际上是对候选人解决问题能力和思维灵活性的一种考验。

编程中的“茴”字:不同的解法展现不同的技能水平

正如“茴”字可以有不同的书写方式,编程面试中的同一个问题也可以有多种解法。下面通过一个简单的面试编程题——将数组转换成电话号码格式的字符串——来探讨不同的解法如何体现候选人的不同技能水平。

题目描述: 给定一个包含10个数字的数组,编写一个函数getPhoneNum,该函数接收这个数组作为参数,并返回一个格式化的电话号码字符串,例如输入[1,2,3,4,5,6,7,8,9,0]应输出"(123) 456-7890"

心理描述:我猜大家已经开始笑了,要是面试时碰到那么简单的题目不得笑死,兄弟们先别哈哈,等我慢慢给你讲解不同的解法,面试官对你的看法。

看机会

技术大厂→跳板机会,前端-后端-测试,待遇和稳定性还不错,看机会的可以试试~

解法一:正则表达式 对于牛逼的程序员来说,可能会考虑使用正则表达式来解决此类问题。正则表达式提供了强大的文本处理能力,能够以更简洁的方式完成复杂的文本操作。不过,这种方法可能需要更多的编程经验和对正则表达式的深入理解。

function getPhoneNum(arr) {
  const str = arr.join('');
  return str.replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
}

结果:: 大家可以看到可读性非常的差,一眼是看不出来这段代码是做什么的,虽然解决了题目的要求,但是并没有写到面试官心里去。

解法二:直接拼接 :这是最直观的方法,通过直接拼接数组中的元素来构建所需的字符串格式。这种方法简单直接,能够快速实现功能需求,但代码的可读性和扩展性较差。


function getPhoneNum(arr) {
 return "("+arr[0]+arr[1]+arr[2]+") "+arr[3]+arr[4]+arr[5]+"-"+arr[6]+arr[7]+arr[8]+arr[9];
}

结果 :确实实现了题目所描述的功能,但是代码很冗余,虽然比上面的可读性好了些,但是存在很多+号,还是没有满足面试官的想法。

解法三:直接拼接 :相较于上面的直接拼接,使用es6,提高了代码的可读性,同时也使用了新的语法。

function getPhoneNum(arr){
return `(${arr[0]}${arr[1]}${arr[2]})${arr[3]}${arr[4]}${arr[5]}-${arr[6]}${arr[7]}${arr[8]}${arr[9]}`

结果:虽然稍稍增强了一点可读性,可是代码仍然是长,体现了一点你具有积极学习新知识的能力,但是还不够

解法四:模板替换

function getPhoneNum(arr) {
    let format ="(xxx) xxx-xxxx"
    for(let i=0;i<arr.length;i++){
        format = format.replace("x",arr[i])
    }
    return format
}
console.log(getPhoneNum([1,2,3,4,5,6,7,8,9,0]))

结果:当你这样写出代码,和之前的机械式代码完全不同,含有语义性,很大的提升了代码的可读性,这代码写到面试官心里去了。

结论

1:看到简单题,写出来已经体现了我们的能力,但是那只是机械性的代码,不足以打动面试官,我们是不是可以想象如何优化一下呢?

2:一流的工程师在完成功能后,会对代码进行优化,可读性将是一个重要标准,当我们把字符串拼接 机械 -> 作为电话模板来处理 更好理解 语义化的,水平的凸现不言而喻。

3:茴字易写,义不一般,简题易写,法不一般。

——转载自:Danta

#面试时最害怕被问到的问题#
全部评论

相关推荐

10-15 12:00
已编辑
重庆邮电大学 Java
点赞 评论 收藏
分享
哇哇的菜鸡oc:他这不叫校招offer,而是实习offer
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务