四个问题秒杀4年经验C#程序员
2011年09月03日 昨天下午我正在用虚拟机聊QQ,突然李总监站在我身后说:“小郝,你在干嘛啊?”心想:“靠,妈的,什么情况?丫的,来了也不吱一声。这下肯定悲剧了。”但我还是假装很镇定地说:“没干什么啊。”他又说:来了一个有四年经验搞C#的程序员,你去看看他的技术怎么样?心想:“靠,人家干了四年了,我他丫的老干了一年,让我去面试他那不就一悲剧?到底是谁面试谁啊?”我说:“那行,我去跟他学习一把
·
2011年09月03日 昨天下午我正在用虚拟机聊QQ,突然李总监站在我身后说:“小郝,你在干嘛啊?”心想:“靠,妈的,什么情况?丫的,来了也不吱一声。这下肯定悲剧了。”但我还是假装很镇定地说:“没干什么啊。”他又说:来了一个有四年经验搞C#的程序员,你去看看他的技术怎么样?心想:“靠,人家干了四年了,我他丫的老干了一年,让我去面试他那不就一悲剧?到底是谁面试谁啊?”我说:“那行,我去跟他学习一把。”话音刚落,三十六计,关QQ走为上策。 走到会议室,我一打开门,抬头一看,我靠,这哥们身高八尺有余,着装很有范,脸上挂满了自信,真的堪比“犀利哥”?一看到此人我就不由得想起了周星驰的经典台词:你那忧郁的眼神,唏嘘的胡渣子,神呼奇迹的DotNetFramework技术,还有那杯晶莹透亮的马蒂尼,都掩饰不住你的出众,但是没有用的,行有行规,再怎么出众也要被我面试吧! 在和他简单聊了一些其它的问题后,我说:“那我们交流、探讨一下技术方面的知道吧?”(到此面试正式开始) 我问:“请问您有几年的工作经验了?” 对方答曰:“四年。” 1.(至此我开始的第一个问题的发问) (我说:)我们都是搞C#的,即都是靠windows操作系统混饭吃的,先谈谈windows吧。当我们在windows操作系统中打开多个应用程序和软件时,我们用鼠标或键盘点击某一个软件,操作系统为什么能够知道我们操作了哪一个程序并对你的请求做出响应,这是因为windows系统为运行在它上面的所有程序创建了消息队列,windows操作系统是以消息的形式把输入传给窗口过程,消息是由windows系统或应用程序产生的.windows系统对每一个输入事件都要产生消息,那么请问什么是消息路由?消息路由有哪两种形式,区别是什么?什么是消息环?什么是窗口过程? 他沉思了一会儿说:“我觉得你问的这个东西和我的技术方向C#没有关系吧?” 我靠,此时我的心拔凉、拔凉,我稍微想了一下,对他说:“我觉得关系很密切,因为我们用C#开发的所有程序和软件都在运行在Windows操作系统上,所以作为一个程序开发者就必须了解操作系统对你的程序和软件的管理和运行的一些机制和策略。这就像是一个公民生活在一个国家就必须遵守这个国家的法律一样,必须知道犯了抢劫、杀人、贩毒、强奸罪之后受到什么样的法律制裁一样。所以我觉得作为一个Programmer就必须了解操作系统对运行在它上面的程序的管理策略。” 2.(至此我开始的第二个问题的发问) 我说:“请问你用过WCF模式没有?” 他说:“当然用过,而且用的比较多。” 我说:“很好,请你简述一下WCF中客户端、证书、信道和服务端的工作原理及数据交互原理?” 他稍微思考了一下说:“如果你让我在这现场做一个WCF的例子,我会马上做出来让你看。但它的工作原理和数据交互原理我还真的有点不清楚。” 我说:“我也相信,你能够马上做出一个WCF的例子来给我看,但我现在不是想看而是想听你说说他的原理,如果我想看的话,我自己会做一个。” 3.(至此我开始的第三个问题的发问) 我说:“我们在用完一个DataSet或DataTable之后,在调用了它的Dispose()方法为什么它没有被立即释放?我们在调用完Office的COM组件后需要调用System.Runtime.InteropServices.Marshal.ReleaseComObject(object)方法来释放,请问这个方法与windows中的哪些服务进行了交互?请你谈谈GC回收托管资源和非托管资源的策略。” 他说:“调用DataSet或DataTable的Dispose()方法应该会释放掉它所占用的资源的,System.Runtime.InteropServices.Marshal.ReleaseComObject(object)方法没怎么用过,所以对他不是很清楚。收托管资源和非托管资源没有了解过。” 我说:“你有机会的时候可以试一下,在用完一个非托管资源类型像DataSet、DataTable、COM组件对象试下,看用Dispose()方法能不能释放掉。” 4.(至此我开始的第四个问题的发问,我的目的很简单,是想看一下他有没有学习DotNetFramework4.0里面的新东西) 我说:“请您谈谈DotNetFrameWork中的协变和逆变。” 他问我:“什么是协变和逆变?” 我说:“这种问题不要问我,如果有时间的话去问问DotNetFramework4.0吧!” 我说:“技术知识的讨论就至此为至吧?我去找我们总监来和你谈谈。” 他有点不服的说:“我觉得你问的这些东西怎么都是DotNetFramework中的原理?我觉得作为一个软件工程师只要能够按照要求完成相应的软件开发就可以了,如果我和你一样工作个五六年,这些原理我也会懂得!” 靠,听了这句话我真想过去揣他几脚。 我犹豫了一下说:“作为一个程序开发者,首先就要对操作系统及自己所掌握语言的开发环境的工作原理和运行机制做一个比较深入的理解,这样,自己在开发程序时候才能知道自己所做的每一步在干嘛,自己所写的程序在编译系统和操作系统上是怎么转的。否则所写的程序就是一个垃圾。” 我提高了一下嗓门说:“我靠,我有那么老吗?我去年刚毕业的时候这些东西我也不知道,去年参加第一份工作时我甚至不会使用C#语言进行简单的程序开发,因为在学校里没有开设C#这门课,我只是拿着C#教村看了两周时间,然后做了两个毕业设计,最后就到第一家公司开始工作搞C#了。当时也没有人告诉我说我去学习和了解这些东西,这些东西都是要靠自己一点一点去学习和积累的。” 就这样,一个四年工作经验的C#程序员就被我给秒杀了。 我出了会议室跟总监说:“我觉得他对C#的运行机制和环境、以及C#里面的有些理论知识掌握的很不够,和有四年工作经验的人相比应该还是有一定的差距。自信度是够了,但人有点内向。你过去再看看呗” 我看总监走了,立马启动虚拟机,打开QQ,继续聊天。
更多推荐
已为社区贡献3条内容
所有评论(0)