一亩三分地论坛

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

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

[实习] Facebook Intern 面经

[复制链接] |试试Instant~ |关注本帖
invinsibility 发表于 2016-2-10 03:28:42 | 显示全部楼层 |阅读模式

2016(1-3月)-[]EE博士+<3个月短暂实习/全职 - 内推| 码农类实习@Facebookfresh grad应届毕业生

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

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

x
刚刚面完facebook intern 第一轮。 题目的是cvs formatting coding and decoding. coding: 给List<String>, 变成cvs形式。例如:
1. ['ab', 'cd', 'ef'] => ab,cd,ef
2. ['a,b', 'cd'] => "a,b",cd
3. ['a"b', 'cd'] => "a""b",cd

数组里面有逗号或者双引号都要在最外面加双引号做特殊处理。没做过这个题,感觉写得磕磕碰碰的。来地理发面经攒人品,希望大家祝福我进入第二面~~
鏉ユ簮涓浜.涓夊垎鍦拌鍧.


补充内容 (2016-2-12 10:09):
csv是用逗号区别一个一个string的。这里有两种特殊情况:
(1)当string里面本身就含有逗号的时候,这时候变成csv格式时需要在这个string外面加双引号。e.g. [‘ab,cd’, 'cat', 'w'] -> "ab,cd",cat,w

补充内容 (2016-2-12 10:11):
(2)当string里面含有双引号的时候,先把这个双引号变成两个双引号,再在外面加上双引号(天啦,这也太变态了吧!!)。e.g. ['ab"cd', 'cat', 'w'] -> "ab""cd",cat,w

评分

5

查看全部评分

本帖被以下淘专辑推荐:

woshixuyoudan 发表于 2016-2-19 10:32:22 | 显示全部楼层
感觉好奇怪的题目。。
祝lz好运!
回复 支持 1 反对 0

使用道具 举报

kamia 发表于 2016-2-10 03:51:30 | 显示全部楼层
给你加一点大米并祝福!
回复 支持 反对

使用道具 举报

iwofr 发表于 2016-2-18 14:44:58 | 显示全部楼层
试着写了一下csv的那个,确实挺麻烦的。。。
  1. string encode(string str) {
  2.   string ret;
  3.   bool special = false;
  4.   for (char c: str) {
  5.     if (c == ',') {
  6.       special = true;
  7.       ret += c;
  8.     } else if (c == '"') {
  9.       special = true;
  10.       ret += "\"\"";
  11.     } else {
  12.       ret += c;
  13.     }
  14.   }
  15.   if (special) {
  16.     ret = "\"" + ret + "\"";
  17.   }
  18.   return ret;
  19. }

  20. string csvEncode(vector<string> &strs) {. From 1point 3acres bbs
  21.   ostringstream oss;
  22.   for (auto str: strs) {
  23.     oss << encode(str);
  24.     oss << ",";
  25.   }
  26.   string ret = oss.str();
    . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  27.   ret.pop_back();
  28.   return ret;
  29. }

  30. vector<string> csvDecode(string str) {
  31.   vector<string> ret;
  32.   int curr = 0;
  33.   while (curr < str.size()) { 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  34.     ostringstream oss;
  35.     if (str[curr] == '"') {.1point3acres缃
  36.       curr++; // skip over starting "                                                                  
  37.       while (curr < str.size()) {
  38.         if (str[curr] == '"') {
  39.           if (curr+1 < str.size() && str[curr+1] == '"') {
  40.             oss << '"';
  41.             curr++;
  42.           } else { // end quote                                                                        
  43.             ret.push_back(oss.str());
  44.             curr++;. 1point 3acres 璁哄潧
  45.             break;
  46.           }
  47.         } else {.鐣欏璁哄潧-涓浜-涓夊垎鍦
  48.           oss << str[curr];
  49.         }
  50.         curr++;
  51.       }
  52.       curr++; // skip ,                                                                                 
  53.     } else {
  54.       while (curr < str.size() && str[curr] != ',') {
  55.         oss << str[curr++];
  56.       }.鏈枃鍘熷垱鑷1point3acres璁哄潧
  57.       curr++;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  58.       ret.push_back(oss.str());
  59.     }
  60.   }
  61.   return ret;
  62. }

  63. void testCSVCoding() {
  64.   vector<string> strs{"1991", "Fo\"rd", "E350", "Super\",\" luxurious"};
  65.   string encodestr = csvEncode(strs);
  66.   vector<string> destrs = csvDecode(encodestr);
  67.   assert(strs == destrs);
  68. }
复制代码
回复 支持 反对

使用道具 举报

yanggao1119 发表于 2016-2-24 13:44:56 | 显示全部楼层
还好吧,用stringbuilder不难的。

  public String listToCVS(List<String> input) {
    if (input == null) {
      return "";
    }
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < input.size(); i++) {
      String word = input.get(i);
      StringBuilder temp = new StringBuilder();
      boolean needsQuoteWrapper = false;
      for (char c : word.toCharArray()) {. 1point 3acres 璁哄潧
        if (c == '"' || c == ',') {
          needsQuoteWrapper = true;
        }. from: 1point3acres.com/bbs
        temp.append(c);
        if (c == '"') {.鏈枃鍘熷垱鑷1point3acres璁哄潧
          temp.append(c);
        }
      }
      if (needsQuoteWrapper) {
        result.append('"');
        result.append(temp);. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
        result.append('"');
      } else {
        result.append(temp);
      }
      if (i < input.size() - 1) {
        result.append(',');
      }. from: 1point3acres.com/bbs
    }
    return result.toString();
  }
回复 支持 反对

使用道具 举报

 楼主| invinsibility 发表于 2016-2-25 00:20:15 | 显示全部楼层
yanggao1119 发表于 2016-2-24 13:44
还好吧,用stringbuilder不难的。

  public String listToCVS(List input) {
. from: 1point3acres.com/bbs
你再写个CSVtoList()试试看看。
回复 支持 反对

使用道具 举报

本版积分规则

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

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

关闭

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

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

custom counter

GMT+8, 2016-12-11 09:16

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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