📣 独立日限时特惠: VIP通行证立减$68
12
返回列表 发新帖
楼主: 冰川之狐
跳转到指定楼层
上一主题 下一主题
收起左侧

Google尴尬电面

🔗
 楼主| 冰川之狐 2016-8-26 21:33:38 | 只看该作者
全局:
在网上问了一下,有人给出了一个相对比较合理的solution,可以避免shift,也比较快。

int64_t clock(int64* time, int32_t* hi, int32_t* lo) {
      int32_t *hiBits = (int32_t*) &time;
      int32_t *loBits = ((int32_t*) &time) + 1;
      (*hiBits) = (*hi);
      (*loBits) = (*lo);
      return *time;
}
回复

使用道具 举报

🔗
ynos1155 2016-8-26 22:57:07 | 只看该作者
全局:
冰川之狐 发表于 2016-8-26 21:33
在网上问了一下,有人给出了一个相对比较合理的solution,可以避免shift,也比较快。

int64_t clock(int ...

感觉这个答案和lz第二个解差不多呢:
1    hiBits = *hi;
2    loBits = *lo;
3    ans = (hiBits << 32) | loBits;
如果面试官指的“时间差”是1和2之间的话。当1执行完,如果突然来一个interruption把这个程序挂起,回来再执行2,还是会有时间差。单独执行3耗时应该远小于millisecond,是不是可以忽略不计呢。但是这两个reg不能同时读取,实在是费解。网上的答案好像没有必要把time作为parameter传进来这个函数,直接在clock函数里面declare一个time就可以,反正最后要return的。
回复

使用道具 举报

🔗
 楼主| 冰川之狐 2016-8-26 23:20:22 | 只看该作者
全局:
ynos1155 发表于 2016-8-26 22:57
感觉这个答案和lz第二个解差不多呢:
1    hiBits = *hi;
2    loBits = *lo;

你说的有一定道理,我当时面试的时候也是这么想的...至于bit shift的时间成本的话我就不太清楚了。
不过好像这个问题还可以有其他一种解释。比如说lo就像second,hi就像min或者hour,lo变化快而hi变化慢,所以应该先读取lo然后再读取hi。或者读取hi,接着读取lo,然后再次读取hi与之前的hi对比看看是不是不同的,如果是不同的那就在此读取lo的值,这样的话有可能最终结果不是最终想要的第一次读取的时间,但是至少保证了相对的consistency。
回复

使用道具 举报

🔗
ytsr 2016-8-27 00:59:08 | 只看该作者
全局:
冰川之狐 发表于 2016-8-26 21:18
这样应该不行。首先存在寄存器里面的应该是millisecond甚至更小的单位,不能直接读取出时分秒。第二,你 ...

我那是举个例子而已,这种设计主要是针对读的间隙中的跳变。只要没有跳变就用读的值,有跳变就用修改的值。不管怎么读误差都小到忽略不计了,但是跳变的误差大了一个单位。

补充内容 (2016-8-27 01:18):
不对,跳变那不是误差,是错误。
回复

使用道具 举报

🔗
ytsr 2016-8-27 01:03:46 | 只看该作者
全局:
冰川之狐 发表于 2016-8-26 21:18
这样应该不行。首先存在寄存器里面的应该是millisecond甚至更小的单位,不能直接读取出时分秒。第二,你 ...

而且面试官举例子都举到这么明确的份儿了,三次读取至少能解决他例子中的那个bug。至于误差,只要在设计要求范围内就行,至少不能是错误。面试官那个corner case把3:59读成4:59那就不是误差的事儿了
回复

使用道具 举报

🔗
 楼主| 冰川之狐 2016-8-27 02:04:47 | 只看该作者
全局:
ytsr 发表于 2016-8-27 01:03
而且面试官举例子都举到这么明确的份儿了,三次读取至少能解决他例子中的那个bug。至于误差,只要在设计 ...

恩, 你说的有道理。当时面试的时候没有往这方面想,只想着怎么解决误差的问题,而他举的那个例子应该指的是错误而不是误差,现在想起来确实没想的这么复杂。
回复

使用道具 举报

🔗
 楼主| 冰川之狐 2016-9-1 03:44:01 | 只看该作者
全局:
follow up一下上次的面试:
今天recruiter打电话过来,先问我感觉面试怎么样,我就把我面试的时候出现的noise的问题说了,说我因为noise的问题没能catch up面试官的point,然后面试的题目是偏向embedded的,不是data structure和algorithm,不是我的强项,所以感觉面试不太好。然后recruiter听了之后说面试的人给他的feedback也差不多,主要是说communication有问题,需要重复多次,然后我没明白问题是什么,决定不move on。recruiter看了feedback觉得和我聊的时候没什么communication problem,所以来问问我,然后说可能把我分到不太合适的embedded的组了,决定给我再set up一轮电面,关于data structure和algorithm的。
我本来都不抱希望了,今天听recruiter这么一说高兴坏了,再次在地里面发帖攒一下人品,求大家保佑🙏!
回复

使用道具 举报

🔗
BlackPen 2016-9-7 06:12:50 | 只看该作者
全局:
冰川之狐 发表于 2016-9-1 03:44
follow up一下上次的面试:
今天recruiter打电话过来,先问我感觉面试怎么样,我就把我面试的时候出现的no ...

祝好运啊!
回复

使用道具 举报

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

本版积分规则

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