听我一言:99%程序员都扛不住这JVM面试43问

Simulink/Requirements Toolbox 学习(一):概述 编写、导入、导出需求并使需求正式化;两种创建需求的模块:需求编辑器、需求透视;描述需求的方式:文本、图像和关键字;通过导入和导出需求文件,与第三方需求管理工具(例如 Microsoft Word、Microsoft Excel®、IBM DOORS和 IBM DOORS Next)集成。涉及模块:Requirements Eidtor、Requirements Table等; 阅读详情

最近很多粉丝朋友让我安排一波面试精选例题解析,小编搜罗全网最终找出了一些能帮助大家进阶提升的JVM面试题解析,第一波是43问,后续还会持续更新!

JVM面试43问,细节诠释经典!

1,Java中会存在内存泄漏吗,请简单描述。

会。自己实现堆载的数据结构时有可能会出现内存泄露,可参看effective java.

2,64位JVM中,int的长度是多数?

Java中 , int类型变量的长度是一个固定值,与平台无关,都是32位。意思就是说,在32位和64位的Java虚拟机中,int类型的长度是相同的。

3,Serial 与Parallel GC之间的不同之处?

Serial与Parallel在GC执行的时候都会引起stop-the-world。它们之间主要不同serial收集器是默认的复制收集器,执行GC的时候只有一个线程,而parallel收集器使用多个GC线程来执行。

4,32位和64位的JVM , int类型变量的长度是多数?

32位和64位的JVM中,int类型变量的长度是相同的,都是 32位或者4个字节。

5,Java中WeakReference与SoftReference的区别?

虽然WeakReference与SoftReference都有利于提高GC和内存的效率,但是WeakReference,一旦失去最后一个强引用,就会被GC回收,而软引用虽然不能阻止被回收,但是可以延迟到JVM内存不足的时候。

6,JVM选项-XX:+UseCompressedOops有什么作用?为什么要使用

当你将你的应用从32位的JVM迁移到64位的JVM时,由于对象的指针从32位增加到了64位,因此堆内存会突然增加,差不多要翻倍。这也会对CPU缓存(容量比内存小很多)的数据产生不利的影响。因为,迁移到64位的JVM主要动机在于可以指定最大堆大小,通过压缩0OP可以节省一定的内存。通过-XX:+UseCompressedOops选项,JVM会使用32位的OOP,而不是64位的OOP。

7,怎样通过Java程序来判断JVM是32位还是64位?

你可以检查某些系统属性如sun.arch.data.model或 os.arch来获取该信息。

8,32位JVM和64位JVM的最大堆内存分别是多数?

理论上说上32位的JVM堆内存可以到达2·32,即4GB,但实际上会比这个小很多。不同操作系统之间不同,如Windows系统大约1.5GB,Solaris 大约3GB。64位JVM允许指定最大的堆内存,理论上可以达到2^64,这是一个非常大的数字,实际上你可以指定堆内存大小到100GB。甚至有的JVM,如Azul,堆内存到1000G都是可能的。

9,JRE、JDK、JVM及JIT之间有什么不同?

JRE代表Java运行时(Java run-time ),是运行Java引用所必须的。JDK代表Java开发工具(Java development kit ),是Java程序的开发工具,如Java编译器,它也包含JRE。M代表Java虚拟机(Java virtual machine ),它的责任是运行Java应用。JIT代表即时编译(Jjust In Time compilation ),当代码执行的次数超过一定的阈值时,会将Java字节码转换为本地代码,如,主要的热点代码会被准换为本地代码,这样有利大幅度提高Java应用的性能。

10,解释Java堆空间及GC?

当通过Java命令启动Java进程的时候,会为它分配内存。内存的一部分用于创建堆空间,当程序中创建对象的时候,就从对空间中分配内存。GC是JVM内部的一个进程,回收无效对象的内存用于将来的分配。

11,JVM内存区域

 

JVM内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA堆、方法区】、直接内存。

线程私有数据区域生命周期与线程相同,依赖用户线程的启动/结束而创建/销毁(在Hotspot VM内,每个线程都与操作系统的本地线程直接映射,因此这部分内存区域的存/否跟随本地线程的生/死对应)。

线程共享区域随虚拟机的启动/关闭而创建/销毁。

直接内存并不是JMM运行时数据区的一部分,但也会被频繁的使用:在JDK1.4引入的NIO提供了基于Channel与Buffer的I0方式可以使用Native函数库直接分配堆外内存,然后使用DirectByteBuffer对象作为这块内存的引用进行操作(详见:Java l/O扩展),这样就避免了在Java堆和Native堆中来回复制数据,因此在一些场景中可以显著提高性能。

 

12,程序计数器(线程私有)

一块较小的内存空间,是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为“线程私有"的内存。

正在执行java方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址)。如果还是Native方法,则为空。这个内存区域是唯一一个在虚拟机中没有规定任何OutOfMemoryError情况的区域。

13,虚拟机栈(线程私有)

是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧( Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

栈帧(Frame )是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接(Dynamic Linking)、方法返回值和异常分派(Dispatch Exception)。栈帧随着方法调用而创建,随着方法结束而销毁——无论方法是正常完成还是异常完成(抛出了在方法内未被捕获的异常)都算作方法结束。

 

14,本地方法区(线程私有)

本地方法区和Java Stack作用类似,区别是虚拟机栈为执行Java方法服务,而本地方法栈则为Native方法服务,如果一个VM实现使用C-linkage模型来支持Native调用,那么该栈将会是一个C栈,但HotSpot VM直接就把本地方法栈和虚拟机栈合二为一。

15,你能保证GC 执行吗?

不能,虽然你可以调用System.gc()或者Runtime.gc(),但是没有办法保证GC的执行。

16,怎么获取Java程序使用的内存?堆使用的百分比?

可以通过java.lang.Runtime类中与内存相关方法来获取剩余的内存,总内存及最大堆内存。通过这些方法你也可以获取到堆使用的百分比及堆内存的剩余空间。Runtime.freeMemory()方法返回剩余空间的字节数,Runtime.totalMemory0)方法总内存的字节数,

Runtime.maxMemory()返回最大内存的字节数。

17,Java中堆和栈有什么区别?

JVM中堆和栈属于不同的内存区域,使用目的也不同。栈常用于保存方法帧和局部变量,而对象总是在堆上分配。栈通常都比堆小,也不会在多个线程之间共享,而堆被整个JVM的所有线程共享。

18,描述一下JVM加载class文件的原理机制

JVM中类的装载是由类加载器(ClassLoader )和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。

由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,VM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.cass文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class 对象。

加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对

类进行初始化,包括:∶1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。

类的加载是由类加载器完成的,类加载器包括∶根加载器(BootStrap )、扩展加载器(Extension )、系统加载器( System)和用户自定义类加载器(java.lang.ClassLoader的子类)。

从Java 2 ( JDK 1.2)开始,类加载过程采取了父亲委托机制(PDM)。PDM更好的保证了Java平台的安全性,在该机制中,VM自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类

加载器的说明:

1.Bootstrap :一般用本地代码实现,负责加载JVM基础核心类库(rt.jar ) ;

2.Extension : 从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是 Bootstrap ;

3.System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path 所指定的目录中记载类,是用户自定义加载器的默认父加载器。

19,GC是什么?为什么要有Gc?

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到―动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()或Runtime.getRuntime().gc(),但JVM可以屏蔽掉显示的垃圾回收调用。

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。在Java 诞生初期,垃圾回收是Java最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,然而时过境迁,如今Java的垃圾回收机制已经成为被诟病的东。移动智能终端用户通常觉得iOS的系统比 Android系统有更好的用户体验,其中一个深层次的原因就在于Android系统中垃圾回收的不可预知性。

20,堆( Heap-线程共享)-运行时数据区

是被线程共享的一块内存区域,创建的对象和数组都保存在Java堆内存中,也是垃圾收集器进行垃圾收集的最重要的内存区域。由于现代VM采用分代收集算法,因此Java堆从 GC的角度还可以细分为:新生代(Eden区、From Survivor区和To Survivor区)和老年代。

21,方法区/永久代(线程共享)

即我们常说的永久代(Permanent Generation),用于存储被JM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据.HotSpot VM把GC分代收集扩展至方法区,即使用Java堆的永久代来实现方法区,这样HotSpot 的垃圾收集器就可以像管理Java堆一样管理这部分内存而不必为方法区开发专门的内存管理器(永久带的内存回收的主要目标是针对常量池的回收和类型的卸载,因此收益一般很小)。

运行时常量池(Runtime Constant Pool )是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量池(Constant Pool Table ),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。Java虚拟机对Class文件的每一部分(自然也包括常量池)的格式都有严格的规定,每一个字节用于存储哪种数据都必须符合规范上的要求,这样才会被虚拟机认可、装载和执行。

22,JVM运行时内存

Java堆从GC的角度还可以细分为:新生代(Eden区、 From Survivor区和To Survivor区)和老年代。

 

23,新生代

是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。新生代又分为Eden区、ServivorFrom、ServivorTo三个区。

Eden区

Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够的时候就会触发MinorGC,对新生代区进行一次垃圾回收。

servivorFrom

上一次GC的幸存者,作为这一次GC的被扫描者。servivorTo

保留了一次MinorGC过程中的幸存者。MinorGC的过程(复制->清空->互换)MinorGC采用复制算法。

1 : eden、servicorFrom复制到ServicorTo,年龄+1

首先,把Eden和ServivorFrom区域中存活的对象复制到ServicorTo区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果ServicorTo不够位置了就放到老年区);

2∶清空eden、 servicorFrom

然后,清空Eden和ServicorFrom中的对象﹔3 : ServicorTo和ServicorFrom互换

最后,ServicorTo和ServicorFrom互换,原ServicorTo成为下一次GC时的ServicorFrom区。

24,老年代

主要存放应用程序中生命周期长的内存对象。

老年代的对象比较稳定,所以MajorGC不会频繁执行。在进行MajorGC前一般都先进行了一次MinorGC,使得有新生代的对象晋身入老年代,导致空间不够用时才触发。当无法找到足够大的连续空间分配给新创建的较大对象时也会提前触发一次MajorGC进行垃圾回收腾出空间。

MajorGC采用标记清除算法︰首先扫描一次所有老年代,标记出存活的对象,然后回收没有标记的对象。ajorGC的耗时比较长,因为要扫描再回收。MajorGC会产生内存碎片,为了减少内存损耗,我们一般需要进行合并或者标记出来方便下次直接分配。当老年代也满了装不下的时候,就会抛出OOM ( Out of Memory )异常。

25,永久代

指内存的永久保存区域,主要存放Class和Meta(元数据)的信息,Class在被加载的时候被放入永久区域,它和和存放实例的区域不同GC不会在主程序运行期对永久区域进行清理。所以这也导致了永久代的区域会随着加载的Class的增多而胀满,最终抛出OOM异常。

26,JAVA8与元数据

在Java8中,永久代已经被移除,被一个称为"元数据区"(元空间)的区域所取代。元空间的本质和永久代类似,元空间与永久代之间最大的区别在于︰元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。类的元数据放入

nativememory,字符串池和类的静态变量放入java堆中,这样可以加载多少类的元数据就不再由MaxPermSize控制,而由系统的实际可用空间来控制。

27,引用计数法

在Java中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用,即他们的引用计数都不为О,则说明对象不太可能再被用到,那么这个对象就是可回收对象。

28,可达性分析

为了解决引用计数法的循环引用问题,Java使用了可达性分析的方法。通过一系列的"GC roots"对象作为起点搜索。如果在"GC roots和一个对象之间没有可达路径,则称该对象是不可达的。要注意的是,不可达对象不等价于可回收对象,不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收。

29,标记清除算法(Mark-Sweep )

最基础的垃圾回收算法,分为两个阶段,标注和清除。标记阶段标记出所有需要回收的对象,清除阶段回收被标记的对象所占用的空间。如图

 

从图中我们就可以发现,该算法最大的问题是内存碎片化严重,后续可能发生大对象不能找到可利用空间的问题。

30,复制算法( copying )

为了解决Mark-Sweep算法内存碎片化的缺陷而被提出的算法。按内存容量将内存划分为等大小的两块。每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用的内存清掉,如图:

 

这种算法虽然实现简单,内存效率高,不易产生碎片,但是最大的问题是可用内存被压缩到了原本的一半。且存活对象增多的话,Copying算法的效率会大大降低。

31,标记整理算法(Mark-Compact)

结合了以上两个算法,为了避免缺陷而提出。标记阶段和Mark-Sweep算法相同,标记后不是清理对象,而是将存活对象移向内存的一端。然后清除端边界外的对象。如图︰

 

32,分代收集算法

分代收集法是目前大部分JMM所采用的方法,其核心思想是根据对象存活的不同生命周期将内存划分为不同的域,一般情况下将GC堆划分为老生代(Tenured/Old Generation)和新生代(YoungGeneration)。老生代的特点是每次垃圾回收时只有少量对象需要被回收,新生代的特点是每次垃圾回收时都有大量垃圾需要被回收,因此可以根据不同区域选择不同的算法。

33,新生代与复制算法

目前大部分JVM的GC对于新生代都采取Copying算法,因为新生代中每次垃圾回收都要回收大部分对象,即要复制的操作比较少,但通常并不是按照1∶1来划分新生代。一般将新生代划分为一块较大的Eden空间和两个较小的Survivor空间(From Space, To Space),每次使用Eden 空间和其中的一块Survivor空间,当进行回收时,将该两块空间中还存活的对象复制到另一块Survivor空间中。

 

34,老年代与标记复制算法

而老年代因为每次只回收少量对象,因而采用Mark-Compact算法。

1.JAVA虚拟机提到过的处于方法区的永生代(Permanet Generation),它用来存储class类,常量,方法描述等。对永生代的回收主要包括废弃常量和无用的类。

⒉对象的内存分配主要在新生代的Eden Space和Survivor Space的From Space(Survivor目前存放对象的那一块),少数情况会直接分配到老生代。

3.当新生代的Eden Space和From Space空间不足时就会发生一次GC,进行GC后,EdenSpace和From Space区的存活对象会被挪到To Space,然后将Eden Space和FromSpace进行清理。

4.如果To Space无法足够存储某个对象,则将这个对象存储到老生代。5.在进行GC后,使用的便是Eden Space和To Space 了,如此反复循环。

6.当对象在Survivor区躲过一次GC后,其年龄就会+1。默认情况下年龄到达15的对象会被移到老生代中。

35,JAVA强引用

在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到JM也不会回收。因此强引用是造成Java 内存泄漏的主要原因之一。

36,JAVA软引用

软引用需要用SoftReference类来实现,对于只有软引用的对象来说,当系统内存足够时它不会被回收,当系统内存空间不足时它会被回收。软引用通常用在对内存敏感的程序中。

37,JAVA弱引用

弱引用需要用WeakReference类来实现,它比软引用的生存期更短,对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管JM的内存空间是否足够,总会回收该对象占用的内存。

38,JAVA虚引用

虚引用需要PhantomReference类来实现,它不能单独使用,必须和引用队列联合使用。虚引用的主要作用是跟踪对象被垃圾回收的状态。

39,分代收集算法

当前主流VM垃圾收集都采用"分代收集"(Generational Collection)算法,这种算法会根据对象存活周期的不同将内存划分为几块,如JVM中的新生代、老年代、永久代,这样就可以根据各年代特点分别采用最适当的GC算法

40,在新生代-复制算法

每次垃圾收集都能发现大批对象已死,只有少量存活.因此选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集

41,在老年代-标记整理算法

因为对象存活率高、没有额外空间对它进行分配担保,就必须采用“标记—清理"或"标记―整理"算法来进行回收.不必进行内存复制,且直接腾出空闲内存。

42,分区收集算法

分区算法则将整个堆空间划分为连续的不同小区间,每个小区间独立使用,独立回收.这样做的好处是可以控制一次回收多少个小区间,根据目标停顿时间,每次合理地回收若干个小区间(而不是整个堆),从而减少一次GC所产生的停顿。

43,GC垃圾收集器

Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法;年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot 虚拟机的垃圾收集器如下︰

 

总结:

JVM这期后续还有42道,喜欢的朋友们可以关注小编,近期持续分享面试干货!

PCL 基于法向距离的对应点获取 提出了一种基于法向量欧氏距离的点云配准方法。详细推导了法向量距离计算公式,并给出具体计算流程。在代码实现部分,采用PCL库完成了点云法向量计算和对应关系估计,通过可视化验证了算法有效性。实验结果表明,该方法能够准确获取点云间的对应关系,为后续点云配准奠定了基础。 阅读详情

相关推荐

LiveGBS流媒体平台GB/T28181实战指南:海康NVR物联网卡摄像头注册失败全链路排查与抓包技巧

本文详细解析了LiveGBS流媒体平台中海康NVR物联网卡摄像头注册失败的常见问题及解决方案。通过全链路排查与抓包技巧,包括物联网卡配置、多网卡冲突处理、防火墙设置等,帮助用户快速定位并解决GB/T28181协议下的设备注册难题,提升流媒体平台部署效率。

weixin_29290947的博客 494

2022年最新78道JVM面试题总结(2万字答案解析)

前言 JVM基本都是面试必问的,可以说是非常重要。 本篇文章已整理成PDF文档 私信回复:888 获取这份整理好的Java面试题手册。 1、java中会存在内存泄漏吗,请简单描述。 会。自己实现堆载的数据结构时有可能会出现内存泄露。 2、64 位 JVM 中,int 的长度是多数? Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位 和 64 位 的 Java 虚拟机中,int 类型的长度是相同的。 3、Serial 与 Parall

Trouvailless的博客 1394

光谱分布、光谱辐射通量密度与不同时间段分布光谱(图示)

1、光谱分布图 2 太阳辐射能量图 3、不同时间段的太阳分布光谱图 4、不同波长的光的能量分布主要区域 5、不同波段的使用场景

maopig的专栏 2万+

怎样通过Java程序来判断JVM是32位还是64位?

请注意,这种方法只能告诉你JVM所在的操作系统架构,而不是JVM本身的架构。在大多数情况下,JVM的架构会与操作系统架构一致,但也有一些特殊情况。如果需要准确获取JVM的架构,可以使用System.getProperty("sun.arch.data.model"),它会返回JVM的架构(通常是"32"或"64")。这个程序使用了System.getProperty("os.arch")来获取操作系统的架构信息。如果字符串中包含"64",那么JVM是64位的;这个版本的程序会更准确地告诉我们JVM的架构。

Blue92120的博客 601

KAN神经网络实战:如何用Python快速搭建你的第一个可解释性模型

本文提供了使用Python和PyTorch快速搭建首个KAN(Kolmogorov-Arnold Networks)神经网络模型的实战指南。通过对比传统MLP,详细解析了KAN利用可学习的边函数实现更高可解释性的核心原理,并逐步演示了从环境配置、数据准备、核心模块实现到模型训练与可视化的完整流程,帮助开发者掌握这一新兴的可解释性AI模型构建方法。

convnet3designer的博客 474

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

xu_white的博客 7583

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

这段代码首先获取了系统的架构(`os.arch`)和JVM的数据模型(`sun.arch.data.model`)两个系统属性。`os.arch`表示操作系统的架构,而`sun.arch.data.model`直接指出了JVM是32位还是64位的。然后根据`sun.arch.data.model`的值输出对应的JVM位数信息。可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。此方法简单直接,不需要外部命令或特殊工具,是判断JVM位数的标准做法。

u012151345的博客 433

YOLOv11改进 - C3k2融合 | C3k2 融合 ARConv 自适应矩形卷积:动态调整卷积核形状与采样点

本文介绍了将自适应矩形卷积(ARConv)模块与YOLOv11相结合的方法。ARConv是针对遥感图像全色锐化任务设计的创新卷积模块,可自适应调整卷积核形状与采样点数量,解决传统卷积刚性限制,实现高效特征提取。其工作流程包括学习卷积核高度和宽度、选择采样点数量、生成采样图、卷积实现与空间自适应增强。我们将集成ARConv的C3k2_ARConv模块引入YOLOv11,对相关代码进行修改和注册,并配置了yolov11 - C3k2_ARConv.yaml文件。实验脚本显示,该结合方式应用于目标检测任务。

魔改工程师的博客 1006

java新生代内存99%_推荐收藏系列:一文理解JVM虚拟机(内存、垃圾回收、性能优化)解决面试中遇到问题...

一. JVM内存区域的划分1.1 java虚拟机运行时数据区java虚拟机运行时数据区分布图:JVM栈(Java Virtual Machine Stacks): Java中一个线程就会相应有一个线程栈与之对应,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈,因此栈存储的信息都是跟当前线程(或程序)相关信息的,包括局部变量、程序运行状态、方法返回值、方法出口等等。每一个方法被调用直至执行...

weixin_34183908的博客 800

“华为杯”研究生数学建模竞赛2020年-【华为杯】D题:无人机集群协同对抗(附获奖论文和MATLAB代码实现)

1.问题重述摘 要:本文针对非线性约束条件下红蓝双方无人机集群协同对抗的最优规划问题,结合贪婪队形、非线性规划、内点法、蒙特卡洛方法和全联立正交配置有限元法,构建了无人机集群协同对抗推演模型。,构建了。我们综合考虑了,和。首先分析红方在集群约束下的贪婪队形和拦截策略,然后我们基于内点法联合MATLAB和AMPL编程求解蓝方突防的非线性规划解,最后基于蒙特卡洛法对整个蓝方突防过程进行推演,得到突防概率图。通过推演,我们提出了两块的区域作为所求区域,并对蓝方的最优突防策略进行分析。

getusushu的博客 1552

halcon第一讲:基本操作

本文通过Blob分析提取出图片中的硬币,来熟悉halcon的基本操作。 1、读取图像,halcon读取图像有三种方式:1)、文件->读取图像;2)、通过助手;3)、代码 *打开窗口 dev_open_window (0, 0, 512, 512, 'black', WindowHandle) *读取图像 read_image (Image,'1.png') 读取的图像如下: 2...

qq_24946843的博客 3万+

我看哪个菜鸡还不知道这些Java面试中重复率99%的大厂面试原题...

个人一手总结,2025年最新整理大厂Java岗面试原题,面试重复率高达99%哪怕你现在不刷,存下有邀面随时刷。

QD_ANJING的博客 586

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

面经手册开篇:面试官都问我啥——CodeGuide 里的 Java 研发面试能力全景图

> 本篇是《面经手册》系列的开篇,也是整个系列的地图。作者小傅哥基于半年筛选 400+ 份简历的招聘经验,从「简历视角」出发,梳理出一名 Java 研发在面试中会被考查的完整能力框架:自我介绍、面试类型、算法、技术栈、项目沉淀与个人素养。本文以该开篇文档为骨架,结合本仓库 [CodeGuide](https://link.gitcode.com/i/fc9a4156b60b6b3097dcc3c7

gitblog_00246的博客 1131

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

史上最全 Java 高频面试合集,命中率高达 95%

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》关于休息和微服务的要点?23、什么是不同类型的微服务测试?24、您对 Distributed Transaction 有何了解?25、什么是 Idempotence 以及它在哪里使用?26、什么是有界上下文?27、什么是双因素身份验证?28、双因素身份验证的凭据类型有哪些?

m0_61041374的博客 519

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JVM 常见面试问答:深入底层原理

本文为Java后端开发、架构师及中间件开发岗位面试提供全面的JVM知识体系,涵盖内存模型、对象创建、类加载、垃圾回收、JIT编译、性能调优等核心内容。内容分为14个章节,从基础概念到高级场景实战,包括: JVM内存模型:程序计数器、虚拟机栈、堆、方法区等运行时数据区详解。 对象创建与内存分配:对象实例化过程、TLAB机制、逃逸分析等。 类加载机制:双亲委派模型、类加载阶段、自定义类加载器。 垃圾回收:分代回收算法、CMS/G1/ZGC等回收器对比与原理。

weixin_72753562的博客 1017

一个珍珠小白/外行人(程序员)如何开始卖珍珠之三——如何有技巧的营销

一个珍珠小白/外行人(程序员)如何开始卖珍珠之三——如何有技巧的营销

2501_93198828的博客 369

1000道互联网大厂Java岗面试原题解析,刷完通过率99%(八股原理+场景题)

希望能帮助到最近有面试的Java开发,如果觉得不错可以帮我点点小心心,让更多迷茫的Java人看到这篇文章,帮助他们撑一把伞。

m0_50180963的博客 893

程序员,背熟这99道Java多线程面试题,和面试官扯皮就没问题了!

synchronized关键字可以时间一个简单的策略来防止线程干扰和内存一致性错误,如果一个对象是对多个线程可见的,那么对该对想的所有读写都将通过同步的方式来进行。不可被中断的一个或一系列操作问题:因为cas需要在操作值的时候,检查值有没有变化,如果没有变化则更新,如果一个值原来是A,变成了B,又变成了A,那么使用cas进行检测时会发现发的值没有发生变化,其实是变过的。解决:添加版本号,每次更新的时候追加版本号,A-B-A —> 1A-2B-3A。

2401_84023262的博客 875

高级面试官,JVM 常见线上问题 → CPU 100,5分钟搞定

至此定位到问题不管是在 Windows 下,还是在 Linux 下,排查套路都是一样的内存泄露同样的,Windows、Linux 各展示一个示例。

2401_84102759的博客 1129

2026年Java面试题大全:从基础到云原生实战

Java作为企业级开发的主流语言,其技术栈深度与广度直接影响开发者职业发展。理解JVM内存模型、并发编程原理等核心机制,是构建高性能应用的基础。随着云原生和GraalVM等技术的普及,Java开发者需要掌握容器化部署、微服务架构等现代实践。本套面试题特别针对虚拟线程、模式匹配等Java新特性设计实战题目,同时覆盖分布式系统设计、性能优化等高频考点,帮助开发者系统化提升技术竞争力。

weixin_29311017的博客 298

2024阿里技术总监最新发布:Java一线大厂高频面试题500道

31. 怎么样把某个请求映射到特定的方法上面32. 谈谈 Spring 对 DAO 的支持33. Spring 配置 Bean 实例化有哪些方式?34. Bean 注入属性有哪几种方式35. 在 Spring 中如何实现时间处理?36. Spring 中如何更高效的使用 JDBC?37. 请介绍一下设计模式在 Spring 框架中的使用?38. 讲讲 Spring 框架的优点有哪些?39. 哪种依赖注入方式你建议使用,构造器注入,还是 Setter 方法注入?40. 你怎样定义类的作用域。

2401_84408780的博客 1001

【Java-JVM】常用的 JVM 调优命令有哪些?

JVM调优命令技术文章大纲 简介 JVM调优的重要性及目标 调优命令的基本分类(监控、诊断、配置) 常用JVM监控命令 jps:列出Java进程及主类信息 jstat:监控堆内存、GC、类加载等 jstat -gc <pid>:堆内存与GC统计 jstat -class <pid>:类加载与卸载情况 jinfo:查看或动态修改JVM参数 示例:jinfo -flag <name> <pid> 内存与GC分析命令 jmap:生成堆内存快照 jmap -heap <pid>:堆内存使用详情 jmap -dump

ZGW0513的博客 513

肝完这份3625页Java面试题,字节,阿里,百度大厂offer拿到手软

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!成功只会留给那些有准备的人!

2401_84103100的博客 359

2024年Java最新阿里Java高级岗200+面试真题,掌握70%进阿里没问题,聊一聊MySQL数据库中的那些锁

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

2401_84023482的博客 798

Java:104-JVM优化

我们可以选择在idea中查看对应的class文件: 但是要注意:随着idea或者说jdk版本的不同,可能并不会出现这些东西或者少些或者有些不同,所以这里以上面的说明为主即可(我修改并整理的) 比如我这里就是这样: Java 虚拟机采用基于栈的架构,其指令由操作码和操作数组成,这些 字节码指令 ,就叫作 opcode,其中,getstatic、ldc、invokevirtual、return 等,就是 opcode,可以看到是比较容易理解的,因为根据后面的说明就是一个完整的System.out.print

qq_59609098的博客 1136

Android程序员都是本科生吗?面试官看重的是技术还是学历呢?答案显而易见(1)

引用类型 动态代理 元注解 Android 知识点汇总 Activity Fragment Service BroadcastReceiver ContentProvider 数据存储 View 进程 Parcelable接口 IPC Window / WindowManager Bitmap 屏幕适配 Context SharedPreferences 消息机制 线程异步 RecyclerView 优化 Webv..

m0_66684727的博客 168
上一篇: 互联网大厂考点
下一篇: 1w5字详细介绍分布式系统的那些技术方案
java_lujj
博客等级 码龄4年 18粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值