一个关于 i++ 和 ++i 的面试题打趴了所有人
前言
都说大城市现在不好找工作,可小城市却也不好招人。
我们公司招了挺久都没招到,主管感到有些心累。
我提了点建议,是不是面试问的太深了,在这种小城市,能干活就行。
他说自己问的面试题都很浅显,如果答不上来说明基础太弱了。
我问了下面试题,然后我沉默了。
起因
起因就是我嘴欠问了下这个面试题:
i++ 和 ++i 有什么区别,谁的效率更高?并解释出原因。
没错,我竟然答不上来,贼尴尬,心想早知不问了。
主管有些意外,又问了几个别的同事,没一个答上来的。
他脸黑了,周四研发部例会的时候,干脆所有人问了一遍。
好吧,都是工作至少5年以上的Java程序员,没一个人答上来,五花八门的回答,全错。
然后大家就一致决定(主管决定),每周展开一次学习会,要补基础,保持团队学习热情,提升团队技术能力。
本来是为了招人,结果自己人被团灭。
正文
我挤出一个晚上不带娃的时间到处找资料,研究了下这个面试题,在此分享给大家,希望能有帮助。
1、i++ 和 ++i 有什么区别
首先,先看两个小例子:
到这里先停一下,大家自己思考半分钟,觉得打印结果是什么。
然后,我们来看看结果。
没错,第一个打印是 6 和 5,第二个打印是 6 和 6。
这就是他们的区别,解释下原因:
i++:这是后缀递增运算符,先将当前值赋给变量,然后再递增。
++i:这是前缀递增运算符,先递增变量的值,然后再赋给变量。
2、i++ 和 ++i 谁的效率高
这个问题我其实蒙对了,我说是一样高的,但是主管问我原因,我没答上来。
后来告诉我了答案,就是它们被JVM优化后的字节码是相同的,所以效率一样高。
3、字节码指令
然后我就去找了字节码指令的用法,将上面的案例以及两者效率是否一样进行了验证。
指令用法很简单,定位到class文件所在目录,使用
javap -verbose
命令执行即可。
1)、从字节码看区别
我们将前面那个案例,通过字节码指令输出到txt文件中。
在文档编辑器中找到main方法,对这两个字节码内容进行比对,发现确实有如下不同。
可以看到红框部分,刚好佐证了上面解释的区别,i++会先使用当前值,然后再递增;而++i会在递增之后立即使用新值,通过字节码看起来还是挺明显的。
2)、从字节码看谁的效率高
我们依然写个for循环的小例子来做验证。
将这两个类编译后的class通过字节码指令输出到txt中
接下来我们就可以比对下结果了
可以看到,main方法开始,从上到下的字节码是完全一样的,没任何不同。
所以,i++ 和 ++i 的效率本质是一样高的。
总结
其实,我相信很多人都见过这个面试题,甚至在笔试题当中也遇到过。
但工作了这么多年,即使是我,也只是剩下一点印象,也没有真正去研究一下这个简单的问题。
希望这篇文章,给大家有所帮助,也能启发大家如何去研究此类问题。
好了,今天的小知识你学会了吗?
如果喜欢,请点赞+关注↓↓↓,持续分享干货哦!
一个关于 i++ 和 ++i 的面试题打趴了所有人的更多相关文章
- 《招聘一个靠谱的iOS》面试题参考答案(下)
相关文章: <招聘一个靠谱的iOS>面试题参考答案(上) 说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外 ...
- java13-5 JDK1.5以后的一个新特性和Integer的面试题
1.JDK5的新特性 自动装箱:把基本类型转换为包装类类型 自动拆箱:把包装类类型转换为基本类型 注意一个小问题: 在使用时,Integer x = null;代码就会出现NullPointerExc ...
- 招聘一个靠谱的iOS》面试题参考答案(上)
说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...
- 《招聘一个靠谱的iOS》面试题参考答案(上)
说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...
- 一个关于finally和return的面试题
public class Test{ public int add(int a,int b){ try { return a+b; } catch (Exception e) { System.out ...
- 一个区分度很大的iOS面试题
@property 后面可以有哪些修饰符?@property中有哪些属性关键字? 属性可以拥有的特质分为四类: 原子性--- nonatomic 特质 在默认情况下,由编译器合成的方法会通过锁定机制确 ...
- 一个面试题的解答-----从500(Id不连续)道试题库里随机抽取20道题!
做一个考试系统的项目,现在从试题库里面随机抽取20道题 比如我题库有500道题(ID不连续).题目出现了,如何解决呢,随机抽取! 1,我们先把500道题的id存进一个长度为500的数组. 2,实现代码 ...
- 【web前端面试题整理08】说说最近几次面试(水)
为什么换工作 换工作简单来讲一般会归纳为钱不够或者人不对,我们团队氛围很不错,所以基本就定位到钱不够了,而我更多是考虑到以后的职业发展,简单说来就是对以后几年的工作有想法,而这种想法实现不一定能在现在 ...
- C/C++ 笔试题
/////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...
- Android面试题整理【转载】
面试宝典(5) http://www.apkbus.com/android-115989-1-1.html 面试的几个回答技巧 http://blog.sina.com.cn/s/blog_ad ...
随机推荐
- C#使用HtmlAgilityPack解析Html 爬取图片和视频
HtmlAgilityPack简介 HtmlAgilityPack是.net下的一个HTML解析类库.支持用XPath来解析HTML. 问题来了,有人就会问为什么要使用能XPath呢? 小编答:因为对 ...
- Linux下NFS服务配置
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...
- 细节决定成败,聊聊JS的类型(上)
今天我们来讲讲 JavaScript 的内容,在这个部分,我首先想跟你聊一聊类型. JavaScript 类型对每个前端程序员来说,几乎都是最为熟悉的概念了.但是你真的很了解它们吗?我们不妨来看看下面 ...
- 一份保姆级的Stable Diffusion部署教程,开启你的炼丹之路
市面上有很多可以被用于AI绘画的应用,例如DALL-E.Midjourney.NovelAI等,他们的大部分都依托云端服务器运行,一部分还需要支付会员费用来购买更多出图的额度.在2022年8月,一款叫 ...
- 创建属于自己的github、使用git提交、更新代码至github、写好readme
1. 在github上创建一个Repository 点击github网站,你可以用你的邮箱先注册一个账号. 点击New,转到创建一个repository的界面,如下图所示,你可以填写你的Reposit ...
- python的jsonpath 提取器
jsonpath 解析 接下来讲一个非常强大并且方便的 jsonpath 专门用于 json 解析,解决路径深的老大难问题!先安装依赖包 pip install jsonpath 学习jsonpath ...
- 【SpringBoot】 集成 Ehcache
SpringBoot ehcache 缓存 简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点, 是 Hibernate 中默认CacheProvider.Ehcache ...
- 从0开发WebGPU渲染引擎:实现路径追踪
大家好,本文基于WebGPU的计算着色器实现了基础的路径追踪器,支持Middle BVH和No BVH两种加速结构 我主要是将离线渲染零基础实战开发培训班(一期)->第二十九节课的代码移植到We ...
- shell 代码风格
以终为始 initramfs_cgz=/srv/initrd/osimage/$os/$os_arch/${os_version%-iso}/$(date +"%Y%m%d").0 ...
- 洛谷 Luogu P1038 [NOIP2003 提高组] 神经网络
这题看着很吓人实则很简单.求输出层,正着求很麻烦,因为知不道谁连向这个点,所以可以反向建边,反着求. 拓扑+dfs,时间复杂度 \(\text{O(n + m)}\) #include <ios ...