当前位置:首页 > 科技  > 软件

一个关于 i++ 和 ++i 的面试题打趴了所有人

来源: 责编: 时间:2023-09-28 10:04:33 385观看
导读大家好,我是哪吒。公司最近在招聘实习生,作为面试官之一的我,问了一道不起眼的经典面试题。一、i++和++i有啥区别?大部分的面试者会这样答:i++ 返回原来的值,++i 返回加1后的值。i++是先赋值,然后再自增;++i是先自增,后赋值。

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

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

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

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

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

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

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

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

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

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

  • 取值
  • ++操作
  • 赋值

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

但是,你想啊,如果当线程执行到取值或者++操作时,线程突然切换了,会不会有问题呢?pN528资讯网——每日最新资讯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();    }}

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

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

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

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

标签:
  • 热门焦点
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。&ldquo;提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
  • 三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    据官方此前宣布,三星将于7月26日也就是今天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top