一亩三分地论坛

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

一亩三分地官方iOS手机应用下载
查看: 4734|回复: 35
收起左侧

Facebook Onsite

[复制链接] |试试Instant~ |关注本帖
anthonyivan 发表于 2016-10-12 08:51:29 | 显示全部楼层 |阅读模式

2016(10-12月) 码农类 硕士 全职@Facebook - 猎头 - Onsite |Other在职跳槽

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

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

x
新鲜的Facebook Onsite面经,目测是要跪了
. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
第一轮 Coding
input是一个array,要求生成一个树,有以下三个属性
1)二叉树
2)Min Heap,表示node的每个子节点的值都大于或者等于这个node的值. more info on 1point3acres.com
3)做inorder traversal的时候要保持array的顺序

举个例子input是 5, 2, 10, 7
       2
      / \
    5   10
           \
            7

follow up 是一个addNode的函数,输入是root node,还有个int value,保持原有的属性,返回root

第二轮 System Design
Design Facebook Search System. From 1point 3acres bbs
要求实现friends search和post search

. From 1point 3acres bbspost search我说可以用inverted index,但是friends search就没有思路了。. Waral 鍗氬鏈夋洿澶氭枃绔,
然后厚着脸皮说没有相关经验,然后就扯到search的web service还有typeahead ui怎么实现了

第三轮 Coding
面试官找不到房间,迟到了一会,就做了一到题目Insert Interval,但也是写的磕磕盼盼的
.1point3acres缃
第四轮 Career
讲了讲工作经验,project
问了一个dot product问题,怎么存vector,vector特别大该怎么处理等等

第五轮 System Design
Design Instagram
主要扯了一下feed的pull vs push两种方法,还问了photo storage该怎么整,又是不会。。。
. visit 1point3acres.com for more.

评分

1

查看全部评分

aifer 发表于 2016-10-13 02:51:18 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
西法的洛 发表于 2016-10-12 13:23
之前sb了。。改一下。

void addNode(TreeNode root, int val) {        if (root == null) return new ...

你这个太麻烦,用递归最好做。代码如下。.1point3acres缃
        public TreeNode addNode(TreeNode root, int val) {
                if(root == null || root.val > val) {
                        TreeNode newNode = new TreeNode(val);
                        newNode.left = root;
                        return newNode;
                } 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
                root.right = addNode(root.right, val);. more info on 1point3acres.com
                return root;
        }
回复 支持 3 反对 0

使用道具 举报

 楼主| anthonyivan 发表于 2016-10-12 08:53:13 | 显示全部楼层
关注一亩三分地微博:
Warald
例子写错了,应该是. from: 1point3acres.com/bbs
      2
    /    \
   5     7. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
        /  
     10
回复 支持 反对

使用道具 举报

wtcupup 发表于 2016-10-12 09:11:51 | 显示全部楼层
第一题应该是类似这个解法吧?  http://www.geeksforgeeks.org/construct-binary-tree-from-inorder-traversal/
回复 支持 反对

使用道具 举报

chestnut9919 发表于 2016-10-12 10:16:53 | 显示全部楼层
楼主能详细说说dot product吗?好像是fb高频题,但每个人都是一语带过至今不知道啥题。。
求职神器indeed - 在全球最大的求职网站找找适合你的工作?
回复 支持 反对

使用道具 举报

西法的洛 发表于 2016-10-12 10:55:09 | 显示全部楼层
第一题简单写了一下,欢迎指正。

class Solution {    TreeNode buildTree(int[] inorder, int start, int end) {
        if (start > end) return null;
        int idx = findMin(inorder, int start, int end);
        TreeNode node = new TreeNode(inorder[idx]);.鐣欏璁哄潧-涓浜-涓夊垎鍦
        if (start == end) return node;
        node.left = buildTree(inorder, start, idx - 1);
        node.right = buildTree(inorder, idx + 1, end);. Waral 鍗氬鏈夋洿澶氭枃绔,
        return node;
    }

    int findMin(int[] inorder, int start, int end) {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
        int min = Integer.MAX_VALUE;. more info on 1point3acres.com
        int minIdx = -1;
        for (int i = start, i <= end; i++) {
            if (min > inorder) {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
                min = inorder;
                minIdx = i;
            }
        }
        return minIdx;
    }

    void addNode(TreeNode root, int val) {
        if (val > root.val) {
            if (root.right != null) root = root.right;
            else root.right = new TreeNode(val);
        } else {
            TreeNode node = new TreeNode(val);
            node.left = root;
        }
    }
}.鐣欏璁哄潧-涓浜-涓夊垎鍦



补充内容 (2016-10-12 13:07):
不好意思 写出了个bug,每次要记录下pre,对于 else 里面改成:TreeNode node = new TreeNode(val); pre.right = node; node.left = root;
回复 支持 反对

使用道具 举报

西法的洛 发表于 2016-10-12 10:59:05 | 显示全部楼层
chestnut9919 发表于 2016-10-12 10:16
楼主能详细说说dot product吗?好像是fb高频题,但每个人都是一语带过至今不知道啥题。。

Leetcode 311. 鍥磋鎴戜滑@1point 3 acres
https://leetcode.com/problems/sparse-matrix-multiplication/
回复 支持 反对

使用道具 举报

chestnut9919 发表于 2016-10-12 11:19:14 | 显示全部楼层
西法的洛 发表于 2016-10-12 10:59
Leetcode 311
https://leetcode.com/problems/sparse-matrix-multiplication/

原来是这道题啊!谢谢!
回复 支持 反对

使用道具 举报

 楼主| anthonyivan 发表于 2016-10-12 11:43:29 | 显示全部楼层
chestnut9919 发表于 2016-10-12 10:16
楼主能详细说说dot product吗?好像是fb高频题,但每个人都是一语带过至今不知道啥题。。

就是给两个vector:
{x1, x2, x3, x4}
{y1, y2, y3, y4}. From 1point 3acres bbs

然后计算x1 * y1 + x2 * y2 + x3 * y3 + x4 * y4

但是在两个vector中,有很多是0,问用什么样的数据结构存储这些vector,然后写个函数计算dot product。

followup就是其中一个vector特别大,怎么办。两个都特别大怎么办。

回复 支持 反对

使用道具 举报

 楼主| anthonyivan 发表于 2016-10-12 11:44:56 | 显示全部楼层
顺道想问一下大家,这两个system design有什么好的思路。
回复 支持 反对

使用道具 举报

西法的洛 发表于 2016-10-12 11:49:38 | 显示全部楼层
anthonyivan 发表于 2016-10-12 11:43
就是给两个vector:
{x1, x2, x3, x4}. more info on 1point3acres.com
{y1, y2, y3, y4}

请问楼主你这个就是dot product还是matrix multiplication呀?
如果是dot product 那么两个vector的维数应该相同吧?这样如何存在不同维数的情况?. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
还是你给的例子其实是:
{x1, x2, x3, x4}
*
{y1,
y2,
y3,. Waral 鍗氬鏈夋洿澶氭枃绔,
y4
}
(row = 1, col = 4) * (row = 4, col = 1) 这种?
回复 支持 反对

使用道具 举报

chestnut9919 发表于 2016-10-12 12:00:41 | 显示全部楼层
请问楼主,第一题add node,新的val在array里是最后一个吗?能说一下思路吗?
回复 支持 反对

使用道具 举报

chestnut9919 发表于 2016-10-12 12:03:30 | 显示全部楼层
如果只能在array后面加新的数字的话,是不是每次都要重建一次树了?要是跟array没关系的话,能加的地方很多啊
回复 支持 反对

使用道具 举报

bbsbbstry 发表于 2016-10-12 12:05:38 | 显示全部楼层
想问下addNode被加进去的val除了满足minheap以外其他还有什么条件?
回复 支持 反对

使用道具 举报

bbsbbstry 发表于 2016-10-12 12:06:52 | 显示全部楼层
是保持原来的inorder不变吗?还是新的这个val相当于放在数组最后要满足新的inorder?
回复 支持 反对

使用道具 举报

aifer 发表于 2016-10-12 12:13:13 | 显示全部楼层
anthonyivan 发表于 2016-10-12 08:53
例子写错了,应该是
      2. From 1point 3acres bbs
    /    \

你这个不能保证Inorder出来的是原数组的顺序啊
回复 支持 反对

使用道具 举报

minggr 发表于 2016-10-12 12:28:47 | 显示全部楼层
西法的洛 发表于 2016-10-12 10:55
第一题简单写了一下,欢迎指正。

class Solution {    TreeNode buildTree(int[] inorder, int start, i ...

没看懂你的AddNode()

比如5, 2, 10, 7,  add 20,应该是
           2.鐣欏璁哄潧-涓浜-涓夊垎鍦
         /    \. From 1point 3acres bbs
       5      7
             /   \
           10    20
回复 支持 反对

使用道具 举报

西法的洛 发表于 2016-10-12 12:59:17 | 显示全部楼层
minggr 发表于 2016-10-12 12:28
没看懂你的AddNode()
-google 1point3acres
比如5, 2, 10, 7,  add 20,应该是
. 1point 3acres 璁哄潧
如果加入的值比root大,分两种情况
1. 存在右儿子
2. 不存在右儿子

如果是1,那么继续找右儿子的右儿子,再比较
如果是2,那么直接把加入的值放在root的右儿子上。. 1point3acres.com/bbs
所以对于你给出的例子,我的代码是通过的。因为5,2,10,7 构建出来的树,此时node(7)是没有右儿子的,你加入20,那么就可以把20赋在7的右儿子上。
回复 支持 反对

使用道具 举报

minggr 发表于 2016-10-12 13:01:47 | 显示全部楼层
我来写一个AddNode,大家看看对不对

比如原数组是5 2 10 7, tree如下
       2
     /   \
    5   7
        /
       10

现在要添加4,步骤如下
假设有parent指针

1) 找到原树的最后一个结点,即7.鐣欏璁哄潧-涓浜-涓夊垎鍦
2) 沿parent往上走,找到第一个比new value 4小的结点,即结点2
3) 新结点4的left指向7
4) 结点2的right指向4

新tree如下

       2
     /   \. 1point3acres.com/bbs
    5   4
        /-google 1point3acres
      7
     /
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴     10
  1. TreeNode *AddNode(TreeNode *root, int val)
  2. {   . 1point 3acres 璁哄潧
  3.     TreeNode *last_node = get_last_node_by_in_order_traversal(root);
  4. 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  5.     TreeNode *new_node = new TreeNode(val);. 1point 3acres 璁哄潧

  6.     TreeNode *parent = last_node;
  7.     TreeNode *prev = NULL;

  8.     while (parent) {
  9.         if (parent->val < val)
  10.             break;
  11.         prev = parent;
  12.         parent = parent->parent;. From 1point 3acres bbs
  13.     }
  14.     . visit 1point3acres.com for more.
  15.     if (parent == NULL) {
  16.         new_node->left = root;
  17.         root = new_node;
  18.     } else if (prev == NULL) {
  19.         parent->right = new_node;
  20.     } else {
  21.         new_node->left = prev;
  22.         parent->right = new_node;
  23.     } 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  24.    
  25.     return root;
  26. }
复制代码
回复 支持 反对

使用道具 举报

西法的洛 发表于 2016-10-12 13:12:20 | 显示全部楼层
minggr 发表于 2016-10-12 13:01. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
我来写一个AddNode,大家看看对不对

比如原数组是5 2 10 7, tree如下
. 1point3acres.com/bbs
你这个办法可以做,但是个人觉得没必要get_last_node_by_inorder_traversal。但是你的问题是多了很多额外操作。
回复 支持 反对

使用道具 举报

minggr 发表于 2016-10-12 13:17:39 | 显示全部楼层
西法的洛 发表于 2016-10-12 13:12
你这个办法可以做,但是个人觉得没必要get_last_node_by_inorder_traversal。但是你的问题是多了很多额外 ...

找到最后这个结点,然后从这往上走,才能保证最后生成的树的inorder traversal顺序和数组顺序是一样的
. visit 1point3acres.com for more.
5 2 10 7, add 4
新树的inorder traversal得是5 2 10 7 4
回复 支持 反对

使用道具 举报

本版积分规则

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

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

关闭

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

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

custom counter

GMT+8, 2017-3-24 10:23

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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