一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 2104|回复: 15
收起左侧

报个facebook intern offer一枚

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

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

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

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

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的要求,即不用考虑最大整数和最小整数的情况。. 1point 3acres 璁哄潧
第二题是 implement read(char* buf, int n) 用已知的read4K函数。这道题由于没做过leetcode原题,写的时候出现了bug,
虽然后面知道怎么写了,但是时间已到。这轮的面试官给了个follow,所以才有了第三面的加面。

第三面:. more info on 1point3acres.com
时间:2016.3.25
第一道题是找出离origin最近的k个points,每一个point都是坐标形式 (x, y)。 由于我是用C++编程,中间被问到了建立最大的. more info on 1point3acres.com
operator overloading的问题。
第二道题是 add binary digits,写的时候也出现了bug,交流之后迅速改了过来。.鏈枃鍘熷垱鑷1point3acres璁哄潧

Note:技术店面个人认为交流是最重要的,当然题目写出来是前提。

team match了一周,这周二team match interview,面试的问题是个system design,之前也有帖子说machine learning相关的组
都会问到system design。个人觉得选组很重要,因为涉及到return offer以及是否对相关projects真的感兴趣。

楼主当时选组的时候也是一头雾水,大家如果有team match相关的问题留言给我哈。


评分

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;. Waral 鍗氬鏈夋洿澶氭枃绔,
  4.   }

  5.   public void sort(int[] arr) {. visit 1point3acres.com for more.
  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];
  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) {. Waral 鍗氬鏈夋洿澶氭枃绔,
  28.     Solution s = new Solution();
  29.     List<Integer> list = IntStream.range(0, 100).boxed().collect(Collectors.toList());. From 1point 3acres bbs
  30.     Collections.shuffle(list);. Waral 鍗氬鏈夋洿澶氭枃绔,
  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);.1point3acres缃
  34.     System.out.println(Arrays.toString(Arrays.stream(arr).map(x -> s.getPriority(x)).toArray()));
  35.   }
  36. }
复制代码
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-15 13:39:50 | 显示全部楼层
第一面,第二题. Waral 鍗氬鏈夋洿澶氭枃绔,
  1. public class Solution {
  2.   ListNode reverse(ListNode head) {
  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;
  9.     }
  10.     return myhead.next;
  11.   }. 1point 3acres 璁哄潧
  12. .1point3acres缃
  13.   public void printALinkedListReversely1(ListNode head) {
  14.     if (head != null) {
  15.       ListNode ln = reverse(head);.1point3acres缃
  16.       for (ListNode p = ln; p != null; p = p.next) {
  17.         System.out.println(p.val);
  18.       }
  19.       reverse(ln);
  20.     }
  21.   }

  22.   public void printALinkedListReversely2(ListNode head) {
  23.     if (head != null) {
  24.       printALinkedListReversely2(head.next);
  25.       System.out.println(head.val);
  26.     }
  27.   }. 1point 3acres 璁哄潧

  28.   public static void main(String[] args) {
  29.     Solution s = new Solution();
  30.     ListNode ln1 = new ListNode(1);
  31.     ListNode ln2 = new ListNode(2);
  32.     ListNode ln3 = new ListNode(3);. visit 1point3acres.com for more.
  33.     ListNode ln4 = new ListNode(4);
  34.     ListNode ln5 = new ListNode(5);
  35.     ln1.next = ln2;
  36.     ln2.next = ln3;
  37.     ln3.next = ln4;. 鍥磋鎴戜滑@1point 3 acres
  38.     ln4.next = ln5;
  39.     s.printALinkedListReversely1(ln1);.1point3acres缃
  40.     System.out.println();. 1point3acres.com/bbs
  41.     s.printALinkedListReversely2(ln1);
  42.   }
  43. }
复制代码
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-15 14:21:52 | 显示全部楼层
第三面,第一题
  1. public class Solution {. 1point 3acres 璁哄潧
  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));. from: 1point3acres.com/bbs
  5.     for (Point p : pts) { // nlgk.鐣欏璁哄潧-涓浜-涓夊垎鍦
  6.       maxheap.offer(p);
  7.       if (maxheap.size() > k) {
  8.         maxheap.poll();
  9.       }
  10.     }.鏈枃鍘熷垱鑷1point3acres璁哄潧
  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());. From 1point 3acres bbs
  20.     }
  21.     return ret;
  22.   }

  23.   int comp(Point pt1, Point pt2) {
  24.     return pt1.x * pt1.x + pt1.y * pt1.y - pt2.x * pt2.x - pt2.y * pt2.y;
  25.   }
  26. . 鍥磋鎴戜滑@1point 3 acres
  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) { // <=. from: 1point3acres.com/bbs
  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
  40.     return high;. visit 1point3acres.com for more.
  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);-google 1point3acres
  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);-google 1point3acres
  53.       }
  54.     }
  55.     return pts.subList(0, k); // low < high
  56.   }
  57. . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  58.   public static void main(String[] args) {
  59.     Solution s = new Solution();
  60.     List<Point> pts = new ArrayList<>();.1point3acres缃
  61.     pts.add(new Point(0, 1));
  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));
  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.       }. 1point3acres.com/bbs
  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.1point3acres缃
  19.       ret.add(minheap.poll());
  20.     }
  21.     return ret;
  22.   }

  23.   int comp(Point pt1, Point pt2) {
  24.     return pt1.x * pt1.x + pt1.y * pt1.y - pt2.x * pt2.x - pt2.y * pt2.y;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  25.   }

  26.   int qs(List<Point> arr, int low, int high) {
    . 1point 3acres 璁哄潧
  27.     Point p = arr.get(high); // high -> p
  28.     while (low < high) {
  29.       while (low < high && comp(arr.get(low), p) <= 0) { // <=. from: 1point3acres.com/bbs
  30.         low++;
  31.       }
  32.       arr.set(high, arr.get(low)); // low -> high
  33.       while (low < high && comp(p, arr.get(high)) <= 0) { // <=. 鍥磋鎴戜滑@1point 3 acres
  34.         high--;
  35.       }
  36.       arr.set(low, arr.get(high)); // high -> low
  37.     }
  38.     arr.set(high, p); // p -> high
  39.     return high;
  40.   }
  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);.鏈枃鍘熷垱鑷1point3acres璁哄潧
  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);
  53.       }
  54.     }
  55.     return pts.subList(0, k); // low < high
  56.   }

  57.   void recursion(List<Point> pts, int k, int start, int end) {
  58.     int mid = qs(pts, start, end);
  59.     if (mid < k) {
  60.       recursion(pts, k, mid + 1, end);
  61.     } else if (k < mid) {
  62.       recursion(pts, k, start, mid - 1);
  63.     }
  64.   }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴

  65.   public List<Point> kn3_(List<Point> pts, int k) {.1point3acres缃
  66.     recursion(pts, k, 0, pts.size() - 1);-google 1point3acres
  67.     return pts.subList(0, k);.1point3acres缃
  68.   }

  69.   public static void main(String[] args) { 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  70.     Solution s = new Solution();
  71.     List<Point> pts = new ArrayList<>();. 鍥磋鎴戜滑@1point 3 acres
  72.     pts.add(new Point(0, 1));
  73.     pts.add(new Point(1, 1));
  74.     pts.add(new Point(2, 2));
  75.     pts.add(new Point(0, 2));
  76.     pts.add(new Point(1, 1));
  77.     Collections.shuffle(pts);
  78.     System.out.println(s.kn1(pts, 3));
  79.     Collections.shuffle(pts);
  80.     System.out.println(s.kn2(pts, 3));
  81.     Collections.shuffle(pts);
  82.     System.out.println(s.kn3(pts, 3));
  83.     Collections.shuffle(pts);
  84.     System.out.println(s.kn3_(pts, 3));
  85.   }
  86. }
复制代码
回复 支持 反对

使用道具 举报

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 {
  2.   public String addBinaryDigits(String s1, String s2) {
  3.     StringBuilder sb = new StringBuilder();
  4.     int i = 1;
  5.     int carry = 0;
  6.     while (s1.length() - i >= 0 && s2.length() - i >= 0) {
  7.       int b1 = s1.charAt(s1.length() - i) - '0';. 鍥磋鎴戜滑@1point 3 acres
  8.       int b2 = s2.charAt(s2.length() - i) - '0';
  9.       int sum = b1 + b2 + carry;. 鍥磋鎴戜滑@1point 3 acres
  10.       sb.insert(0, sum % 2);. from: 1point3acres.com/bbs
  11.       carry = sum / 2;. from: 1point3acres.com/bbs
  12.       i++;
  13.     }
  14.     while (s1.length() - i >= 0) {
  15.       int b1 = s1.charAt(s1.length() - i) - '0';
  16.       int sum = b1 + carry;. from: 1point3acres.com/bbs
  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);. 1point 3acres 璁哄潧
  25.       carry = sum / 2;.鏈枃鍘熷垱鑷1point3acres璁哄潧
  26.       i++;
  27.     }
  28.     if (carry > 0) {
  29.       sb.insert(0, carry);. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  30.     }
  31.     return sb.toString();
  32.   } 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

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

使用道具 举报

 楼主| honeyBear142857 发表于 2016-4-16 06:38:09 | 显示全部楼层
carthus 发表于 2016-4-15 14:33.1point3acres缃
fb的summer intern面到这么晚啊

我面的是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
做一个用户推荐系统,recommender system

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

使用道具 举报

 楼主| honeyBear142857 发表于 2016-4-19 07:23:27 | 显示全部楼层
sealove999 发表于 2016-4-16 13:17
求教楼主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?
.鐣欏璁哄潧-涓浜-涓夊垎鍦
我当时等了两天哈
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

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

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-8 20:05

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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