一人来一道拿手面试题

2025 年 3 月 26 日
 kehuduanbuxing

先说我的题:

返回值 response 是一个 map ,里面的结构类似于 {"key1":100, "key2":"100", "key3":[100, "100], "key4":{……}}

手写一个函数,输入是 response ,输出要求把其中的数字 100 替换为数字 200 。

这题用了十年了,面下来能写清楚这题的大概只有一半不到?

6945 次点击
所在节点    程序员
52 条回复
kandaakihito
2025 年 3 月 26 日
针对你这个面试题,我想到一个歪门邪道:把对象转换成 json ,然后把“100”批量替换成“200”,再转回来(
tamwingjet666
2025 年 3 月 26 日
我也是想到批量换,所以标准答案是啥
learnshare
2025 年 3 月 26 日
"key3":[100, "100], // invalid value
gefangshuai
2025 年 3 月 26 日
为什么传入 map 的时候没有直接传入 200 ?现在这样修改 map 岂不是垃圾代码?
leokun
2025 年 3 月 26 日
把 map 包装成 A 结构,在取 A 结构的属性时候判断下
kehuduanbuxing
2025 年 3 月 26 日
kehuduanbuxing
2025 年 3 月 26 日
@gefangshuai 可以想象一个场景,是涉黄涉恐关键词替换为***
rafa
2025 年 3 月 26 日
不可以直接转字符串,然后正则修改么?
corcre
2025 年 3 月 26 日
js 的话写一个 dfs 用 Object.keys 遍历然后针对值/数组作处理, 如果是对象就继续丢 dfs?
kehuduanbuxing
2025 年 3 月 26 日
@tamwingjet666 简单点就递归。复杂点就正则,顺便考考正则的实现原理
musi
2025 年 3 月 26 日
我选择转字符串然后 replaceAll
我觉得自己写的代码优化应该赶不上 v8
15855pm
2025 年 3 月 26 日
不讲武德解法:str(response).replace('100', '200')
kehuduanbuxing
2025 年 3 月 26 日
@15855pm 这样会替换到字符串 100 ,是没有考虑边界情况的解法。之后就开始问你 replace 方法的内部是如何实现的了👀
AV1
2025 年 3 月 26 日
我会把你的题目扩展一下:
如果有新的需求,要把数字 200 替换为字符串"300",再过几天,又要把 0 和 1 替换为 false 和 true……
这样肯定会没完没了,不可能每个替换规则都重写一个函数。
所以请设计一个更通用的函数,输入是 response 和一个 callback: (key, value, object)=>any ,由调用者在 callback 里决定替换规则。
felilong123
2025 年 3 月 26 日
@DOLLOR 哈哈哈,非常符合产品天天需求改来改去的真实场景
gaoryrt
2025 年 3 月 26 日
1.正则验证小于 256 的自然数
lesismal
2025 年 3 月 26 日
隔壁 /t/1121006 题目没什么歧义、简单算法也算实用常用。
OP 这个题,恕我冒昧,这是近期看到的最垃圾的面试题,竟然还用了十年。
BTW ,近期一共看了两道面试题,隔壁和这里。。。

最基本的,没有标明语言,不同语言静态动态强弱类型对 map 的处理可是不大相同的,是否只是处理数值类型的 100 ,不同语言对类型的处理也是不大相同的,搞不好还要反射

> 输出要求把其中的数字 100 替换为数字 200

这句,不算严谨,字符串里的数字 100 算不算?反正我是不能确定出题者目的
如果是说 数值类型的 100 ,就不会太歧义了
kehuduanbuxing
2025 年 3 月 26 日
@lesismal 语言和语言特性在我这里大概没这么重要,考察的是计算机基础。需求不明确可以沟通,也看看沟通能力。上来只会喷的,大概是做题做的思维固化了。
bbao
2025 年 3 月 26 日
[这题用了十年了,面下来能写清楚这题的大概只有一半不到?]
说明题不好

除了遍历 或 递归遍历 + 反射判断类型,比较 value 后替换罢了,没其他好办法。

想到了前几天一个「格式化时间输出的面试题」给的一个答案:
if value == 100 {
value = 200 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
}

典型的场景:客户端 复杂无规则 payload JSON 请求体 + 客户端 payload 签名;服务器针对 payload 验签比较。
pengtao2001
2025 年 3 月 26 日
这不就是各种类型判断,然后更新值,递归调用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1121190

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX