注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

湖海仙音

我是天边一散仙, 魂游尘世几十年。

 
 
 

日志

 
 

程序员面试(1)  

2011-05-15 21:43:10|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
大大小小的面试经历了无数次,有面试别人的,也有被别人面试的。我对面试的看法是,很多面试只是考考你对程序设计中不常用的那些东西知道多少,这样的面试根本无法在一二个小时之内测出一个人的程序设计能力。几年前我们公司招聘的小个子美国人戴维,曾经在大学(据说是复旦)里面教过书,那时候我的资历不够,没有参加对他的面试,但是丹对他赞不绝口,说他是C++的专家,经常和他探讨技术方面的问题。一年后大家发现这个戴维根本写不出像样的程序,在我们公司被美银收购的裁员危机时丹第一个就裁掉了他。

今天开始探讨一些曾经遇到过的面试问题,有别人问我的,也有我问别人的,希望能够总结一下怎样的面试题才是好的面试题,才能够看出被面试者对程序设计的理解和他的编程能力。

1.delete this 可以吗?

这个问题据说是C++面试必问的问题之一。回答“是”或者“否”都可以,关键是回答接下来的问题:“为什么?”只要能够回答出足够的理由,就可以看出回答者对内存管理的理解程度。

如果回答否的话,理由可能有两个:

1)this是一个客户程序管理的指针,一旦我们做了delete this,这就成为一个dangling pointer,我们无法保证客户程序在这之后会对这个指针做什么操作,所以很容易出问题。
2)如果这是一个在堆栈上的object,delete this可能出错,因为不能释放堆栈上的空间。即使系统容忍这个错误,堆栈被释放时会再次调用destructor,所以调用了两次,可能造成错误。

如果回答是的话,回答原因比较困难,一个比较好的回答是给出一个实例,譬如smart pointer,保存一个reference counter,如果这个reference counter减少到零,也就是说目标指针被释放后,那么这个smart pointer也没有了存在的意义,完全可以被释放掉,所以可以调用delete this.

要进一步讨论的话,delete this无非就是调用destructor并且释放内存,语法上说完全可行。一个人编写小程序这么写无可厚非。但是如果团队合作,谁知道别人会怎么使用我写的程序呢?所以在实际应用中我从来没有使用过。我不相信有什么问题是不这样写就无法做到的。我比较欣赏回答否并且给出理由的,回答是的如果不能给出理由,那就是没有正确理解内存管理。如果给出正确理由,那么很可能是个技术狂人,也很可能在团队合作中比较难以相处。如果我是面试者,我会再问一个问题:你在实际工作中经常这么使用吗?
  评论这张
 
阅读(20)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018