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

snapshot高频面经题求问~

全局:

2018(10-12月) 码农类General 本科 全职@google - 内推 - 技术电面  | | Pass | 应届毕业生

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

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

x
刚在地里看到google的面经帖子,有一道snapshot的题目貌似很多人遇上了。想集思广益,看能不能想到更好的方法。

原贴:
第一轮:烙印校友。上来就做题。题目是Google
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
Version相同Index相同的值不保存,仅保存改变的值。写了代码后,在口头跑Case时,发现小Bug,并立马改正。



评分

参与人数 3大米 +24 收起 理由
匿名用户-WFGFF + 20
mizukou + 1 赞一个
gnoix + 3 很有用的信息!

查看全部评分


上一篇:微软电面New Grad
下一篇:外卖公司挂经

本帖被以下淘专辑推荐:

推荐
bdhmwzfa 2018-12-11 10:16:48 | 只看该作者
全局:
比较naive的做法应该就是用一个vector<vector<pair<int, int>>>,pair.first表示的version,pair.second表示的是value
这样的话set可以做到O(1),takeSnapshot是O(n),因为take snapshot的时候可能已经累计了很多set了,而且需要更新每个index处的version号
而get得话,应该是O(nlgn)的,因为每个位置都需要binary search寻找一个比指定version号低的value
回复

使用道具 举报

推荐
H4veFunC0din9 2018-12-13 01:39:08 | 只看该作者
全局:
bdhmwzfa 发表于 2018-12-11 10:16
比较naive的做法应该就是用一个vector,pair.first表示的version,pair.second表示的是value
这样的话set ...

你好!请问一下,为什么take snapshot 需要O(n)呢?如果每次调用set的时候,都把(version No., value)加到index处的vector,那takesnapshot还需要其他什么操作呢?我的理解是只要把version No.累加1就可以了,那么之后的set都会用新的version No.?求指正~
回复

使用道具 举报

🔗
yanl3277881 2018-12-11 09:24:00 | 只看该作者
全局:
节省空间的话,设计一个structure包含version和value, 然后array每个index放list<structure>?
回复

使用道具 举报

🔗
say543 2018-12-11 15:48:23 | 只看该作者
全局:
bdhmwzfa 发表于 2018-12-11 10:16
比较naive的做法应该就是用一个vector,pair.first表示的version,pair.second表示的是value
这样的话set ...


跟我想的很像 我会用 hashmap<index, treemap<update_version, update value> 这样因该是 o(1) set , o(n) take snapshot, get o(nlogn) 有点像是sparse vector 的概念
回复

使用道具 举报

全局:
H4veFunC0din9 发表于 2018/12/13 01:39:08


你好!请问一下,为什么take snapshot 需要O(n)呢?如果每次调用set的时候,都把(version No., value)加到index处的vector,那takesnapshot还...

你这个做法可以,但可能会被指出空间效率不高,因为很可能累积许多的set才会有一个take snapshot,所以没必要每次都生成一个新version。传统关系型数据库MVCC的原理是每次写都自动生成version和snapshot,但是这里既然给了snapshot函数,显然只关心特定节点的值。
回复

使用道具 举报

🔗
飞人殿下 2018-12-17 07:15:46 | 只看该作者
全局:
顶一下帖子,借楼看答案
回复

使用道具 举报

🔗
sw304 2019-1-19 02:08:23 | 只看该作者
全局:
say543 发表于 2018-12-11 15:48
跟我想的很像 我会用 hashmap

想请问一下,这样的空间复杂度是O(m*n), m是数组长度,n是最大的版本号,有更低空间复杂度的方法吗
回复

使用道具 举报

🔗
gegeyongfu 2019-3-3 10:51:40 | 只看该作者
全局:
say543 发表于 2018-12-11 15:48
跟我想的很像 我会用 hashmap

求教这get为啥是O(nlogn)。。。
回复

使用道具 举报

全局:
请问能解释清楚输入是什么东西吗?不同的version是什么意思?
回复

使用道具 举报

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

本版积分规则

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