[八我司] 介绍一下Uber tech stack和各个大组的情况

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 3496|回复: 8
收起左侧

Uber 两轮电面

[复制链接] |试试Instant~ |关注本帖
dananger 发表于 2015-2-7 02:50:30 | 显示全部楼层 |阅读模式

2015(1-3月) 码农类General 硕士 全职@Uber - 网上海投 - 技术电面  | Pass |

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

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

x
其实我已经面完onsite了,另开一个帖子发onsite面经吧。. Waral 博客有更多文章,

1月3号网投,小米效率超级高,第二天就收到面试通知,而且我记得还是周日。
电面45mins,大概15分钟过一下简历然后做题。

第一轮电面

开始前4个小时左右面试官把做题链接发来了。我发现给的langguage是python,我问面试官能不能换成java。他说他是写python的(大概不怎么写java),而且我最近的实习写的是python,最好不要改。所以只能硬着头皮上了。。。
.1point3acres网
问题是这样的: 给一个不断更新的log文件,每一行是一条网页的访问记录,域名+时间+几个IP地址,IP地址中有些是无效的。例如:
www.1point3acres.com 02/06/2015 10.204.12.3 1.299.3.0 #第二个IP是无效的. visit 1point3acres for more.


.本文原创自1point3acres论坛要求把所有的有效的IP扒下来。用正则表达式写了。
然后问了两个follow up:
1. 怎么把这个log tail出来(因为是实时更新的)。.本文原创自1point3acres论坛
2. 现在给定一个DNS Server,要求把有效的IP对应的域名query出来。-google 1point3acres
我用的python的pipe,shell命令实现的,其实就是调一下tai和nslookup。面试官说这样总调用shell太慢了,要求用纯python写。只好答不会。。。。。

面完感觉是跪了,没想到过几天收到小米回复,内容大意是觉得面的还可以,但是和面试官的组不match,要再来一轮电面。. 一亩-三分-地,独家发布

第二轮电面. visit 1point3acres for more.
这回换成了一个写Java的面试官,面试形式和第一轮一样。

问题是统计backtraces。
给一个1000行的文件。每一行是一个String数组,表示一个backtrace,例如
["main", "fun1", "fun2"]
["main"," "fun1", "fun3","fun4"]
["main","fun5"]. from: 1point3acres
["main"]
["main","fun5","fun6"]
第一行表示一个函数调用关系main->fun1->fun2,其他类似。显然每一行的第0个元素必然是main。最后统计出每一个function的调用次数和调用关系,例如这个例子的输出是:
main 5
    fun1 2
        fun2 1
        fun3 1
            fun4 1
    fun5 2. 围观我们@1point 3 acres
        fun6 1
调用关系用indent表示出来,每多调用一层就多一个tab。
实现就是写一个树的节点类,每一个点表示一个函数,储存它的函数名和调用次数的count,孩子存在一个HashMap里,Key是孩子的函数名。
-google 1point3acres
public Class Node{. 牛人云集,一亩三分地
    public Stirng name;
    public int count;
    public HashMap<String, Node> children;
}

树根是main,建树的时候每读取一行就从main开始更新一条path,比如例子读到第二行的时候,从main更新main.count,从main.children里找到fun1,更新fun1的count,这时候发现fun1的children里没有fun2,就创建一个fun2节点加到fun1的children里,同理fun3。

因为这个题描述有点绕,花了些时间和面试官讨论题目,最后打印的部分没时间写了,就口头讲了一下打印的顺序,从main开始,每多一层递归就多打一个tab,讲着讲着发现其实就是dfs,面试官说OK,dfs能work。因为没写完也没跑test case。

一周以后收到on site。
. 1point 3acres 论坛
总结:
来源一亩.三分地论坛. 1.最近Uber在扩招,很多engineer都是入职半年左右。
2.Uber家只用Python和Node.JS。如果prefer其他语言最好提前跟小米讲一下。
3.电面题出的五花八门,不过bar不高,每次都感觉肯定挂了没想到还能进下一轮。

评分

2

查看全部评分

本帖被以下淘专辑推荐:

  • · uber|主题: 19, 订阅: 16
ekco 发表于 2015-2-8 13:58:54 | 显示全部楼层
感谢分享,总体感觉还是挺难的,特别是第二题,建树然后dfs打印的想法很赞。我想的方法是每个函数对应一个hashtable,key是函数名,value是频率和hashtable的pair,第二个hashtable是子函数和对应的频率。然后递归打印。.留学论坛-一亩-三分地

期待onsite面经!
回复 支持 反对

使用道具 举报

wendy33 发表于 2015-2-17 09:46:03 | 显示全部楼层
请问LZ,可能出现某个func同时出现在不同的层次吗?
回复 支持 反对

使用道具 举报

houqingniao 发表于 2015-3-3 01:53:50 | 显示全部楼层
第二题有大牛写写代码么。。
回复 支持 反对

使用道具 举报

echo33 发表于 2015-3-4 04:31:30 | 显示全部楼层
这题目略难啊
回复 支持 反对

使用道具 举报

stleger 发表于 2015-6-22 13:49:31 | 显示全部楼层
第二题 不就是个拓扑排序吗
回复 支持 反对

使用道具 举报

sjtuzyt 发表于 2015-6-25 02:41:20 | 显示全部楼层
最近要电面,刚刚写了一下,调完花了半个小时,第一次在coderpad上写
  1. #include <iostream>
  2. #include <vector>. 牛人云集,一亩三分地
  3. #include <map>
  4. using namespace std;

  5. // To execute C++, please define "int main()"
  6. struct TreeNode {
  7.   int count;. from: 1point3acres
  8.   string val;
  9.   map<string, TreeNode*> str_map;
  10.   TreeNode(string v) {
    . visit 1point3acres for more.
  11.     count = 1;
  12.     val = v;
  13.   }
  14. };. visit 1point3acres for more.

  15. void preorder(TreeNode* root, string prefix) {. 围观我们@1point 3 acres
  16.   if(root == NULL) return;
  17.   cout<<prefix<<root->val<<" "<<root->count<<endl;
  18.   map<string, TreeNode*>::iterator it;
  19.   for(it = root->str_map.begin(); it != root->str_map.end(); ++it)
  20.     preorder(it->second, prefix + "  ");.1point3acres网
  21. }. From 1point 3acres bbs
  22. . 围观我们@1point 3 acres
  23. void printBckTraces(vector<vector<string>>& record) {
  24.   TreeNode* root = new TreeNode("main");
  25.   root->count = 0;
  26.   TreeNode* cur_node;-google 1point3acres
  27.   . from: 1point3acres
  28.   int m = record.size();//n = record[0].size();
  29.   //build the tree. Waral 博客有更多文章,
  30.   for (int i = 0; i < m; ++i) {
  31.     cur_node = root;
  32.     int n = record[i].size();
  33.     for (int j = 0; j < n; ++j) {
  34.       if(j == 0) {
  35.         cur_node->count += 1;. from: 1point3acres
  36.         continue;
  37.       }
  38.       if(cur_node->str_map.find(record[i][j]) == cur_node->str_map.end()) {
  39.         TreeNode* tmp_node = new TreeNode(record[i][j]);
  40.         cur_node->str_map[record[i][j]] = tmp_node;
  41.         cur_node = tmp_node;
  42.       }. visit 1point3acres for more.
  43.       else {
  44.         cur_node->str_map[record[i][j]]->count += 1;
  45.         cur_node = cur_node->str_map[record[i][j]];. 1point 3acres 论坛
  46.       }. 一亩-三分-地,独家发布
  47.     }
  48.   }
  49.   //print the stuffs
  50.   preorder(root, "");
  51.   
  52. }

  53. int main() {
  54.   vector<vector<string>> test = {
  55.     {"main", "fun1", "fun2"},
  56.     {"main","fun1", "fun3","fun4"},
  57.     {"main","fun5"},
  58.     {"main"},
  59.     {"main", "fun5", "fun6"}
  60.   };
  61.   printBckTraces(test);
  62.   return 0;. 一亩-三分-地,独家发布
  63. }
复制代码
回复 支持 反对

使用道具 举报

tonyjiang 发表于 2015-8-27 14:25:16 | 显示全部楼层
  1. bt = [. 牛人云集,一亩三分地
  2.     ["main", "fun1", "fun2"],
  3.     ["main", "fun1", "fun3", "fun4"],
  4.     ["main", "fun5"],
  5. #     ['main', 'fun1', 'fun3'],
  6.     ["main"],
  7.     ["main", "fun5", "fun6"]
  8. ]

  9. dic = {}

  10. for bck in bt:
  11.     tmp = dic
  12.     for fct in bck:
  13.         if fct not in tmp:
  14.             tmp[fct] = [1,{}]   # count 1 and add child node
  15.             tmp = tmp[fct][1]   # move to child node
  16.         else:
  17.             tmp[fct][0] += 1
  18.             tmp = tmp[fct][1]
  19.             
  20. def dfs(dic, level):
  21.     if len(dic) == 0:
  22.         return
  23.     for key in dic:.本文原创自1point3acres论坛
  24.         print "%s%s %d" % ('  '*level, key, dic[key][0])
  25.         dfs(dic[key][1], level+1)
  26.         
  27. dfs(dic,0)
复制代码
来个Python
  1. main 5
  2.   fun5 2
  3.     fun6 1
  4.   fun1 2 . from: 1point3acres
  5.     fun3 1
  6.       fun4 1
  7.     fun2 1
复制代码
Mobile Apps Category (English)728x90
回复 支持 反对

使用道具 举报

mmliu 发表于 2015-8-27 16:52:03 | 显示全部楼层
请问 log 更新那题,

1. 怎么把这个log tail出来(因为是实时更新的)。.

-google 1point3acres
这个怎么做啊,总不能是 tail -f 吧
回复 支持 反对

使用道具 举报

本版积分规则

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

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

关闭

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

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

custom counter

GMT+8, 2018-5-25 09:21

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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