一人来一道拿手面试题

2025 年 3 月 26 日
 kehuduanbuxing

先说我的题:

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

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

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

6945 次点击
所在节点    程序员
52 条回复
LLLeo
2025 年 3 月 26 日
先解析转成对象,然后字符串替换处理
wtml
2025 年 3 月 26 日
这题有任何难度么,甚至还不如今天热搜贴那个计算时分秒的题
woodfizky
2025 年 3 月 26 日
题目不够清晰,很多限定条件没有说明白。

比如,你这个 map ,没有限定是什么语言的 map ,也没有限定范围到底是只是 key 还是 value 。
那假如我用 python 的 dict 去代入,key 也同样可以是 int 类型的。
如果同时存在{100: 100, 200: 200},那替换完 key 重复直接就报错或者覆盖了。
kinkin666
2025 年 3 月 26 日
简单点吧,解析了再 BFS ,这样不会爆栈
直接从字符串搞嘴巴讲讲可以,写有点麻烦
gaoryrt
2025 年 3 月 26 日
@kehuduanbuxing #13 JSON.stringify(response).replace(/:100,/g, ':200,')
lesismal
2025 年 3 月 26 日
> 语言和语言特性在我这里大概没这么重要,考察的是计算机基础。

如果是不需要编码的题,你这样说没啥问题,说思路就行了。但你这个题目是“手写一个函数”,编码了,用什么语言本身就是很大问题了,比如用 c ?。。。

> 需求不明确可以沟通,也看看沟通能力。上来只会喷的,大概是做题做的思维固化了。

看你的题面,这种多是笔试题。即使面试题,也可以,而且别人也没说不沟通啊。

但是这种简单问题,还要这么歧义,我只能认为是被我上一层回复后强行挽尊找的理由罢了。

更何况,这是论坛,你发个这种题目出来指望大伙楼下挨个继续追问题目,浪费大家时间呢么?。。

BTW ,我已经很多年没做过题了,我也从来不出这种题目去浪费别人时间。

年轻时候遇到过很多笔试题面试题题目本身就 sb 的,我也以为是故意考察沟通能力,所以也都沟通过,沟通之后发现,绝大多数这种题目吧,就是出题人自己拎不清。甚至一些语言的语法题,还得面试现场我教他。
更逗比的一些中小公司,自己工程里遇到的问题搞不定,拿来当面试题,我曾经就遇到过这种、然后面试时候解决方案优化方案一顿输出,给他们讲了一个多小时,面试官做笔记很细致。。。虽然这种我也不会去,但是技术交流也无所谓被他们白嫖,何况他们态度还恭敬的。。。


> 上来只会喷的

上一楼我只是比较平和指出你的题目的问题,我自己并不觉得是喷,为了避免让 OP 以为是喷,所以我用了“恕我冒昧”。

OP 也不必太敏感,上来就否定我指出的实际问题。
至于思维固化,这种题目用十年,是不是也该反思下到底是谁固化。
RadishWind
2025 年 3 月 26 日
取 ` :\s+100[,\]\}\s]`这样的来做替换? (不管是手写还是正则)
kinkin666
2025 年 3 月 26 日
@kinkin666 如果题目假设确定,确定 response 是 map ,那用 BFS 是最快最稳的,比正则快
tenzinjamyangzhs
2025 年 3 月 26 日
分享一下我的思路,kotlin ,遍历这个 map ,得到所有 second 为数字的 index ,记录成一个 indexlist ,再把所有是数字的 second 取出组成一个 numberlist ,再遍历这个 numberlist ,把每个元素都转成 string ,用 string.contains 获取所有包含 100 的元素的 index ,组成 100indexlist ,剩下的就是把对应 string 里的 100 换成 200 再转成数字,再根据 index 位置替换原 map 的相应内容最后返回。
chen0520
2025 年 3 月 26 日
正则替换秒了
JerryCanDo
2025 年 3 月 26 日
JSON.stringify(Object.fromEntries(response)).replace(/100/g, 200)
Guidoo
2025 年 3 月 26 日
我之前面试外包,扁平数据转 Tree 函数,面了大概有 40-50 人吧,没有一个人能写出来的
wyntalgeer
2025 年 3 月 26 日
@kehuduanbuxing #7 所以关键词在拼 json 的适合为什么不替换成***?
pkoukk
2025 年 3 月 26 日
啥样的场景,需要在 map 没有序列化成对象之前,就要操纵修改里面的内容的?
能想出的脏活,看得出贵公司平时的业务也有点脏,告辞。
iOCZS
2025 年 3 月 26 日
其实吧,转 JSON ,直接逆序扫描字符串,原地替换也能实现。
lyxxxh2
2025 年 3 月 26 日
一开始我想转字符串替换,但是感觉不够稳健。 (没注意有 100 是字符串,不过正则对我不难)
还是根据"类型处理吧",虽然多了些代码,但是稳健。
过了几分钟后,后着看数组类型,好像可以递归啊
```
const replace => (data,need_str,replace_str){
return data.map((key,item) => {
if(item === need_str){
return {
'key': item.replace(100,200)
}
} else if(数组){ // 递归
return replace(item,need_str,replace_str)
}
return {xx} // 不用替换
})
}
```
lidong1041
2025 年 3 月 26 日
@15855pm 这样好像不太行,1000 会被替换为 2000 ,2100 会替换为 2200 ,
guanzhangzhang
2025 年 3 月 26 日
```
echo '{"key1":100, "key2":"100", "key3":[100, "100], "key4":{……}}' | sed -r 's#([:\[])100(,*)#\1200\2#g'
```
qcbf111
2025 年 3 月 26 日
c# 说说解决办法。
1.需要在当前方法栈分配一个小型字典。
2.如何在字典遍历期间删除其中某些元素,除了再用一个临时结构保存还有哪些。
3.在一个正方形区域内有一百万个随机分布位置的单位,如何标记另一个小正方形圈中了的单位,如果是小圆形,小不规则四边形又如何找出范围内单位。
main1234
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