Creative Commons License
本Blog采用 知识共享署名-非商业性使用-禁止演绎 3.0 Unported许可协议 进行许可。 —— Fox <游戏人生>

游戏人生

游戏人生 != ( 人生 == 游戏 )
站点迁移至:http://www.yulefox.com。请订阅本博的朋友将RSS修改为http://feeds.feedburner.com/yulefox
posts - 62, comments - 508, trackbacks - 0, articles - 7

不怕无知,但怕无畏

Posted on 2008-03-20 21:17 Fox 阅读(4067) 评论(52)  编辑 收藏 引用 所属分类: G游戏编程

Author: Fox

昨天越俎代庖面试了一个家伙。

看完了他的笔试题目,感觉后背有点凉,但这些东西看看也就过去了,说实话,那些C++的题目多少有点BT

但我一直觉得DS的东西,如果你当初学的时候是很认真学习过并思考过的,其实是不需要去记忆的,所以我就问了一个关于稳定排序和不稳定排序的问题。我想,只要你理解了各种排序算法的思想,很easy。

只是这哥们儿忘记了什么是稳定排序,我还以为他把快速排序、堆排序当作稳定排序只是没记住。看来,老师从小教育的"一道题目你即使不会也要尽量去答"这种思想遗毒颇深。如果抱着这种思想做程序员,公司多半要垮掉。

想一想稳定排序的概念吧:两个同值元素(不知为什么,我一直记得严老师书上用的是49,看来我还是在读死书死读书,最后可能会读书死L)在排序前后相对位置保持不变,即本来在前面的还在前面(所谓"尘归尘,土归土",看来最近思想有点消极,难怪没有激情L)。再想想各种排序的思想,我们很容易得到这样的结论:最普通的O(n2)的算法,一个一个从前比到后,自然不会影响到同值元素的相对位置,而O(nlogn)的算法,由于多路比较,可能导致本来相对位于后面的元素先比较和移动,造成不稳定。这样一想,自然知道简单的插入、选择、归并排序都是稳定的,而改进的高效率的算法则不稳定。

后面另一个同事在询问他做的Demo的事情,因为是DX的东西,我不懂,没插嘴,就随便看他的简历。

看到其中一项,有提到他曾经给大一、大二的学生做过C++培训。我本没打算提他笔试中的C++部分的,但既然曾经为人师表(因为我曾经做过学生、也做过老师),C++基础掌握到这种程度就不对了。尤其对于一个空的C++类默认生成哪些成员函数居然写的一塌糊涂(友情提示:你也不用BS他,如果你没有看过Lippman的《Inside of the C++ Object Model》,建议你先不要发言J)。

我一般对语言特性不太敢发表观点(因为我的C++基础不扎实L),但我对简单的算法或思想小有兴趣(没有你想象中那么高)。可是,笔试中唯一的一个需要coding的题目他又没写。我只好说,C++的东西你掌握怎么样我也可以不看,但这个memcpy的实现,你怎么也得有点想法吧?不然怎么去写代码呢?刚好在面他之前,还和同事讨论过memcpy的问题(如果你给出one byte by one byte的实现会遭BS的J,因为你居然没有考虑过计算机系统本身的数据处理)。

本来还想问他一个关于sizeof()的问题,后来觉得也没什么必要,关于union的对齐,要按照单位最长的成员对齐这一点自己都觉得有点BT就算了。

其实,我想说的是,很多东西,你不能认为你掌握的很好(除非你真的掌握的很好),所谓很好,拿C++来说,就是把你认为你好的地方,你可以不翻其他东西,把它写下来,基本跟ISO C++保持90%以上的相似度就可以了。当然,这样说有点贱了。

毕竟,做游戏程序员(其他也差不多吧)需要的是:

带着激情去编码,带着虚心去学习,带着挑战去交流,带着压力去工作。

激情,能让你的思维满具创意,代码极其飘逸;

虚心,能让你的知识不断积累,从而达到厚积薄发;

挑战,能让你的团队充满活力,交流活泼严谨;

压力,能让你的心态保持平衡,胜不妄喜,败不惶馁。

因为自己这两周心态受到非智力因素干扰,日子过得有点浑噩。写下来,主要是为了放松一下,也提醒自己。

不怕无知,但怕无畏。

-----------------------------------------------------------------

PS:补记于2008/03/26

还是把上午写的一个mymemcpy放上来吧。里面没有对des < src + len的重叠情况进行讨论,因为大致google了一下,似乎很少人这样做(倒不是因为不能实现)。

void *mymemcpy( void *src, void *des, size_t len )
{
 char *tempsrc = (char *)src;
 char *tempdes = (char *)des;

 size_t offset = len / 4;
 for( size_t i=0; i<offset; ++i )
 {
  *(unsigned long *)tempdes = *(unsigned long *)tempsrc;
  tempdes += sizeof(unsigned long);
  tempsrc += sizeof(unsigned long);
 }
 
 offset = len - len % 4;
 for( size_t i=0; i<offset; ++i )
 {
  *tempdes++ = *tempsrc++;
 }
 return des;
}

刚才想求证一下memcpy在地址重叠的情况下,是否会考虑从后往前copy的情况。结果看到云风的blog上很早的一篇文章,也是讲memcpy的,角度不同。

我想澄清一点,我写这篇blog的初衷只是总结几个技术问题,因此就没有把面试的前因后果讲一下,反倒让很多朋友误解,以为我怎么怎么样了。

事实情况是,这几个问题都是本来的笔试题目当中的,面试的TX从上午10:00前后做到11:30过,等我和另一个同事13点过去的时候,我一直没怎么说话。只是在一边看他的简历和题目,文中已经说了,是看到他的简历之后才提的问题。当时是有10道左右的C++题目,他做对的其实只有一道。

而且,我在提问题的时候也都将问题跟他一起分析了的(除了memcpy之外),自我感觉说话还是很得体的,写文章的风格是另一码事儿。

我没有丝毫瞧不起这位TX的意思,也完全没有显摆的想法。

PS :忽然想到自己最近为什么癖性十足,因为最近在关注一个家伙的 Blog ,如果不侵权,我想用用他的 Blog 的名字《 不许联想 》,作者是带三个表王小峰(《三联生活周刊》记者)。所以,如果有人想拍我,建议先看看他的东西,学习一下措辞 J 。一个同事,说天涯也行,我个人觉得天涯有点相互吹捧的味道。

恶心,但没有恶意 J

Feedback

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-20 22:24 by adsf
Y也少说两句,出来混,迟早得还,到时候你还不知道要栽在谁手被谁BS呢

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-20 22:54 by kacy16
看了楼主的文章,对于那memcpy的实现问题,我个人想到的方法也是一个一个BYTE来复制,但是不知道“计算机系统本身的数据处理”这怎么理解,以及您认为好的memcpy的实现大致是怎样的?楼主能否给说明一下,谢谢!

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 00:12 by 罗宾李
@kacy16
用DWORD指针,每次复制4个字节,以上

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 08:21 by cppexplore
呵呵
考察memcpy内存地址的字节对齐问题 对实际的开发有啥意义吗?

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 08:55 by Fox
@adsf:不怕无知,但怕无畏,我也不是没栽过,也不是没被BS过,虽然资质愚钝,但我一直在努力,如果真愿意做技术,有人给你指出来,你应该怀着感恩的心:)

@kacy16
主要就是字节对齐和DWORD(4B) copy。
字节对齐主要体现在首地址不是4的倍数和尾部不足4B的情况处理,这种情况下,你只能按Byte copy了。

@cppexplore
其实如果代码写多了,这个问题应该是每个人都会不自觉得去想的,或者就算不想,也该有自己的一个想法。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 09:11 by cppexplore
@Fox
没看过memcpy strcpy库函数实现的,给出按位处理的想法很正常。就像去写strcpy,检测空指针、越界、返回结果指针就很好了,一定要求他给出类似库函数实现的高效不太现实,也没啥意义,就象研究茴香豆的茴有几种写法一样。反正实际开发中不用,就是虚无缥缈的想想。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 09:16 by 饭中淹
最好的memcpy的实现应该是
void my_memcpy( void * _dst, void * _src, t_size _size )
{
memcpy(_dst, _src, _size);
}

另外,c++类的默认成员函数也要看用途来决定需要写哪些。

稳定排序,不稳定排序这是个概念问题,作程序的没必要去硬扣这个概念。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 09:19 by cppexplore
@饭中淹
牛啊 果然是最好的内存copy实现,竟然还实现了跨平台
要是加上inline 或者用包裹宏代替函数就更完美了 哈哈

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 09:31 by Fox
@cppexplore
一语中的
如果答案写成这样,我也会很高兴了,起码是能够从不同的角度解决问题:P
#define my_memcpy memcpy

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 09:32 by raof01
有很多人学过几天C++,就敢在简历上写“精通C++”,这种人被BS了活该。另:应用程序员对于library的实现还是很陌生的,考虑的也不会很多,博主要求有点高。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 09:45 by Fox
@raof01
是的,所以我开始并没有想去追问一些问题。现在提出来也只是讨论一下一个程序员对于编码应该有的态度。

我个人一直认为,一个项目的成功,需要几个对C/C++(其他语言也一样)编码抱着像对女人一样的感觉,如果你不是真的爱她,就不要说爱她,如果你只是喜欢她,也不要说爱她。因为你可以喜欢很多女人,但你只会爱上一个,这一点符合编译原理上讲的局部性法则。
如果你只是把它当作一碗饭吃,我就会很不爽了。
当然,我只是一个纯粹做技术的,而且做的不纯。语言风格只是对事不对人:),请大家不要人身攻击啊,我很无辜:)

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 12:14 by jyfish
@adsf
这位朋友不会是被面试的朋友吧?

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 12:37 by yafare
看了文章感觉挺恶心的,写过mmx,sse2的是不是也要bs DWORD copy呢。

第一次面试别人心情激动可以理解,但是这样贬低别人表现自己的睿智就有问题了。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 12:47 by Fox
@yafare
不怕无知,但怕无畏,我也不是没栽过,也不是没被BS过,虽然资质愚钝,但我一直在努力,如果真愿意做技术,有人给你指出来,你应该怀着感恩的心:)

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 13:14 by kacy16
谢谢 Fox和罗宾李的回答,让我开拓了思路.

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 13:38 by Colin
面试啊。。。现在的学生也挺惨的
学校学不到东西。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 13:58 by winsty
应该多问些实用的问题
而不是刁难人的问题

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 14:29 by www.helpsoff.com.cn
呵呵,也看出博主的水平了,其他的先不说,人也真是够矫情的...

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 17:51 by 空明流转
最近回帖的怎么都开始喜欢喷人了。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-21 18:55 by cppexplore
是啊 有问题就问题本身探讨 涉及到人身 甚至去猜测别人的水平 不利于解决问题啊 来来回回净扯蛋了

# re: 不怕无知,但怕无畏[未登录]  回复  更多评论   

2008-03-22 12:25 by
我个人也认为对memcpy,strcpy之类的库函数实现只要考虑了判断空指针,越界等问题且实现正确的话,可以有90分以上了,因为我自己也不会从字节对齐之类的去考虑这个问题了,在笔试面试的时候想的最多的还是健壮性和正确性.

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-22 14:42 by 酷勤网
那些重点标志的颜色不好,遮住了,看不见 汗

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-23 20:31 by Kevin Lynx
今天才来回这个贴。

没想到 空明流转 和 饭中淹(叔叔:D)也在这里。

fox下次面试千万不可考别人struct, union的sizeof问题,太BT了。不可倒确实应该考面试者自己认为自己好的东西。我也有点鄙视明明不会却说会的人,态度不端正。

# re: 不怕无知,但怕无畏[未登录]  回复  更多评论   

2008-03-23 20:42 by CppExplore
struct, union的sizeof问题这个才是常识性的问题,尤其对于网络间传输的数据结构,这是必须知道的基础性问题。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-24 08:43 by haoren
滚一边儿去,sb。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-24 13:07 by cxu2003
楼主, 告诉你一句金玉良言, 合适的才是最好的.

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-24 13:08 by cxu2003
水平高的你欣赏不了, 用不了也是一种浪费, 对人对已都是如此, 这和水平太低是一个道理.

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-24 13:11 by cxu2003
一个人用心编程, 程序就会合格,健壮, 但一个人能不能用心编程, 并不取决于他的教养, 水平. 而是你的制度, 说句不好听的, 只有不合格的公司,没有不合格的程序员. 这几年你就会明白我说的话, 如果明白,就说明你没这方面的天赋.

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-24 16:04 by Yule Snow
可能是说者无意,听者有心了,相对无意者,这有心者是不是更如他们自己所言呢?

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-25 15:57 by megax
一个优秀的程序员不应该只去关注one byte one byte之类的,这些东西你去面试别人,别人可能暂时不会,但是其实是只要看了,马上就会的那种,所以这些东西并没有太大的说服力。你应该找的人是这样的,要有较强的学习能力和沟通能力,以及受过良好的教育。不要只去扣着那几个算法,没意思。。。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-26 10:46 by 某Programmer
如果考这么多细节记忆性的内容,我可以连出100个问题,让楼主一个也不会。

总有些人,平常说的冠冕堂皇,什么希望别人提高解决问题能力;到了面试别人时,就喜欢用类库式和图书馆式的细节问题去难为别人,程序设计不同领域中这么多细节,某人知道的另一个人不知道是完全正常的。喜欢对别人挑挑拣拣,事后还在这评价显摆的人,除了欠揍,还欠扁,应该拖出门外,用军车连撞108遍然后再用超载大货车轧上300个来回。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-26 10:53 by Fox
照楼上的意思,我该怎么做?
我只想找个可以干活的人,妄谈其他都是多余的。
如果找老婆只为传宗接代,是不是生育能力最重要呢?你告诉我感情可以培养、孩子可以领养,不都TM扯淡呢吗?

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-26 10:55 by Fox
一天两天怀不上,是正常的,可以接受的。
如果100天都怀不上,你是不是还有性趣?

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-26 11:12 by Jeck
@某Programmer
说的很对,楼主不应该出来显摆,如果你是被面试者,你的心态绝对不一样。因为我没当过面试官,所以我只有被面试者的心理。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-26 15:15 by raof01
@某Programmer
你的说法有失偏颇。有些时候可以通过一些技术上的细节问题来考interviewee,此时并不是要考他的记忆,而是看他的思考方式。也就是那句话:你的答案是错的,但我喜欢你的思考方式。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-26 17:05 by 某Programmer
没看到楼主给来的人提示和思考的机会。

建议楼主变变考题,和具体工作问题结合或算法与思维性的都可以。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-26 18:12 by zhubin
你会写最大流么?

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-26 19:48 by Yule Snow
每个人都有自己的背景和位置,“屁股决定脑袋”并不错吧,在其位就谋其事没错吧?

伏尔泰说:我不同意你的话,但是我愿意誓死捍卫你说话的权利。说话可以,那是自由,但是妄加揣测别人的意思,再给人带上帽子,再喷一痛,这就不可取了。
这世界就是面试的少,被面的多,但是多了也不一定就是强势。心情可以理解,做法不能赞同。
都平常心吧。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-27 11:39 by yafare
@Fox

[quote]
@kacy16
主要就是字节对齐和DWORD(4B) copy。
字节对齐主要体现在首地址不是4的倍数和尾部不足4B的情况处理,这种情况下,你只能按Byte copy了。
[/quote]

[quote]
void *mymemcpy( void *src, void *des, size_t len )
{
char *tempsrc = (char *)src;
char *tempdes = (char *)des;

size_t offset = len / 4;
for( size_t i=0; i<offset; ++i )
{
*(unsigned long *)tempdes = *(unsigned long *)tempsrc;
tempdes += sizeof(unsigned long);
tempsrc += sizeof(unsigned long);
}

offset = len - len % 4;
for( size_t i=0; i<offset; ++i )
{
*tempdes++ = *tempsrc++;
}
return des;
}
[/quote]

你这个算法考虑首地址不是4的倍数,也就是地址是否对齐了么?既然没考虑那为什么要在回复特别提一下呢?

所有的crt实现里面 memcpy 都是不考虑 Overlapping 的。
如果觉得地址可能会重叠,那么你需要的是 memmove。
看来你是没看过vc的crt源码啊。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-27 11:42 by yafare
@Yule Snow

说话要经过大脑,别人批评的是什么你看清楚了么?

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-27 13:31 by Fox
@yafare
没有看过crt源码
至于给出的代码没有考虑首地址对齐,是因为我看过云风的这篇blog,上面对于4B以上,没有首地址对齐的汇编。

而且VC默认结构成员对齐是8B,所以就把前面一点去掉了。

如果真看过这样源码的我还不会去问了,就像我没有看过memcpy和memmove(当然,刚才看了),我只是给出自己的理解,我自己还是偏向于问题的思考重于知识的学习。所以你提到mmx、sse、crt源码,可以展示知识面的广和深,却不能完全满足对人的考察,当然,如果对这个点能够掌握这样的知识,至少可以说明他动过脑子了。

;memcpy.asm - contains memcpy and memmove routines
;
; Copyright (c) Microsoft Corporation. All rights reserved.
;
;Purpose:
; memcpy() copies a source memory buffer to a destination buffer.
; Overlapping buffers are not treated specially, so propogation may occur.
; memmove() copies a source memory buffer to a destination buffer.
; Overlapping buffers are treated specially, to avoid propogation.

;memcpy - Copy source buffer to destination buffer
;
;Purpose:
; memcpy() copies a source memory buffer to a destination memory buffer.
; This routine does NOT recognize overlapping buffers, and thus can lead
; to propogation.
; For cases where propogation must be avoided, memmove() must be used.
;
; Algorithm:
;
; void * memcpy(void * dst, void * src, size_t count)
; {
; void * ret = dst;
;
; /*
; * copy from lower addresses to higher addresses
; */
; while (count--)
; *dst++ = *src++;
;
; return(ret);
; }
;
;memmove - Copy source buffer to destination buffer
;
;Purpose:
; memmove() copies a source memory buffer to a destination memory buffer.
; This routine recognize overlapping buffers to avoid propogation.
; For cases where propogation is not a problem, memcpy() can be used.
;
; Algorithm:
;
; void * memmove(void * dst, void * src, size_t count)
; {
; void * ret = dst;
;
; if (dst <= src || dst >= (src + count)) {
; /*
; * Non-Overlapping Buffers
; * copy from lower addresses to higher addresses
; */
; while (count--)
; *dst++ = *src++;
; }
; else {
; /*
; * Overlapping Buffers
; * copy from higher addresses to lower addresses
; */
; dst += count - 1;
; src += count - 1;
;
; while (count--)
; *dst-- = *src--;
; }
;
; return(ret);
; }

这是给出的基本的算法,都是bytecopy的,但具体的实现不是这样子的。
下面是汇编实现,考虑对齐的。
; - move x = ((4 - Dest & 3) & 3) bytes
; - move y = ((L-x) >> 2) dwords
; - move (L - x - y*4) bytes

crt源码:
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
感觉没有使用dwordcopy。

对于memcpy这个问题,看不看crt源码和汇编,相信很多人在我写过这篇文章和前面的回复之后都可以知道怎么实现了。

对于技术批评,我会虚心,尤其是和你们的讨论过程中,我还特意看了crt源码和生成的汇编,所以,非常感谢,以后如果再跟别人讲问题的时候,自己还是要把问题搞得颇为清楚才好。

但对于人身攻击和做人问题,我就恕难忍受了。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-27 13:40 by Fox
@yafare
来这儿的每个人都是有大脑的,回复的人更是经过大脑才说过的话。

我个人感觉我这篇blog和回复没有任何恶意,而且初衷也是让自己有时间反思一下自己,可以说,主要是写给自己的。

但很多回复的朋友认为我是炫耀或者故意刁难,我实在冤枉。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-29 17:02 by 汇编和C程序员
整个读了一遍,也冒一泡。以前写了几十年程序孤独惯了,也来热闹一下。
觉得博主对被面试者并没有故意刁难的意思。因为对公司到底要招的是什么样的人,看客并不清楚,所以,面试题是否合理也就无从谈起。
不过如果我要招的是普通C程序员,而且,我又特别想了解一下对方会不会用MEMCPY,我宁愿问一下他MEMCPY这个函数的限制是什么,只要他告诉我两个区域如果重叠可能出现异常,我会认为他OK。
如果我需要找的是个写核心API的程序员,可能应用运行时百分之几的时间都跑在这些核心函数上,我也许会要求他写个什么算法或者给出他的想法。不过,也许是所从事行业的原因,总的来说,我愿意要一个能写出健壮可靠的程序的程序员,而不要一个能写高效率但我看不懂的程序的程序员,因为高效率经常意味着难懂,难懂,意味着有错不容易发现,发现了错也不容易修改,修改的时候也容易出错,换个人也难以接手,我真罗嗦呀。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-03-30 19:14 by 现在的C++笔试题怎么都一样
哈哈~空类默认有哪些函数~哈哈~这些是编译器的事情~看过就会知道。
另外,《深度探索C++对象模型》里关于这点似乎并没提及吧?要么只说了几个字而已。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-04-01 12:57 by everspring79
有些无语。身边月薪过万的程序员,照样对你说的这些语言的基础知识掌握得很差,但是一旦用到,绝不含糊。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-04-01 16:02 by w
什么狗屁东东啊, 什么叫稳定排序? 靠,写了多少年的程序都没听过这个鸟名词
现成的memcpy, 根据多种情况优化的多版本不用, 你要自己写一个烂方法

# re: 不怕无知,但怕无畏[未登录]  回复  更多评论   

2008-04-01 17:01 by oooooo
lz刚面一个就这么装了。。。

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-04-17 22:40 by 极光炫影
memcpy和API的CopyMemory都不会考虑重叠的情况

用memmove和MoveCopy可以解决

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-10-06 16:16 by 浪迹天涯
学无止境...
关键还是看态度与思考能力 不在于你掌握了多少 而在于你是否愿意去掌握
很多东西不接触不知道 一接触大概很多人也能知道
所以还得看岗位要求 不过对于基础的东西 不要求100%知道
但常用的经常碰到的问题应该知道个八九不离十吧
但很多问题我还是不知道 碰到以后一google很快也能解决
遇到问题发现问题解决问题的能力最重要!

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-10-26 16:40 by 茫然无措
其实LZ只是想指出来

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-10-31 16:18 by sufan
@w
没有必要这么激动吧,关于稳定排序和不稳定排序的问题我想在任何一本数据结构的书里面都会讲到吧,而且博主也说了:在严蔚敏老师的书里面确实是用的49这个例子,我还记得:为了讲清楚这个道理,还在其中一个49的下面做了标记,考察在各种排序算法中两个49的相对位置会不会发生变化。。。至于你写了这么久时间程序还不知道这个概念,我只能说,你运气太好了,说不定下一次别人就有可能问你这个问题

# re: 不怕无知,但怕无畏  回复  更多评论   

2008-12-01 20:20 by jimsmorong
这个面试者比我牛好多了

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理