一亩三分地论坛

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

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

求助:TwoSigma面经里经常出现的JUnit一定要会吗?我是写C++的...

[复制链接] |试试Instant~ |关注本帖
ivanml 发表于 2016-7-3 10:13:00 | 显示全部楼层 |阅读模式

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

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

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

x
如题,想问经常看到的要求写JUnit debug Guava的Multimap code... http://www.1point3acres.com/bbs/thread-136729-1-1.html.鐣欏璁哄潧-涓浜-涓夊垎鍦
如果完全没用过JUnit怎么办,而且也不怎么懂Java,我一直是写C++的...
求问是简历上写了Java才会问这个题吗?


补充内容 (2016-7-4 22:55):
补充:楼比较热闹,下面还有其他几题的讨论
singledog2016 发表于 2016-7-3 13:47:38 | 显示全部楼层
junit很简单,我才开了一下视频,5分钟学会。  求wildcard matching的真正linear 解法!
回复 支持 反对

使用道具 举报

 楼主| ivanml 发表于 2016-7-3 22:21:21 | 显示全部楼层
singledog2016 发表于 2016-7-3 13:47
junit很简单,我才开了一下视频,5分钟学会。  求wildcard matching的真正linear 解法!

开视频?是有tutorial链接吗
回复 支持 反对

使用道具 举报

singledog2016 发表于 2016-7-3 22:39:32 | 显示全部楼层
https://www.youtube.com/watch?v=1M7gzXC9434
回复 支持 反对

使用道具 举报

 楼主| ivanml 发表于 2016-7-3 22:53:12 | 显示全部楼层
singledog2016 发表于 2016-7-3 22:39
https://www.youtube.com/watch?v=1M7gzXC9434

非常感谢。。虽然写c++的心里还是很方lol
回复 支持 反对

使用道具 举报

singledog2016 发表于 2016-7-3 22:58:21 | 显示全部楼层
题都是两套,安排好了的。我感觉不会因为每个人的不同而换题。完全可能要做junit test
回复 支持 反对

使用道具 举报

 楼主| ivanml 发表于 2016-7-3 23:05:40 | 显示全部楼层
singledog2016 发表于 2016-7-3 22:58
题都是两套,安排好了的。我感觉不会因为每个人的不同而换题。完全可能要做junit test

  好吧,也是醉。。
回复 支持 反对

使用道具 举报

deadbeaf 发表于 2016-7-4 05:32:26 | 显示全部楼层
不能面之前先问清楚需不需要写java么?不知道可不可以暗示他们换题什么。。。
我也是只会写C++,看了下power of 4那套题的iterator wrapper也是java的东西,到时候要是上级对着java的代码写我就要跪了。。。
回复 支持 反对

使用道具 举报

 楼主| ivanml 发表于 2016-7-4 07:08:58 | 显示全部楼层
deadbeaf 发表于 2016-7-4 05:32. from: 1point3acres.com/bbs
不能面之前先问清楚需不需要写java么?不知道可不可以暗示他们换题什么。。。
我也是只会写C++,看了下pow ...

 成事在天了。。他们家bar高得飞起,就算全做对也不一定能过,顺便求delete SubTree的正确做法。。
回复 支持 反对

使用道具 举报

deadbeaf 发表于 2016-7-4 11:51:53 | 显示全部楼层
ivanml 发表于 2016-7-4 07:08
 成事在天了。。他们家bar高得飞起,就算全做对也不一定能过,顺便求delete SubTree的正确做法。。

撸了一个C++的,用的DFS:
  1. #include <stdio.h>
  2. #include <stdbool.h>

  3. struct node
  4. {
  5.     int parent;
  6.     int val;. visit 1point3acres.com for more.
  7.     bool valid;
  8.     bool visited; // remember to initialize to false
  9. };

  10. void delSubtree(struct node* head, int index, int n)
  11. {
  12.     if (head == 0 || index < 0 || n <= 0) {
  13.         return;
  14.     }
  15.     (head + index)->valid = false;
  16.     (head + index)->visited = true;
  17.     for (int i = 0; i < n; i++) {
  18.         if (!(head + i)->visited) {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  19.             int j = i;
  20.             bool del = false;
    . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  21.             while ((head + j)->parent != -1 && !(head + j)->visited) {
  22.                 (head + j)->visited = true;
  23.                 int parent = (head + j)->parent;
  24.                 if ((head + parent)->valid == false) {
  25.                     del = true;
  26.                     break;
  27.                 }
  28.                 j = (head + j)->parent;
  29.             }
  30.             if (del) {
  31.                 int k = i;
  32.                 while (k != j) {-google 1point3acres
  33.                     (head + k)->valid = false;
  34.                     k = (head + k)->parent;
  35.                 }
  36.                 (head + j)->valid = false;
    .1point3acres缃
  37.             }
  38.         }
  39.     }
  40. }

  41. int main()
  42. {
  43.     struct node nodes[12];
  44.     nodes[0] = {.parent = 1, .val = 0, .valid = true, .visited = false};
  45.     nodes[1] = {.parent = 3, .val = 1, .valid = true, .visited = false};
  46.     nodes[2] = {.parent = 1, .val = 2, .valid = true, .visited = false};
  47.     nodes[3] = {.parent = 6, .val = 3, .valid = true, .visited = false};
  48.     nodes[4] = {.parent = 3, .val = 4, .valid = true, .visited = false};. 1point3acres.com/bbs
  49.     nodes[5] = {.parent = 4, .val = 5, .valid = true, .visited = false};. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  50.     nodes[6] = {.parent = -1, .val = 6, .valid = true, .visited = false};
  51.     nodes[7] = {.parent = 8, .val = 7, .valid = true, .visited = false};. 1point 3acres 璁哄潧
  52.     nodes[8] = {.parent = 6, .val = 8, .valid = true, .visited = false};
  53.     nodes[9] = {.parent = 10, .val = 9, .valid = true, .visited = false};
  54.     nodes[10] = {.parent = 8, .val = 10, .valid = true, .visited = false};
  55.     nodes[11] = {.parent = 10, .val = 11, .valid = true, .visited = false};
  56.     for (int i = 0; i < 12; i++) {
  57.         printf("%d, ", nodes[i].val);
  58.         printf("%d\n", nodes[i].valid);
  59.     }
  60.     delSubtree(nodes, 1, 12);
  61.     printf("\n\n");
  62.     for (int i = 0; i < 12; i++) {
  63.         printf("%d, ", nodes[i].val);
  64.         printf("%d\n", nodes[i].valid);
  65.     }
  66.     return 0;
  67. }
复制代码
回复 支持 反对

使用道具 举报

diyutianshi 发表于 2016-7-4 14:53:00 | 显示全部楼层
Wildcard matching没有linear解法,别浪费时间。
回复 支持 反对

使用道具 举报

singledog2016 发表于 2016-7-4 22:48:43 | 显示全部楼层
diyutianshi 发表于 2016-7-4 14:53. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
Wildcard matching没有linear解法,别浪费时间。

有些two sigma的面经里面,面试官说有。。。 百思不得其解
回复 支持 反对

使用道具 举报

 楼主| ivanml 发表于 2016-7-4 22:51:37 | 显示全部楼层
这么热闹。。顺便问下能被5整除的Iterator那题的remove怎么写?还有需要些copy constructor吗。。?
下面是我写的hasNext()和next():
// base class
class Iterator {
public:
    Iterator(const vector<int>& nums);
    Iterator(const Iterator& iter);
    virtual ~Iterator();
    // Returns the next element in the iteration.
    int next();
    // Returns true if the iteration has more elements.
    bool hasNext();
    void remove();
};

class ModFiveIterator : public Iterator {
public:
    ModFiveIterator(const vector<int> &nums) : Iterator(nums){. from: 1point3acres.com/bbs
        nextEle = 1; // can be any number
    }
   
    ModFiveIterator(const ModFiveIterator& iter); // copy ctor
   
    // Returns the next element in the iteration.
    int next() {
        if (!hasNext())
            throw runtime_error("no more elements!");
        
        return nextEle;
    }. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
   
    // Returns true if the iteration has more elements.
    bool hasNext() {
        while (Iterator::hasNext()) {. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
            int n = Iterator::next();
            if (n % 5 == 0) {
                nextEle = n;
                return true;
            }
        }
        return false;-google 1point3acres
    }
   
    void remove(){
   
    }
   
private:
    int nextEle;
};
回复 支持 反对

使用道具 举报

 楼主| ivanml 发表于 2016-7-4 22:54:38 | 显示全部楼层
singledog2016 发表于 2016-7-4 22:48
有些two sigma的面经里面,面试官说有。。。 百思不得其解

wild card就参照leetcode吗?
回复 支持 反对

使用道具 举报

singledog2016 发表于 2016-7-4 23:03:58 | 显示全部楼层
有人能找到人家从现场带回来的代码? 包括这个mod 5的题。那才值得借鉴。
回复 支持 反对

使用道具 举报

 楼主| ivanml 发表于 2016-7-4 23:07:17 | 显示全部楼层
想了一下好像remove就直接call base的remove就可以了?
    void ModFiveIterator::remove(){. 1point3acres.com/bbs
        Iterator::remove();
    }
为啥有的帖子里说remove会不work?
回复 支持 反对

使用道具 举报

deadbeaf 发表于 2016-7-5 01:19:21 | 显示全部楼层
ivanml 发表于 2016-7-4 23:07
想了一下好像remove就直接call base的remove就可以了?
    void ModFiveIterator::remove(){
        It ...

如果给的只有他的iterator接口而你无法接触到容器本身,那remove可能会出错。.鐣欏璁哄潧-涓浜-涓夊垎鍦
比如考虑这个情况:array = 1,2,3,4,5,6,7,8,9,10,11
你之前已经调用了next得到5,然后调用hasnext会得到10,但是这时候remove是要删除5,可是实际上删除的是10.. 1point 3acres 璁哄潧
这是java的iterator的remove方法的定义,删除上一个next得到的元素。我也只是猜测,因为看了一个面经似乎描述的是java的iterator。也许C++会容易做一些。
回复 支持 反对

使用道具 举报

 楼主| ivanml 发表于 2016-7-5 02:14:20 | 显示全部楼层
deadbeaf 发表于 2016-7-5 01:19
如果给的只有他的iterator接口而你无法接触到容器本身,那remove可能会出错。
比如考虑这个情况:array  ...

谢谢,说的很有道理,那看来就是要记住上一个next时iterator所在的位置了
回复 支持 反对

使用道具 举报

deadbeaf 发表于 2016-7-5 02:48:05 | 显示全部楼层
ivanml 发表于 2016-7-5 02:14
谢谢,说的很有道理,那看来就是要记住上一个next时iterator所在的位置了

其实我觉得按照地里面经的描述,remove是无法实现的。记住上一个next的位置没有用,因为只能通过他给的接口操作容器,所以无法重新seek到上一次的位置进行remove。
感觉面经对这个问题的描述都很不清楚,应该发个帖问一下比较好。
回复 支持 反对

使用道具 举报

 楼主| ivanml 发表于 2016-7-5 03:04:41 | 显示全部楼层
deadbeaf 发表于 2016-7-5 02:48
其实我觉得按照地里面经的描述,remove是无法实现的。记住上一个next的位置没有用,因为只能通过他给的接 ...

同意。。我刚才试图写,结果发现好像是没法做的。另外求问一下copy constructor要怎么写呢,思路有点糊涂,当我们copy一个iterator的时候,是要让他们共享underlying的container吗,比如:. 1point 3acres 璁哄潧
nums = {1, 2, 3, 4, 5, 6, 7}
Iterator iter1(nums);
iter1.next(); // return 1
iter1.next(); // return 2

Iterator iter2 = iter1; // copy
int x = iter2.next(); // return 3?

// what if now we do
int y = iter1.next(); // return 3?
回复 支持 反对

使用道具 举报

本版积分规则

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

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

关闭

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

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

custom counter

GMT+8, 2016-12-7 01:07

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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