回复: 46
跳转到指定楼层
上一主题 下一主题
收起左侧

Drawbridge SDE/Hadoop 电面

全局:

2018(7-9月) 码农类General 硕士 全职@ - 网上海投 - 技术电面  | | Fail | 应届毕业生

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
其实我申请的是sde,不过hr说我们觉得这个hadoop挺适合你的……经验啥的不要紧……面试官是提前告知的,天竺老哥。面之前看了下他的领英就觉得没有任何交集,希望他到时候只问算法题就好,不要蛋疼。
先吐槽codepair,在mac上打电话无法开启外接摄像头和话筒,折腾了几分钟没修好,只能用手机打电话。听得出来面试官有点不爽……劝大家如果用这个工具面试要提前测试。上来先问了下职业规划啥的……

题目:给了一个JSON,还有两个字符串列表primaryKeys和secondaryKeys,要求返回JSON中第一个属于primaryKeys的key对应的value(以字符串形式),如果没有,那就第一个属于secondaryKeys的,再没有就返回空字符串。这些keys有可能是嵌套在某个object里的。举例,给了如下JSON:

{
    "firstName": "John&quo
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
他存心想让我自己搞清楚,还是他水平问题。现在想想当时写的还是可以优化的,没有必要把JSON转化成unordered_map,直接每发现一个key就在两个列表里面找,既省时间又省空间。

答完题之后我随便问了问他的日常工作,好像也涉及广告投放什么的。问了问工作环境如何,答曰很适合新人学习。本来还想调戏一下,问他有什么理由放弃大公司加入他们,最终没有问。哈哈,一场双方印象都不好的面试,就当是多刷了一题吧。地里这个公司的面经也少,顺便作点微小的贡献。

评分

参与人数 8大米 +26 收起 理由
agnesjoe + 3 很有用的信息!
hn93hn + 3 给你点个赞!
liu.haonan + 2 给你点个赞!
tony_stark + 3 给你点个赞!
pkk5488 + 2 给你点个赞!

查看全部评分


上一篇:BB新鲜面经
下一篇:yelp HR电面 + OA
推荐
 楼主| Spinoza 2018-1-28 12:56:26 | 只看该作者
全局:
好吧,我就再写一遍代码。以下是测试通过的。不过我按照面试中的输入格式,把JSON中的空格和换行都除去了。

  1. #include <iostream>
  2. #include <string>
  3. #include <unordered_set>
  4. #include <cctype>
  5. using namespace std;

  6. class Solution {
  7.     unordered_set<string> primaryKeys, secondaryKeys;
  8.     string primaryValue = "", secondaryValue = "";
  9.     int findMatchingBracket(string s, int pos, string brackets) {
  10.         int cnt = 0, n = s.length();
  11.         for (int j = pos; j < n; j++) {
  12.             if (s[j] == brackets[0]) cnt++;
  13.             if (s[j] == brackets[1]) cnt--;
  14.             if (cnt == 0) return j;
  15.         }
  16.     }
  17.     int findMatchingQuotation(string s, int pos) {
  18.         int n = s.length();
  19.         for (int j = pos + 1; j < n; j++)
  20.             if (s[j] == '"' && s[j - 1] != '\\') return j;
  21.     }
  22.     void findKey(string obj) {
  23.         int n = obj.length();
  24.         for (int i = 0; i < n; i++) {
  25.             if (obj[i] != '"') continue;
  26.             int endOfKey = findMatchingQuotation(obj, i);
  27.             int startOfValue = endOfKey + 2, endOfValue;
  28.             string key = obj.substr(i + 1, endOfKey - i - 1), value;

  29.             // value is an object
  30.             if (obj[startOfValue] == '{')
  31.                 endOfValue = findMatchingBracket(obj, startOfValue, "{}");
  32.             // value is an array
  33.             if (obj[startOfValue] == '[')
  34.                 endOfValue = findMatchingBracket(obj, startOfValue, "[]");
  35.             // value is a number
  36.             if (isdigit(obj[startOfValue]))
  37.                 endOfValue = obj.find_first_not_of("0123456789.", startOfValue + 1) - 1;
  38.             // value is a string
  39.             if (obj[startOfValue] == '"')
  40.                 endOfValue = findMatchingQuotation(obj, startOfValue);
  41.             value = obj.substr(startOfValue, endOfValue - startOfValue + 1);

  42.             if (primaryKeys.count(key)) {
  43.                 primaryValue = value;
  44.                 return;
  45.             }
  46.             if (secondaryValue == "" && secondaryKeys.count(key))
  47.                 secondaryValue = value;
  48.             if (value[0] == '{') findKey(value);
  49.             if (primaryValue != "") return;
  50.             i = endOfValue;
  51.         }
  52.     }
  53. public:
  54.     string getValue(string obj, unordered_set<string> primary, unordered_set<string> secondary) {
  55.         primaryKeys = primary;
  56.         secondaryKeys = secondary;
  57.         findKey(obj);
  58.         return primaryValue != "" ? primaryValue : secondaryValue;
  59.     }
  60. };

  61. int main() {
  62.     Solution sol;
  63.     string s = "{\"firstName\":\"John\",\"lastName\":\"Smith\",\"sex\":\"male\",\"age\":25,\"address\":{\"streetAddress\":\"212ndStreet\",\"city\":\"NewYork\",\"state\":\"NY\",\"postalCode\":\"10021\"},\"phoneNumber\":[{\"type\":\"home\",\"number\":\"212555-1234\"},{\"type\":\"fax\",\"number\":\"646555-4567\"}]}";
  64.     cout << sol.getValue(s, {"streetAddress"}, {"age"}) << endl;
  65.     return 0;
  66. }
复制代码

评分

参与人数 2大米 +6 收起 理由
jimmyalearner + 3 很有用的信息!
hn93hn + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
 楼主| Spinoza 2018-1-23 10:33:47 | 只看该作者
全局:
lyh2017 发表于 2018-1-23 05:36
谢谢楼主啊,能不能问一下你的面试官叫什么名字啊

你搜nandish加公司名就能搜到。

评分

参与人数 1大米 +3 收起 理由
hn93hn + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
lyh2017 2018-1-23 05:36:56 | 只看该作者
全局:
谢谢楼主啊,能不能问一下你的面试官叫什么名字啊
回复

使用道具 举报

🔗
lyh2017 2018-1-23 21:22:51 | 只看该作者
全局:
好的好的,谢谢楼主。。。。。
回复

使用道具 举报

🔗
Avogadro 2018-1-26 13:58:50 | 只看该作者
全局:
请问楼主这题对于string的解析,是完全自己手动写递归还是可以用json的包?另外的话,“第一个属于primaryKeys的key对应的value”,是不是意味着每一层的keys是有先后关系的?比方说在你的例子里,firstname就比lastname的顺序要先
回复

使用道具 举报

🔗
 楼主| Spinoza 2018-1-26 21:41:19 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

评分

参与人数 1大米 +3 收起 理由
hn93hn + 3 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
Avogadro 2018-1-27 03:04:53 | 只看该作者
全局:
Spinoza 发表于 2018-1-26 21:41
我是自己手写的。我之前完全不熟JSON,也不知道有没有包……看面试官的意思,就是要考我自己写递归的。第 ...

感觉纯手写递归好难!很复杂的字符串
回复

使用道具 举报

🔗
 楼主| Spinoza 2018-1-27 09:23:31 | 只看该作者
全局:
Avogadro 发表于 2018-1-27 03:04
感觉纯手写递归好难!很复杂的字符串

没想象中那么难的,分类讨论一下就好,只有数组、对象、数字、字符串四种情况。

评分

参与人数 1大米 +3 收起 理由
hn93hn + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
chz 2018-1-27 11:47:30 | 只看该作者
全局:
楼主是先用递归转化成Map<String, Object>的嵌套?是用LinkedHashMap去维持先后关系?
回复

使用道具 举报

🔗
 楼主| Spinoza 2018-1-27 12:32:58 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

评分

参与人数 1大米 +3 收起 理由
hn93hn + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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