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

Google 2 轮店面

全局:

2019(4-6月) 码农类General 硕士 全职@google - 内推 - 技术电面  | | Fail | 应届毕业生

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

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

x
02-08  第一轮店面
        2题
第一题: 判断一个set of word 是不是unique abbreviation 规则
internationalization" -> "i18n", "localization" -> "l10n"   这题比较简单
[size=14.666666984558105px]第二题: 利口 乌尔齐
[size=14.666666984558105px]之前没刷过,写完之后有些bug  写之前一致跟面试官确定我那个方案行不行,没有直接回应我 写完之后跟我指出来的,然后我跟他说了solution 这个fixed 这个bug
[size=14.666666984558105px]这个可能是见面的原因
[size=14.666666984558105px]02-22 第二轮店面
[size=14.666666984558105px]听声音 感觉是一个慢资深大叔,说话感觉带有命令口气。
[size=14.666666984558105px]就一起设计API, 千万没想到店面会考这个。
template <typename K, typename V>
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
或者其他data structure 里面处理 做到内存最优 而且还说了 如果数据量很大怎么办???   
这题绕来绕去 在时间跟内存 这个找最好solution, 最后实在没办法 想不到最优解 用embedded map 给做了。。。。
中间我在思考怎么找最优解的时间 没说话 听到他在那边吐痰的声音。而且面试的时候还迟到10分钟。
挂在这个的design API的题上 心里有点不舒服。 本想着应该就是解2道题的。。。。
各位求加米啊。 欢迎大家在这个帖子下面讨论这个,, 如果做到用最少的内存。。。
move on 下一家了。



补充内容 (2019-2-26 02:48):
编辑不了帖子。。。

补充内容 (2019-2-26 13:48):
   m.get("a"); // returns "duplicate"

评分

参与人数 7大米 +31 收起 理由
erichuan2020 + 3 很有用的信息!
鹿鹿鹿鹿鹿鹿鹿 + 2 很有用的信息!
Cravo + 1 赞一个
DerekLH + 3 谢谢分享
weblynette + 1 赞一个

查看全部评分


上一篇:Viagogo跪经
下一篇:一轮vo, 大坑

本帖被以下淘专辑推荐:

推荐
kaipeng21 2019-2-26 11:59:04 | 只看该作者
全局:
我的想法是用一个Dictionary of List,每次同时存取当前Snapshot ID和存取值,Get就直接拿尾端的值,Get with Snapshot ID 就用哈希后用二分法查询,这样内存只会存取需要改变的值,Get, Put 都是O(1),只是Snapshot ID 查找需要Log(该值的版本修改数),如有更好的请多指教



  1. class VersionDict:

  2.     def __init__(self):
  3.         self.version = 0
  4.         self.map = defaultdict(list)
  5.    
  6.     def _bsearch(self, arr, condition):
  7.         left, right = 0, len(arr)
  8.         while left < right:
  9.             mid = (left + right) // 2
  10.             if condition(arr[mid]):
  11.                 right = mid
  12.             else:
  13.                 left = mid + 1
  14.         return left

  15.     def get(self, key):
  16.         if not self.map[key]:
  17.             return None
  18.         return self.map[key][-1][1]

  19.     def get_with_version(self, key, version):
  20.         if not self.map[key] or version > self.version:
  21.             return None
  22.         ind = self._bsearch(self.map[key], lambda ele : ele[0] > version)
  23.         if ind == 0:
  24.             return None
  25.         return self.map[key][ind-1][1]

  26.     def put(self, key, value):
  27.         if not self.map[key] or self.map[key][-1][0] < self.version:
  28.             self.map[key].append([self.version, value])
  29.         else:
  30.             self.map[key][-1][1] = value

  31.     def take_snapshot(self):
  32.         self.version += 1
  33.         return self.version - 1


  34. class TestVersionDict(unittest.TestCase):

  35.     def test_basics(self):
  36.         vdict = VersionDict()
  37.         vdict.put("a", "foo")
  38.         vdict.put("b", "bar")
  39.         assert vdict.get("a") == "foo"
  40.         assert vdict.get("b") == "bar"
  41.         assert vdict.get("c") is None
  42.         vdict.put("a", "duplicate")
  43.         assert vdict.get("a") == "duplicate"
  44.         assert vdict.get("b") == "bar"
  45.         assert vdict.get("c") is None

  46.         snapshot_id_1 = vdict.take_snapshot()
  47.         vdict.put("b", "hello")
  48.         vdict.put("c", "world")
  49.         assert vdict.get("b") == "hello"
  50.         assert vdict.get_with_version("b", snapshot_id_1) == "bar"
  51.         assert vdict.get("a") == "duplicate"
  52.         assert vdict.get_with_version("a", snapshot_id_1) == "duplicate"
  53.         assert vdict.get("c") == "world"
  54.         assert vdict.get_with_version("c", snapshot_id_1) is None
  55.         assert vdict.get("d") is None
  56.         assert vdict.get_with_version("d", snapshot_id_1) is None

  57.         snapshot_id_2 = vdict.take_snapshot()
  58.         vdict.put("b", "new")
  59.         assert vdict.get("a") == "duplicate"
  60.         assert vdict.get_with_version("a", snapshot_id_1) == "duplicate"
  61.         assert vdict.get_with_version("a", snapshot_id_2) == "duplicate"
  62.         assert vdict.get("b") == "new"
  63.         assert vdict.get_with_version("b", snapshot_id_1) == "bar"
  64.         assert vdict.get_with_version("b", snapshot_id_2) == "hello"
  65.         assert vdict.get("c") == "world"
  66.         assert vdict.get_with_version("c", snapshot_id_1) is None
  67.         assert vdict.get_with_version("c", snapshot_id_2) == "world"
  68.         assert vdict.get("d") is None
  69.         assert vdict.get_with_version("d", snapshot_id_1) is None
  70.         assert vdict.get_with_version("d", snapshot_id_2) is None
复制代码
回复

使用道具 举报

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

使用道具 举报

推荐
bdhmwzfa 2019-2-27 09:23:19 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
 楼主| spridemen 2019-2-26 02:41:40 | 只看该作者
全局:
这个排版给乱了
回复

使用道具 举报

🔗
pengdu 2019-2-26 09:31:19 来自APP | 只看该作者
全局:
是设计有snapshot的Hashtable吗?
回复

使用道具 举报

🔗
kaipeng21 2019-2-26 11:22:46 | 只看该作者
全局:
LZ给的例子在第一次take snapshot之前就把"a"改为 "duplicate"了,为何之后的 m.get("a")是return "foo"而非"duplicate"?
回复

使用道具 举报

🔗
 楼主| spridemen 2019-2-26 13:46:21 | 只看该作者
全局:
pengdu 发表于 2019-2-26 09:31
是设计有snapshot的Hashtable吗?

不是。 数据结构可以自己定义,但要保证内存用的最少
回复

使用道具 举报

🔗
bdhmwzfa 2019-2-26 16:16:12 | 只看该作者
全局:
用map<key, vector<pair<version number, value>>>其实就可以了,每次take snapshot的时候,对于那些有更改的点,push back一个pair就好了,这样只有更改的key才会生成一个新的pair记录,查找其实就是binary search。这样做不行么?
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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