《数据科学面试40+真题讲解》,K神本年度最后一次开课


一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推你去多家公司面试
Airbnb 数据科学职位
in analytics and inference
天天打游戏、照样领工资,
你要不要来?
把贵司招聘信息放这里
查看: 5560|回复: 16
收起左侧

Uber Onsite (Full Stack非主流面试)

[复制链接] |试试Instant~ |关注本帖
norman_xin 发表于 2016-5-13 14:48:53 | 显示全部楼层 |阅读模式

2016(4-6月) 码农类 硕士 全职@Uber - 猎头 - Onsite |Fail在职跳槽

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

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

x
面的是Full Stack,题目略有些非主流,前端和full stack的同学可以参考下:
Round1:美国小伙和国人大哥,设计实现一个单元测试用的function, test(desc, cb),功能类似于Jasmine的it(desc, cb);
Round2:台湾hiring manager,behavior
Round3: 三哥,有两个api:/v1/api1返回{result: val1},/v1/api2返回{result: val2},提供异步方法request(url, successcb),写代码打印出{result: val1 + val2},不能使用Promise,不能嵌套callback。(不用promise的话判断所有request都resolve的条件不好处理,用了两个isFetching做flag来标志异步request是否完成,实际项目肯定不会那么写,完全不知道这道题目想考啥重点)。
Round4:国人大哥,obj1 = {a: 1, b: 2, c: {d: 3}},obj2 = {b: 'a', c: {d: 4}},写一个递归函数merge(obj1, obj2),合并后的结果为{a: 1, b: [2, 'a'], c: {d: [3, 4]}}
Round5: 三哥director,behavior,有n个cityLog,里面的包含各个城市各个时间点的车辆的数量,比如cityLog1 = ['1:00': 3, '1:03': 5, '2:00': 7],cityLog2 = ['1:00': 2, '1:02': 5, '2:02': 8],写function输出各个时间点车辆数量总和, total = ['1:00': 5,'1:02': 8, '1:03': 10, '2:00': 12, '2:02': 15],没想出什么太优化的方案,三层for循环brute force. more info on 1point3acres.com

评分

2

查看全部评分

csushin1992 发表于 2016-8-9 13:12:00 | 显示全部楼层
修正以上code...亲测有效。。. visit 1point3acres.com for more.
function main(obj1, obj2){. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
        var ret = new Object();
        for(var key1 in obj1){
                if(key1 in obj2){-google 1point3acres
                        if((obj1[key1] instanceof Object) && (obj2[key1] instanceof Object)){. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
                                ret[key1] = main(obj1[key1], obj2[key1]);
                        }
                        else{
                                var tmp = [];
                                tmp = tmp.concat(obj1[key1]);
                                tmp = tmp.concat(obj2[key1]);
                                ret[key1] = tmp;;
                        }
                }
                else{
                        ret[key1] = obj1[key1];
                }. Waral 鍗氬鏈夋洿澶氭枃绔,
        }
        for(var key2 in obj2){
                if(!(key2 in obj1)){
                        ret[key2] = obj2[key2];
                }
        }
        return ret;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
}
回复 支持 1 反对 0

使用道具 举报

lillian0 发表于 2016-6-21 12:42:44 | 显示全部楼层
求认识楼主!
回复 支持 反对

使用道具 举报

larry 发表于 2016-6-21 16:23:11 来自手机 | 显示全部楼层
第三题 有没有可能是考察promise的具体实现…我猜…
回复 支持 反对

使用道具 举报

 楼主| norman_xin 发表于 2016-6-22 02:29:51 | 显示全部楼层
larry 发表于 2016-6-21 16:23
第三题 有没有可能是考察promise的具体实现…我猜…

其实就是想考怎样处理异步吧,不用promise的话可以这么写:

function addResults(urls) {
  var cache = [];

  url.forEach(function(url) {. 1point 3acres 璁哄潧
    request(url, function(res) {
      cache.push(res);

      if (cache.length === urls.length) {
        var sum = cache.reduce(function(prev, cur) { return prev + cur; }, 0);
        console.log({result: sum});
      }.1point3acres缃
    });
  });
}

保证异步的request方法并行取数据就好
回复 支持 反对

使用道具 举报

 楼主| norman_xin 发表于 2016-6-22 02:47:00 | 显示全部楼层
再来个Promise版的
function addResults(urls) {
. 鍥磋鎴戜滑@1point 3 acres  var promises = urls.map(function(url) {
    return new Promise((resolve) => { request(url, resolve); });
  });

  Promise.all(promises).then(results => {
    var sum = cache.reduce((prev, cur) => { return prev + cur; }, 0);
    console.log({result: sum});. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  });
}
回复 支持 反对

使用道具 举报

lillian0 发表于 2016-6-22 02:56:21 | 显示全部楼层
现在面试都用es6了吗?

补充内容 (2016-6-21 12:56):
求认识大神
回复 支持 反对

使用道具 举报

 楼主| norman_xin 发表于 2016-6-22 03:33:57 | 显示全部楼层
lillian0 发表于 2016-6-22 02:56
现在面试都用es6了吗?
. from: 1point3acres.com/bbs
补充内容 (2016-6-21 12:56):

大部分面试写ES5就好,也许有一些公司会要求ES6,投简历之前可以看看job description。Promise的概念即使使用ES5也是要熟悉的。

我不是大神啦,可以加我微信,norman_xin。有前端技术问题可以讨论下。
回复 支持 反对

使用道具 举报

 楼主| norman_xin 发表于 2016-6-22 05:45:48 | 显示全部楼层
再说说第一题,这是个设计题,test这个函数主要作用是执行测试,输出测试成功/失败信息。

var logs = new Map();

function test(desc, fn) {-google 1point3acres
  logs.set(desc, []);

  var promise = new Promise((resolve) => {
    fn(resolve);
  });

  promise.then(() => {. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
    var failures = logs.get(desc);
    console.log(`${desc} ${failures.length ? 'failed' : 'passed'}`);. From 1point 3acres bbs
    failures.forEach((failure) => {
      console.log(failure);
    });
  });.1point3acres缃
}
. 1point3acres.com/bbs
调用起来就是类似Jasmine
test('test something', function(done) {
  //var a = 1, b = 2;
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴  //assertEquals(a, b);

//或者异步. visit 1point3acres.com for more.
//setTimeout(function() {
//   assertEquals(a, b);
//   done();
// }, 1000);
});

补充内容 (2016-6-22 05:49):
断言类的函数像是assertEquals如果遇到断言失败就在logs相应的记录里面插入一条信息
回复 支持 反对

使用道具 举报

fansilek 发表于 2016-6-23 00:59:48 | 显示全部楼层
norman_xin 发表于 2016-6-22 05:45
再说说第一题,这是个设计题,test这个函数主要作用是执行测试,输出测试成功/失败信息。

var logs = n ...
鏉ユ簮涓浜.涓夊垎鍦拌鍧.
大神求认识,可以加你微信吗?
回复 支持 反对

使用道具 举报

 楼主| norman_xin 发表于 2016-6-23 01:09:42 | 显示全部楼层
fansilek 发表于 2016-6-23 00:59
大神求认识,可以加你微信吗?
. 1point 3acres 璁哄潧
当然可以咯,norman_xin,有问题可以一起讨论
回复 支持 反对

使用道具 举报

fansilek 发表于 2016-6-28 10:01:04 | 显示全部楼层
norman_xin 发表于 2016-6-23 01:09
当然可以咯,norman_xin,有问题可以一起讨论

我加您了,周小喵
回复 支持 反对

使用道具 举报

 楼主| norman_xin 发表于 2016-6-28 12:20:19 | 显示全部楼层
fansilek 发表于 2016-6-28 10:01
我加您了,周小喵

不好意思,微信号写错了,我的是NormanXin,要麻烦你重新加一下啦
回复 支持 反对

使用道具 举报

lilihao2014 发表于 2016-6-29 08:00:39 | 显示全部楼层
没有system design???
回复 支持 反对

使用道具 举报

 楼主| norman_xin 发表于 2016-6-29 08:33:12 | 显示全部楼层

.鏈枃鍘熷垱鑷1point3acres璁哄潧木有system design,其他题目也没一道面经
回复 支持 反对

使用道具 举报

csushin1992 发表于 2016-8-9 13:00:03 | 显示全部楼层
话说第四轮我这样写:. visit 1point3acres.com for more.
function main(obj1, obj2){
        var ret = new Object();. 鍥磋鎴戜滑@1point 3 acres
        for(var key1 in Object.keys(obj1)){. 1point3acres.com/bbs
                if(key1 in Object.keys(obj2)){
                        if(key1 instanceof Object){
                                ret[key1] = main(obj1[key1], obj2[key1]);
                        }. Waral 鍗氬鏈夋洿澶氭枃绔,
                        else{
                                var tmp = [];
                                tmp.concat(obj1[key1]);. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
                                tmp.concat(obj2[key1]);
                                ret[key1] = tmp;;
                        }
                }
                else{
                        ret[key1] = obj1[key1];
                }
        }
        for(var key2 in Object.keys(obj2)){
                if(!(key2 in obj1)){. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
                        ret[key2] = obj2[key2];
                }
        }
        return ret;
}
请指教~
回复 支持 反对

使用道具 举报

 楼主| norman_xin 发表于 2017-10-26 15:38:43 | 显示全部楼层
刚好有人问起,再想了想,第一题其实可以看作是一个实现发布-订阅模式,第五题citylog对每个log做二分查找找到最接近目标时间的target。

第一题:
class SimpleTestSuite {
  construct(desc) {. From 1point 3acres bbs
    this.desc = '';
    this.testCases = [];
  }
. Waral 鍗氬鏈夋洿澶氭枃绔,
  addTestCase(desc, fn) {. Waral 鍗氬鏈夋洿澶氭枃绔,
    this.testCases.push(new SimpleTestCase(desc, fn));
  }

  exec() {
    for (let testCase of this.testCases) {
      testCase.exec();
      testCase.print();
    }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  }
}
. 1point 3acres 璁哄潧
class SimpleTestCase {.鐣欏璁哄潧-涓浜-涓夊垎鍦
  construct(desc, fn) {
    this.desc = '';
    this.fn = fn.bind(this);
    this.errors = [];
  }. Waral 鍗氬鏈夋洿澶氭枃绔,

  exec() {
    assert = this.assert.bind(this);
    this.fn();
  }

  isPass() {. From 1point 3acres bbs
    return this.errors.length === 0;
  }.1point3acres缃

  assert(expected, actual) {
    expected !== actual &&
        this.errors.push(`expect: ${expected}; actual: ${actual}`);. from: 1point3acres.com/bbs
  }

  print() {
    console.log(`${this.desc}: ${this.isPass()}`);.鐣欏璁哄潧-涓浜-涓夊垎鍦
    this.errors.length > 0 && console.log(this.errors);
  }
}
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-11-24 08:24

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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