Redian新闻
>
G家电面,这回肯定挂了。附面经。
avatar
G家电面,这回肯定挂了。附面经。# JobHunting - 待字闺中
w*g
1
知识题:
C++和Java的区别
JVM怎么工作
其余的忘记了,也都是基本概念。
编程题:
大数加法
char* add(const char*a, const char *b){ }
原以为一面就会挂,结果面试官发善心让我过了。二面的面试官可能有事,过了半小时
才打来电话。面试官是国人大哥,英语没口音,但是他念我的名字按照中国人顺序念。
因为电话迟了半小时,所以整个面试只有半小时,所以只有一道编程题。题目很简单,
但我做的很差,因为可恨我很久不用C编程了,把strlen、strcpy都忘记了。我写C++的
string.length(),结果他说只能写C的。我说我忘了,其实我记的,但是一着急就写错
了,NND一个参数的基础函数我都能写错。
我写了一句
char *result = (char*)malloc( max( strlen(a), strlen(b) ) +2 );
我边写他就边找bug,我一行还没写完他就指出我的错误。看来以后要养成一遍成的习
惯。由此我也知道这次挂了,因为对方显然要求一遍就过。
这位面试官思路很活跃很快,从来不等我把话说完或者把某一块代码写完。另外比如我
回答C++和Java区别时提到java有virtual machine,他就转而问我JVM怎么工作的。看
来适应不同风格的面试官也是必需的,面试毕竟不是高考托福GRE那样的标准化考试 in
which 我们只需关系题目而不必关心风格。
avatar
p*2
2
用C语言面试就是找虐。
avatar
w*g
3
他直接把函数头写出来了,我就没法用java,我要用C++的string,他也不让。。。

【在 p*****2 的大作中提到】
: 用C语言面试就是找虐。
avatar
r*e
4
不明白你最后的问题
难道不是free(result)就行了,free自然知道该回收多少内存

【在 w********g 的大作中提到】
: 他直接把函数头写出来了,我就没法用java,我要用C++的string,他也不让。。。
avatar
w*g
5
函数的返回值就是return result啊

【在 r*******e 的大作中提到】
: 不明白你最后的问题
: 难道不是free(result)就行了,free自然知道该回收多少内存

avatar
p*2
6

看来LZ被黑了。

【在 w********g 的大作中提到】
: 他直接把函数头写出来了,我就没法用java,我要用C++的string,他也不让。。。
avatar
w*g
7
也不能说是被黑,毕竟题目不难,没有什么算法,所以就考查基本功了

【在 p*****2 的大作中提到】
:
: 看来LZ被黑了。

avatar
p*2
8

caller负责free

【在 w********g 的大作中提到】
: 函数的返回值就是return result啊
avatar
r*e
9
那为什么要在函数体里面free?
不应该是caller负责free么

【在 w********g 的大作中提到】
: 函数的返回值就是return result啊
avatar
p*2
10
char* add(const char*a, const char *b){}
这个signature定义本身就很naive。
avatar
w*g
11
刚刚回看了一遍代码,我终于明白他是什么意思了!
他是叫我free另一个东西!我一直以为他叫我free这个!
我已经把那个free过了,就纠结于怎么free这个,心想free返回值真是闻所未闻啊,原
来是误解面试官了。难怪他说了一句its fine就不继续了。

【在 r*******e 的大作中提到】
: 那为什么要在函数体里面free?
: 不应该是caller负责free么

avatar
w*g
12
请详细说说行吗?为什么naive啊?

【在 p*****2 的大作中提到】
: char* add(const char*a, const char *b){}
: 这个signature定义本身就很naive。

avatar
p*2
13

真正的C代码不会这么写的。

【在 w********g 的大作中提到】
: 请详细说说行吗?为什么naive啊?
avatar
w*g
14
那应该怎么写呢?
他的意思该不会是要我指出signature不能这么写吧?

【在 p*****2 的大作中提到】
:
: 真正的C代码不会这么写的。

avatar
q*8
15
这个。。。为啥必须用C写。。。。虽然比较简单,不过这不是找茬么
avatar
w*g
16
他问我喜欢用什么语言,我说C++和Java,于是他叫我用C写,哈哈,这大哥也挺幽默。
也不能说是找茬,应该是为了检查基本功。

【在 q******8 的大作中提到】
: 这个。。。为啥必须用C写。。。。虽然比较简单,不过这不是找茬么
avatar
p*2
17

一般都应该有返回值的。

【在 w********g 的大作中提到】
: 那应该怎么写呢?
: 他的意思该不会是要我指出signature不能这么写吧?

avatar
f*4
18
paipai
只要国人面。不管大陆的,台湾的,华裔美国人华裔加拿大人
必挂。。从来没有失手过。。
我真给跪了。。印度人都没有挂的这么狠
avatar
d*i
19
呵呵,看来google还真是发飙要真正会写C的人了,要不我说怎么Android的两个重要
bug拖了两年多至今没有fix,都是系统底层的,让我怀疑google里面是不是很多人真不
会C。

【在 w********g 的大作中提到】
: 他问我喜欢用什么语言,我说C++和Java,于是他叫我用C写,哈哈,这大哥也挺幽默。
: 也不能说是找茬,应该是为了检查基本功。

avatar
s*k
20
这个signature写的很标准啊,返回值就是char*,然后两个参数都加上const做保护避
免在函数中被修改

【在 p*****2 的大作中提到】
:
: 一般都应该有返回值的。

avatar
g*s
21
你马考到我我也得挂。malloc怎么拼都快忘了
avatar
J*9
22
What if you only know C?

【在 p*****2 的大作中提到】
: 用C语言面试就是找虐。
avatar
p*2
23

跪的可能性很大

【在 J**9 的大作中提到】
: What if you only know C?
avatar
p*2
24

出错怎么办?

【在 s********k 的大作中提到】
: 这个signature写的很标准啊,返回值就是char*,然后两个参数都加上const做保护避
: 免在函数中被修改

avatar
w*g
25
关键是我不理解他的考点,我猜测他其实是要考C语言和大数加法的方法。还好我的大
数加法写对了,他看了以后也说没bug。但是C语言那部分我跪的五体投地。

【在 g*******s 的大作中提到】
: 你马考到我我也得挂。malloc怎么拼都快忘了
avatar
s*k
26
出什么样的错?老大这是C,没有exception那一套,memory leak的话也用不着在
signature里面定义什么。无非就是malloc不行返回NULL而已,这个没问题。返回值定
义了char*,其他所有指针都会被typecast到char*(当然很难相信这个函数里面还能搞
出啥其他指针,除非弱智到不在malloc时候做cast,这样出来是void*)

【在 p*****2 的大作中提到】
:
: 出错怎么办?

avatar
p*2
27

哈哈。这样都行?你有用C做过项目吗?

【在 s********k 的大作中提到】
: 出什么样的错?老大这是C,没有exception那一套,memory leak的话也用不着在
: signature里面定义什么。无非就是malloc不行返回NULL而已,这个没问题。返回值定
: 义了char*,其他所有指针都会被typecast到char*(当然很难相信这个函数里面还能搞
: 出啥其他指针,除非弱智到不在malloc时候做cast,这样出来是void*)

avatar
s*k
28
你就别绕弯了,直说你觉得这个signature有啥问题,

【在 p*****2 的大作中提到】
:
: 哈哈。这样都行?你有用C做过项目吗?

avatar
f*o
29
我觉得c语言很不错啊

【在 p*****2 的大作中提到】
: 用C语言面试就是找虐。
avatar
f*4
30

就是返回值,一般是各种error
比如0是没错,1是XX错误,2是XX错误。
各种返回值,代表的意义不同
这样在一个大的系统里,可以比较容易track哪里出错了
我是初学者。。但我看的C toolkit里面,一般函数返回值都是定义好的做error
management的,buf用传参的方式传进函数。。
不过我看版上面经,有人面BB也遇到过在caller 里free的。估计面试的话也想考察一
下概念清不清楚

【在 s********k 的大作中提到】
: 你就别绕弯了,直说你觉得这个signature有啥问题,
avatar
J*9
31
1) For this signature
char* add(const char*a, const char *b)
It's definitely caller-free since you can't modify either one.
(allocation within the function)
(Or use a static buffer, but not recommended)
2) You can overwrite a with this, assuming a has enough spaces:
char* add(char*a, const char *b)
3) It's all caller's responsibility:
char* add(const char*a, const char *b, char *results)
Caller pre-allocates a buffer and passes in, of course, frees it later IF it
's from heap.
Choice 3) is the recommended way by the author of "expert C programming".
Choice 1) is actually used a lot in production systems.
avatar
s*k
32
你这个是把简单问题复杂化,这个函数就是个简单面试问题,又没有给你提供背景说复
杂的系统函数,里面出现的各种问题NULL返回值足够了。
去看看kernel里面比如strcpy的实现,这个函数复杂度和strcpy差不多。返回值用char
*没有问题。
至于你说的那种caller传buffer,理论上是不错,实际系统中大多数不会这么搞得复杂
,如果大系统的码农连函数里面做点malloc和free都搞不定,signature再好项目肯定
完蛋

【在 f********4 的大作中提到】
:
: 就是返回值,一般是各种error
: 比如0是没错,1是XX错误,2是XX错误。
: 各种返回值,代表的意义不同
: 这样在一个大的系统里,可以比较容易track哪里出错了
: 我是初学者。。但我看的C toolkit里面,一般函数返回值都是定义好的做error
: management的,buf用传参的方式传进函数。。
: 不过我看版上面经,有人面BB也遇到过在caller 里free的。估计面试的话也想考察一
: 下概念清不清楚

avatar
f*4
33

char
这。。我只是初学者。。确实现在写过的还没有碰到过caller里free的情况。。所以如
果是我面试里看到的话,可能会觉得比较confuse。。因为平常没有看到过。。
不过由此M onsite确实有人问到过C里error handle的问题。。我觉得知道的话还是挺
不错的
我觉得我现在做的系统不是很小吧,但是buffer都是传参的方式传进来的。。不好意思
。。不是故意找茬。。可能我见的太少了ORZ

【在 s********k 的大作中提到】
: 你这个是把简单问题复杂化,这个函数就是个简单面试问题,又没有给你提供背景说复
: 杂的系统函数,里面出现的各种问题NULL返回值足够了。
: 去看看kernel里面比如strcpy的实现,这个函数复杂度和strcpy差不多。返回值用char
: *没有问题。
: 至于你说的那种caller传buffer,理论上是不错,实际系统中大多数不会这么搞得复杂
: ,如果大系统的码农连函数里面做点malloc和free都搞不定,signature再好项目肯定
: 完蛋

avatar
d*x
34
caller里面free,我首先就想到strdup。。。

说复
复杂
肯定

【在 f********4 的大作中提到】
:
: char
: 这。。我只是初学者。。确实现在写过的还没有碰到过caller里free的情况。。所以如
: 果是我面试里看到的话,可能会觉得比较confuse。。因为平常没有看到过。。
: 不过由此M onsite确实有人问到过C里error handle的问题。。我觉得知道的话还是挺
: 不错的
: 我觉得我现在做的系统不是很小吧,但是buffer都是传参的方式传进来的。。不好意思
: 。。不是故意找茬。。可能我见的太少了ORZ

avatar
s*k
35
如果buffer都是传参的话,内存的处理就应该在caller而不是callee里面了,为什么会
没碰到这种情况?

【在 f********4 的大作中提到】
:
: char
: 这。。我只是初学者。。确实现在写过的还没有碰到过caller里free的情况。。所以如
: 果是我面试里看到的话,可能会觉得比较confuse。。因为平常没有看到过。。
: 不过由此M onsite确实有人问到过C里error handle的问题。。我觉得知道的话还是挺
: 不错的
: 我觉得我现在做的系统不是很小吧,但是buffer都是传参的方式传进来的。。不好意思
: 。。不是故意找茬。。可能我见的太少了ORZ

avatar
p*2
36

你对error handle的理解是正确的。

【在 f********4 的大作中提到】
:
: char
: 这。。我只是初学者。。确实现在写过的还没有碰到过caller里free的情况。。所以如
: 果是我面试里看到的话,可能会觉得比较confuse。。因为平常没有看到过。。
: 不过由此M onsite确实有人问到过C里error handle的问题。。我觉得知道的话还是挺
: 不错的
: 我觉得我现在做的系统不是很小吧,但是buffer都是传参的方式传进来的。。不好意思
: 。。不是故意找茬。。可能我见的太少了ORZ

avatar
M*t
37
g也一般啦,除了search,其他都不行

【在 w********g 的大作中提到】
: 知识题:
: C++和Java的区别
: JVM怎么工作
: 其余的忘记了,也都是基本概念。
: 编程题:
: 大数加法
: char* add(const char*a, const char *b){ }
: 原以为一面就会挂,结果面试官发善心让我过了。二面的面试官可能有事,过了半小时
: 才打来电话。面试官是国人大哥,英语没口音,但是他念我的名字按照中国人顺序念。
: 因为电话迟了半小时,所以整个面试只有半小时,所以只有一道编程题。题目很简单,

avatar
M*t
38
g也一般啦,除了search,其他都不行

【在 w********g 的大作中提到】
: 知识题:
: C++和Java的区别
: JVM怎么工作
: 其余的忘记了,也都是基本概念。
: 编程题:
: 大数加法
: char* add(const char*a, const char *b){ }
: 原以为一面就会挂,结果面试官发善心让我过了。二面的面试官可能有事,过了半小时
: 才打来电话。面试官是国人大哥,英语没口音,但是他念我的名字按照中国人顺序念。
: 因为电话迟了半小时,所以整个面试只有半小时,所以只有一道编程题。题目很简单,

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。