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

Java面试题-基础篇四

两个或一个都有可能,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。...这个String类提供了数值不可改变的字符串。 而这个StringBuffer类提供的字符串可以进行修改。 当你知道字符数据要改变的时候你就可以使用StringBuffer。...异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。...9、Java 中堆和栈有什么区别? JVM 中堆和栈属于不同的内存区域,使用目的也不同。栈常用于保存方法帧和局部变量,而对象总是在堆上分配。...栈:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间

48530

Java面试题-基础篇三(干货)

两个或一个都有可能,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。...异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。...异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java使用面向对象的方式来处理异常...39、Java 中堆和栈有什么区别? JVM 中堆和栈属于不同的内存区域,使用目的也不同。栈常用于保存方法帧和局部变量,而对象总是在堆上分配。...栈:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间

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

    基础篇之二

    两个或一个都有可能,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。...异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。...栈:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间...字符向字节转换时,要注意编码的问题,因为字符串转成字节数组,其实是转成该字符的某种编码的字节形式,读取也是反之的道理。 13、什么是java序列化,如何实现java序列化?...GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的

    55650

    第4章 | 所有权

    施加这些限制的最终目的是在混沌中建立足够的秩序,以便让 Rust 的编译期检查器有能力验证程序中是否存在内存安全错误:悬空指针、重复释放、使用未初始化的内存等。...这些都是 std::string 类私有的字段,使用者无法访问。 std::string 拥有自己的缓冲区:当程序销毁字符串时,字符串的析构函数会释放缓冲区。...也就是说,你可以创建一个指向 std::string 的缓冲区中的字符的指针,但是当字符串被销毁时,你也必须让你的指针失效,并且要确保不再使用它。...Box 是指向存储在堆上的 T 类型值的指针。可以调用 Box::new(v) 分配一些堆空间,将值 v 移入其中,并返回一个指向该堆空间的 Box。...因为 Box 拥有它所指向的空间,所以当丢弃 Box 时,也会释放此空间。

    9710

    JVM 学习笔记(1):Java内存区域

    5、堆 1)定义 当我们使用 new 去创建对象时都会在堆空间中分配内存空间,堆空间是线程共享的,也即是不同线程可以共同访问,“几乎”所有的对象实例都在这里分配内存;并且堆中的内存有垃圾回收机制(GC)...,不再使用的对象所占用的内存空间会被回收掉,因此堆也被称为 GC堆。...2)特点 在JDK 1.4中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区 (Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存...--《深入理解Java虚拟机》 ① 常用于 NIO 操作时的数据缓冲区:正常 IO 读取文件时,磁盘文件需要先读入系统缓冲区,而 Java 程序只能读取 JVM 中的缓冲区内容,因此如果 Java...程序需要读取磁盘文件内容时需要先把系统缓冲区内容复制到 JVM 缓冲区,再进行读取。

    47120

    JVM的基础知识点Java的内存模型

    其实从内存分配的角度来看,线程共享的Java堆可能其实是多个线程私有的分配缓冲区,不同的线程将各自的对象实例放在看似共享的Java堆的各自的缓冲区上,这样划分可以更好的回收内存,也可以更好点分配内存。...会出现什么异常情况:Java堆可以处于物理上不连续的内存空间上,但逻辑上一定是连续的,在堆中没有内存可以完成对象实例的分配,且无法再扩展时,会抛出内存溢出异常。...会出现什么异常情况:内存溢出异常。 直接内存 是什么:直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机定义的内存区域,但也经常被使用。...JDK1.4加入了NIO类,一种基于通道与缓冲区的新I/O方式,NIO可以使用native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为直接内存的引用来操作直接内存...如何解决发生在Java堆内存的OutOfMemoryError异常呢?

    33320

    JVM运行时数据区和各个区域的作用

    同上 -- 4 Java堆 线程共享 存放实例化数据。 内存不足时,抛出OutOfMemoryError(内存不足错误)。 通过-Xmx和-Xms控制大小。 GC的主要管理对象。...7 直接内存 -- 如NIO可以使用Native函数库直接分配堆外内存,该内存受计算机内存限制。 内存不足时,抛出OutOfMemoryError(内存不足错误)。...不过JDK7的intern()方法的实现有所不同,当常量池中没有该字符串时,不再是在常量池中创建与此String内容相同的字符串,而改为在常量池中记录堆中首次出现的该字符串的引用,并返回该引用。...显然,本机直接内存的分配不会受到Java堆大小的限制,但是,还是会受到本机总内存(包括RAM及SWAP区或者分页文件)的大小及处理器寻址空间的限制,从而导致动态扩展时出现OutOfMemoryError...本机直接内存的分配不会受到java堆大小的限制,但是,既然是内存,肯定还是会受到本机总内存大小的限制.所以我们在配置虚拟机参数时,不要忽略直接内存,否则可能因为动态扩展导致出现OutOfMemoryError

    1.3K10

    Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day1】 —— 基础篇1

    每个StringBuffer对象都有一定的缓冲区容量,字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,自动扩容 功能与StringBuffer相同,相比少了同步锁,执行速度更快 线程安全性...我们来看一下这张对String操作时内存变化的图:   我们可以看到,初始String值为"唐伯虎",然后在这个字符串后面加上新的字符串"点香烟",这个过程是需要重新在栈堆内存中开辟内存空间的,最终得到了..."唐伯虎点香烟"字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间,不得不说这是对内存空间的极大浪费,执行效率同理。...每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。...此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。

    30931

    使用 WPADPAC 和 JScript在win11中进行远程代码执行1

    相反,我们的目标是击败高熵堆随机化,并使漏洞利用的第二阶段可靠,而无需使用堆喷射。 对于信息泄漏,我们将在 RegExp.lastParen 中使用这个错误。...显然,缓冲区中只有 10 个匹配项的空间,因此只有前 10 个匹配项存储在此缓冲区中。...像这样越界读取的字符串内容将在一个可以检查的字符串变量中返回给调用者。 我们将要使用第二次越界读取,但首先我们需要弄清楚如何将受控数据放入start_index和end_index 。...如果在其中一个 toString() 回调中元素被添加到之前未定义的数组中, 为了更好地理解这个错误及其可利用性,让我们仔细看看我们将溢出的缓冲区的结构。...如果我们仔细研究对象在 JScript 中是如何工作的,那么其中一个可能的答案就会出现。 每个对象(更具体地说,一个 NameList JScript 对象)都有一个指向哈希表的指针。

    7.8K950

    详细讲解String和StringBuffer和StringBuilder的使用

    前言 在 Java中的字符串属于对象,那么Java 中提供了 String 类来创建和操作字符串,即是使用对象;因为String类修饰的字符一旦被创建就不可改变,所以当对字符串进行修改的时候,需要使用到...对于String类,存在java.lang.String中,String类代表字符串,如何实现字符串的字面值,就是用此类来实例的。 那么字符串是?...常量池是用来放置一堆常量的,如果其中有相同的值,那么就不用再次创建对象,这是为了节约内存空间,如果再次创建,就会浪费内存空间,第一个创建的字符串放在常量池中,如果要用的时候,就拿来用。...new Stirng(),所以字符和字节可以转换为字符串。 String方法 为什么我们要学习String呢? 是因为我们需要使用对象,使用String类中的一堆方法。...StringBuffer 对于字符串是常量,它的值在创建后时不可以改变的,但字符串缓冲区支持可变的字符串。

    32820

    网络攻防实战技术之——缓冲区溢出篇

    明确缓冲区溢出的危害 3. 理解栈溢出、堆溢出、整型溢出、格式化字符串溢出及文件流溢出的原因 4....年前后,开始出现大量的缓冲区溢出攻击,因此引起人们的广泛关注 3....随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”(Segmentation fault),而不能达到攻击的目的。 2....程序空间由何构成? 2. 堆栈是什么? 3. 堆栈里面放的都是什么信息? 4. 程序使用超过了堆栈默认的大小怎么办? 5. 在一次函数调用中,堆栈是如何工作的? 程序在内存中的映像 ? 栈 1....运算溢出(Arithmetic Overflow)   如果存储值是一个运算操作,稍后使用这个结果的程序的任何一部分都将错误的运行,因为这个计算结果是不正确的。 3.

    6.5K41

    OOM异常的4种可能分析及常见的OOM异常演示

    ,那么在对象数量达到最大堆的容量限制之后就会产生OOM异常 解决方案:先分析到底是出现了内存泄漏(无法释放已申请的内存空间)还是内存溢出(没有足够的内存空间使用) 内存泄漏:通过工具查看泄漏对象到GC...Class的相关信息,当运行时产生了大量的类了填满方法区时,再产生类就会导致OOM 比如大量的JSP或动态产生JSP文件的应用(JSP第一次运行需要编译为JAVA类),基于OSGI的应用(即同一个文件,...中的一个方法,它用于在字符串常量池(String Pool)中维护字符串对象的引用,以便可以有效地重用字符串,从而节省内存。...(Buffer)的I/0方式, * 它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。...: Metaspace 元空间溢出 * Java 8及之后的版本使用Metaspace来替代永久化。

    33710

    小心点,别被当成垃圾回收了。

    下面的 C++ 语句是合法的,但是 Java 编译器却拒绝这么写代码,会出现 syntax error 编译错误。...上面这种情况是我们乐意看到的情况,毕竟我们不想在编写代码的时候遇到阻碍,但是这种情况是不可能出现的,当堆空间无法为 bar 和 baz 开辟内存空间时,就会出现 OutOfMemoryError,然后就会调用垃圾收集器...然而 Java 不会,它会提供垃圾收集器来释放不再引用的对象。 当程序尝试创建新对象并且堆中没有足够的空间时,垃圾收集器就开始工作。...当收集器访问堆时,请求线程被挂起,试图查找程序不再主动使用的对象,并回收它们的空间。...还有一种情况是 StackOverflowError ,它出现的原因是因为线程请求的栈深度要大于虚拟机所允许的深度时出现的错误。 标记 - 清除算法 Java 能永久不衰的一个原因就是因为垃圾收集器。

    71810

    第二十节:详细讲解String和StringBuffer和StringBuilder的使用

    标题图 前言 在 Java中的字符串属于对象,那么Java 中提供了 String 类来创建和操作字符串,即是使用对象;因为String类修饰的字符一旦被创建就不可改变,所以当对字符串进行修改的时候,需要使用到...对于String类,存在java.lang.String中,String类代表字符串,如何实现字符串的字面值,就是用此类来实例的。 那么字符串是?...常量池是用来放置一堆常量的,如果其中有相同的值,那么就不用再次创建对象,这是为了节约内存空间,如果再次创建,就会浪费内存空间,第一个创建的字符串放在常量池中,如果要用的时候,就拿来用。...new Stirng(),所以字符和字节可以转换为字符串。 ---- String方法 为什么我们要学习String呢? 是因为我们需要使用对象,使用String类中的一堆方法。...---- StringBuffer 对于字符串是常量,它的值在创建后时不可以改变的,但字符串缓冲区支持可变的字符串。

    40640

    解决英伟达Jetson平台使用Python时的出现“Illegal instruction(cpre dumped)”错误

    问题描述 笔者在使用Jetson NX平台配置深度学习开发环境,安装好了PyTorch(1.7.0)与torchvision(0.8.1)后,在安装“seaborn”出现以下问题: 出现了一个错误,虽然安装是成功的...在执行Python脚本时出现:“Illegal instruction(cpre dumped)”错误 后面测试了一些其他指令,也是有问题,如下: 问题解决 在网上寻找解决方案时,看到了这个网页:...https://stackoverflow.com/questions/65631801/illegal-instructioncore-dumped-error-on-jetson-nano 解决的方法就是增加...:OPENBLAS_CORETYPE=ARMV8 可以使用临时添加方法,在运行Python指令前运行:export OPENBLAS_CORETYPE=ARMV8 也可以采用增加系统变量方法,可以进行全局修改

    4.6K10

    String、StringBuffer与StringBuilder之间区别

    每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 可变类,速度更快 不可变 可变 可变 线程安全 线程不安全...我们来看一下这张对String操作时内存变化的图: 我们可以看到,初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间的...,最终得到了“hello world”字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间,不得不说这是对内存空间的极大浪费。...为了应对经常性的字符串相关的操作,就需要使用Java提供的其他两个操作字符串的类——StringBuffer类和StringBuild类来对此种变化字符串进行处理。...此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。

    25410

    Springboot2 + Micrometer监控指标详解

    缓冲区使用量 缓冲区使用量指的是应用程序使用缓冲区的情况,可以通过监控缓冲区大小和缓冲区使用情况等指标来计算。如果缓冲区使用量过低或者过高,可能会导致I/O性能下降。...committed不足时jvm向系统申请,若超过max则发生OutOfMemoryError错误。max是内存最大值。3.3.4....Memory Pool指标可分为以下几个维度:pool.used:已使用的堆内存大小。表示当前已经分配给Java堆内存空间的大小。pool.committed:已提交的堆内存大小。...表示当前JVM实例中可用的最大非堆内存大小,一般是物理内存的一部分。Used:已使用的非堆内存大小。表示当前已经分配给Java非堆内存空间的大小。Init:初始非堆内存大小。...表示JVM启动时分配给Java非堆的内存空间大小。

    8.3K103

    深入理解java虚拟机-第二章:java内存区域与内存泄露异常

    NIO,引入了基于通道(Channel)与缓冲区(Buffer)的I/O方式,可以直接使用Native函数分配堆外内存,然后通过在堆中的DirectByteBuffer对象作为该内存的引用进行操作。   ...堆是否规整又跟垃圾收集器有关,使用Serial、ParNew等带Compact过程的收集器时,采用指针碰撞;使用CMS这种基于Mark-Sweep算法的收集器时,采用空闲列表的方式。   ...内存分配完成,VM还需要将分配的内存空间都初始化为零值(对象头除外),如果使用TLAB的话,那么该过程也会提前至TLAB时进行,这一步操作保证了对象实例字段在java代码中可以不赋初始值就直接使用,程序可以直接访问到这些字段数据类型的对应值...如果采用直接指针访问,那么java堆对象的布局就必须考虑如何放置访问类型数据的相关信息,reference中存储的是对象地址。 ?...使用参数:-XX:+HeapDumpOnOutOfMemoryError可让虚拟机在出现内存溢出时Dump当前的内存堆转储快照,便于事后分析。

    49820

    去公司的第一天老大问我:内存泄露检测工具你知道几个?

    在JDK上为其他目的使用Java任务控制(JMC)不需要商业许可证。 下面的部分展示了图并描述了如何使用Java飞行记录器调试内存泄漏。...这是由于分配了许多字符串;因此,请注意保持这些字符串活动的对象。如果您的类有10个字符串作为成员,那么对象本身不会使用太多堆。堆将由字符串使用,字符串主要包含指向Char数组的指针。...了解OutOfMemoryError异常 java.lang.OutOfMemoryError当没有足够的空间在Java堆中分配对象时抛出错误。...(例如,当使用计算错误大小的算法计算数组中的元素数时)。...元空间是从与Java堆相同的地址空间分配的。减小Java堆的大小将为MetaSpace提供更多的可用空间。只有在Java堆中有多余的可用空间时,这才是一个正确的权衡。

    38020
    领券