男生找男友:我希望你至少是0.628,如果是0.942那就更好了。

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推多家公司面试
[Google级团队]:实时大数据分析领域践行者
北京/深圳-大数据/搜索/机器学习职位
日志易机器大数据行业践行者Web/大数据/机器学习等职位-北京or深圳
把贵司招聘信息放这里
查看: 6619|回复: 27
收起左侧

Snapchat全职跪经

[复制链接] |试试Instant~ |关注本帖
tong-1324 发表于 2016-8-12 12:49:04 | 显示全部楼层 |阅读模式

2016(7-9月) 码农类General 硕士 全职@Snapchat - 内推 - 技术电面  | Other | fresh grad应届毕业生

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

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

x
Snapchat的效率非常高,第一天同学帮忙投的内推,第二天就约我当周电面,内推免去了OA,杀了我一个措手不及。实习的project正进入最忙的时候,所以也还没有太多时间准备,硬着头皮就上了。
面试排在下午,一个小时时间,是个国人小哥,人很Nice。上来先自我介绍了一下,说到现在在某公司实习,面试官对我所在的这个组已经我做的项目都很感兴趣,问得非常具体。这里提一下,我暑假实习里用的主要写的语言是C#,我和面试官对这个语言做了一些讨论,聊得还挺欢,但是这为后面一个悲剧的事情留下了伏笔。然后他又在简历里挑了一个感兴趣的项目,也问的比较具体。最后问了一下为什么想加入Snapchat。没有具体看时间,但是我觉得这里大概就聊了20分钟到半个小时左右了。然后开始技术面。

Snapchat的技术面不只是白板编程,而且要能编译能自己写test。开始前我和面试官说了一下我打算用C++写,他说好的,他来帮我设置一下测试的语言环境,然后就开始了。.鐣欏璁哄潧-涓浜-涓夊垎鍦

题目叫做function log parsing,我不太确定有没有leetcode原题,我是没有见过。大概意思是,有一个log file是一个单线程计算机产生的,记录了这个计算机里每个程序的起始和终止时间。这个log file里每行包括三个信息:程序名字,start/end,timestamp。比如这样一个例子:
f1 start 1
f1 start 2
f2 start 4. from: 1point3acres.com/bbs
f2 end  8
f1 end  16
f1 end  32
f3 start 64
f3 end  128
需要输出每个程序占CPU的时间段,比如上面例子对应的输出:
f1: [1,4] [8,32]
f2: [4,8]
f3: [64,128]
我是用一个栈来做的,主要是每一个end来的时候需要判断几种情况,边写边和面试官解释他也觉得没有太多问题。最后他说那你写一个能跑的测试吧,于是又花了一些时间写测试,然后编译准备跑。然而死活编译不通过,报了很多我从来没有见过的错误。我想着可能是我自己太久没有写C++了,一下有点慌乱,想慢慢fix,但是怎么都fix不好。面试官似乎对C++也不算特别熟,他想帮帮我但是也没有解决问题。总之最后都没有编译过,时间就到了。面试官让我问了两个问题,就结束了。最后我还说了一下,不好意思,可能最近太久没有写C++了,他安慰了一下我说没事你也基本都写对了,就结束了。
. more info on 1point3acres.com
然而故事的高潮在结束之后才出现,他下线之后我又对着代码看了好一会,还是没发现问题。最后打算放弃关掉页面,这时候在页面右上角默默看到了一个,当前语言设置:C#。 心中一万头草泥马奔腾而过...........

总的来说,虽然语言是面试官一开始帮我设的,但主要原因还是自己太傻比了,回头想想其实很明显,有的不可能报错的地方也报错了,而且报的错误都很诡异,线索已经很明显了,主要是当时时间本来就剩的不多,自己有点慌乱,没注意检查。最后发现的时候也没法跟面试官说了,觉得比较遗憾。


补充内容 (2016-8-16 04:42):
======================8.15 update==========================
上周发完帖子之后大家提醒我可以给HR发邮件说说情况,我就发了一个简单说明了一下,刚刚收到HR的邮件,给我再加了一轮电面

评分

3

查看全部评分

pingfanzhilu 发表于 2016-8-31 10:43:49 | 显示全部楼层
贴个2 pass的解法吧(the second pass is merge) 有1 pass的吗?
. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  1. import java.util.*;

  2. class Interval {
  3.     public int left;
  4.     public int right;

  5.     public Interval(int l, int r) {
  6.         this.left = l;
  7.         this.right = r;
  8.     }
  9. }

  10. public class Solution {
  11.     public static void main(String[] args) {
  12.         List<String[]> input = new ArrayList();
  13.         input.add(new String[]{"f1", "start", "1"});
  14.         input.add(new String[]{"f1", "start", "2"});
  15.         input.add(new String[]{"f2", "start", "4"});
  16.         input.add(new String[]{"f2", "end", "8"});. From 1point 3acres bbs
  17.         input.add(new String[]{"f1", "end", "16"});
  18.         input.add(new String[]{"f1", "end", "32"});
  19.         input.add(new String[]{"f3", "start", "64"});
  20.         input.add(new String[]{"f3", "end", "128"});. visit 1point3acres.com for more.
  21. .1point3acres缃
  22.         Solution sol = new Solution();
  23.         Map<String, List<Interval>> result = sol.solve(input);
  24.         for (String k : result.keySet()) {.鏈枃鍘熷垱鑷1point3acres璁哄潧
  25.             System.out.print(k + " : ");
  26.             for (Interval itv : result.get(k)) {
  27.                 System.out.print("[" + itv.left + ", " + itv.right + "]");
  28.             }. 1point3acres.com/bbs
  29.             System.out.println();
  30.         }
  31.     }

  32.     public Map<String, List<Interval>> solve(List<String[]> input) {
  33.         Map<String, List<Interval>> result = new HashMap();
  34.         String[] prev = null;
  35.         for (String[] current : input) {
  36.             if (current[1].equals("start")) {
  37.                 if (prev != null && prev[1].equals("start")) {.1point3acres缃
  38.                     if (!result.containsKey(prev[0])) {
  39.                         result.put(prev[0], new ArrayList<>());
  40.                     }
    .1point3acres缃

  41.                     result.get(prev[0]).add(new Interval(Integer.valueOf(prev[2]), Integer.valueOf(current[2])));
  42.                 }
  43.             } else { // end
  44.                 if (!result.containsKey(prev[0])) {
  45.                     result.put(current[0], new ArrayList<>());
  46.                 }

  47.                 result.get(current[0]).add(new Interval(Integer.valueOf(prev[2]), Integer.valueOf(current[2])));
  48.             }

  49.             prev = current;
  50.         }. 1point 3acres 璁哄潧

  51.         for (String key : result.keySet()) {
  52.             result.put(key, merge(result.get(key)));. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  53.         }

  54.         return result;
  55.     }

  56.     private List<Interval> merge(List<Interval> list) {
  57.         Stack<Interval> stack = new Stack();
  58.         for (Interval itv : list) {
  59.             if (stack.isEmpty()) {
  60.                 stack.push(itv);
  61.             } else {.鏈枃鍘熷垱鑷1point3acres璁哄潧
  62.                 if (stack.peek().right < itv.left) {
  63.                     stack.push(itv);. 1point3acres.com/bbs
  64.                 } else {
  65.                     Interval top = stack.pop();. from: 1point3acres.com/bbs
  66.                     stack.push(new Interval(Math.min(top.left, itv.left), Math.max(top.right, itv.right)));
  67.                 }
  68.             }
  69.         }.1point3acres缃
  70. .鏈枃鍘熷垱鑷1point3acres璁哄潧
  71.         List<Interval> ret = new ArrayList();
  72.         while (!stack.isEmpty()) {
  73.             ret.add(stack.pop());
  74.         }. 鍥磋鎴戜滑@1point 3 acres

  75.         return ret;. From 1point 3acres bbs
  76.     }
  77. }
复制代码
回复 支持 1 反对 0

使用道具 举报

wtcupup 发表于 2016-8-12 16:29:43 | 显示全部楼层
谢谢楼主分享,能贴个当时写的代码看看嘛?
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-12 23:59:37 | 显示全部楼层
wtcupup 发表于 2016-8-12 16:29
谢谢楼主分享,能贴个当时写的代码看看嘛?
. visit 1point3acres.com for more.
页面关掉了没有存下来哦
回复 支持 反对

使用道具 举报

芥末青豆 发表于 2016-8-13 01:53:33 | 显示全部楼层
so any feedback?
回复 支持 反对

使用道具 举报

cx00001 发表于 2016-8-13 02:03:58 | 显示全部楼层
发邮件给hr啊 解释一下 大不了求他再给一次店面机会
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-13 03:41:33 | 显示全部楼层

暂时还没有
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-13 03:42:12 | 显示全部楼层
cx00001 发表于 2016-8-13 02:03
发邮件给hr啊 解释一下 大不了求他再给一次店面机会

恩恩,要是被拒了的话准备argue一下,但是不抱太大希望:(
回复 支持 反对

使用道具 举报

cx00001 发表于 2016-8-13 04:47:25 | 显示全部楼层
先解释呀 到时候讲就比较弱了
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-13 04:50:42 | 显示全部楼层
cx00001 发表于 2016-8-13 04:47
先解释呀 到时候讲就比较弱了

有道理!我赶紧去说一下,谢谢提醒~
回复 支持 反对

使用道具 举报

sadfcbasy 发表于 2016-8-14 22:59:10 | 显示全部楼层
求问snapchat现在就开始了吗?因为刚问了内推的说还没开始。。
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-15 09:26:32 | 显示全部楼层
sadfcbasy 发表于 2016-8-14 22:59
求问snapchat现在就开始了吗?因为刚问了内推的说还没开始。。

你面的是全职还是实习?全职肯定开始了,我好几个朋友都开始面了已经,实习的话我就不太清楚了。
回复 支持 反对

使用道具 举报

小逻辑 发表于 2016-8-15 23:42:17 | 显示全部楼层
楼主当时怎么判断的,偶觉得iterate的时候遇到跟上一个function不一样的,或者function一样是end的话,就可以标记区间了呀?? 为啥要用stack呢
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-16 04:38:55 | 显示全部楼层
小逻辑 发表于 2016-8-15 23:42 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
楼主当时怎么判断的,偶觉得iterate的时候遇到跟上一个function不一样的,或者function一样是end的话,就可 ...

大概就是这样,不过比如你说的跟上一个function不一样的,标记完区间以后,上一个function和这个function的信息都还是要保存下来做后面的判断,这个过程其实就是和stack类似了?
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-16 04:39:30 | 显示全部楼层
cx00001 发表于 2016-8-13 04:47
先解释呀 到时候讲就比较弱了

解释了一下他们又加了一轮电面,再次感谢提醒~
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-16 04:40:12 | 显示全部楼层

最后结果是加一轮电面
回复 支持 反对

使用道具 举报

cx00001 发表于 2016-8-17 02:30:48 | 显示全部楼层
tong-1324 发表于 2016-8-16 04:39
解释了一下他们又加了一轮电面,再次感谢提醒~

不客气呀 加油:)
回复 支持 反对

使用道具 举报

sevenwonder 发表于 2016-8-31 09:26:27 | 显示全部楼层
f1输出为啥不是[1,16],[2,32]啊
回复 支持 反对

使用道具 举报

bbmbill 发表于 2016-8-31 10:03:39 | 显示全部楼层
同问楼主,例子中的结果是如何得到的, 感觉看不出f1 : [1, 4], [8, 32]啊
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-31 10:36:37 | 显示全部楼层
sevenwonder 发表于 2016-8-31 09:26. Waral 鍗氬鏈夋洿澶氭枃绔,
f1输出为啥不是[1,16],[2,32]啊

单线程计算机,打断式工作,具体来说应该是
f1(1) : 1 - 2. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
f1(2) : 2 - 4
f2     : 4 - 8
f1(2) : 8 - 16. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
f1(1) : 16 - 32

. 1point 3acres 璁哄潧合并下来输出就是
f1: [1,4] [8,32]
f2: [4,8]
回复 支持 反对

使用道具 举报

 楼主| tong-1324 发表于 2016-8-31 10:36:51 | 显示全部楼层
bbmbill 发表于 2016-8-31 10:03
同问楼主,例子中的结果是如何得到的, 感觉看不出f1 : [1, 4], [8, 32]啊

单线程计算机,打断式工作,具体来说应该是
f1(1) : 1 - 2-google 1point3acres
f1(2) : 2 - 4
f2     : 4 - 8
f1(2) : 8 - 16
f1(1) : 16 - 32

合并下来输出就是
f1: [1,4] [8,32]
f2: [4,8]
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

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

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

custom counter

GMT+8, 2018-4-22 13:05

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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