Chinaunix

标题: 求高手给个价,能写这样代码的程序员月薪应该给多少? [打印本页]

作者: zhangsuozhu    时间: 2010-07-21 13:29
标题: 求高手给个价,能写这样代码的程序员月薪应该给多少?
本帖最后由 zhangsuozhu 于 2010-07-22 17:48 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <assert.h>

  5. struct helloworld_t
  6. {
  7.     int num;
  8.     char helloworld[0];
  9. };

  10. int main()
  11. {
  12.     struct helloworld_t *p;
  13.     unsigned int size = sizeof(struct helloworld_t) + sizeof("Hello World!\n");
  14.     p = (struct helloworld_t *) malloc(size);
  15.     if (!p)
  16.            return -1;

  17.     memcpy(p, "\x01\x00\x00\x00Hello World!\n", size);

  18.     while (p->num--)
  19.     {
  20.         printf("%s",p->helloworld);
  21.     }
  22.    
  23.     free(p);
  24.     return 0;
  25. }
复制代码

作者: prolj    时间: 2010-07-21 13:31
我能写,你给多少钱?
作者: hellioncu    时间: 2010-07-21 13:34
算有点小聪明,但习惯不好的那种
作者: zhangsuozhu    时间: 2010-07-21 13:44
从中可以看出。该程序员对内存、零长数组、主机字节序。认识的还是比较到位的!应该有二到三年的实际工作经验!
作者: prolj    时间: 2010-07-21 13:45
我不光对这些认识的很到位,对更多的下面的东西认识的更到位。
作者: cookis    时间: 2010-07-21 13:49
回复 5# prolj


    比如人体工程学
作者: zhangsuozhu    时间: 2010-07-21 13:51
memcpy((void *)p, (void *)"\x01\x00\x00\x00Hello World!\n", size); 此句有问题。带来不确定因素。因为:

struct helloworld_t
{
     int num;
     char helloworld[0];
};

int 的长度在不同机型上应该不同吧。   还有。有机器是大端字节序的。所以会循环很多次.所以,该程序员应该不合适当嵌入式程序员
作者: zhangsuozhu    时间: 2010-07-21 14:02
给个价吧.别说没用的.
作者: 群雄逐鹿中原    时间: 2010-07-21 14:03
此代码价值为负。不给钱,解雇。
作者: zhangsuozhu    时间: 2010-07-21 14:07
从代码能否看出其C的功底.   我觉的用c应该在2年以上.
作者: pandaiam    时间: 2010-07-21 14:14
memcpy((void *)p, (void *)"\x01\x00\x00\x00Hello World!\n", size);
这句话是什么意思啊。
楼主给讲解一下吧。{:3_191:}
作者: Panizzi    时间: 2010-07-21 14:16
关键在于是把他当牲口一样用来写代码,还是思考着解决问题?
作者: efolzl    时间: 2010-07-21 14:17
拉出去枪毙!
作者: prolj    时间: 2010-07-21 14:18
memcpy((void *)p, (void *)"\x01\x00\x00\x00Hello World!\n", size);
这行代码是用来装B的
LS,我即当牲口又解决问题问题是,有问题么?
作者: Panizzi    时间: 2010-07-21 14:20
回复 14# prolj


    那你应当是公司至宝,每个公司必备良妇。
作者: 群雄逐鹿中原    时间: 2010-07-21 14:21
能看出他会一些窍门,这是不错的。
还有一些不足,比如:
1. 用char helloworld[0];,
    忽视了0长度数组的兼容性,不如改用 char helloworld[1]; 实现
2. "Hello World!\n" 代码冗余
    不如定义成宏,或用临时变量指向。
    忽视了后期维护,可能产生不一致。
3. printf 看起来缺少 %s
    因为既然写 while (p->num--),就暗示了某种修改预期,不一定是没有%的"Hello World!\n" 吧

可能要考察下他的做事情态度,
写这些代码,如果只是为了表明他懂一些奥妙,是很不错的。人都有表现欲嘛,有表现欲会成为好程序员。
如果他实际上也这么写代码,绝对不能要。
作者: pandaiam    时间: 2010-07-21 14:32
memcpy((void *)p, (void *)"\x01\x00\x00\x00Hello World!\n", size);

(void *)"\x01\x00\x00\x00Hello World!\n"
这个字符串有必要转成 void * 么。。{:3_188:}
作者: zhangsuozhu    时间: 2010-07-21 14:33
嗯.群雄逐鹿中原 说的很对.这代码有哔重取宠的意思.如果在工作中也这样写代码.的确不可取.  没有注解.写代码又写的比较晦涩。  

但其对内存的理解我个人觉的还是比较深入的....可以在工作中规范其代码风格!
作者: daviescai    时间: 2010-07-21 14:39
呵呵
作者: jinmiaobis    时间: 2010-07-21 14:42
呵呵,如果在实际项目中也这样写,我第一个开了他.
作者: zhangsuozhu    时间: 2010-07-21 14:48
项目中谁敢这么写啊.没看写的是hello world吗?   看看老谭的hello world吧. 哈哈.个人觉的比老谭的还规范点.
作者: julynada    时间: 2010-07-21 14:48
没注释的一律解雇!
作者: klanet    时间: 2010-07-21 14:53
真想不明白为啥喜欢用零长度数组,用指针不好吗?
\x01\x00\x00\x00是用来补全int的吧?
真的好恶心....写这样的代码就是为了让人看不懂的吧...

本人新手说的不对请指点。言辞激动是被刺激所致,请谅解。
作者: zhangsuozhu    时间: 2010-07-21 15:00
零长数组不占用任何空间,甚至是一个指针的空间都不占, 在作协议时可以直接作协议结构的映射。属于奇淫巧计。只能用在GCC上.不荐议使用
作者: xxw19840406    时间: 2010-07-21 15:03
另外assert不能这么用的

申请内存不成功是需要做出错处理的  而不能用assert
作者: zhangsuozhu    时间: 2010-07-21 15:04
memcpy((void *)p, (void *)"\x01\x00\x00\x00Hello World!\n", size);

这家伙写这句的意思就是想让我们明白它理解了内存的组织方式(X68架构)
作者: zhangsuozhu    时间: 2010-07-21 15:08
另外assert不能这么用的

申请内存不成功是需要做出错处理的  而不能用assert
xxw19840406 发表于 2010-07-21 15:03



    断言不这么用吗?
作者: mirnshi    时间: 2010-07-21 15:11
断言不这么用吗?
zhangsuozhu 发表于 2010-07-21 15:08



断言一般用在判断参数上,常在开发中使用,调试起来方便,申请内存属于程序的异常处理。而且做发行版本时,断言可能被去掉,那申请内存失败还不死翘翘!
作者: sblood    时间: 2010-07-21 15:12
月薪怎么也得1000以上吧。
作者: mirnshi    时间: 2010-07-21 15:14
用结构中的num,来确认helloworld的有效?极少碰见这种业务要求的。
作者: zhangsuozhu    时间: 2010-07-21 15:14
回复 28# mirnshi


    很少用断言。学习了!
作者: mirnshi    时间: 2010-07-21 15:14
月薪怎么也得1000以上吧。
sblood 发表于 2010-07-21 15:12



培训几个月的java程序员都不只1000吧
作者: langue    时间: 2010-07-21 15:15
printf() 把除常量以外的内容用作格式字符串,发卡送客。
作者: xxw19840406    时间: 2010-07-21 15:15
是的  一般都用断言来判断一个函数传入的参数是否合法,
断言只在debug版本上起作用,release版本上是会去掉的

申请内存失败要走出错处理的,因为在实际产品上也是会出现的
作者: zhangsuozhu    时间: 2010-07-21 15:20
printf() 把除常量以外的内容用作格式字符串,发卡送客。
langue 发表于 2010-07-21 15:15



    以前我常犯这个错。平常不容易被查到。直到有一天。出段错误了。一看要打错的内容。相当于printf("xxxxxx%sxxxxxxx");
作者: zhangsuozhu    时间: 2010-07-21 15:23
给他6K大家觉的怎么样?
作者: xxw19840406    时间: 2010-07-21 15:24
凭这段程序给价钱还是有点太片面了
是否有别的经验什么的参考
作者: freebarque    时间: 2010-07-21 15:28
装13吗, 应该写成:

int main(int argc, char *argv[])
作者: jinmiaobis    时间: 2010-07-21 15:29
凭这段程序,没法判断,哪个公司没有试用期,在试用期考察把
作者: mirnshi    时间: 2010-07-21 15:30
给他6K大家觉的怎么样?
zhangsuozhu 发表于 2010-07-21 15:23


如果写与数据库相关的,他不懂数据库;
如果写与网络相关的,他不懂网络;
......

语言就是个工具,而程序可以用任何语言工具实现的。工具用得好,不见得做出来的作品好。但要想作品好,工具必须用得好。
作者: xxw19840406    时间: 2010-07-21 15:31
回复 36# zhangsuozhu


    呵呵 能给起为什么不给呢!
不容易的
作者: zhangsuozhu    时间: 2010-07-21 15:31
三年C开发经验。做过L7层协议分析.QQ,MSN,FTP,skype等等协议数据还原。做过snmp管理系统的开发。 了解内核netfilter架构。  还用c及javascript写过cgi程序.简历上大至如此了。
作者: zhangsuozhu    时间: 2010-07-21 15:32
哦。还当过计算机老师。大本学历
作者: prolj    时间: 2010-07-21 15:32
12k让别人挖走
作者: zhangsuozhu    时间: 2010-07-21 15:33
装13吗, 应该写成:

int main(int argc, char *argv[])
freebarque 发表于 2010-07-21 15:28



    这个没必要了吧。呵呵
作者: mirnshi    时间: 2010-07-21 15:34
装13吗, 应该写成:

int main(int argc, char *argv[])
freebarque 发表于 2010-07-21 15:28



如果要较真,应该是这样的:
int main(void)
而不是
int main(int argc, char *argv[])
作者: freebarque    时间: 2010-07-21 15:34
仔细挑, 骨头也不少,
一个是main的参事

还有一个#include <stdlib.h> 这个没用到吧, 为啥包进来?
这个绝对是坏习惯

还有就是memcpy,绝对不能忍, 本来分开写还不错, 写这样画蛇添足
作者: xxw19840406    时间: 2010-07-21 15:34
6K不多
作者: zhangsuozhu    时间: 2010-07-21 15:35
12k让别人挖走
prolj 发表于 2010-07-21 15:32



    12K。你的意思是6K少了?
作者: xxw19840406    时间: 2010-07-21 15:35
谁的代码里仔细挑还不挑出点毛病呀
作者: langue    时间: 2010-07-21 15:37
回复 47# freebarque

stdlib 确实用到了,*alloc() 还有 free() 这几个函数需要 <stdlib.h>
作者: freebarque    时间: 2010-07-21 15:49
顶楼上, 是我自己记错了

记成malloc在string.h里面

事实上是memcpy在string.h里面

张冠李戴
作者: zylthinking    时间: 2010-07-21 15:56
如果要较真,应该是这样的:
int main(void)
而不是
int main(int argc, char *argv[])
mirnshi 发表于 2010-07-21 15:34



这就不明白了, 为什么一定要 int main(void) 呢?
作者: zhangsuozhu    时间: 2010-07-21 15:58
茴字有几种写法?
作者: zylthinking    时间: 2010-07-21 15:58
给他6K大家觉的怎么样?
zhangsuozhu 发表于 2010-07-21 15:23



6K 还行吧
作者: 梅川内依酷    时间: 2010-07-21 16:00
{:3_198:}
作者: mirnshi    时间: 2010-07-21 16:01
这就不明白了, 为什么一定要 int main(void) 呢?
zylthinking 发表于 2010-07-21 15:56


(void) 无参数
作者: pandaiam    时间: 2010-07-21 16:03
没人给解释一下。。。{:3_201:}
作者: xxw19840406    时间: 2010-07-21 16:18
回复 59# asdmonster


    像你这种人开6K就是多了
半吊子水平怎么了,半吊子水平的占绝大多数
全吊子的你见过几个,别说你自己,那你也得证明下!

再说了人家变量命名也没你说的那么夸张吧
作者: huxk    时间: 2010-07-21 16:20
我怎麼覺得寫代碼關鍵的是 邏輯思維啊

最杯具的事情莫過於 有的問題想不明白
作者: jinmiaobis    时间: 2010-07-21 16:23
业务清晰,程序简洁.就OK了,搞花里花哨的没意思
作者: zhangsuozhu    时间: 2010-07-21 16:27
这种人也6k?开玩笑,多少钱就不应该要。

本身就是个半罐子,还在这里显摆,项目组最烦这种自以为是的人。 ...
asdmonster 发表于 2010-07-21 16:12



    自称全吊子的似乎没看懂或不太明白零长数组!
作者: xxw19840406    时间: 2010-07-21 16:32
我觉得人家的代码主要还是展示知识点的
要是项目中真写这样的代码那肯定是让人蛋痛

但是人家这是笔试(猜测)的代码,而且我觉得是需要展示些东西的

人家写成最简洁的那指不定就有人说太easy了,没有亮点
作者: zylthinking    时间: 2010-07-21 16:34
这种人也6k?开玩笑,多少钱就不应该要。

本身就是个半罐子,还在这里显摆,项目组最烦这种自以为是的人。 ...
asdmonster 发表于 2010-07-21 16:12


自以为是, 目空一切。
我对你评价大概也就是6K
作者: 群雄逐鹿中原    时间: 2010-07-21 16:37
不用说了,这个代码就是楼主写的 lol
作者: zhangsuozhu    时间: 2010-07-21 16:40
我觉得人家的代码主要还是展示知识点的
要是项目中真写这样的代码那肯定是让人蛋痛

但是人家这是笔试(猜 ...
xxw19840406 发表于 2010-07-21 16:32



    嗯.是面试中我问他对零长数组的理解时.他用一分钟写的.他说他说话比较笨.所以写段代码让我看.
作者: zylthinking    时间: 2010-07-21 16:47
嗯.是面试中我问他对零长数组的理解时.他用一分钟写的.他说他说话比较笨.所以写段代码让我看.
zhangsuozhu 发表于 2010-07-21 16:40


那很显然此人是真正做事的
作者: zhangsuozhu    时间: 2010-07-21 16:48
已经决定用他了.但不知道给多少钱合适.当了怕跑了.多了怕老板生气....
作者: 群雄逐鹿中原    时间: 2010-07-21 16:48
如68楼所言,算不错了,你本来就考他的是这个。。
当然啦, while (p->num--),这里有点抄写以往代码的影子。。。总体来说,非常不错。
作者: 群雄逐鹿中原    时间: 2010-07-21 16:49
已经决定用他了.但不知道给多少钱合适.当了怕跑了.多了怕老板生气....
zhangsuozhu 发表于 2010-07-21 16:48


何不问下他目前的薪水。。然后再此基础上浮动一下,对老板也比较好交代。
作者: mirnshi    时间: 2010-07-21 16:53
嗯.是面试中我问他对零长数组的理解时.他用一分钟写的.他说他说话比较笨.所以写段代码让我看.
zhangsuozhu 发表于 2010-07-21 16:40



那还是理解得不错的。但是如果自认为说话笨,一是可能较自卑,二是真的沟通有些需要加强的。
写程序还是需要灵性的,所以不见得计算机专业的人就都能写好程序。
作者: ssuclinux    时间: 2010-07-21 17:05
我在 读 你们的 心理
作者: zhangsuozhu    时间: 2010-07-21 17:06
我在 读 你们的 心理
ssuclinux 发表于 2010-07-21 17:05



    读到了些什么?
作者: ssuclinux    时间: 2010-07-21 17:08
回复 75# zhangsuozhu


    每个人关注 的 侧重点不同
作者: cugb_cat    时间: 2010-07-21 17:39
unsigned int size = sizeof(struct helloworld_t) + strlen("Hello World!\n") + 1;
这一行这样写效率更好:
unsigned int size = sizeof(struct helloworld_t) + sizeof("Hello World!\n");
作者: zhangsuozhu    时间: 2010-07-21 17:42
本帖最后由 zhangsuozhu 于 2010-07-21 18:00 编辑
unsigned int size = sizeof(struct helloworld_t) + strlen("Hello World!\n" + 1;
这一行这样写效率更 ...
cugb_cat 发表于 2010-07-21 17:39



    printf会出错.没地方写'\0'.....啊.
作者: cugb_cat    时间: 2010-07-21 17:52
printf会出错.没地方写'\0'.....啊...memcpy应改成strncpy吧.
zhangsuozhu 发表于 2010-07-21 17:42


你试试sizeof("hello world!\n")输出是几,别瞎猜。
作者: zhangsuozhu    时间: 2010-07-21 17:54
sizeof("Hello World!\n"); 没细看.原来用的是sizeof啊,以为还是strlen呢!
作者: 梅川内依酷    时间: 2010-07-21 17:55
{:3_186:}
作者: zhangsuozhu    时间: 2010-07-21 18:09
说了这么多.结论????
作者: ytcheng    时间: 2010-07-21 18:24
我给他加2000
作者: xunen    时间: 2010-07-21 18:35
不喜欢这样的代码,
作者: xxw19840406    时间: 2010-07-21 18:56
7-8K吧  我觉得
作者: cugb_cat    时间: 2010-07-21 18:58
sizeof("Hello World!\n"); 没细看.原来用的是sizeof啊,以为还是strlen呢!
zhangsuozhu 发表于 2010-07-21 17:54


薪水不完全跟技术有关,除了实力外,运气也是不可忽略的,其实你要做的,是踏实些,既然靠技术吃饭,就踏踏实实的把技术搞好,薪水和机会以及运气,自然是水涨船高的事情。
作者: keytoany    时间: 2010-07-21 19:00
在关键代码处,没有注释,真是1败笔
作者: donglongchao    时间: 2010-07-21 19:16
关键看是什么岗位,按照岗位来吧。能产生多大的价值,就付多少薪水。
作者: caravsapm70    时间: 2010-07-21 19:16
文人相轻
作者: poke006    时间: 2010-07-21 19:19
工人相轻
作者: anyc    时间: 2010-07-21 19:21
明天我也拿这段代码去面试,太有喜感了
作者: guoruimin    时间: 2010-07-21 20:26
C原理懂一些,但不一定适合做项目!
作者: yulihua49    时间: 2010-07-21 20:31
zhangsuozhu 发表于 2010-07-21 13:29



    虽然用在这里显得没必要,但在复杂的数据结构容器里还是非常有用的。
例如:

struct tree_node {
        struct tree_node *left;
        struct tree_node  *right;
        char Content[0];
};

以后分配节点时可以把节点和内容一起分配。
作者: ilex    时间: 2010-07-21 20:38
虽然用在这里显得没必要,但在复杂的数据结构容器里还是非常有用的。
例如:

struct tree_node {
        struct tree_node *left;
        struct tree_node  *right;
        char Content[0];
};

以后分配节点时可以把节点和内容一起分配。
yulihua49 发表于 2010-07-21 20:31



    最有用的,是发送板间消息的情况吧?
作者: zhangsuozhu    时间: 2010-07-21 21:24
{:3_191:}
作者: pandaiam    时间: 2010-07-21 21:37
菜鸟继续悲情路过。
先在自己电脑上试验一下搞懂意思再说。{:3_194:}
作者: zhangsuozhu    时间: 2010-07-21 21:56
菜鸟继续悲情路过。
先在自己电脑上试验一下搞懂意思再说。
pandaiam 发表于 2010-07-21 21:37



    哪不理解.我帮你分析分析.呵呵
作者: OwnWaterloo    时间: 2010-07-21 22:11
暂不说大小端。
莫名其妙的void*转换……
莫名其妙的一个追加0:"\x01\x00\x00\x00Hello World!\n\x0" ……

因为一个flexible array member的方言实现就震精了?
c99都11年了……

总之, 基础知识不够牢固。
作者: pandaiam    时间: 2010-07-21 22:15
memcpy((void *)p, (void *)"\x01\x00\x00\x00Hello World!\n\x0", size);

就是这句啊楼主
(void *)"\x01\x00\x00\x00Hello World!\n\x0"

hello world 前面为什么是 \x01\x00\x00\x00
还有为什么把这个字符串转成 void * 呢?

谢谢。{:3_200:}
作者: pandaiam    时间: 2010-07-21 22:16
暂不说大小端。
莫名其妙的void*转换……
莫名其妙的一个追加0:"\x01\x00\x00\x00Hello World!\n\x0" … ...
OwnWaterloo 发表于 2010-07-21 22:11



    哇 OwnWaterloo来了,期待讲解一下。{:3_193:}
作者: zliming    时间: 2010-07-21 22:25
unsigned int size = sizeof(struct helloworld_t) + strlen("Hello World!\n" + 1;
这一行这样写效率更 ...
cugb_cat 发表于 2010-07-21 17:39


strlen("Hello World!\n") + 1;
sizeof("Hello World!\n");
一样是常量,你可以看看是不是都编译期确定的。不用太在意

ms编译器不能用 char xx[0]; 一般用 char xx[1];兼容一点
作者: yoshubom    时间: 2010-07-21 22:31
按照代码来开价?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2