xingd.net

.net related techonology
posts - 54, comments - 601, trackbacks - 5, articles - 2

今天面试中的两个问题

Posted on 2006-04-08 12:47 xingd 阅读(2678) 评论(40)  编辑 收藏 所属分类: 非技术区

今天面试时被问到两个问题,记录如下。

1. C++语言中,int test(int iVal) 这样的函数定义有没有问题

偶回答没有问题,面试官说应该写为int test(const int& iVal),偶跟他争论说传值没有效率影响,他说这是公司代码规定。

偶于是就有几个问题了,传值和传引用代表着两种语义,在不同情况下应该有不同的应用,为何要这样硬性规定呢。为什么.NET里要设计值类型和引用类型?为什么STL和大量的C++库中int, size_t, char这样的类型都是直接传值呢。偶有一些观点,但也不知是否正确,先拿出来请大家共议一下了。况且如果是公司规定要const &,偶说这个函数定义没问题,也不为过吧。

而且似乎现在无论C++还是C#,都不会推荐在iVal中加入那么一个类型前缀吧。

2. int i32 = 10;  object o = i32;  Int64 i64 = (Int64)o;

面试官在写的时候,偶回答说是box和unbox。他说偶回答对了一半,接着问我这样写有没有问题,偶说有啊,类型不匹配,会出异常。面试官又说如果Int32实现了IConvertible呢,偶说还是有问题,于是面试官很有自信的说,你回去自己试试看吧。

面试官的要求偶哪敢不听,于是回到家马上开了VS 2005,结果运行一看,Invalid Cast。装箱后的object保存了原有数据的类型,在拆箱时会对类型进行检查。box和unbox各对应MSIL中的一条语句,为了保持效率,是不会在这个过程中考虑IConvertible的,在运行时用Reflection去检查对象是否实现某接口的代码有点高了吧。

由此,给要去接受面试的朋友一些建议吧,自己认为对的,就一定要坚持。在面试别人的时候,也不用一定要把对方难住,况且术业有专攻,难倒了面试者,就能说明什么问题吗?

Feedback

#1楼    回复  引用    

2006-04-08 13:29 by susam [未注册用户]
这是肚量问题,作为面试官,他就觉得比你懂得多,而且只有你错的份,没有他不对的份。很多中国人都有这种情结,作了领导、或者位置在你之上,他对你说的东西就是皇上的圣旨

#2楼    回复  引用  查看    

2006-04-08 14:26 by kwklover      
这样的公司的开发团队十有八九死气沉沉!

我觉得一个优秀的面试人员,考察对方的思路胜过直接的结果.

观点相同,抱以会心的微笑,观点相背,多问几个为什么,又何防?

#3楼    回复  引用  查看    

2006-04-08 14:32 by Cure      
此面试官必定是那种技术牛X,但是心胸狭窄的人。

#4楼    回复  引用  查看    

2006-04-08 14:36 by edison1024      
不论是CPP或CS,类型前缀在现在确实已经不提倡的了。呵呵。

顺便多说几句,除非是高校招聘考察面试者的基本功会在诸如此类的问题上纠缠外,这种题目实在是没有营养。

#5楼    回复  引用  查看    

2006-04-08 14:38 by edison1024      
@Cure

以本人的从业经历来看,我敢下断语,此面试官绝对牛X不到哪去。呵呵。

#6楼    回复  引用    

2006-04-08 15:25 by roydu [未注册用户]
偶觉得问这样的问题很无聊,如果他自己觉得对的话,那更没必要问你。

如果碰到这样的问题,如果非常想进这个公司的话,大可当做没听见,应付一下

如果无所谓的话,直接走人得了,跟这样的人讨论是浪费时间

#7楼 [楼主]   回复  引用  查看    

2006-04-08 15:39 by xingd      
摘自IT公司榜中另一位在这家公司面试过的朋友的评论"


"在此前过程都比较顺利也都还保留一定程度正面印象,当时我有不止一位leader进去面试,到了这里基本上我开始对该公司的映像大大折扣,原因就是:很多方面都体现了前面一些朋友对所谓中层管理人员的Complain!
体现在:
1....(省略)让我做了个简短的个人介绍,而且介绍时根本没仔细听我介绍内容,在很随意的来回翻看简历,这首先是对面试者从某种程度上是不尊重的!
2. 当我个人介绍完成后,后面的面谈就完全暴露出做为一个leader的不成熟,在未了解我个人实际工作经验和能力以及他们职位需要的要求的联系情况下,开始了接近傲慢的表演,是真的很明显的可以感觉到,因为他们所提问的内容和方式完全是想显示他们个人有多少能力,以及完全对你的不屑一顾!从某些方面就好像希望能考倒你,你答不出来似乎他们就很开心的样子,呵呵,这点挺有意思的!
"

#8楼    回复  引用  查看    

2006-04-08 15:48 by 笑望人生      
说实话,这个公司的技术水平我不敢恭维。

来做面试官的,一般是公司中技术部门的负责人或者是副手,外加一个公司人力资源部门的人,两个人面试的问题各有分工。

贴主说的那个面试负责人提出的问题基本上是属于“奇技淫巧”之类,意义与茴香豆的“茴”字的几种写法完全相同。

如果是业余时间,与几位好友闲谈时说这些问题,是可以的,不过,在面试的时候问这些问题,就是被面试人答不出来,与被面试人的技术水平完全不相干。公司让你来面试找人,是花钱,花时间,花代价的,而面试官为了自己的喜好用这些问题难住被面试人,除了获得心理上的优势以外,什么好处都没有。而且有可能真正掌握技术的高手一看这样的面试,直接就放弃了。因为明显可以看出,连面试官都这样了,这个公司能好到哪里去?

#9楼    回复  引用  查看    

2006-04-08 16:01 by birdshome      
老大,我觉得对你的面试因该是喝茶、吃饭、扯淡。。。

#10楼 [楼主]   回复  引用  查看    

2006-04-08 16:12 by xingd      
@birdshome
偶面试的其他公司都还好,至少不必有笔试了。就这一家,一去先给了偶10几页的笔试题,而且巨多都是考T-SQL的。(MIS程序员试题)。说实话,我真的有几年没写过很多T-SQL了。

#11楼    回复  引用    

2006-04-08 16:15 by 胡便谈谈 [未注册用户]
呵呵,面试官也难做呢。
像这个面试官肯定不是什么高层领导,很可能就是领导叫来的一个技术资格比较老的员工或技术领导。
他招人也要把握好呀,不然招个什么都比自己强,又不听话,以后自己怎么管。一不小心把自己位置抢去了怎么办呀。

#12楼    回复  引用  查看    

2006-04-08 16:22 by wuChang      
这种公司最好别去了

#13楼 [楼主]   回复  引用  查看    

2006-04-08 16:28 by xingd      
还有三个问题,偶觉得回答的不好,让面试管不满意了。

1. 偶说在联想做ERP的时候用的是RUP方法,那是三年前的事情了,偶都记不了那么清楚。面试管一定要偶讲如何严格地执行RUP,以及用好Rational Suite里的哪些工具。偶怯怯的说只用了Rose,如果当时记得导出成了word文档。于是面试管用偶用得什么工具导出word,偶说记不清了。偶的确是记不清了,而且偶当时的确也是用的Rational的软件把word导出来了,这个问题上网查五分钟就有结果了,这个问题对于面试很重要嘛。
2. 后来偶说偶在宏信做BI的时候用的是MSF,面试官问MSF中的三角模型,偶说也记不清了,可能是时间、质量、资源。面试官很斩钉截铁地说你错了,回去看一下。Ok,我错了就错了嘛,干嘛一副老师训学生的口气。
3. 偶说偶用过TDD,于是面试官用偶C++用的什么,偶说是CppUnit,可以通过test类,以及test suite,assert去做单元测试,于是面试官逼问偶那个CppUnit能不能检查代码规范,能不能检查Effective C++, MEC里中的条目。偶心想这个跟TDD没有关系吧,应该用PC-lint或是FxCop做的事吧。不过偶还是实现了面试官的心愿,回答了一个‘不能’。

#14楼 [楼主]   回复  引用  查看    

2006-04-08 16:32 by xingd      
偶回来试验了box/unbox之后,将结果写了封邮件,让他们hr转发给偶的面试官了。

看他们的肚量,如果能够承认技术对错,偶就再继续考虑他们公司。

一个在IT公司榜中位于上海黑榜前二十的公司,偶本来也是不想去面试的,但还是愿意接受这个挑战,去搅一下这混水,要么成功,要么以验证自己能力的限度。不过看来偶似乎还是想得太美好了。

群众的眼睛还是雪亮的。

#15楼    回复  引用    

2006-04-08 17:02 by SoulEdge [未注册用户]
从搂主的描述看,楼主技术应该不错,态度也认真,也有一定的经验。那我觉得,面是这样的人,不用问这些小细节问题。反过来,如果是我,这样面试我的公司我是坚决不会去的,浪费时间。

#16楼    回复  引用  查看    

2006-04-08 17:36 by birdshome      
@xingd
又被忽悠了,msf本来啥也不是(就像今天的google说什么小团队开发,还不都是为了表面宣传),微软后来为了宣传,才总结提出这个什么msf。
msf其实就是拼个人能力,我们常埋愿微软的有些东西里的模块实在是莫名其妙的烂,其实那些东西就是一两个develper加上一个把tester做出来的,如过遇到高手,那做出来的就是好东西,如果遇到个锉人,那个功能就完蛋。

#17楼 [楼主]   回复  引用  查看    

2006-04-08 18:02 by xingd      
@birdshome
MSF也好,RUP也好,偶认为都是为了支撑团队的,而不是限制团队。所以那些细节偶也认为没必要记那么清楚,真要较真,用的时候查就是了。

对了,你blog上那一篇ROLAP里ChildCount的问题,偶对1000这个值比较有印象,似乎在AS 2000的Cube里面可以编辑这个值,好像属性名是LargeMember,可能是Level或是Dimension的属性,你可以找找看一下。

偶机器上只有SQL 2005,找不到这个属性了。ADOMD.NET的文档里对ChildCount的描述是,Gets the estimated count of child members contained in the Member。当值小于LargeMember的值时,可能会正确拿到,超过时,就返回这个值吧。

这只是偶的猜想,还没有试验过。

#18楼    回复  引用  查看    

2006-04-08 18:09 by Aero      
这样的interview实在是有点无聊,楼主不必在意。

#19楼    回复  引用  查看    

2006-04-08 19:03 by birdshome      
@xingd
哦,目前只发现一个用来优化performance的,叫做Large Level Defined as默认是1000,你说的是这个吗?

#20楼 [楼主]   回复  引用  查看    

2006-04-08 20:02 by xingd      
应该是这个吧。不过偶也只是有印象它的值是1000,所以猜想与你有问题有关联。

#21楼    回复  引用  查看    

2006-04-08 21:20 by livesite      
关于第一点,我认为在C++上传址和传值有性能影响,C#把所有的对象都传引用了,但是在C++里面会多出一个内存的copy。

#22楼 [楼主]   回复  引用  查看    

2006-04-08 21:31 by xingd      
@livesite
引用不是Magic,如你所讲,引用实际上是一个传址。那么在函数调用的时候,将一个整数值复制4个byte压入堆栈,与将一个指针压入堆栈,并且进行间接引用,哪一个效率会更高呢?
当然,编译器会做优化,但是对于int这样的简单数据类型,尤其是其长度不大于指针长度的情况下,我并不认为传引用比传值有什么优势。

可以参看C++ STL中方法中大量的size_t, int参数,都是以传值方式调用的。

#23楼    回复  引用  查看    

2006-04-09 15:50 by Justin Wang      
呵,我最近也正在换工作,也面试了几家了,几乎都是要笔试的,弄得我很郁闷,也祝楼主好运吧!

#24楼    回复  引用  查看    

2006-04-09 16:09 by Eunge      
神经病公司……

#25楼    回复  引用    

2006-04-10 02:56 by yisheng2002 [未注册用户]
技术面试就是这样,碰到什么人就聊什么,无所谓对错。
上次我去被尖峰科技一牛哥哥面了,问了好些问题:
1、hash算法。
2、mfc的消息处理方法是怎么对应上的。
都给问得一愣一愣的。不过没啥,答不上不表示不能干,
一切以钱作为标准,:)
(如果回北京,记得请我跟老杜吃饭)

#26楼 [楼主]   回复  引用  查看    

2006-04-10 03:03 by xingd      
@yisheng2002
偶上周从ubi辞职了,外包的项目也迟迟没有开始,所以这段也在看工作方面有没有什么合适的机会。主要是希望在接下来的两三年内在架构设计和开发管理方面继续积累。

#27楼    回复  引用    

2006-04-10 03:10 by yisheng2002 [未注册用户]
:), sigh, 有时候历史真是难以改变,希望我们能再度合作。
dave还没跟你联系?

#28楼 [楼主]   回复  引用  查看    

2006-04-10 03:13 by xingd      
@yisheng2002
项目不是dave的,所以他没跟我继续联系。项目那边说是在现在还不稳定,模块也不清晰,所以要我等。我这次找工作也是比较谨慎,如果没有好的机会我就继续等下去。

#29楼    回复  引用  查看    

2006-04-10 16:38 by 装配脑袋      
int test(const int& iVal)
这个真是极糟, 不仅不快,反而影响效率。不仅仅是因为传引用慢,更因为iVal有了左值语义,那样某些高级优化就会无法起作用,比如把参数放到寄存器里等等。传值本来就不能改原变量,如果参数变量也不能改的话,const就成了,何必const&呢?

#30楼    回复  引用    

2006-04-10 16:58 by 9527 [未注册用户]
呵呵,这样的公司,不去也罢。

#31楼    回复  引用  查看    

2006-04-10 22:18 by livesite      
@xingd
不好意思,没注意int类型。。。。32位的情况下,32位指针确实和32位的int没啥区别,呵呵。如果一个结构体或者一个对象这个就有差距了。

#32楼    回复  引用  查看    

2006-04-10 22:20 by livesite      
@装配脑袋
你传值本身就无法改变,加const多余,const &在大数据对象的时候作用还是很明显的。

#33楼    回复  引用  查看    

2006-04-11 07:57 by 装配脑袋      
int是大数据结构吗?这道题有提到大数据结构吗?若没有提到,那我就int论事。实际上就算存double, _int64等比指针大的内置类型,传值仍比传引用快得多。

#34楼    回复  引用    

2006-05-16 16:26 by 重庆小李 [未注册用户]
Q1,我觉得这个题目太粗浅了。主要问题是考官可以任意操纵结果。你无论如何说,他都可以说你不对。

游戏嘛,偶给别人面食考试题目大都是:
花一个小时设计几个类的原形框架来实现挖金子(或者PacMan这样)的小游戏。这样面食者的O-O能力一下就体现出来了。
记得好多经典的迂腐之作会出这样的问题 i=0;++i++ i++,计算i的结果,看来楼主又碰到了个茴字有四个写法的孔乙己,
真正的高手决不会因自己精通 i=0;++i++ i++自恃为高手,
只能说明井底之蛙,孤芳自赏!

#36楼    回复  引用    

2007-02-28 14:16 by 人渣 [未注册用户]
对这种人,当场嘲笑之。技术上有不懂的很正常,但是硬撑着就不应该了。少一个面试机会又无所谓,丢脸的反正也是他。

#37楼    回复  引用  查看    

2007-04-13 19:28 by wwl      
难道公司就可以不按照标准来写代码?
那样的规定有点画蛇添足.

#38楼    回复  引用    

2007-05-08 21:13 by C# [未注册用户]
以我的經驗這種公司還是別考慮的好
你以為用這種方式面試進去的人都會是怎麼樣的人

#39楼    回复  引用  查看    

2007-05-21 22:48 by Nemo Wang      
@edison1024
在变量前加类型前缀的匈牙利命名法盛行一时,你所谓的不提倡是你有了很强的开发环境,可以随时告诉变量类型。
我们用文本编辑器写程序的穷人们,还是需要类型前缀的

#40楼    回复  引用  查看    

2007-07-19 19:48 by Nineteen@newsmth      
面试嘛,除了面试官面试你,其实他留给你的印象基本上也直接决定了公司给你的感觉.

从你的面试过程上看,这种公司,不去也罢.


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-03-05 20:43 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: