【面试总结】Google Interview Phone Interview

16 篇文章 0 订阅
11 篇文章 0 订阅

简单记一下今天的面试。

上来说自己叫穆罕穆德,好像不是个阿三,像是个中东的名字。

anyway,两分钟简单介绍一下自己,warm-up,这个没有想到啊。。。于是我说了说为啥来了这个学校,为啥喜欢programming,以后打算干啥,blabla,签证官都是回复good。

然后就开始technical了,让我做一个move 函数来move内存一个地址到另一个地址。这个我就开始懵了(看来刚才还木有warm up好)。我立即问,是int吗,是bit manupilation吗,他说都不是,再重复了一下题目,我还是很茫然,我寻思这不是hardware么,万万没想到啊!他又提示了一下,假设我有一个内存地址1,想把里面的内容move到内存地址2去,我说,那不就是用pointer么,他突然说:exactly!我恍然大悟原来是为了引出pointer,然后不由得自己也尴尬的笑了,我说大哥我真没反应过来,回头一想是应该考我pointer,因为是C++么。。。咋就想多了呢。。。

接下来我就开始写了,写成了new = old,然后他说这样会改变内存地址么?我说不会。。。我擦,真的是错的,于是我想了一下,写成了*new = *old,写完了检查完拼写他看了一会,没给正面回复,我反应过来在函数体内,应该pass pointer by value,于是加上了两个**。好吧,这回他终于说 good,我呼出了了一口气。

接下来,就问我要move a bunch of内存地址,该咋办,我说加一个number,然后他很高兴,于是我轻松的加上了for。之后,他说,这样会不会有问题,我说有啥问题。。他说“I'm telling you the codes may yield some part of the memory not copied." 我根本没想明白原来是有陷阱的。

下面跟他长时间的纠结在咋搞出问题的issue上了,我先是以为他要我做hand simulation,后来以为他要我生test cases,总之每一个是对的,猜了好久,他跟我说假设从1开始原地址,目标地址是4,但是我们要考皮5个内存地址,会发生什么呢。

我又恍然大明白了,原来是overlapping的错误,所以我想用tmp来缓存,他说如果不用呢?

我想了一想,说那么从后面往前copy,他说good,我就要写代码,他停止了我,接着问我,如果是目标地址在之前呢,meaning,目标开始在1,原地址开始在4,这样从5开始往前岂不是又要overlapping?我想是啊,这样的话那就从前往后copy好了。他说OKay,那你现在怎么办?

我想了一下说,那就用一个if-else判断呗。他说你怎么写if的条件,我想了想,我这时候跟他有一个短语上的歧义,于是我从新定义了一下overlapping的情况,这时候我脑子也清晰了,于是我说如果old_start + number < new_start,则没重叠,从前往后考,不然,从后往前,期待他的回复,他竟然说很好,你在making progress,那你开始写code吧。这时候我就放心大胆的写开了,然后写出来给他,他说非常好。

接下来就是有啥问题,我问了一下他平常的工作,然后就拜拜了。。

总结:

1,注重基础,连个pointer我想了大半天,没想到他考这么基本的。

2,要善于交流,学会用蹩脚的英语解释你的思路和code。

3,遇到发蒙的地方,他一般会给你提示,这是一个比较nice的interviewer。

以后还得多多做题,多多写code,真枪真刀的功夫不是盖的,不然人家让你扎个马步你就露馅了。

下面就是我写的最终的code:

char * ptr;

bool move(char ** ptr_old, char ** ptr_target, int number)

{

 if (ptr_old + number < ptr_target)

{

 for (int i = 0; i < number ; i++)

  {

   * (ptr_target + sizeof(char) * i) = * (ptr_old + sizeof(char) *i);

  }

}

else

{

for (int i = 0; i < number ; i++)

  {

  int offset = number- i - 1;

   * (ptr_target + offset) = * (ptr_old + offset);

  }

}

      return true;

}

//input:

char char1 = ‘a’;//memory address 0x1

char char2 = ‘b’;//memory address 0x2

int number = 3;

move ( char1, char2, number)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值