首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试官:【int i = 6; i += i - 1; 】i 等于什么?

Java 是一种严格从左到右求值的语言,这意味着:当执行 i += i - 1; 时,右侧表达式 i - 1 首先被计算,然后将结果赋值给 i。...编译过程中的优化编译器在处理表达式时,也会进行一定的优化,但这些优化不会影响程序的语义。在这种情况下,编译器可能会将变量 i 的值暂时保存在寄存器中,直到计算完成之后才将最终结果写入内存中的 i。...但是,这个减法只是在操作数栈中计算,并不会影响局部变量表中 i 的值,直到整个表达式计算结束(即 i + (i - 1) 完成后)才会通过 istore_1 将结果 11 存入局部变量表,更新 i 的值...每次从局部变量表加载 i 的值到操作数栈时,栈中的操作仅影响栈,而不会影响局部变量表中 i 的值。局部变量表中的 i 只有在 istore_1 这一指令执行后才更新。...只有当表达式计算结束时,新的结果 11 才会通过 istore_1 更新 i 的值。因此,i 在中途不会变成 5,而是一直保持为 6,直到计算结果 11 最后被存储到局部变量表中。

29320

程序该如何优化?

第一时间看干货文章 1 对程序进行优化,通常是指优化程序代码或程序执行速度。优化代码和优化速度实际上是一个予盾的统一。...一、程序结构的优化 1、程序的书写结构 虽然书写格式并不会影响生成的代码质量,但是在实际编写程序时还是应该尊循一定的书写规则,一个书写清晰、明了的程序,有利于以后的维护。...8、尽量少用全局变量,多用局部变量 因为全局变量是放在数据存储器中,定义一个全局变量,MCU 就少一个可以利用的数据存储器空间,如果定义了太多的全局变量,会导致编译器无足够的内存可以分配;而局部变量大多定位于...但是在循环中有通过循环变量“i”读写数组的指令时,使用预减循环时有可能使数组超界,要引起注意。...如果直接生成所需的表比较困难,也尽量在启动时先计算,然后在数据存储器中生成所需的表,后以在程序运行直接查表就可以了,减少了程序执行过程中重复计算的工作量。

1.7K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    高性能JavaScript

    从《高性能JavaScript》一书中的整理笔记: 1、将经常使用的对象成员、数组项、和域外变量存入局部变量 原因:数据存储位置对大地代码整体性能会产生重要的影响,直接变量和局部变量的访问速度快于数组和对象成员...5、DOM操作量化问题: // 在循坏中更新页面,问题所在:每次循环都对DOM元素访问了两次 // 一次是读取document.getElementById('here').innerHTML的内容...7、遍历数组明显快于同样大小和内容的HTML集合 8、 for循环时,HTML某元素集合的长度不建议直接作为循环终止条件,最好将集合的长度赋给一个变量,然后使用变量作为循环终止条件; 原因:当每次迭代过程访问集合的...length时,它导致集合器更新,在所有的浏览器上都会产生明显的性能损失。...14、减少对布局信息的查询次数,查询时将他赋值给局部变量参与计算。

    70310

    java字节码

    我们都知道Java字节码是JVM所使用的指令集。java字节码可以分为如下几类: 操作数栈   Java 方法的栈桢分为操作数栈和局部变量区。...当调用了有返回值的方法却不用返回值时需要有个pop指定,如下图所示: ?...Idc加载常量池中的例子 将局部变量区的值加载到操作数栈的指令   Java 虚拟机将局部变量区当成一个数组,依次存放 this 指针(仅非静态方法),所传入的参数,以及字节码中的局部变量。...存储在局部变量区的值,通常需要加载至操作数栈中,方能进行计算,得到计算结果后再存储至局部变量数组中。...表求的含义为:将局部变量数组的第 M 个单元中的 int 值增加 N,常用于 for 循环中自增量的更新。字节码如下图所示: ?

    1.6K20

    54个提高PHP程序运行效率的方法

    使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。 4. 在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。 5. 注销那些不用的变量尤其是大数组,以便释放内存。 6....用@屏蔽错误消息的做法非常低效。 15. 打开apache的mod_deflate模块。 16. 数据库连接当使用完毕时应关掉。 17. row[‘id’]的效率是row[id]的7倍。 18....尽量不要在for循环中使用函数,比如for (x=0; x < count(array); x)每循环一次都会调用count()函数。 20. 在方法中递增局部变量,速度是最快的。...递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。 24. 仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。...当执行变量i的递增或递减时,i++会比++i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要i慢一些。

    3K30

    C语言中循环语句总结

    do while循环 使用条件:使⽤在循环体⾄少被执⾏⼀次的场景下 eg:输⼊⼀个正整数,计算这个整数是⼏位数?...即使 n 的初始值为 0,循环体内的代码仍然会执行一次,然后才会检查循环条件。因此,即使 n 的初始值为 0,cnt 的值也会至少增加一次,最终输出 1。...与之相反的是 while 循环,它会先判断循环条件,然后再执行循环体。如果你希望 n 的初始值为 0 时不进行计算,可以改用 while 循环并将判断条件放在循环之前。  ...环中 continue 后的代码,直接去到循环的调整部分。...对于while循环的修改条件在continue后面所以当i=5时,他没法继续修改,而是陷入i=5的死循环  对于for循环的修改条件在continue上面,所以当i=5时,它会跳出printf函数来到上面进行条件修改

    13310

    前端开发中真的没用到闭包嘛?九个日常案例了解常用闭包

    简单来说,闭包是一个函数,它能够记住并访问定义时的作用域,即使这个函数在外部作用域执行时,仍然能够访问到原本定义时的局部变量。...闭包的基本特性 访问外部变量:闭包允许内部函数访问外部函数的局部变量。 变量的持久性:即使外部函数已经执行完毕,闭包中的内部函数仍然可以访问外部函数中的变量。...计算属性中的闭包 计算属性是 Vue 中的一个重要特性,它可以依赖其他数据,并在依赖的数据变化时自动重新计算。...计算属性背后也有闭包的实现:每当计算属性被访问时,它会闭包保存相关的响应式依赖,直到计算属性的值被更新。...9. vue v-for 循环中的闭包 在 Vue 的 v-for 循环中,也可能会使用闭包,尤其是当每个循环项都绑定了事件时。循环中的每个函数都会形成闭包,保存其循环上下文。

    7310

    说说提高Python运行效率的技巧?

    1、使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存。 一方面可以提高程序性能,局部变量查找速度更快;另一方面可用简短标识符替代冗长的模块变量,提高可读性。...2、使用较新的Python版本 Python已经更新了很多个版本,每个版本的Python都会包含优化内容,使其运行速度优于之前的版本,所以大家记得经常更新版本哦!...因此如果涉及到求list交集,并集或者差的问题可以转换为set来操作。 8、循环优化 每种编程语言都会强调需要优化循环。当使用Python的时候,你可以依靠大量的技巧使得循环运行得更快。...技巧 1:减少循环内部不必要的计算 技巧 2:嵌套循环中,尽量减少内层循环的计算 技巧 3:尽量使用局部变量 技巧 4:使用 join() 连接字符串 9、交叉编译你的应用 计算机其实并不理解用来创建现代应用程序的编程语言...,计算机理解的是机器语言。

    2.1K20

    老伙计,提高自己的并发技能,先从锁优化开始吧

    createArrays()这个方法中,是一个局部变量,在线程栈中分配的,属于线程私有的数据,因此不存在资源竞争的情况。...在上面例子中,变量vector 没有逃出createArrays()这个函数的方位,因此虚拟机才会就将这个变量的加锁操作去除。...比较并交换 CAS的算法过程是:包含三个参数 CAS(V,E,N),其中V表示要更新的变量,E表示预期值,N表示新值。仅当V值等于E值时,才会将V值设置为N值。最后返回当前V的真实值。...当多个线程同时使用CAS操作一个变量时,只有一个会胜出,并成功更新,其他均会失败。失败的线程不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。...当AtomicStampedReference设置对象值时,对象值及时间戳都必须满足期望值,写入才会成功,因此,即使对象之被反复读写,写回原值,只要时间戳发生变化,就不能正确写入。

    60820

    react hooks 全攻略

    useEffect 的第二个参数是一个依赖数组,指定影响 useEffect 执行的变量。当这些变量的值发生变化时,useEffect 会重新执行回调函数。...# 为什么使用 useRef 在 JavaScript 中,我们可以创建变量并将其赋给不同的值。然而,在函数组件中,每次重新渲染时,所有的局部变量都会被重置。...当 a 或 b 发生变化时,useMemo 会重新计算结果;否则,它将直接返回上一次缓存的结果。 当依赖项发生变化时,useMemo 会重新计算计算函数,并更新缓存的结果。...如果没有计算操作,或者根据依赖项变化时仅进行简单的引用比较,那么使用 React.memo 或其他适当的优化手段可能更合适。...它对于传递给子组件的回调函数非常有用,确保子组件在父组件重新渲染时不会重新渲染。 useMemo 用于缓存计算结果 并且只有当依赖项发生变化时才会重新计算。

    44940

    【Java】循环语句for、while、do-while

    循环语句 1.1 循环概述 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环 体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false...①负责完成循环变量初始化 ②负责判断是否满足循环条件,不满足则跳出循环 ③具体执行的语句 ④循环后,循环条件所涉及变量的变化情况 循环练习:使用循环,计算1-100之间的偶数和...③具体执行的语句 ④循环后,循环变量的变化情况 输出10次HelloWorld do...while 循环的特点:无条件执行一次循环体,即使我们将循环条件直接写成 false ,也依然会循...原因是 for 循环结束,该变量就从 内存中消失,能够提高内存的使用效率。 在已知循环次数的时候使用推荐使用 for ,循环次数未知的时推荐使用 while 。...扩展知识点 2.1 死循环 死循环: 也就是循环中的条件永远为 true ,死循环的是永不结束的循环。例如: while(true){} 。

    6.8K10

    循环中的异步&&循环中的闭包

    ,所以到这了上面的问题 使用var 定义变量的时候,作用域是在foo函数下,在for循环外部,在整个循环中是全局的,每一次的循环实际上是为index赋值,循环一次赋值一次,5次循环完成,index最后的结果赋值就为...,所以加入了异步队列,当同步的for循环执行完毕后,再去执行异步队列,setTimeout中有唯一的一个参数数index 方式三可行,是因为let是块级作用域,每次for执行都会创建新的变量index,...fun中的局部变量j,所以当fun执行完毕后,变量j不会被释放,这就形成了闭包 当然我们可以对此进行一下优化 const array = [1, 2, 3, 4, 5] function...,结果是相同的 总结 for循环本身是同步执行的,当在for循环中遇到了异步逻辑,异步就会进入异步队列,当for循环执行结束后,才会执行异步队列 当异步函数依赖于for循环中的索引时(一定是存在依赖关系的...,不然不会再循环中调动异步函数)要考虑作用域的问题, 在ES6中使用let是最佳的选择, 当使用var时,可以考虑再引入一个索引来替代for循环中的索引,新的索引逻辑要在异步中处理 也可以使用闭包,模拟实现

    1.6K20

    使用 Visual Studio 调试 .NET 控制台应用程序

    当程序提示输入名称时,在控制台窗口中输入字符串,然后按 Enter。 到达断点时,程序停止执行,然后执行 Console.WriteLine 方法。...“即时”窗口显示字符串变量的值和 值的属性。 此外,“局部变量”窗口中也会更新变量值。 按 F5 继续执行程序。 继续操作的另一种方法是从菜单中选择“调试”“继续”。...String.IsNullOrEmpty(name) 每次命中断点时,调试器都会调用 String.IsNullOrEmpty(name) 方法,仅当该方法调用返回 true 时,它才会在此行上中断。...选择“局部变量”窗口,其中显示当前正在执行的方法的局部变量值。 在这种情况下,Main 是当前正在执行的方法。 请注意,name 变量的值为 "" 或 String.Empty。...“局部变量”窗口显示通过 DateTime.Now 属性赋值后的 变量值。 控制台窗口保持不变。 按下 F11。

    2.1K30

    说说提高Python运行效率的技巧?

    今天具体来说一下提高python执行效率的方法,下面给大家介绍10种方法 。 1、使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存。...一方面可以提高程序性能,局部变量查找速度更快;另一方面可用简短标识符替代冗长的模块变量,提高可读性。...2、使用较新的Python版本 Python已经更新了很多个版本,每个版本的Python都会包含优化内容,使其运行速度优于之前的版本,所以大家记得经常更新版本哦!...技巧 1:减少循环内部不必要的计算 技巧 2:嵌套循环中,尽量减少内层循环的计算 技巧 3:尽量使用局部变量 技巧 4:使用 join() 连接字符串 9、交叉编译你的应用 计算机其实并不理解用来创建现代应用程序的编程语言...,计算机理解的是机器语言。

    66930

    变量放在堆还是栈_堆和栈的共同特点

    大家好,又见面了,我是你们的朋友全栈君。 内容会持续更新,有错误的地方欢迎指正,谢谢!...什么是栈区,什么是堆区 栈区(stack):由编译器自动分配释放 ,存放函数的参数值、局部变量的值等,内存的分配是连续的,类似于数组,当我们声明变量时,编译器会自动接着当前栈区的结尾来分配内存。...程序结束时由OS回收。 全局区(静态区)存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束时由OS回收。...“123456 “优化成一块 }在常量区,编译器可能将它与p3指向的 “123456 “优化成一块 } 栈区和堆区的关系 1.当一个函数调用完返回后它会释放该函数中所有的栈空间。...栈是由编译器自动管理的,不用你操心。堆是动态分配内存的,并且你可以分配使用很大的内存,但是用不好会产生内存泄漏(比如在for循环中忘记释放申请的内存)。

    73650

    Web性能优化系列:10个JavaScript性能提升的技巧

    定义局部变量 当一个变量被引用的时候,JavaScript将在作用域链中的不同成员中查找这个变量。...额外的变量意味着,当任何变量需要被访问的时候,JavaScript引擎都需要先扫描with()语句产生的变量,然后才是局部变量,最后是全局变量。...在循环时将控制条件和控制变量合并起来 提到性能,在循环中需要避免的工作一直是个热门话题,因为循环会被重复执行很多次。所以如果有性能优化的需求,先对循环开刀有可能会获得最明显的性能提升。...由于大量的DOM selection操作,HTML集合对象相当的慢,而且还会带来很多额外的问题。正如DOM标准中所定义的那样:“HTML集合是一个虚拟存在,意味着当底层文档被改变时,它们将自动更新。”...尽管集合对象看起来跟数组很像,他们在某些地方却区别很大,比如对于特定查询的结果。当对象被访问进行读写时,查询需要重新执行来更新所有与对象相关的组分,比如 length。

    1K20

    PHP高效率写法(详解原因)

    16.在类的方法里建立局部变量速度最快,几乎和在方法里调用局部变量一样快; 17.建立一个全局变量要比局部变量要慢2倍; 由于局部变量是存在栈中的,当一个函数占用的栈空间不是很大的时候,这部分内存很有可能全部命中...相反,如果一个函数里既使用了全局变量又使用了局部变量,那么当这两段地址相差较大时,cpu cache需要来回切换,那么效率会下降。...当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它们能立即变快,没用的。...54、压缩输出:打开apache的mod_deflate模块,可以提高网页的浏览速度。 (提到过echo 大变量的问题) 55、数据库连接当使用完毕时应关掉,不要用长连接。...以上都是关于php代码的优化,下面是从整体结构方面优化PHP性能: 整体结构方面优化PHP性能 1.将PHP升级到最新版   提高性能的最简单的方式是不断升级、更新PHP版本。

    1.2K20

    PHP性能规范

    17 局部变量比全局变量快2倍 由于局部变量是存在栈中的,当一个函数占用的栈空间不是很大的时候,这部分内存很有可能全部命中cache,这时候CPU访问的效率是很高的。...相反,如果一个函数里既使用了全局变量又使用了局部变量,那么当这两段地址相差较大时,cpu cache需要来回切换,那么效率会下降。...19 提前声明局部变量 建立一个未声明的局部变量要比一个已经定义过的局部变量慢9-10倍。...isset($foo{5})) { echo "Foo is too short"; } 40 使用++$i递增 当执行变量$i的递增或递减时,$i++会比++$i慢一些。...性能: 2 整体结构优化PHP性能 1 将PHP升级到最新版 提高性能的最简单的方式是不断升级、更新PHP版本。

    1.1K40

    【Java】Java中栈溢出的常见情况

    大量方法调用或者局部变量 栈溢出错误(StackOverflowError)经常源于大量的方法调用或者在每个方法中存在大量的局部变量。...在Java中,每个线程都拥有自己的栈空间,用于存储方法调用、局部变量和部分对象引用。当程序调用一个方法时,会在栈上分配一定的内存空间,用于存储方法的参数、局部变量和返回地址等信息。...当方法调用次数过多时,栈空间可能会被耗尽,导致栈溢出错误的发生。 3. 循环递归 无限递归在循环中缺少适当的终止条件,或者终止条件永远不被满足时,会导致递归无限进行,最终耗尽栈空间,触发栈溢出错误。...这也是可能会发生的一种条件,但在实际的开发过程中,并不算常见的一种,了解认识即可。 总结 当栈空间耗尽时,Java 虚拟机会抛出 StackOverflowError 异常,表明栈溢出错误已经发生。...为了解决这个问题,可以增加栈空间的大小(通过 -Xss 参数),减少递归的深度或者局部变量的数量,或者优化代码以减少方法调用的层次。

    35210
    领券