《数据科学面试40+真题讲解》,K神本年度最后一次开课


一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推你去多家公司面试
Airbnb 数据科学职位
in analytics and inference
天天打游戏、照样领工资,
你要不要来?
把贵司招聘信息放这里
查看: 1078|回复: 14
收起左侧

lyft面经

[复制链接] |试试Instant~ |关注本帖
dylanoo 发表于 2017-8-7 06:25:27 | 显示全部楼层 |阅读模式

2017(7-9月) 码农类 博士 全职@Lyft - 内推 - 技术电面 |Fail在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
感谢地里的推荐,可惜没过。
电面:
有一堆log,每行的格式是“时间点:各种操作”;给定两个时间点,求在这两个时间点(start, end)内的log lines。假设log非常大。
给了一些函数,比如:goToOffset(), getLine(), getCurrentOffset(), fileSize() 和一些基本的文本操作。
.1point3acres缃
我的解法是,二分法查找开始的时间点(start),然后从这个时间点往前找到最早出现的同一时间点(start),有点类似Leetcode 81的解法(不过是sorted)。
.鏈枃鍘熷垱鑷1point3acres璁哄潧
面试交流说的挺好,可惜很快就拒了。反馈说解法不是optimal的。

评分

3

查看全部评分

milanow 发表于 2017-8-7 13:00:15 | 显示全部楼层
这道题和经典的“100楼扔鸡蛋”好像

补充内容 (2017-8-7 13:38):
求出来x(x+1)/2 >= numOfLines, numofLines估计可以用fileSize估一下?然后先goToOffset(x), 如果比start大就往回找,如果比start小就再gotoOffset(x +(x-1))这样一直找,直到numOfLines肯定能找到了。
回复 支持 反对

使用道具 举报

teedoo 发表于 2017-8-7 13:20:22 | 显示全部楼层
我怎么感觉和LC 34比较像?两次binary search找到start time的开始一行和end time的最后一行
回复 支持 反对

使用道具 举报

xuanyue 发表于 2017-8-7 13:44:13 | 显示全部楼层
我倒是觉得要用到外部排序的思想?

毕竟 楼主的描述是, 一堆文件,  然后每个都很大. (可能无序?)  那应该不能考虑直接 sort 吧.
回复 支持 反对

使用道具 举报

milanow 发表于 2017-8-7 13:44:26 | 显示全部楼层
teedoo 发表于 2017-8-7 13:20
我怎么感觉和LC 34比较像?两次binary search找到start time的开始一行和end time的最后一行
. 1point3acres.com/bbs
可是LZ用的就是lc34的方法吧 不知道在filesize很大的情况下会有什么不同
回复 支持 反对

使用道具 举报

milanow 发表于 2017-8-7 13:54:41 | 显示全部楼层
xuanyue 发表于 2017-8-7 13:44
我倒是觉得要用到外部排序的思想?

毕竟 楼主的描述是, 一堆文件,  然后每个都很大. (可能无序?)  那应该 ...

会不会可能是因为LZ写的worst case不够好,因为LZ用正常的binary找到start就停下了,那么比如1,2,3,3,3,3,3,3,3,4,5这样就很慢,如果全是3的array的话直接worst case就logn了,
回复 支持 反对

使用道具 举报

FightForTomo 发表于 2017-8-7 14:02:17 | 显示全部楼层
goToOffset() 是什么意思?
回复 支持 反对

使用道具 举报

hwd2000 发表于 2017-8-7 23:22:21 | 显示全部楼层
FightForTomo 发表于 2017-8-7 14:02
goToOffset() 是什么意思?

就是把当前文件指针移到离当前位置为某offset值的位置
回复 支持 反对

使用道具 举报

LeetCodeOJ 发表于 2017-8-7 23:49:39 | 显示全部楼层
LeetCode 635?
回复 支持 反对

使用道具 举报

2011051305 发表于 2017-8-8 01:00:18 | 显示全部楼层
teedoo 发表于 2017-8-7 13:20.鏈枃鍘熷垱鑷1point3acres璁哄潧
我怎么感觉和LC 34比较像?两次binary search找到start time的开始一行和end time的最后一行

这道题我的第一反应和你类似:
既然给定时间点了 且已知数据格式是“时间点:各种操作” , 那我就两次二分 分别找到start的第一行 和end的最后一行,然后既然是一个时间点一个log 直接 wc -l

那么楼主说不optimal的思路是?
回复 支持 反对

使用道具 举报

 楼主| dylanoo 发表于 2017-8-8 13:28:04 | 显示全部楼层
2011051305 发表于 2017-8-8 01:00
这道题我的第一反应和你类似:
既然给定时间点了 且已知数据格式是“时间点:各种操作” , 那我就两次 ...

我不知道interviewer想要什么答案,也不清楚更optimal的方法是什么。我写的时候,他说这个方法好。也可能optimal说的是代码写的不好吧。
回复 支持 反对

使用道具 举报

 楼主| dylanoo 发表于 2017-8-8 13:30:22 | 显示全部楼层
milanow 发表于 2017-8-7 13:54-google 1point3acres
会不会可能是因为LZ写的worst case不够好,因为LZ用正常的binary找到start就停下了,那么比如1,2,3,3,3, ...

我当时也是两次binary。不过代码可能写的水。
回复 支持 反对

使用道具 举报

 楼主| dylanoo 发表于 2017-8-8 13:32:31 | 显示全部楼层
xuanyue 发表于 2017-8-7 13:44. 1point3acres.com/bbs
我倒是觉得要用到外部排序的思想?

毕竟 楼主的描述是, 一堆文件,  然后每个都很大. (可能无序?)  那应该 ...

一开始就说是service log,所以是按照时间排好序的。文件很大,只是暗示不要尝试load进memory;此外也确认是单线程操作,所以也没有分布式和并行的问题(可能会做follow-up吧)。
回复 支持 反对

使用道具 举报

2011051305 发表于 2017-8-8 14:17:59 | 显示全部楼层
dylanoo 发表于 2017-8-8 13:28. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
我不知道interviewer想要什么答案,也不清楚更optimal的方法是什么。我写的时候,他说这个方法好。也可能 ...

拍拍 你是CSPhD 你怕啥 ~~ 估计人家看你太over qualified的~ 咱move on了!
回复 支持 反对

使用道具 举报

hwd2000 发表于 2017-8-8 23:31:36 | 显示全部楼层
dylanoo 发表于 2017-8-8 13:30
我当时也是两次binary。不过代码可能写的水。

这就奇怪了。代码写的水不表示性能差,关键还是在算法。如果两次都是bfs,是不是第二次是基于第一次的结果?这样收索范围要小一些
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-11-20 08:31

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表