一个关于 i++ 和 ++i 的面试题打趴了所有人
2023-09-28 10:04:33 软件 303观看
摘要大家好,我是哪吒。公司最近在招聘实习生,作为面试官之一的我,问了一道不起眼的经典面试题。一、i++和++i有啥区别?大部分的面试者会这样答:i++ 返回原来的值,++i 返回加1后的值。i++是先赋值,然后再自增;++i是先自增,后赋值。

Iuv28资讯网——每日最新资讯28at.com

大家好,我是哪吒。Iuv28资讯网——每日最新资讯28at.com

公司最近在招聘实习生,作为面试官之一的我,问了一道不起眼的经典面试题。Iuv28资讯网——每日最新资讯28at.com

一、i++和++i有啥区别?

大部分的面试者会这样答:Iuv28资讯网——每日最新资讯28at.com

  • i++ 返回原来的值,++i 返回加1后的值。
  • i++是先赋值,然后再自增;++i是先自增,后赋值。

下面这个才是主菜。Iuv28资讯网——每日最新资讯28at.com

二、高并发场景下i++会遇到哪些问题?

大部分面试者心里肯定在想,这会有啥问题,不就是一个普通的操作嘛!Iuv28资讯网——每日最新资讯28at.com

先从i++操作说起,一个命令可以拆分成三部分:Iuv28资讯网——每日最新资讯28at.com

  • 取值
  • ++操作
  • 赋值

我去,这不是吹毛求疵,鸡蛋里挑骨头嘛!这面试不参加也罢!Iuv28资讯网——每日最新资讯28at.com

但是,你想啊,如果当线程执行到取值或者++操作时,线程突然切换了,会不会有问题呢?Iuv28资讯网——每日最新资讯28at.com

step1:双线程场景

public class ThreadTest1 {    int a = 1;    int b = 1;    public void add() {        System.out.println("add start");        for (int i = 0; i < 10000; i++) {            a++;            b++;        }        System.out.println("add end");    }    public void compare() {        System.out.println("compare start");        for (int i = 0; i < 10000; i++) {            boolean flag = a < b;            if (flag) {                System.out.println("a=" + a + ",b=" + b + "flag=" + flag + ",a < b = " + (a < b));            }        }        System.out.println("compare end");    }    public static void main(String[] args) {        ThreadTest1 threadTest = new ThreadTest1();        new Thread(() -> threadTest.add()).start();        new Thread(() -> threadTest.compare()).start();    }}

Iuv28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-11790-0.html一个关于 i++ 和 ++i 的面试题打趴了所有人

声明:本网页内容旨在传播知识,不代表本站观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。

显示全文

上一篇:利用SpeechToText功能创建交互式语音助手应用程序的实现指南

下一篇:彻底搞懂Spring的Bean加载

最新热点