📣 独立日限时特惠: VIP通行证立减$68
回复: 23
跳转到指定楼层
上一主题 下一主题
收起左侧

报个facebook intern offer一枚

全局:

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

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

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,递归和非递归两个版本都要写出
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
e learning相关的组
都会问到system design。个人觉得选组很重要,因为涉及到return offer以及是否对相关projects真的感兴趣。

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


评分

参与人数 3大米 +71 收起 理由
xiaohui5319 + 10 感谢分享!
shepherd001 + 1 感谢分享!
夏虫不知雪花 + 60

查看全部评分


上一篇:Google电面水过经
下一篇:Summer intern是不是都已经截止了
推荐
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.   }

  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) {
  27.     Point p = arr.get(high); // high -> p
  28.     while (low < high) {
  29.       while (low < high && comp(arr.get(low), p) <= 0) { // <=
  30.         low++;
  31.       }
  32.       arr.set(high, arr.get(low)); // low -> high
  33.       while (low < high && comp(p, arr.get(high)) <= 0) { // <=
  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.   public List<Point> kn3(List<Point> pts, int k) {
  42.     int low = 0;
  43.     int high = pts.size() - 1;
  44.     while (low < high) {
  45.       int mid = qs(pts, low, high);
  46.       if (mid < k) {
  47.         low = mid + 1;
  48.       } else if (k < mid) {
  49.         high = mid - 1;
  50.       } else { // k == mid
  51.         return pts.subList(0, k);
  52.       }
  53.     }
  54.     return pts.subList(0, k); // low < high
  55.   }

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

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

  68.   public static void main(String[] args) {
  69.     Solution s = new Solution();
  70.     List<Point> pts = new ArrayList<>();
  71.     pts.add(new Point(0, 1));
  72.     pts.add(new Point(1, 1));
  73.     pts.add(new Point(2, 2));
  74.     pts.add(new Point(0, 2));
  75.     pts.add(new Point(1, 1));
  76.     Collections.shuffle(pts);
  77.     System.out.println(s.kn1(pts, 3));
  78.     Collections.shuffle(pts);
  79.     System.out.println(s.kn2(pts, 3));
  80.     Collections.shuffle(pts);
  81.     System.out.println(s.kn3(pts, 3));
  82.     Collections.shuffle(pts);
  83.     System.out.println(s.kn3_(pts, 3));
  84.   }
  85. }
复制代码
回复

使用道具 举报

推荐
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 =
  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.   }

  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) {
  27.     Point p = arr.get(high); // high -> p
  28.     while (low < high) {
  29.       while (low < high && comp(arr.get(low), p) <= 0) { // <=
  30.         low++;
  31.       }
  32.       arr.set(high, arr.get(low)); // low -> high
  33.       while (low < high && comp(p, arr.get(high)) <= 0) { // <=
  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.   public List<Point> kn3(List<Point> pts, int k) {
  42.     int low = 0;
  43.     int high = pts.size() - 1;
  44.     while (low < high) {
  45.       int mid = qs(pts, low, high);
  46.       if (mid < k) {
  47.         low = mid + 1;
  48.       } else if (k < mid) {
  49.         high = mid - 1;
  50.       } else { // k == mid
  51.         return pts.subList(0, k);
  52.       }
  53.     }
  54.     return pts.subList(0, k); // low < high
  55.   }

  56.   public static void main(String[] args) {
  57.     Solution s = new Solution();
  58.     List<Point> pts = new ArrayList<>();
  59.     pts.add(new Point(0, 1));
  60.     pts.add(new Point(1, 1));
  61.     pts.add(new Point(2, 2));
  62.     pts.add(new Point(0, 2));
  63.     pts.add(new Point(1, 1));
  64.     System.out.println(s.kn1(pts, 3));
  65.     System.out.println(s.kn2(pts, 3));
  66.     System.out.println(s.kn3(pts, 3));
  67.   }
  68. }
复制代码
回复

使用道具 举报

推荐
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];
  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) {
  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()));
  35.   }
  36. }
复制代码
回复

使用道具 举报

🔗
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:39:50 | 只看该作者
全局:
第一面,第二题
  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.   }

  12.   public void printALinkedListReversely1(ListNode head) {
  13.     if (head != null) {
  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.   }

  21.   public void printALinkedListReversely2(ListNode head) {
  22.     if (head != null) {
  23.       printALinkedListReversely2(head.next);
  24.       System.out.println(head.val);
  25.     }
  26.   }

  27.   public static void main(String[] args) {
  28.     Solution s = new Solution();
  29.     ListNode ln1 = new ListNode(1);
  30.     ListNode ln2 = new ListNode(2);
  31.     ListNode ln3 = new ListNode(3);
  32.     ListNode ln4 = new ListNode(4);
  33.     ListNode ln5 = new ListNode(5);
  34.     ln1.next = ln2;
  35.     ln2.next = ln3;
  36.     ln3.next = ln4;
  37.     ln4.next = ln5;
  38.     s.printALinkedListReversely1(ln1);
  39.     System.out.println();
  40.     s.printALinkedListReversely2(ln1);
  41.   }
  42. }
复制代码
回复

使用道具 举报

🔗
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';
  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++;
  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.   }

  33.   public static void main(String[] args) {
  34.     Solution s = new Solution();
  35.     System.out.println(s.addBinaryDigits("1010111000011100110", "1111001000000110000100"));
  36.   }
  37. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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