轻松面试找到理想员工-非官方的面试技术指南
日期:2007年10月30日 作者: 查看:[大字体 中字体 小字体]-
- 他们的函数运行快吗?看一下他们多少此调用了strlen函数。我曾经看到应试者写的strrev的算法竟然只有O(n^2) 的效率,而标准的算法效率应该是O(n),效率如此底下的原因是因为他们在循环中一次又一次调用strlen函数。
- 他们使用指针运算吗(译者按:原文为pointer arithmetic,指的是加减指针变量的值)?使用指针运算是个好现象。许多所谓的“C程序员”竟然不知道如何使用指针运算(pointer arithmetic)。当然,我在前文说过我不会因为应试者不掌握一种特定的技巧而拒绝他。但是,理解C语言中的指针不是一种技巧,而是一种与生俱来的才能。每年一所大学要招进200多个计算机系的新生,所有这些小孩子4岁就开始用BASIC语言在Atari 800s写冒险游戏了。在大学里他们还学Pascal语言,学得也很棒。直到有一天他们的教授讲了指针的概念,突然,他们开始搞不懂了。他们就是不能再理解C语言中的任何东西了。于是90%的计算机系学生转系去学政治学。为了挽回面子,他们告诉朋友,他们之所以转系是因为他们计算机系英俊貌美的异性太少。许多人注定脑子里就没有理解指针的那根弦。所以说理解指针是一种与生俱来的品质,而不是一种单纯的技巧。理解指针需要脑子转好几个弯,某些人天生不擅长转这几个弯。
第三个问题可以考考面试者对C的位运算的掌握,但这是一种技巧,不是一种品质,所以你可以帮助他们。有趣的等他们建立了一个子函数用来计算byte中为1的位的数目,然后你要求他们优化这个子函数,尽量加快这个函数的运行速度。聪明的应试者会使用查表算法(毕竟这个表只有 256个元素,用不了多少内存),整个表只需要建立一次。跟聪明的应试者讨论一下提高时间/空间效率的不同策略是十分有意思的事情. 进一步告诉他们你不想在程序启动时初始化查询表。聪明的面试者可能会建议使用缓冲机制,对于一个特定的byte,只有在第一次被查询时进行计算,然后计算结果会被放入查询表。这样以后再被查询时直接查表就行了。而特别特别聪明的面试这会尝试有没有建立查询表的捷径,如一个byte和它的置1的bit数之间有没有规律可循?
当你观察应试者写C代码时,以下一些技巧会对你有帮助:
- 事先向应试者说明,你完全理解,没有一个好的编辑器光在纸上写代码是困难的,所以你不在乎他们手写的代码是否看上去不整洁。你也完全明白没有好的编译器和调试器,很难第一次就写出完全没有bug的程序,所以请他们不必为此担心。
- 好程序员的标志:好程序员写完“{”符号后,通常立刻跟上“}”符号,然后再在当中填上代码。他们也倾向于使用命名规则,虽然这个规则可能很原始。如果一个变量用作循环语句的索引,好程序员通常使用尽可能少的字符为它命名。如果他们的循环语句的索引变量的名字是CurrentPagePositionLoopCounter,显而易见他们写代码的经验还不够多。偶尔,你会看到一个C程序员写下象if (0==strlen(x))一样的代码,常量被放在==的左边。这是非常好的现象。这说明他因为总是把=和==搞混,已经强迫自己养成这种习惯以避免犯错。
- 好的程序员在写代码前会订一个计划,特别是当他们的代码用到了指针时。例如,如果你要求逆序一个链表,好程序员通常会在纸的一边画上链表的草图,并表明算法中的索引指针当前移动到的位置。他们不得不这样做。正常人是不可能不借助草图就开始写一个逆序链表的程序的。差的程序员立刻开始写代码。
不可避免的,你会在他们的程序中发现bug,于是我们现在来到了第五个问题:你对代码满意吗? 你可能想问,“好吧,bug在哪里?”这是来自地狱的一针见血的问题,要回答这个问题可要大费口舌。所有的程序员都会犯错误,这不是问题。但他们必须能找到错误。对于字符串操作的函数,他们通常会忘记在输出缓冲区加上字符串结束符。所有的函数,他们都会犯off-by-one错误(译者按:指的是某个变量的最大值和最小值可能会和正常值差1)。他们会忘掉正常的C语句结尾的分号。如果输入是零长度字符串,他们的函数会运行错误。如果malloc调用失败而他们没有为此写好错误处理代码,程序会崩溃。一次就能把所有事情做对的程序员非常,非常,非常地少.不过要是真的碰上一个的话, 提问就更有意思了. 你说,"还有Bug"。他们会再仔细地检查一遍代码。这个时候, 观察一下他们内心是否开始动摇了, 只是表面上勉强坚持说代码没有问题。总之,在程序员写完代码后,问一下他们是否对代码满意是个好主意。就像Regis那样问他们!(译者按,Regis Philbin是美国ABC电视网的游戏电视节目主持人,他的口头禅是“这是你的最后的答案吗?”)
第六部分:关于设计的问题。让应试者设计某样东西。Jabe Blumenthal,Excel的原始设计者,喜欢让应试者设计房子。Jabe说,曾经有一个应试者跑到白板前,画了一个方块,这就是他的全部设计。天哪,一个方块!立刻拒绝这样的家伙。你喜欢问什么样的设计问题?
- 好的程序员会问更多的信息。房子为谁造的?我们公司的政策是,我们不会雇佣那些在设计前不问为谁设计的人。通常,我会很烦恼我得打断他们的设计,说“事实上,你忘记问这个房子是给谁设计的了。这个房子是给一群长颈鹿造的。”
- 笨笨的应试者认为设计就像画画,你想画什么就画什么。聪明的应试者明白设计的过程是一系列艰难的权衡。一个很棒的设计问题是:设计一个放在街角的垃圾箱。想一想你得做多少权衡!垃圾箱必须易于清空,但是很难被偷走;易于放进垃圾,但是碰到狂风大作,里面的垃圾不会被吹出来;垃圾箱必须坚固而便宜。在某些城市,垃圾箱必须特别设计,以防恐怖分子在里面藏一个定时炸弹。
- 有创造力的应试者会给出有趣而独特的设计。我最喜欢的问题之一是为盲人设计一个放调味品的架子(译者按:原文为spice rack,老外的厨房里有个专门放调味品的架子,上面放了很多小罐罐,里面装了各种各样的调料)通常许多应试者的建议是把布莱叶文(一种盲人使用的文字)刻在放调料的罐子上,这样文字会卷起来而变形。我碰到一个应试者,他的设计是把调料放在抽屉里,因为他觉得水平地感知布莱叶文比垂直地做更方便。(试试看!)这个答案这样有创意,使我震惊!我面试了有一打得程序员,从来没有人想到过类似的答案。这样有创意的答案确实跃过了普通人考虑问题的条条框框。仅仅因为这个答案太有创意了,而且应试者别的方面还过得去,我雇佣了这个应试者,他现在已经成为Excel团队中一个优秀的项目经理了(译者按,本文作者曾在微软工作过)。
- 总是争取一个确定的了结。这也是完成工作的特质的一部分。有时候应试者会犹犹豫豫不能作出一个决定,试图回避困难的问题,留着困难的问题不作决定就直接向下进行,这很不好。好的应试者有一种推动事情自然地前进的倾向,即使你有意把他们拖回来。如果关于某个话题的讨论开始原地打转变得没有意义了,好的应试者会说,“嗯,我们可以整天谈论这个,但是我们得做点什么。为什么我们不开始...”
于是我们来到了第七部分,挑战。这部分很好玩。在面试中留心一下, 当面试者的回答绝对的百分之百毫无争议时, 你可以说: " 嗯, 等一下等一下." 然后花上两分钟玩一下魔鬼的游戏(译者按,原文为devil's advocate,魔鬼代言人指的是违背自己的良知,为错误邪恶的观点辩护). 记住一定要在你可以肯定他正确时和他争论。
这个很有意思.
- 上一页 [1] [2] [3] 下一页
-
- 轻松面试找到理想员工-非官方的面试技术指南 相关文章:
- ·Photoshop初学者轻松制作条形码
- ·小技巧让你轻松DIY你的网页滚动条
- ·轻松方便 三招两式抵制IE的顽固病毒
- ·轻松把任何网页工具放进Vista侧边栏
- ·考拉宝工具条 帮你轻松下载优酷、土豆视频
- ·如何减轻DDoS攻击带来的危害
- ·加密视频光盘轻松刻录教你做
- ·Photoshop轻松为照片调出艳丽色彩
- ·用MSN不会外语也能和老外轻松聊天
- ·安全每一秒 让文件夹加密更轻松
- 轻松面试找到理想员工-非官方的面试技术指南 相关软件
- ·黑英语-轻轻松松背单词
- ·《反恐轻骑兵》
- ·轻解罗衣
- ·我们正年轻
- ·紫铃轻舞
- ·轻功是怎样炼成的(沙子)
- ·脑轻松
- ·轻松自考助学系列-法律基础与思想道德修养V1.20
- ·轻松自考助学系列-法律基础与思想道德修养V1.20
- ·考研单词轻松背一
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:XQuery表达式之逻辑表达式(Logical Expression)
下一篇:面试:最易被忽略的12种高级错误
精品推荐
热点TOP10
- ·图象处理中的边缘检测------canny算子
- ·EZ-USB 68013A开发指南
- ·数值计算程序大放送-特征值和特征向量
- ·ARM的嵌入式Linux移植体验之BootLoader
- ·Visual C++ ADO数据库编程入门
- ·智能手机Smartphone开发导语
- ·利用 wordXP 实现自动排班
- ·[分形]DLA团簇模型的摸拟
- ·DENX U-Boot及Linux使用手册
- ·Visual FoxPro 9.0 SP2正式版下载
- ·VS2005控件的问题解决办法
- ·Cookie是什么?用法是怎样?与SESSION有什么区别?
- ·J2SE API读取Properties文件的六种方法
- ·Silverlight、JavaFX、Flex技术比较
- ·Silverlight将不再支持ArrayList类型
- ·教程:XSLT Designer快速入门指南
- ·创建Web应用和Struts框架配置文件实例
- ·Spring入门指引:理解Spring的打包方式
- ·UDT协议-基于UDP的可靠数据传输协议
- ·解析KJava在移动设备开发中的应用
