一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1869|回复: 17
收起左侧

Google尴尬电面

[复制链接] |试试Instant~ |关注本帖
冰川之狐 发表于 2016-8-26 04:22:22 | 显示全部楼层 |阅读模式

2016(7-9月) 码农类 硕士 全职@Google - 网上海投 - 技术电面 |Other在职跳槽

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

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

x
我投了好几个software C++的职位。然后电话里和recruiter聊的时候他说看你embedded的背景不够强,要不刚好他这里有几个需要embedded的,可惜了。但是后来给我安排的电面的时候,发了一个sample job description过来,我一看里面写的是C,然后还是需要linux和embedded相关知识的。我就发邮件给recruiter问不是说是C++的吗,而且不是说embedded背景不强吗?他解释说这是general的job description,到时候还是用C++的,不过也会问linux和embedded的问题。既然这样说了那我只好照他说的准备了。 接着8月24号下午电面,感觉悲剧了。 . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
一上来接通电话就感觉声音不好,一个是因为他说话口音比较浑浊(不是三哥),第二个是他开speaker和我说,我说一句话还能听到很清晰的我的回声。我和他说声音有问题,于是他拿起电话和我说,感觉好多了。然后他先让我自己介绍technical背景,我就照简历逐个说了一下。不知道他什么时候有用speaker了,虽然回声没这么大,但是他说话我就不太能跟上了。我也不好意思和他继续抱怨声音问题,就只好硬着头皮继续。 题目是和hardware相关的,说有两个32位寄存器int32_t *hi和int32_t *lo,存放着clock。现在要用int64_t clock() fucntion读取realtime clock然后返回。我就问有没有传入参数,他说可以有,我就把hi和lo两个pointer放到了参数里面。然后问他输出的int64_t有没有什么特殊格式(我的意思是需不需要转换成HH:MM:SS的格式),他说没有(这题目关键不在这,所以他没做要求)。那我就写了下面的代码。 . 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
int64_t clock(int32_t *hi, int32_t *lo) {
     int64_t ans;
     ans = (*hi << 32) | *lo; return ans;
}
一开始紧张还忘了在pointer前面加*号,他提醒了一下我就加上了。 然后他问我,这样会有什么问题?我一下没搞清楚,于是他就引导我,说如果时间是3:59,然后你读取了min是59,然后再读取hour的时候是4,有什么问题?我说因为处理第一个register需要时间,所以处理第二个时候时间就不是当初的时间了。然后他问题怎么改,我就改了一下,成下面这样:
. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷int64_t clock(int32_t *hi,int32_t *lo) { . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
    int64_t ans;
    int32_t hiBits, loBits;
    hiBits = *hi;
    loBits = *lo;
    ans = (hiBits << 32) | loBits;
    return ans;
}. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴


写完了他说你这样只是缩短了之间的差距,但是还是有时间差,前后不consistent,怎么办? 我说能不能用mutex,interrupt或者同时read两个register什么的,他说都不行。然后我说能不能compensate,记录一下第一次读取hi所用的时间,然后在读取lo的时候加上?他反问我觉得这样准确吗?我想了一下觉得还是不太准确,就没往这方面想。后来纠结了很久还是想出其他什么办法,他说就这样吧,然后问我对他有什么问题,我说你问的这道题平常工作中会遇到吗?他就解释了一下。他解释完之后我问那遇到这样的情况你们一般怎么解决?他说这个他就不告诉我了,让我自己去想想,不算难的...然后就说两句挂电话了.... 感觉这个面试官态度比较一般,不太supportive,估计有可能是因为我不太能跟上他说话的原因,面了大概40分钟,感觉要悲剧了。
哪位大神帮忙解释一下到底要怎获取realtime的clock time?我确实没怎么做过硬件底层的,不太懂

. 1point3acres.com/bbs

评分

2

查看全部评分

 楼主| 冰川之狐 发表于 2016-9-1 03:44:01 | 显示全部楼层
follow up一下上次的面试:. more info on 1point3acres.com
今天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这么一说高兴坏了,再次在地里面发帖攒一下人品,求大家保佑&#128591;!
回复 支持 1 反对 0

使用道具 举报

say543 发表于 2016-8-26 13:22:15 | 显示全部楼层
好难啊 没什么除了compensate 的想法?
回复 支持 反对

使用道具 举报

666666fl 发表于 2016-8-26 14:00:55 | 显示全部楼层
难道所有的cpp岗位都要这样么
回复 支持 反对

使用道具 举报

ytsr 发表于 2016-8-26 14:27:10 | 显示全部楼层
读三次,时,分,时,如果第一次和第三的时不一样,就按照整点算。
比如  读的 3 40 3, 就是3:40
读的 3 59 4 就算 4:00

我也没啥经验,纯粹蒙的答案
回复 支持 反对

使用道具 举报

frozencookie 发表于 2016-8-26 14:58:55 | 显示全部楼层
我只能说你运气不好,进了奇怪的招聘组吧,谁说的c++工程师要embedded经验的...我工作N年都没写过底层的东西。
回复 支持 反对

使用道具 举报

头像被屏蔽
小老成都人 发表于 2016-8-26 15:09:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

leonardcohen 发表于 2016-8-26 15:36:11 | 显示全部楼层
.鐣欏璁哄潧-涓浜-涓夊垎鍦

硅谷有1年的 cs或software engineering 且是STEM吗? 纯属为了工作去读个书。
回复 支持 反对

使用道具 举报

 楼主| 冰川之狐 发表于 2016-8-26 21:14:35 | 显示全部楼层
666666fl 发表于 2016-8-26 14:00
难道所有的cpp岗位都要这样么

估计不是,我估计是recruiter看我简历上有些arduino的经验,就分到了这个组...但是我其实是想要纯software coding的职位的...
回复 支持 反对

使用道具 举报

 楼主| 冰川之狐 发表于 2016-8-26 21:18:17 | 显示全部楼层
ytsr 发表于 2016-8-26 14:27
读三次,时,分,时,如果第一次和第三的时不一样,就按照整点算。
比如  读的 3 40 3, 就是3:40
读的 3 ...

这样应该不行。首先存在寄存器里面的应该是millisecond甚至更小的单位,不能直接读取出时分秒。第二,你这样是人为产生误差,估计误差比直接读的还要大...
回复 支持 反对

使用道具 举报

 楼主| 冰川之狐 发表于 2016-8-26 21:19:13 | 显示全部楼层
frozencookie 发表于 2016-8-26 14:58
我只能说你运气不好,进了奇怪的招聘组吧,谁说的c++工程师要embedded经验的...我工作N年都没写过底层的东 ...

我估计是recruiter看我简历上有些arduino的经验,然后他刚好这个组需要人,就分到了这个组...但是我其实是想要纯software coding的职位的...
回复 支持 反对

使用道具 举报

 楼主| 冰川之狐 发表于 2016-8-26 21:33:38 | 显示全部楼层
在网上问了一下,有人给出了一个相对比较合理的solution,可以避免shift,也比较快。.1point3acres缃

int64_t clock(int64* time, int32_t* hi, int32_t* lo) {
      int32_t *hiBits = (int32_t*) &time;. 1point 3acres 璁哄潧
      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。至于误差,只要在设计 ...

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

使用道具 举报

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

祝好运啊!
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-4 03:48

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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