记一次实习电话面试经历

面试前

申了暑期的实习,岗位(对我来说)只有一个,就是SDE。前期赶论文一直没空准备,基础又不好,在原定电面时间的前一天发了邮件希望delay到下周,死缓了四天。选的语言是Python,花了10天(其实还应该去掉没状态 or 接待朋友 or 批改作业 or 做线上笔试题的那么几天)过了一遍《数据结构与算法-Python语言描述》。

面试过程

共享文档

电话很准时。先要求打开共享文档,确认是否ok。结果因为我delay过一次,两次邮件发的链接不一样,所以耽误了一点时间,花了两分半。

自我介绍

其实没什么准备,因为觉得自己也没什么亮点,对方应该不会有什么想问的吧,今天主要应该是下面的做题吧,所以简单讲了两句。面试官问了下我的研究课题和采取的实现方式,问了对tf等深度学习框架的使用情况。前者我倒是讲得算仔细,后者其实没深入使用,面试官就没问了。大概讲了五分钟。

做题

因为我有web方面的经历,题目背景是HTML里面的DOM和文字搜索功能。总结一下就是以下内容:

# eg. input and structure
tree = {'tag': 'html', 'children': [{'tag':'b', 'children': [{'text': 'hello'}]}, {'tag':'i', 'children': [{'text': 'world'}]}]}
# 实现下面函数找子串
def Search(tree, sub_str)
# 给了几个输入输出,返回的True或者False

思路

问思路,想了会,答深搜,找叶子结点,把字符串连起来,从这个字符串里找子串。
问复杂度,答分两部分,一个是树的遍历,一个是子串搜索。
说假设结点数n,最长的word的长度为M。前者我确认了下默认二叉树么,说不是,问有差吗,我说边的数目有差。树的遍历时间应该是O(n),我想着有n个结点,每个结点最多要走的长度就是树高log(n),于是说时间是n*log(n)。唉,好白痴。
子串搜索问我怎么搜,这里用k记搜索的子串的长度。我说total的长度是’n*M’(其实不对)。我说可以遍历检查(只想到了这个),问有什么更好的方法吗,我想的是当然应该要有啊可是我想不起来…其实之前看过Python里面找子串的实现的,可是忘记了,也没想着翻手边的书(紧张起来就这样= =)停顿了好一会,面试官说想不出来没关系,我们实现一下这个算法吧。到这里20分钟过去了,我给思路和想时间复杂度时反应还是太慢了。

写代码,深搜,可是忘了,凭感觉在写,写得磕磕碰碰,语法也不对。最后没时间了,刚好写完。面试官一直在打哈欠。

提问

因为时间关系,面试结束。我问了对我的建议,曰算法和coding还要加强。面试官说自己对python其实不熟,但看我对python好像更不熟。

电面后

  • 想起了找子串的方法
  • 搜了下找子串的内置函数,刚刚写错了
  • 而且因为用的是内置函数,其实应该转换一下返回的值
  • 对dict的使用不对
  • 入栈出栈也有问题

最后贴一下改完的代码吧…

def Search(tree, sub_str):
    total = ""
    tr = tree
    st = [tr]
    while(st != []):
        tr = st.pop()
        if tr.has_key('tag'):
            for i in range(len(tr['children'])-1,-1,-1):
                st.append(tr['children'][i])        
        if tr.has_key('text'):
            total += tr['text']         
    print total
    if len(sub_str)==0:
    #Error
        raise Error()
    return total.find(sub_str)

总结

  • 道理我都懂,但是写起来就是不顺手,看过的容易忘,所以还是要多写
  • 具体语言常用的要多用,想不起built-in func好亏,c++的STL其实我用过的也很少…
  • 梦想还是要有的,好好准备下一次面试吧
  • 跟着这个repo 学习吧!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值