又一个有趣的面试题
浏览:3486次 出处信息
大家还记得前些天的那个火柴棍式的面试题吗?很有趣吧。下面是我今天在StackExchange上看到的一个有趣的面试题。大家不妨一起来思考一下。问题如下――
有两个相同功能代码如下,请在在A,B,C是什么的情况下,请给出三个原因case 1比case 2快,还有三个原因case 2会比case 1要执行的快。(不考虑编译器优化)
for (i=0; i<N; ++i){ A; B; C; } |
for (i=0; i<N; ++i){ A; } for (i=0; i<N; ++i){ B; } for (i=0; i<N; ++i){ C; } |
我的第一个反应是――
- case1 要快一些,因为只有一个i++的i<N的操作,而case 2却有三个,这在点上,case 1就比case 2要快。
- case2如果要快的话,有一个原因是,A, B, C其中一个需要去先获得一个资源(比如一个锁),在case1下,每次都要去拿这个资源,而case2下,只需要拿一次然后。但这个可能是不对的,因为我无法想出一个相同的语句块放在case 1中会和放在case 2中有差别。(不过可能比较接近了)
继续思考:这个题有点像是“同步和异步”的问题,case 1是同步,case 2是异步,所以,异步快于同步,也许可以从这个方向出发,写出A, B, C的语句块。
不过,其要三个原因啊。各位,你们有想法吗?
―-更新 1―-
刚才在twitter上与人讨论,发现又有一种情况,case 2要比case 1要快。比如,A, B, C分别访问是不同的内存块(数组),那么case 1就得在不同的内存块上来回切换寻址,而case2则可以连续地访问内存块。访问连续的内存效率要高。尤其是三块大内存。
―-更新 2―
正如本贴评论中所说的,CPU的cache也是其中一个因素。大家对底层知识了解的都很不错啊。赞一个。
建议继续学习:
- MacBook Air与工作效率 (阅读:9504)
- 几个内存相关面试题(c/c++) (阅读:7987)
- 加班与效率 (阅读:4740)
- MySQL vs NoSQL 效率与成本之争 (阅读:3794)
- 冗余索引对查询效率的影响 (阅读:3661)
- PHP 序列化与 .NET 中其它方式序列化的效率对比 (阅读:2553)
- 良好的书写规范提高PHP代码执行效率 (阅读:2542)
- 关于工作效率的心得分享 (阅读:2292)
- 前端开发,最好是多好? (阅读:2249)
- 研发流程中与其他岗位协作效率的提升 (阅读:2145)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Lua GC 的源码剖析 (4)
后一篇:使用Jscex实现排序算法动画 >>
文章信息
- 作者:陈皓 来源: 酷壳 - CoolShell.cn
- 标签: 效率 面试题
- 发布时间:2011-04-02 13:46:33
建议继续学习
近3天十大热文
- [66] Oracle MTS模式下 进程地址与会话信
- [66] Go Reflect 性能
- [65] 如何拿下简短的域名
- [59] android 开发入门
- [59] 图书馆的世界纪录
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [58] 【社会化设计】自我(self)部分――欢迎区
- [53] 视觉调整-设计师 vs. 逻辑
- [47] 界面设计速成
- [46] 读书笔记-壹百度:百度十年千倍的29条法则