由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 放c code求老师傅指教
相关主题
请问这样写程序错了吗?这个Strategy design pattern的例子为什么人为得弄得这么复杂?
问一个memory allocate/release的问题贡献两个题
请教大家一道关于c++的面试题能不能讨论一下kmp
G家电面,这回肯定挂了。附面经。bloomberg onsite & offer
求帮忙看看哪里有问题!问一个精华区里的题目
interleaved string菜鸟求救 请大家看看我的代码有没有问题
题目: string pattern matching w/ wildcard (.*)请问strcpy()和memcpy()的写法问题
也说两个面试题how to access a const char array in a function
相关话题的讨论汇总
话题: str话题: char话题: astring话题: ab话题: src
进入JobHunting版参与讨论
1 (共1页)
s*****e
发帖数: 115
1
update:
谢谢板上各位老师傅,现在我知道是我的问题了,“without using a second string
”我没有理解好,感谢大家赐教,我继续努力!
刚刚解决身份问题,男,找工作和leetcode都有一段时间了,最近碰到这家公司的一个
面试
http://stackoverflow.com/jobs/115265/software-engineer-networking-schweitzer-engineering?searchTerm=SEL&offset=3&sort=s
问的问题和glassdoor一样,所以我也准备了一下那个unions的答案和例子,以前没用
这个:
Interview Questions
1) What is in the software requirements?
2) What is mutex and semaphore?
3) When to use unions?
4) What are the pros and cons of using assembly in embedded systems?
5) Programming test: Write a function that will operate on a C-string and
convert all instances of "AB" to "C" without using a second string for
temporary storage.
Use the following function signature:
void translate(char *str)
So for example:
char astring[] = "helloABworld";
translate(astring);
// Now astring holds "helloCworld";
Your function should handle strings of arbitrary length. If you have any
questions about the problem, make reasonable assumptions and state your
assumptions in your reply.
正好我最近在用C的IPC 写一个server,client和cache的file transfer,主要用message
queue和named pipe做server和cache的sync, shared memory来communicate file,
所以30 分钟写这个题目,我以为无压力。
下面是我发回去的code:
#include
#include
#include
void helper(char *src, char *str, char *rep) {
int count = 0;
char *fre = strdup(src);
char *new = fre;
while (*new) {
count++;
new ++;
}
free(fre);
char buf[count];
char *p = strstr(src, str);
do {
if (p) {
memset(buf, '\0', count * sizeof(char));
if (src == p) {
strcpy(buf, rep);
strcat(buf, p + strlen(str));
} else {
strncpy(buf, src, strlen(src) - strlen(p));
strcat(buf, rep);
strcat(buf, p + strlen(str));
}
memset(src, '\0', strlen(src));
strcpy(src, buf);
}
} while (p && (p = strstr(src, str)));
}
void translate(char *str) { helper(str, "AB", "C"); }
int main(void) {
// assuming replacing all the "AB" with 'C',
// it could be replacing the first ,or Nth occurrence of "AB" with C only
char astring[] = "helloABworld";
// helper(astring, "AB", "C");
translate(astring);
puts(astring);
// char astring1[] = "helloABddABworld";
// helper(astring, "AB", "C");
// translate(astring1);
// puts(astring1);
return 0;
}
这个是我用来检查的script,可以跑,没看到有memory leak:
gcc -Wall --std=gnu99 -g3 -Wno-format-security -fno-omit-frame-pointer -o
sel sel.c
valgrind --track-origins=yes --leak-check=full --show-leak-kinds=all ./sel
就是这样,我也被rej,周四下午发的code,今天周一10点收到rej。那天面试我的是一
个刚WSU毕业的小白HR intern,当时就觉得不对劲。打电话过来的时候还迟到20分钟,
没想到我就这样被她拿来练手了.
我以前在数学系写数值模拟的code,fortran,bash python用得比较多,c也用一点,做
的东西太偏向Government和NASA的基础研究需要,不好找工作就转行了

毫无疑问我只是一个新手,写出来的c估计有不合规范的地方,可是就SEL这个code 和
position requirement,不至于被这样据吧?
以前也不是没有收到rej,rej不给feedback也很正常是可以接受的,但是这次被这样一
个小白HR intern耍了,真的很不爽。
新手虚心请教板上各位老师傅,我写这个code是不是哪里有大问题我没有找出来?外国
人是不是投小公司的职位一般都没戏,应该专心刷leetcode?
a*******n
发帖数: 41
2
Your uses extra memory in your code but the requirement is without extra
memory.
l****u
发帖数: 1764
3
without using a second string for temporary storage.
你的code又是strdup又是char buf[count],用了太多extra storage吧
l********i
发帖数: 52
4
Frankly speaking, when I see your code, I can tell the code is written by
green hand, for example: use puts not printf... You use too many built-in
functions for string manipulation. Actually, it is a very straight-forward
algorithm.
It is hard to say specifically, but if I am the interviewer, I will deny the
application.
l****u
发帖数: 1764
5
如果是我就会这么写:
void translate(char *str)
{
// edge case
if (str == NULL || strlen(str) < 2)
return;
// replace 'AB' to 'C0'
int len = strlen(str);
for (int i = 0; i if (str[i] == 'A' && str[i+1] == 'B') {
str[i] = 'C';
str[i+1] = 0;
}
}
// remove all '0'
int i = 0, j = 0;
while (j < len) {
if (str[j] == 0)
j++;
else {
str[i++] = str[j++];
}
}
// trim the tail
str[i] = 0;
}
e*******o
发帖数: 4654
6
你是新手,人家招老手,据你也说不上啥。
你基础是有了,可要课不要。
继续找吧,碰到愿意要新手的你就可以了。
s*****e
发帖数: 115
7
谢谢您指出来这个问题,是当时我没注意到这一点,我当时应该shifting来做

【在 a*******n 的大作中提到】
: Your uses extra memory in your code but the requirement is without extra
: memory.

s*****e
发帖数: 115
8
是我的错,当时没有没细看这个extra storage的要求,30分钟求快做出来,谢谢您指
出来这个问题

【在 l****u 的大作中提到】
: without using a second string for temporary storage.
: 你的code又是strdup又是char buf[count],用了太多extra storage吧

s*****e
发帖数: 115
9
谢谢你,是我的错,我应该端正态度,继续努力

【在 e*******o 的大作中提到】
: 你是新手,人家招老手,据你也说不上啥。
: 你基础是有了,可要课不要。
: 继续找吧,碰到愿意要新手的你就可以了。

s*****e
发帖数: 115
10
谢谢你赐教,看完你这个code,我非常认同大家的评论,我既没有注意到extra memory
,不该用built-in function的地方我用了,该用strlen我却没用搞了一个strdup出来

【在 l****u 的大作中提到】
: 如果是我就会这么写:
: void translate(char *str)
: {
: // edge case
: if (str == NULL || strlen(str) < 2)
: return;
: // replace 'AB' to 'C0'
: int len = strlen(str);
: for (int i = 0; i : if (str[i] == 'A' && str[i+1] == 'B') {

相关主题
interleaved string这个Strategy design pattern的例子为什么人为得弄得这么复杂?
题目: string pattern matching w/ wildcard (.*)贡献两个题
也说两个面试题能不能讨论一下kmp
进入JobHunting版参与讨论
s*****r
发帖数: 43070
11
最简单的做法,scan 一次string,两个pointer。一个当前,一个当前可写,如果当前
不是A而两个pointer所指的值不同,写入当前可写,如果相同则不写。
如果当前是A,lookahead for B,如果不是B,把A写入当前可写入。如果是B,当前可
写为C。可写入每次进一,当前进一或者二,直到当前为末尾,可写改为末尾
现在刷题刷的,码农的基本修养不行啊

string

【在 s*****e 的大作中提到】
: update:
: 谢谢板上各位老师傅,现在我知道是我的问题了,“without using a second string
: ”我没有理解好,感谢大家赐教,我继续努力!
: 刚刚解决身份问题,男,找工作和leetcode都有一段时间了,最近碰到这家公司的一个
: 面试
: http://stackoverflow.com/jobs/115265/software-engineer-networking-schweitzer-engineering?searchTerm=SEL&offset=3&sort=s
: 问的问题和glassdoor一样,所以我也准备了一下那个unions的答案和例子,以前没用
: 这个:
: Interview Questions
: 1) What is in the software requirements?

f****n
发帖数: 399
12
void translate(char *str)
{
char *s, *d;
if (!str)
return;
d = s = str;
while (*s) {
if (*s == 'A' && *(s+1) == 'B') {
*d++ = 'C';
s += 2;
} else {
*d++ = *s++;
}
}
*d = 0;
}
l**g
发帖数: 133
13
从各位的答案中可以看出即便一道题,每个答案之间还是有差距的。所以即便面试感觉
良好,也不能代表什么,不是所有人都想着黑你的
O******i
发帖数: 269
14
*(s+1)未作越界检查?

【在 f****n 的大作中提到】
: void translate(char *str)
: {
: char *s, *d;
: if (!str)
: return;
: d = s = str;
: while (*s) {
: if (*s == 'A' && *(s+1) == 'B') {
: *d++ = 'C';
: s += 2;

O******i
发帖数: 269
15
额,假定str是 '\0' 结束的字符串应该是可行的。
f****n
发帖数: 399
16
是的呢^_^
[在 Otpisani (黑名单上的人) 的大作中提到:]
:额,假定str是 '\0' 结束的字符串应该是可行的。
l****u
发帖数: 1764
17
java这样写(当然不是指针,而是相对应的数组)会报错indexoutofbound,c貌似没有
啥问题

:额,假定str是 '\0' 结束的字符串应该是可行的。

【在 O******i 的大作中提到】
: 额,假定str是 '\0' 结束的字符串应该是可行的。
j********8
发帖数: 136
18
把ab换成c,凭直觉就能做的,根本不需要算法,注意一下边界条件就可以,你写这么一
堆乱七八糟的,我如果是面试官,扫一眼就剧了

string

【在 s*****e 的大作中提到】
: update:
: 谢谢板上各位老师傅,现在我知道是我的问题了,“without using a second string
: ”我没有理解好,感谢大家赐教,我继续努力!
: 刚刚解决身份问题,男,找工作和leetcode都有一段时间了,最近碰到这家公司的一个
: 面试
: http://stackoverflow.com/jobs/115265/software-engineer-networking-schweitzer-engineering?searchTerm=SEL&offset=3&sort=s
: 问的问题和glassdoor一样,所以我也准备了一下那个unions的答案和例子,以前没用
: 这个:
: Interview Questions
: 1) What is in the software requirements?

T*******e
发帖数: 4928
19
没仔细看。应该是replace space的变形。
Leetcode, cc150等等都有这题。

string

【在 s*****e 的大作中提到】
: update:
: 谢谢板上各位老师傅,现在我知道是我的问题了,“without using a second string
: ”我没有理解好,感谢大家赐教,我继续努力!
: 刚刚解决身份问题,男,找工作和leetcode都有一段时间了,最近碰到这家公司的一个
: 面试
: http://stackoverflow.com/jobs/115265/software-engineer-networking-schweitzer-engineering?searchTerm=SEL&offset=3&sort=s
: 问的问题和glassdoor一样,所以我也准备了一下那个unions的答案和例子,以前没用
: 这个:
: Interview Questions
: 1) What is in the software requirements?

d********f
发帖数: 43471
20
你这code太吓人了,就算条件看明白了,你这种写法who敢review阿

string

【在 s*****e 的大作中提到】
: update:
: 谢谢板上各位老师傅,现在我知道是我的问题了,“without using a second string
: ”我没有理解好,感谢大家赐教,我继续努力!
: 刚刚解决身份问题,男,找工作和leetcode都有一段时间了,最近碰到这家公司的一个
: 面试
: http://stackoverflow.com/jobs/115265/software-engineer-networking-schweitzer-engineering?searchTerm=SEL&offset=3&sort=s
: 问的问题和glassdoor一样,所以我也准备了一下那个unions的答案和例子,以前没用
: 这个:
: Interview Questions
: 1) What is in the software requirements?

相关主题
bloomberg onsite & offer请问strcpy()和memcpy()的写法问题
问一个精华区里的题目how to access a const char array in a function
菜鸟求救 请大家看看我的代码有没有问题两道面试题,请大家说说看法
进入JobHunting版参与讨论
g**********y
发帖数: 423
21
最后需要free(d+1)后面的内存?

【在 f****n 的大作中提到】
: void translate(char *str)
: {
: char *s, *d;
: if (!str)
: return;
: d = s = str;
: while (*s) {
: if (*s == 'A' && *(s+1) == 'B') {
: *d++ = 'C';
: s += 2;

f****n
发帖数: 399
22
不需要,也不能从后面free,只能从头free,内存头在最前面。
也不能realloc, 因为入参是指针,不是指针的指针,改了外面就没法free了。

【在 g**********y 的大作中提到】
: 最后需要free(d+1)后面的内存?
l****u
发帖数: 1764
23
都没有alloc 内存,为什么要free啊?就因为AB换成C节省了几个bytes?

【在 g**********y 的大作中提到】
: 最后需要free(d+1)后面的内存?
c******3
发帖数: 6509
24
看了半天题目,没看见不让用strlen啊,你还用strdup去分配内存来计算count
“without using a second string for temporary storage. ”,你以为char buf[
count]就不算string了?
最后的拷贝最狠,清空整个src[],然后做strcpy,难道不知道strcpy带结尾0赋值能力
?完全是多余的运算
本来一个简单strstr+memmove搞定的小程序,你自己看看用了多少字符串操作,而且中
间src重来不移动,每次循环都是从头扫描到尾部,不挂就没天理了...
s*****r
发帖数: 43070
25
然,咋能瞎free呢,没有地址对齐,会crash。谁知道进来的指针是stack上的还是heap
上的
这年头C不行了,指针的修养也不行了,应该只有老码农还知道啥叫指针

【在 f****n 的大作中提到】
: 不需要,也不能从后面free,只能从头free,内存头在最前面。
: 也不能realloc, 因为入参是指针,不是指针的指针,改了外面就没法free了。

l****u
发帖数: 1764
26
我记得一位老马工的名言是“有多少malloc就有多少free”,所以没有malloc直接free
,为了省这几个字节程序都要crash

heap

【在 s*****r 的大作中提到】
: 然,咋能瞎free呢,没有地址对齐,会crash。谁知道进来的指针是stack上的还是heap
: 上的
: 这年头C不行了,指针的修养也不行了,应该只有老码农还知道啥叫指针

f****n
发帖数: 399
27
是阿,招人的地方也少,会的人也不多了。

heap

【在 s*****r 的大作中提到】
: 然,咋能瞎free呢,没有地址对齐,会crash。谁知道进来的指针是stack上的还是heap
: 上的
: 这年头C不行了,指针的修养也不行了,应该只有老码农还知道啥叫指针

s******e
发帖数: 1751
28
这个,基本功还是有一定问题的。

【在 e*******o 的大作中提到】
: 你是新手,人家招老手,据你也说不上啥。
: 你基础是有了,可要课不要。
: 继续找吧,碰到愿意要新手的你就可以了。

s*****e
发帖数: 115
29
这个确实写得很差,可是leetcode不刷,感觉没有希望啊。投了3个月,小公司基本不
回,大公司有面试leetcode不过关。之前主要用python面试,我是不是应该改用c++? c
在leetcode上很少有讨论的,c++巨多,毕竟考code challenge的公司,目前为止都是
考c或者c++

【在 s*****r 的大作中提到】
: 最简单的做法,scan 一次string,两个pointer。一个当前,一个当前可写,如果当前
: 不是A而两个pointer所指的值不同,写入当前可写,如果相同则不写。
: 如果当前是A,lookahead for B,如果不是B,把A写入当前可写入。如果是B,当前可
: 写为C。可写入每次进一,当前进一或者二,直到当前为末尾,可写改为末尾
: 现在刷题刷的,码农的基本修养不行啊
:
: string

f****n
发帖数: 399
30
第一选择是Java吧

c

【在 s*****e 的大作中提到】
: 这个确实写得很差,可是leetcode不刷,感觉没有希望啊。投了3个月,小公司基本不
: 回,大公司有面试leetcode不过关。之前主要用python面试,我是不是应该改用c++? c
: 在leetcode上很少有讨论的,c++巨多,毕竟考code challenge的公司,目前为止都是
: 考c或者c++

相关主题
问个题?问一个memory allocate/release的问题
C++ 面试题请教大家一道关于c++的面试题
请问这样写程序错了吗?G家电面,这回肯定挂了。附面经。
进入JobHunting版参与讨论
w***x
发帖数: 105
31
这个“char buf[count];”最要命,count稍微大一点stack就乱掉了,然后程序就直接
crash了
j********g
发帖数: 61
32
审题不仔细。
看代码感觉你的思路还不是programming的思路。个人建议。把《The C Programming
Language》过一遍,再回过头来看看你的这些C代码就知道该怎么提高了。
如果你不是一定要做embedded和distributed system,还是挑个java,python吧。要招C
programmer的肯定需要熟悉底层。

string

【在 s*****e 的大作中提到】
: update:
: 谢谢板上各位老师傅,现在我知道是我的问题了,“without using a second string
: ”我没有理解好,感谢大家赐教,我继续努力!
: 刚刚解决身份问题,男,找工作和leetcode都有一段时间了,最近碰到这家公司的一个
: 面试
: http://stackoverflow.com/jobs/115265/software-engineer-networking-schweitzer-engineering?searchTerm=SEL&offset=3&sort=s
: 问的问题和glassdoor一样,所以我也准备了一下那个unions的答案和例子,以前没用
: 这个:
: Interview Questions
: 1) What is in the software requirements?

s*****e
发帖数: 115
33
什么叫stack乱掉?mq_send()里面也是有一个char *的parameter,如果不用char []
statically allocate memory,用malloc/caaloc么?这样的话后面要free,这是比较
好的做法么?好在哪里?
有些时候这个char*会pass 到人家implement的function,pass之后可能不好free,比
如server side。
一般server side能做到memory leak free 么?还是很多时候只能做到fixed amount
of memory leak?

【在 w***x 的大作中提到】
: 这个“char buf[count];”最要命,count稍微大一点stack就乱掉了,然后程序就直接
: crash了

l****u
发帖数: 1764
34
stack为什么会乱掉啊,stack占用的内存在函数结束后自动释放了啊

【在 w***x 的大作中提到】
: 这个“char buf[count];”最要命,count稍微大一点stack就乱掉了,然后程序就直接
: crash了

e*******o
发帖数: 4654
35
stack size limit

【在 l****u 的大作中提到】
: stack为什么会乱掉啊,stack占用的内存在函数结束后自动释放了啊
e*******o
发帖数: 4654
36
新手 培训一下就好了

【在 s******e 的大作中提到】
: 这个,基本功还是有一定问题的。
l****u
发帖数: 1764
37
这个略牵强吧
一个字符串让stackoverflow,这字符串得多大。。。

【在 e*******o 的大作中提到】
: stack size limit
f****n
发帖数: 399
38
常见的事情,我都遇到好多回了。
比如有一次创建线程,为了省空间,把stack设置得比较小,1M,另外一个哥们直接
stack里面留1M的数组,跑啊跑啊就crash了,找了好半天才找到问题。

【在 l****u 的大作中提到】
: 这个略牵强吧
: 一个字符串让stackoverflow,这字符串得多大。。。

1 (共1页)
进入JobHunting版参与讨论
相关主题
how to access a const char array in a function求帮忙看看哪里有问题!
两道面试题,请大家说说看法interleaved string
问个题?题目: string pattern matching w/ wildcard (.*)
C++ 面试题也说两个面试题
请问这样写程序错了吗?这个Strategy design pattern的例子为什么人为得弄得这么复杂?
问一个memory allocate/release的问题贡献两个题
请教大家一道关于c++的面试题能不能讨论一下kmp
G家电面,这回肯定挂了。附面经。bloomberg onsite & offer
相关话题的讨论汇总
话题: str话题: char话题: astring话题: ab话题: src