谈谈使用过的几款咖啡机

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货

最近看过此主题的会员

H1B/绿卡遥遥无期
又不想回国
来东南亚最大的互联网集团工作?
码农求职神器Triplebyte:
不用海投
内推多家公司面试
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
查看: 3694|回复: 2
收起左侧

请教FB的一道onsite题

[复制链接] |试试Instant~ |关注本帖
我的人缘0
yuxrose 发表于 2015-5-15 07:01:55 | 显示全部楼层 |阅读模式
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】

2014(4-6月) 码农类General 硕士 全职@Facebook - 内推 - Onsite  | Other | 在职跳槽

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

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

x
设计json的data structure实现json encoding 要求one line version先不考虑indent,
follow up考虑indent和括号


----我觉得是不是可以用hashmap记录每一个pair, 当然value可以是另一个jsonobject

----encode的时候,是不是可以dfs traverse所有层,是不是可以需要一个iterator class?. 1point3acres

上一篇:Google电面,shaky了。
下一篇:PocketGems 电面面经

本帖被以下淘专辑推荐:

我的人缘0
eval 发表于 2015-5-15 08:42:52 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
我觉得最好先规范一下type hierarchy, 就像java的json API那样,有JsonObject, JsonElement, JsonArray, JsonPrimitive等. 然后自顶向下调用encoding过程;encoding函数根据不同的type做不同的操作,本质是个递归调用。
回复 支持 反对

使用道具 举报

我的人缘0
Wizmann 发表于 2015-5-24 15:05:51 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <string>
  5. #include <iostream>
  6. #include <algorithm>. 1point3acres
  7. #include <vector>
  8. #include <unordered_map>

  9. using namespace std;. Waral 博客有更多文章,

  10. #define print(x) cout << x << endl
  11. #define input(x) cin >> x.本文原创自1point3acres论坛
  12. . Waral 博客有更多文章,
  13. class JsonObject {-google 1point3acres
  14. public:
  15.     virtual string str() = 0;
  16. };-google 1point3acres

  17. template <typename T>. Waral 博客有更多文章,
  18. class JsonScalar: public JsonObject {
  19. public:
  20.     JsonScalar(T value): _value(value) {}
  21.     virtual string str() {
  22.         return to_string(_value);
  23.     }
  24. private:
  25.     T _value;
  26. };. 一亩-三分-地,独家发布

  27. class JsonString: public JsonObject {.留学论坛-一亩-三分地
  28. public:
  29.     JsonString(const string& str): _str(str) {}
  30.     virtual string str() {
  31.         return "\"" + _str + "\"";
  32.     }
  33. private:
  34.     string _str;
  35. };

  36. class JsonArray: public JsonObject {
  37. public:
  38.     JsonArray() {}. more info on 1point3acres
  39.     JsonArray(const vector<JsonObject*> vec): _vec(vec) {}
  40.     virtual string str() {
  41.         string res = "[";.1point3acres网
  42.         int cnt = 0;
  43.         for (auto p: _vec) {
  44.             if (cnt) {
  45.                 res += ", ";
  46.             }
  47.             res += p->str();. more info on 1point3acres
  48.             cnt++;
  49.         }
  50.         res += "]";
  51.         return res;
  52.     }
  53.     void add(JsonObject* object_p) {
  54.         _vec.push_back(object_p);.1point3acres网
  55.     }
  56. private:
  57.     vector<JsonObject*> _vec;
  58. };


  59. class JsonDict: public JsonObject {. 1point3acres
  60. public:
  61.     JsonDict() {}
  62.     JsonDict(const unordered_map<string, JsonObject*> mp): _mp(mp) {}.留学论坛-一亩-三分地
  63.     virtual string str() {
  64.         string res = "{";
  65.         int cnt = 0;
  66.         for (auto pp: _mp) {. visit 1point3acres for more.
  67.             if (cnt) {.本文原创自1point3acres论坛
  68.                 res += ", "; 来源一亩.三分地论坛.
  69.             }
  70.             auto key = pp.first;
  71.             auto value = pp.second;
  72.             res += "\"" + key + "\"";
  73.             res += ": ";
  74.             res += value->str();
  75.             cnt++;
  76.         }
  77.         res += "}";
  78.         return res;
  79.     }

  80.     void add(const string& key, JsonObject* value) {
  81.         _mp[key] = value;
  82.     }
  83.    
  84.     void add(const char* key, JsonObject* value) {
  85.         _mp[key] = value;
  86.     }
  87. private:
  88.     unordered_map<string, JsonObject*> _mp;
  89. };. more info on 1point3acres

  90. typedef JsonDict Json;


  91. int main() {
  92.     Json json;
  93.     json.add("winfo_id", new JsonScalar<int>(1));
  94.     json.add("unit_id",  new JsonScalar<int>(2));
  95.     json.add("plan_id",  new JsonScalar<int>(3));
  96.     json.add("user_id",  new JsonScalar<int>(4));. more info on 1point3acres
  97.     json.add("url", new JsonString("i am not a url"));
  98.     json.add("bid", new JsonArray({
  99.         new JsonScalar<double>(1.1),
  100.         new JsonScalar<double>(1.2),
  101.         new JsonString("nineteen")
  102.     }));
  103.     json.add("wiseapp", new JsonDict({
  104.         {"Android", new JsonString("url for android")},
  105.         {"iOS",     new JsonString("url for ios")},
  106.         {"WP",      new JsonString("404 not found")}. 1point 3acres 论坛
  107.     }));. Waral 博客有更多文章,

  108.     print(json.str());
  109. -google 1point3acres
  110.     return 0;
  111. }. Waral 博客有更多文章,


复制代码
没做内存处理。. visit 1point3acres for more.

在工程中就搞个内存池,用完统一回收就行。

shared_ptr也是个不错的选择。
回复 支持 反对

使用道具 举报

游客
请先登录

本版积分规则

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

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

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

custom counter

GMT+8, 2018-6-23 16:13

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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