w********g 发帖数: 106 | 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 我们只需关系题目而不必关心风格。 |
p*****2 发帖数: 21240 | |
w********g 发帖数: 106 | 3 他直接把函数头写出来了,我就没法用java,我要用C++的string,他也不让。。。
【在 p*****2 的大作中提到】 : 用C语言面试就是找虐。
|
r*******e 发帖数: 7583 | 4 不明白你最后的问题
难道不是free(result)就行了,free自然知道该回收多少内存
【在 w********g 的大作中提到】 : 他直接把函数头写出来了,我就没法用java,我要用C++的string,他也不让。。。
|
w********g 发帖数: 106 | 5 函数的返回值就是return result啊
【在 r*******e 的大作中提到】 : 不明白你最后的问题 : 难道不是free(result)就行了,free自然知道该回收多少内存
|
p*****2 发帖数: 21240 | 6
看来LZ被黑了。
【在 w********g 的大作中提到】 : 他直接把函数头写出来了,我就没法用java,我要用C++的string,他也不让。。。
|
w********g 发帖数: 106 | 7 也不能说是被黑,毕竟题目不难,没有什么算法,所以就考查基本功了
【在 p*****2 的大作中提到】 : : 看来LZ被黑了。
|
p*****2 发帖数: 21240 | 8
caller负责free
【在 w********g 的大作中提到】 : 函数的返回值就是return result啊
|
r*******e 发帖数: 7583 | 9 那为什么要在函数体里面free?
不应该是caller负责free么
【在 w********g 的大作中提到】 : 函数的返回值就是return result啊
|
p*****2 发帖数: 21240 | 10 char* add(const char*a, const char *b){}
这个signature定义本身就很naive。 |
|
|
w********g 发帖数: 106 | 11 刚刚回看了一遍代码,我终于明白他是什么意思了!
他是叫我free另一个东西!我一直以为他叫我free这个!
我已经把那个free过了,就纠结于怎么free这个,心想free返回值真是闻所未闻啊,原
来是误解面试官了。难怪他说了一句its fine就不继续了。
【在 r*******e 的大作中提到】 : 那为什么要在函数体里面free? : 不应该是caller负责free么
|
w********g 发帖数: 106 | 12 请详细说说行吗?为什么naive啊?
【在 p*****2 的大作中提到】 : char* add(const char*a, const char *b){} : 这个signature定义本身就很naive。
|
p*****2 发帖数: 21240 | 13
真正的C代码不会这么写的。
【在 w********g 的大作中提到】 : 请详细说说行吗?为什么naive啊?
|
w********g 发帖数: 106 | 14 那应该怎么写呢?
他的意思该不会是要我指出signature不能这么写吧?
【在 p*****2 的大作中提到】 : : 真正的C代码不会这么写的。
|
q******8 发帖数: 848 | 15 这个。。。为啥必须用C写。。。。虽然比较简单,不过这不是找茬么 |
w********g 发帖数: 106 | 16 他问我喜欢用什么语言,我说C++和Java,于是他叫我用C写,哈哈,这大哥也挺幽默。
也不能说是找茬,应该是为了检查基本功。
【在 q******8 的大作中提到】 : 这个。。。为啥必须用C写。。。。虽然比较简单,不过这不是找茬么
|
p*****2 发帖数: 21240 | 17
一般都应该有返回值的。
【在 w********g 的大作中提到】 : 那应该怎么写呢? : 他的意思该不会是要我指出signature不能这么写吧?
|
f********4 发帖数: 988 | 18 paipai
只要国人面。不管大陆的,台湾的,华裔美国人华裔加拿大人
必挂。。从来没有失手过。。
我真给跪了。。印度人都没有挂的这么狠 |
d****i 发帖数: 4809 | 19 呵呵,看来google还真是发飙要真正会写C的人了,要不我说怎么Android的两个重要
bug拖了两年多至今没有fix,都是系统底层的,让我怀疑google里面是不是很多人真不
会C。
【在 w********g 的大作中提到】 : 他问我喜欢用什么语言,我说C++和Java,于是他叫我用C写,哈哈,这大哥也挺幽默。 : 也不能说是找茬,应该是为了检查基本功。
|
s********k 发帖数: 6180 | 20 这个signature写的很标准啊,返回值就是char*,然后两个参数都加上const做保护避
免在函数中被修改
【在 p*****2 的大作中提到】 : : 一般都应该有返回值的。
|
|
|
g*******s 发帖数: 2963 | 21 你马考到我我也得挂。malloc怎么拼都快忘了 |
J**9 发帖数: 835 | 22 What if you only know C?
【在 p*****2 的大作中提到】 : 用C语言面试就是找虐。
|
p*****2 发帖数: 21240 | 23
跪的可能性很大
【在 J**9 的大作中提到】 : What if you only know C?
|
p*****2 发帖数: 21240 | 24
出错怎么办?
【在 s********k 的大作中提到】 : 这个signature写的很标准啊,返回值就是char*,然后两个参数都加上const做保护避 : 免在函数中被修改
|
w********g 发帖数: 106 | 25 关键是我不理解他的考点,我猜测他其实是要考C语言和大数加法的方法。还好我的大
数加法写对了,他看了以后也说没bug。但是C语言那部分我跪的五体投地。
【在 g*******s 的大作中提到】 : 你马考到我我也得挂。malloc怎么拼都快忘了
|
s********k 发帖数: 6180 | 26 出什么样的错?老大这是C,没有exception那一套,memory leak的话也用不着在
signature里面定义什么。无非就是malloc不行返回NULL而已,这个没问题。返回值定
义了char*,其他所有指针都会被typecast到char*(当然很难相信这个函数里面还能搞
出啥其他指针,除非弱智到不在malloc时候做cast,这样出来是void*)
【在 p*****2 的大作中提到】 : : 出错怎么办?
|
p*****2 发帖数: 21240 | 27
哈哈。这样都行?你有用C做过项目吗?
【在 s********k 的大作中提到】 : 出什么样的错?老大这是C,没有exception那一套,memory leak的话也用不着在 : signature里面定义什么。无非就是malloc不行返回NULL而已,这个没问题。返回值定 : 义了char*,其他所有指针都会被typecast到char*(当然很难相信这个函数里面还能搞 : 出啥其他指针,除非弱智到不在malloc时候做cast,这样出来是void*)
|
s********k 发帖数: 6180 | 28 你就别绕弯了,直说你觉得这个signature有啥问题,
【在 p*****2 的大作中提到】 : : 哈哈。这样都行?你有用C做过项目吗?
|
f*o 发帖数: 654 | 29 我觉得c语言很不错啊
【在 p*****2 的大作中提到】 : 用C语言面试就是找虐。
|
f********4 发帖数: 988 | 30
就是返回值,一般是各种error
比如0是没错,1是XX错误,2是XX错误。
各种返回值,代表的意义不同
这样在一个大的系统里,可以比较容易track哪里出错了
我是初学者。。但我看的C toolkit里面,一般函数返回值都是定义好的做error
management的,buf用传参的方式传进函数。。
不过我看版上面经,有人面BB也遇到过在caller 里free的。估计面试的话也想考察一
下概念清不清楚
【在 s********k 的大作中提到】 : 你就别绕弯了,直说你觉得这个signature有啥问题,
|
|
|
J**9 发帖数: 835 | 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. |
s********k 发帖数: 6180 | 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的。估计面试的话也想考察一 : 下概念清不清楚
|
f********4 发帖数: 988 | 33
char
这。。我只是初学者。。确实现在写过的还没有碰到过caller里free的情况。。所以如
果是我面试里看到的话,可能会觉得比较confuse。。因为平常没有看到过。。
不过由此M onsite确实有人问到过C里error handle的问题。。我觉得知道的话还是挺
不错的
我觉得我现在做的系统不是很小吧,但是buffer都是传参的方式传进来的。。不好意思
。。不是故意找茬。。可能我见的太少了ORZ
【在 s********k 的大作中提到】 : 你这个是把简单问题复杂化,这个函数就是个简单面试问题,又没有给你提供背景说复 : 杂的系统函数,里面出现的各种问题NULL返回值足够了。 : 去看看kernel里面比如strcpy的实现,这个函数复杂度和strcpy差不多。返回值用char : *没有问题。 : 至于你说的那种caller传buffer,理论上是不错,实际系统中大多数不会这么搞得复杂 : ,如果大系统的码农连函数里面做点malloc和free都搞不定,signature再好项目肯定 : 完蛋
|
d**********x 发帖数: 4083 | 34 caller里面free,我首先就想到strdup。。。
说复
复杂
肯定
【在 f********4 的大作中提到】 : : char : 这。。我只是初学者。。确实现在写过的还没有碰到过caller里free的情况。。所以如 : 果是我面试里看到的话,可能会觉得比较confuse。。因为平常没有看到过。。 : 不过由此M onsite确实有人问到过C里error handle的问题。。我觉得知道的话还是挺 : 不错的 : 我觉得我现在做的系统不是很小吧,但是buffer都是传参的方式传进来的。。不好意思 : 。。不是故意找茬。。可能我见的太少了ORZ
|
s********k 发帖数: 6180 | 35 如果buffer都是传参的话,内存的处理就应该在caller而不是callee里面了,为什么会
没碰到这种情况?
【在 f********4 的大作中提到】 : : char : 这。。我只是初学者。。确实现在写过的还没有碰到过caller里free的情况。。所以如 : 果是我面试里看到的话,可能会觉得比较confuse。。因为平常没有看到过。。 : 不过由此M onsite确实有人问到过C里error handle的问题。。我觉得知道的话还是挺 : 不错的 : 我觉得我现在做的系统不是很小吧,但是buffer都是传参的方式传进来的。。不好意思 : 。。不是故意找茬。。可能我见的太少了ORZ
|
p*****2 发帖数: 21240 | 36
你对error handle的理解是正确的。
【在 f********4 的大作中提到】 : : char : 这。。我只是初学者。。确实现在写过的还没有碰到过caller里free的情况。。所以如 : 果是我面试里看到的话,可能会觉得比较confuse。。因为平常没有看到过。。 : 不过由此M onsite确实有人问到过C里error handle的问题。。我觉得知道的话还是挺 : 不错的 : 我觉得我现在做的系统不是很小吧,但是buffer都是传参的方式传进来的。。不好意思 : 。。不是故意找茬。。可能我见的太少了ORZ
|
M********t 发帖数: 5032 | 37 g也一般啦,除了search,其他都不行
【在 w********g 的大作中提到】 : 知识题: : C++和Java的区别 : JVM怎么工作 : 其余的忘记了,也都是基本概念。 : 编程题: : 大数加法 : char* add(const char*a, const char *b){ } : 原以为一面就会挂,结果面试官发善心让我过了。二面的面试官可能有事,过了半小时 : 才打来电话。面试官是国人大哥,英语没口音,但是他念我的名字按照中国人顺序念。 : 因为电话迟了半小时,所以整个面试只有半小时,所以只有一道编程题。题目很简单,
|
M********t 发帖数: 5032 | 38 g也一般啦,除了search,其他都不行
【在 w********g 的大作中提到】 : 知识题: : C++和Java的区别 : JVM怎么工作 : 其余的忘记了,也都是基本概念。 : 编程题: : 大数加法 : char* add(const char*a, const char *b){ } : 原以为一面就会挂,结果面试官发善心让我过了。二面的面试官可能有事,过了半小时 : 才打来电话。面试官是国人大哥,英语没口音,但是他念我的名字按照中国人顺序念。 : 因为电话迟了半小时,所以整个面试只有半小时,所以只有一道编程题。题目很简单,
|