吐槽一下 今日头条的面试

2017-03-08 11:10:35 +08:00
 davinci

上周去今日头条面试。其中一道算法题的预处理步骤需要用到链表逆置。我写了一个递归函数。

def reverse(head):
    if head==None or head.next==None:
        return head
    result = reverse(head.next)
    head.next.next = head
    head.next = None
    return result

结果面试官看了几分钟,没看懂觉得有问题。然后我用数学归纳法简要地证明了一下这个算法的正确性,他想了几分钟还是觉得有问题,然后我又举了一两个简单例子展示该算法的运行过程,他看了一会儿想了一会儿还是觉得不对劲。末了,他叫我在这等一会,便抱着电脑出去了。我在屋子里等了半天也不见人影,大概过了有半小时,我走出面试房间,看到他,他说今天就面到这了。想想也是有些无语。

40668 次点击
所在节点    职场话题
86 条回复
mickeyandkaka
2017-03-08 11:19:53 +08:00
确实是对的。
看起来面试官希望的是非递归的实现。估计当时没看懂。
nagato
2017-03-08 11:27:07 +08:00
对的吧,面试官说哪不对了?
nbndco
2017-03-08 11:28:46 +08:00
其实这种应用用递归不是很合适。
当然这个面试官自己都弄不明白我觉得……
jacsice
2017-03-08 11:30:35 +08:00
为什么我看到今日头条就想黑一下呢
coderluan
2017-03-08 11:31:50 +08:00
《震惊,面试官居然看不懂递归排序,全世界的程序员都哭了》

你不起个这种标题,过的了技术面,也过不了 HR 面。

PS :我感觉面试官当时脑子里有别的事,一时懵逼了,之后也是去干别的事了。
Shura
2017-03-08 11:33:50 +08:00
面试官说你不按常理出牌,我只背了迭代实现,你写个递归,我。。。
jackisnotspirate
2017-03-08 11:35:05 +08:00
呵呵,当年面试小米我也写了个二分查找的递归,然后也面试官说不对。。。
server
2017-03-08 11:37:16 +08:00
坐等面试官
airqj
2017-03-08 11:39:57 +08:00
靠!
不就是工作久了忘了吗?
你小子至于拿到这来让我丢人现眼吗 :)
eamon666
2017-03-08 11:41:10 +08:00
面试的时候切忌和面试官争论 毕竟你的目的是拿到 OFFER 你对了有什么用?
高风亮节的人真的已经不多了
zer
2017-03-08 11:41:20 +08:00
楼上是当事人现身说法?
dogfeet
2017-03-08 11:41:30 +08:00
def reverseImpl(head):
if head.next == None:
return head
result = reverseImpl(head.next)
head.next.next = head
return result

def reverse(head):
if head == None:
return head
ret = reverseImpl(head)
head.next = None
return ret

不会 Python ,写成这样是不是对的呀?
davinci
2017-03-08 11:43:05 +08:00
@eamon666 你说得对。面试的过程还是很友好平和的。没有争论。
dbdd
2017-03-08 11:47:18 +08:00
面试为啥要写递归,如果他不懂他就不会觉得你正确,如果他不觉得你正确你就有可能拿不到 offer 。。。

当面写代码其实对面试官压力更大。。。
imn1
2017-03-08 11:49:04 +08:00
这帖应该是今日头条
davinci
2017-03-08 11:51:07 +08:00
@dogfeet 两个版本 都有问题
Mirana
2017-03-08 11:54:56 +08:00
这种递归栈太深了
lyragosa
2017-03-08 11:58:54 +08:00
我很少写递归的原因是,我写程序都会下意识的在脑子里面跑一遍。

如果写递归,我感觉我脑子就如同 stackoverflow 了一样难受。

所以我很少写,要写递归都是要下意识的告诉自己不要把这个程序放到脑子里面跑,不然就是炸裂一般的痛苦。
davinci
2017-03-08 11:59:22 +08:00
@Mirana 的确,最好还是要写循环迭代。当时觉得写循环更容易出错,所以选择写递归更简洁明了。
dogfeet
2017-03-08 12:04:17 +08:00
@davinci 不是 2 个版本哟,是一个。本意是, head == None 只需要第一次判断一次, head.nex = None 只需要最后递归完后原先的头节点执行一次。中间递归的过程中可以省略这 2 步。所以 reverse 调用的 reverseImpl 。

不过可能有问题吧,没装 py 环境没试 :(

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

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

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

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

© 2021 V2EX