传说中的谷歌招聘委员会成员之一,从幕后走出来,教你学系统设计!


一亩三分地论坛

 找回密码
 获取更多干活,快来注册
天天打游戏、照样领工资、还办H1B
这份工作你要不要?
把贵司招聘信息放这里
查看: 3456|回复: 15
收起左侧

报个facebook intern offer一枚

[复制链接] |试试Instant~ |关注本帖
honeyBear142857 发表于 2016-4-4 02:23:38 | 显示全部楼层 |阅读模式

2016(4-6月) 码农类 博士 实习@Facebook - 网上海投 - 技术电面 |Passfresh grad应届毕业生

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

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

x
上周五拿到的facebook发来的offer,下面把面试经验总结一下:
第一面:
时间:2016.2.26
第一题是sort 3 colors变形,就是给一堆tasks,有一个API getPriority可以获得每一个task ID的优先级(low, medium, high),
要求对所有task进行排序,使得low tasks在最左边,medium的在中间,high的在最右边。 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
第二题是 print a linked list reversely,递归和非递归两个版本都要写出来。

两道题都要写test cases

第二面:. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
时间:2016.3.4
第一题是 divide two integers,没有corner case的要求,即不用考虑最大整数和最小整数的情况。. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
第二题是 implement read(char* buf, int n) 用已知的read4K函数。这道题由于没做过leetcode原题,写的时候出现了bug,
虽然后面知道怎么写了,但是时间已到。这轮的面试官给了个follow,所以才有了第三面的加面。. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴

第三面: 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
时间:2016.3.25
第一道题是找出离origin最近的k个points,每一个point都是坐标形式 (x, y)。 由于我是用C++编程,中间被问到了建立最大的
operator overloading的问题。
第二道题是 add binary digits,写的时候也出现了bug,交流之后迅速改了过来。

Note:技术店面个人认为交流是最重要的,当然题目写出来是前提。
. Waral 鍗氬鏈夋洿澶氭枃绔,
team match了一周,这周二team match interview,面试的问题是个system design,之前也有帖子说machine learning相关的组
都会问到system design。个人觉得选组很重要,因为涉及到return offer以及是否对相关projects真的感兴趣。.鐣欏璁哄潧-涓浜-涓夊垎鍦
-google 1point3acres
楼主当时选组的时候也是一头雾水,大家如果有team match相关的问题留言给我哈。
. more info on 1point3acres.com

评分

3

查看全部评分

wtcupup 发表于 2016-4-4 05:39:44 | 显示全部楼层
那道sort color变形 , 有没有规定能不能用 std:: swap ?
回复 支持 反对

使用道具 举报

 楼主| honeyBear142857 发表于 2016-4-4 05:43:11 | 显示全部楼层
wtcupup 发表于 2016-4-4 05:39
那道sort color变形 , 有没有规定能不能用 std:: swap ?

可以用swap,但是要尽量减少swap的次数
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-15 13:31:14 | 显示全部楼层
第一面,第一题
  1. public class Solution {.鐣欏璁哄潧-涓浜-涓夊垎鍦
  2.   int getPriority(int id) {
  3.     return id % 3;
  4.   }

  5.   public void sort(int[] arr) {
  6.     int l_w = 0; // writer
  7.     int m_w = 0;
  8.     for (int r = 0; r < arr.length; r++) { // reader
  9.       int p = getPriority(arr[r]);
  10.       if (p == 0) { // low. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  11.         int tmp = arr[r];
  12.         arr[r] = arr[m_w];. from: 1point3acres.com/bbs
  13.         arr[m_w] = arr[l_w];
  14.         arr[l_w] = tmp;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  15.         l_w++;
  16.         m_w++; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  17.       } else if (p == 1) { // medium
  18.         int tmp = arr[r]; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  19.         arr[r] = arr[m_w];
  20.         arr[m_w] = tmp;
  21.         m_w++;
  22.       } else if (p == 2) { // high
  23.         // nop
  24.       }
  25.     }
  26.   }

  27.   public static void main(String[] args) {
    . from: 1point3acres.com/bbs
  28.     Solution s = new Solution();
  29.     List<Integer> list = IntStream.range(0, 100).boxed().collect(Collectors.toList());
  30.     Collections.shuffle(list);.鐣欏璁哄潧-涓浜-涓夊垎鍦
  31.     int[] arr = list.stream().mapToInt(x -> x).toArray();
  32.     System.out.println(Arrays.toString(Arrays.stream(arr).map(x -> s.getPriority(x)).toArray()));
  33.     s.sort(arr);
  34.     System.out.println(Arrays.toString(Arrays.stream(arr).map(x -> s.getPriority(x)).toArray()));.1point3acres缃
  35.   }.鐣欏璁哄潧-涓浜-涓夊垎鍦
  36. }
复制代码
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-15 13:39:50 | 显示全部楼层
第一面,第二题
  1. public class Solution {
  2.   ListNode reverse(ListNode head) {.1point3acres缃
  3.     ListNode myhead = new ListNode(-1);
  4.     while (head != null) {
  5.       ListNode ln = head;
  6.       head = head.next;

  7.       ln.next = myhead.next;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  8.       myhead.next = ln;. 1point3acres.com/bbs
  9.     }
  10.     return myhead.next;
  11.   }. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

  12.   public void printALinkedListReversely1(ListNode head) {
  13.     if (head != null) {-google 1point3acres
  14.       ListNode ln = reverse(head);
  15.       for (ListNode p = ln; p != null; p = p.next) {
  16.         System.out.println(p.val);
  17.       }
    . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  18.       reverse(ln);
  19.     }
  20.   }-google 1point3acres

  21.   public void printALinkedListReversely2(ListNode head) {
  22.     if (head != null) {
  23.       printALinkedListReversely2(head.next);
  24.       System.out.println(head.val);
  25.     }
  26.   }
  27. .1point3acres缃
  28.   public static void main(String[] args) {
  29.     Solution s = new Solution();.1point3acres缃
  30.     ListNode ln1 = new ListNode(1);
  31.     ListNode ln2 = new ListNode(2);
  32.     ListNode ln3 = new ListNode(3);
  33.     ListNode ln4 = new ListNode(4);
  34.     ListNode ln5 = new ListNode(5);-google 1point3acres
  35.     ln1.next = ln2;
  36.     ln2.next = ln3;
  37.     ln3.next = ln4;
  38.     ln4.next = ln5;
  39.     s.printALinkedListReversely1(ln1);
  40.     System.out.println();
  41.     s.printALinkedListReversely2(ln1);
  42.   }
  43. }
复制代码
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-15 14:21:52 | 显示全部楼层
第三面,第一题
  1. public class Solution {
  2.   public List<Point> kn1(List<Point> pts, int k) {
  3.     Queue<Point> maxheap =. more info on 1point3acres.com
  4.         new PriorityQueue<>((p1, p2) -> (p2.x * p2.x + p2.y * p2.y) - (p1.x * p1.x + p1.y * p1.y));
  5.     for (Point p : pts) { // nlgk
  6.       maxheap.offer(p);
  7.       if (maxheap.size() > k) {
  8.         maxheap.poll();.鐣欏璁哄潧-涓浜-涓夊垎鍦
  9.       }
  10.     }
  11.     return maxheap.stream().collect(Collectors.toList());
  12.   }
    . 鍥磋鎴戜滑@1point 3 acres

  13.   public List<Point> kn2(List<Point> pts, int k) {
  14.     Queue<Point> minheap =
  15.         new PriorityQueue<>((p1, p2) -> (p1.x * p1.x + p1.y * p1.y) - (p2.x * p2.x + p2.y * p2.y));. Waral 鍗氬鏈夋洿澶氭枃绔,
  16.     minheap.addAll(pts);
  17.     List<Point> ret = new ArrayList<>();
  18.     for (int i = 0; i < k; i++) { // klgn
  19.       ret.add(minheap.poll());
  20.     }
  21.     return ret;
  22.   }. From 1point 3acres bbs
  23. . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  24.   int comp(Point pt1, Point pt2) {
  25.     return pt1.x * pt1.x + pt1.y * pt1.y - pt2.x * pt2.x - pt2.y * pt2.y;
  26.   }

  27.   int qs(List<Point> arr, int low, int high) {. 1point 3acres 璁哄潧
  28.     Point p = arr.get(high); // high -> p
  29.     while (low < high) {
  30.       while (low < high && comp(arr.get(low), p) <= 0) { // <=
  31.         low++;
  32.       }
  33.       arr.set(high, arr.get(low)); // low -> high
  34.       while (low < high && comp(p, arr.get(high)) <= 0) { // <=
  35.         high--;
  36.       }
  37.       arr.set(low, arr.get(high)); // high -> low
  38.     }
  39.     arr.set(high, p); // p -> high. Waral 鍗氬鏈夋洿澶氭枃绔,
  40.     return high;
  41.   }

  42.   public List<Point> kn3(List<Point> pts, int k) {
  43.     int low = 0;
  44.     int high = pts.size() - 1;
  45.     while (low < high) {
  46.       int mid = qs(pts, low, high);
  47.       if (mid < k) {
  48.         low = mid + 1;
  49.       } else if (k < mid) {
  50.         high = mid - 1;
  51.       } else { // k == mid
  52.         return pts.subList(0, k);.鏈枃鍘熷垱鑷1point3acres璁哄潧
  53.       }
  54.     }
  55.     return pts.subList(0, k); // low < high
  56.   }
  57. . 鍥磋鎴戜滑@1point 3 acres
  58.   public static void main(String[] args) {
  59.     Solution s = new Solution();
  60.     List<Point> pts = new ArrayList<>();
  61.     pts.add(new Point(0, 1));. Waral 鍗氬鏈夋洿澶氭枃绔,
  62.     pts.add(new Point(1, 1));
  63.     pts.add(new Point(2, 2));
  64.     pts.add(new Point(0, 2));
  65.     pts.add(new Point(1, 1));.鏈枃鍘熷垱鑷1point3acres璁哄潧
  66.     System.out.println(s.kn1(pts, 3));
  67.     System.out.println(s.kn2(pts, 3));
  68.     System.out.println(s.kn3(pts, 3));
  69.   }
  70. }
复制代码
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-15 14:30:47 | 显示全部楼层

改了一下
  1. public class Solution {
  2.   public List<Point> kn1(List<Point> pts, int k) {
  3.     Queue<Point> maxheap =. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  4.         new PriorityQueue<>((p1, p2) -> (p2.x * p2.x + p2.y * p2.y) - (p1.x * p1.x + p1.y * p1.y));
  5.     for (Point p : pts) { // nlgk
  6.       maxheap.offer(p);
  7.       if (maxheap.size() > k) {
  8.         maxheap.poll();
  9.       }
  10.     }
  11.     return maxheap.stream().collect(Collectors.toList());
  12.   }

  13.   public List<Point> kn2(List<Point> pts, int k) {
  14.     Queue<Point> minheap =
  15.         new PriorityQueue<>((p1, p2) -> (p1.x * p1.x + p1.y * p1.y) - (p2.x * p2.x + p2.y * p2.y));
  16.     minheap.addAll(pts);
  17.     List<Point> ret = new ArrayList<>();
  18.     for (int i = 0; i < k; i++) { // klgn
  19.       ret.add(minheap.poll()); 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  20.     }
  21.     return ret;
  22.   }. 鍥磋鎴戜滑@1point 3 acres
  23. . 鍥磋鎴戜滑@1point 3 acres
  24.   int comp(Point pt1, Point pt2) {. from: 1point3acres.com/bbs
  25.     return pt1.x * pt1.x + pt1.y * pt1.y - pt2.x * pt2.x - pt2.y * pt2.y;
  26.   }

  27.   int qs(List<Point> arr, int low, int high) {
  28.     Point p = arr.get(high); // high -> p
  29.     while (low < high) {
  30.       while (low < high && comp(arr.get(low), p) <= 0) { // <=
  31.         low++;
  32.       }
  33.       arr.set(high, arr.get(low)); // low -> high
  34.       while (low < high && comp(p, arr.get(high)) <= 0) { // <=. 1point 3acres 璁哄潧
  35.         high--;.鐣欏璁哄潧-涓浜-涓夊垎鍦
  36.       }
  37.       arr.set(low, arr.get(high)); // high -> low
  38.     }
  39.     arr.set(high, p); // p -> high
  40.     return high;
  41.   }
  42. 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  43.   public List<Point> kn3(List<Point> pts, int k) {
  44.     int low = 0;
  45.     int high = pts.size() - 1;
  46.     while (low < high) {
  47.       int mid = qs(pts, low, high);
  48.       if (mid < k) {
  49.         low = mid + 1;
  50.       } else if (k < mid) {. 1point 3acres 璁哄潧
  51.         high = mid - 1;
  52.       } else { // k == mid
  53.         return pts.subList(0, k);
  54.       }
  55.     }
  56.     return pts.subList(0, k); // low < high
  57.   }

  58.   void recursion(List<Point> pts, int k, int start, int end) {
  59.     int mid = qs(pts, start, end);
  60.     if (mid < k) {
  61.       recursion(pts, k, mid + 1, end);
  62.     } else if (k < mid) {
  63.       recursion(pts, k, start, mid - 1);
  64.     }
  65.   }

  66.   public List<Point> kn3_(List<Point> pts, int k) {
  67.     recursion(pts, k, 0, pts.size() - 1);
  68.     return pts.subList(0, k);
  69.   }
  70. -google 1point3acres
  71.   public static void main(String[] args) {
  72.     Solution s = new Solution();
  73.     List<Point> pts = new ArrayList<>();
  74.     pts.add(new Point(0, 1));
  75.     pts.add(new Point(1, 1));
  76.     pts.add(new Point(2, 2));
  77.     pts.add(new Point(0, 2));
  78.     pts.add(new Point(1, 1));
    . 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  79.     Collections.shuffle(pts);
  80.     System.out.println(s.kn1(pts, 3));
  81.     Collections.shuffle(pts);.1point3acres缃
  82.     System.out.println(s.kn2(pts, 3));
  83.     Collections.shuffle(pts);
  84.     System.out.println(s.kn3(pts, 3));
  85.     Collections.shuffle(pts);
  86.     System.out.println(s.kn3_(pts, 3));
  87.   }
  88. }
复制代码
回复 支持 反对

使用道具 举报

carthus 发表于 2016-4-15 14:33:47 | 显示全部楼层
fb的summer intern面到这么晚啊
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-15 14:34:49 | 显示全部楼层
求问system design是啥题目?
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-15 14:41:27 | 显示全部楼层
第三问,第二题
  1. public class Solution {
    . more info on 1point3acres.com
  2.   public String addBinaryDigits(String s1, String s2) {
  3.     StringBuilder sb = new StringBuilder();
  4.     int i = 1;
  5.     int carry = 0;. 1point 3acres 璁哄潧
  6.     while (s1.length() - i >= 0 && s2.length() - i >= 0) {
  7.       int b1 = s1.charAt(s1.length() - i) - '0';. from: 1point3acres.com/bbs
  8.       int b2 = s2.charAt(s2.length() - i) - '0';
  9.       int sum = b1 + b2 + carry;
  10.       sb.insert(0, sum % 2);
  11.       carry = sum / 2;
  12.       i++;
    . 1point 3acres 璁哄潧
  13.     }
  14.     while (s1.length() - i >= 0) {
  15.       int b1 = s1.charAt(s1.length() - i) - '0';
  16.       int sum = b1 + carry;
  17.       sb.insert(0, sum % 2);
  18.       carry = sum / 2;
  19.       i++;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  20.     }
  21.     while (s2.length() - i >= 0) {
  22.       int b2 = s2.charAt(s2.length() - i) - '0';
  23.       int sum = b2 + carry;
  24.       sb.insert(0, sum % 2);
  25.       carry = sum / 2;
  26.       i++;
  27.     }
  28.     if (carry > 0) {
  29.       sb.insert(0, carry);
  30.     }
  31.     return sb.toString();
  32.   }. 鍥磋鎴戜滑@1point 3 acres

  33.   public static void main(String[] args) {
  34.     Solution s = new Solution();
  35.     System.out.println(s.addBinaryDigits("1010111000011100110", "1111001000000110000100"));
  36.   }. From 1point 3acres bbs
  37. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| honeyBear142857 发表于 2016-4-16 06:38:09 | 显示全部楼层
carthus 发表于 2016-4-15 14:33. 鍥磋鎴戜滑@1point 3 acres
fb的summer intern面到这么晚啊
. visit 1point3acres.com for more.
我面的是PhD intern,master intern应该早就面完啦!听说PhD intern现在还有人在面试
回复 支持 反对

使用道具 举报

 楼主| honeyBear142857 发表于 2016-4-16 06:38:57 | 显示全部楼层
sealove999 发表于 2016-4-15 14:34
求问system design是啥题目?

做一个用户推荐系统,recommender system
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-16 13:17:33 | 显示全部楼层
honeyBear142857 发表于 2016-4-16 06:38.1point3acres缃
做一个用户推荐系统,recommender system

求教楼主how to做. From 1point 3acres bbs
根据什么推荐呢。,。是图里面的连接还是发表的帖子的内容近似度还是其他神马
回复 支持 反对

使用道具 举报

 楼主| honeyBear142857 发表于 2016-4-19 07:23:27 | 显示全部楼层
sealove999 发表于 2016-4-16 13:17.鏈枃鍘熷垱鑷1point3acres璁哄潧
求教楼主how to做
根据什么推荐呢。,。是图里面的连接还是发表的帖子的内容近似度还是其他神马

给facebook用户推荐 video
回复 支持 反对

使用道具 举报

xiaohui5319 发表于 2016-4-20 04:20:18 | 显示全部楼层
请问楼主team match面完后等了多久来的offer?
回复 支持 反对

使用道具 举报

 楼主| honeyBear142857 发表于 2016-4-20 10:02:35 | 显示全部楼层
xiaohui5319 发表于 2016-4-20 04:20
请问楼主team match面完后等了多久来的offer?

我当时等了两天哈
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-9-25 16:22

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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