jvm面试题,jvm常见高频面试题汇总,必知必会

2023-10-30

1.Java 类加载过程?

Java 类加载需要经历一下 7 个过程:

1. 加载

加载是类加载的第一个过程,在这个阶段,将完成一下三件事情:
• 通过一个类的全限定名获取该类的二进制流。
• 将该二进制流中的静态存储结构转化为方法去运行时数据结
构。
• 在内存中生成该类的 Class 对象,作为该类的数据访问入
口。

2. 验证

验证的目的是为了确保 Class 文件的字节流中的信息不回危害到
虚拟机.在该阶段主要完成以下四钟验证:
• 文件格式验证:验证字节流是否符合 Class 文件的规范,如
主次版本号是否在当前虚拟机范围内,常量池中的常量是否
有不被支持的类型.
• 元数据验证:对字节码描述的信息进行语义分析,如这个类是
否有父类,是否集成了不被继承的类等。
• 字节码验证:是整个验证过程中最复杂的一个阶段,通过验
证数据流和控制流的分析,确定程序语义是否正确,主要针
对方法体的验证。如:方法中的类型转换是否正确,跳转指
令是否正确等。
• 符号引用验证:这个动作在后面的解析过程中发生,主要是
为了确保解析动作能正确执行。
马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
3. 准备
准备阶段是为类的静态变量分配内存并将其初始化为默认值,这些
内存都将在方法区中进行分配。准备阶段不分配类中的实例变量的
内存,实例变量将会在对象实例化时随着对象一起分配在 Java 堆
中。
public static int value=123;//在准备阶段 value 初始值为 0 。在初
始化阶段才会变为 123 。
4. 解析
该阶段主要完成符号引用到直接引用的转换动作。解析动作并不一
定在初始化动作完成之前,也有可能在初始化之后。

5. 初始化
初始化时类加载的最后一步,前面的类加载过程,除了在加载阶段
用户应用程序可以通过自定义类加载器参与之外,其余动作完全由
虚拟机主导和控制。到了初始化阶段,才真正开始执行类中定义的
Java 程序代码。
6. 使用
7. 卸载

2.描述一下 JVM 加载 Class 文件的原理机制?

马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
Java 语言是一种具有动态性的解释型语言,类(Class)只有被加
载到 JVM 后才能运行。当运行指定程序时,JVM 会将编译生成
的 .class 文件按照需求和一定的规则加载到内存中,并组织成为
一个完整的 Java 应用程序。这个加载过程是由类加载器完成,具
体来说,就是由 ClassLoader 和它的子类来实现的。类加载器本
身也是一个类,其实质是把类文件从硬盘读取到内存中。
类的加载方式分为隐式加载和显示加载。隐式加载指的是程序在使
用 new 等方式创建对象时,会隐式地调用类的加载器把对应的类
加载到 JVM 中。显示加载指的是通过直接调用 class.forName()
方法来把所需的类加载到 JVM 中。

任何一个工程项目都是由许多类组成的,当程序启动时,只把需要
的类加载到 JVM 中,其他类只有被使用到的时候才会被加载,采
用这种方法一方面可以加快加载速度,另一方面可以节约程序运行
时对内存的开销。此外,在 Java 语言中,每个类或接口都对应一
个 .class 文件,这些文件可以被看成是一个个可以被动态加载的
单元,因此当只有部分类被修改时,只需要重新编译变化的类即可,
而不需要重新编译所有文件,因此加快了编译速度。
在 Java 语言中,类的加载是动态的,它并不会一次性将所有类全
部加载后再运行,而是保证程序运行的基础类(例如基类)完全加
载到 JVM 中,至于其他类,则在需要的时候才加载。
类加载的主要步骤:
• 装载。根据查找路径找到相应的 class 文件,然后导入。
• 链接。链接又可分为 3 个小步:
• 检查,检查待加载的 class 文件的正确性。
• 准备,给类中的静态变量分配存储空间。
• 解析,将符号引用转换为直接引用(这一步可选)
• 初始化。对静态变量和静态代码块执行初始化工作。

3. Java 内存分配。

• 寄存器:我们无法控制。

• 静态域:static 定义的静态成员。
• 常量池:编译时被确定并保存在 .class 文件中的(final)常
量值和一些文本修饰的符号引用(类和接口的全限定名,字
段的名称和描述符,方法和名称和描述符)。
• 非 RAM 存储:硬盘等永久存储空间。
• 堆内存:new 创建的对象和数组,由 Java 虚拟机自动垃圾
回收器管理,存取速度慢。
• 栈内存:基本类型的变量和对象的引用变量(堆内存空间的
访问地址),速度快,可以共享,但是大小与生存期必须确
定,缺乏灵活性。

  1. Java 堆的结构是什么样子的?什么是堆中的永久代(Perm Gen
    space)?
    JVM 的堆是运行时数据区,所有类的实例和数组都是在堆上分配
    内存。它在 JVM 启动的时候被创建。对象所占的堆内存是由自动
    内存管理系统也就是垃圾收集器回收。
    堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问
    的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃
    圾收集器回收掉的对象。一直到垃圾收集器把这些 对象回收掉之
    前,他们会一直占据堆内存空间。

4.GC 是什么? 为什么要有 GC?

GC 是垃圾收集的意思(GabageCollection),内存处理是编程
人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或
系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象
是否超过作用域从而达到自动回收内存的目的,Java 语言没有提
供释放已分配内存的显示操作方法。

5. 简述 Java 垃圾回收机制。

马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
在 Java 中,程序员是不需要显示的去释放一个对象的内存的,而
是由虚拟机自行执行。在 JVM 中,有一个垃圾回收线程,它是低
优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当
前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,
并将它们添加到要回收的集合中,进行回收。

6. 如何判断一个对象是否存活?(或者 GC 对象的判定方法)

判断一个对象是否存活有两种方法:

  1. 引用计数法
    所谓引用计数法就是给每一个对象设置一个引用计数器,每当有一
    个地方引用这个对象时,就将计数器加一,引用失效时,计数器就
    减一。当一个对象的引用计数器为零时,说明此对象没有被引用,
    也就是“死对象”,将会被垃圾回收.
    引用计数法有一个缺陷就是无法解决循环引用问题,也就是说当对
    象 A 引用对象 B,对象 B 又引用者对象 A,那么此时 A、B 对
    象的引用计数器都不为零,也就造成无法完成垃圾回收,所以主流
    的虚拟机都没有采用这种算法。
  2. 可达性算法(引用链法)
    该算法的思想是:从一个被称为 GC Roots 的对象开始向下搜索,
    如果一个对象到 GC Roots 没有任何引用链相连时,则说明此对
    象不可用。
    在 Java 中可以作为 GC Roots 的对象有以下几种:
    • 虚拟机栈中引用的对象
    • 方法区类静态属性引用的对象
    • 方法区常量池引用的对象
    • 本地方法栈 JNI 引用的对象
    虽然这些算法可以判定一个对象是否能被回收,但是当满足上述条
    件时,一个对象比不一定会被回收。当一个对象不可达 GC Root
    时,这个对象并不会立马被回收,而是出于一个死缓的阶段,若要
    被真正的回收需要经历两次标记.
    如果对象在可达性分析中没有与 GC Root 的引用链,那么此时就
    会被第一次标记并且进行一次筛选,筛选的条件是是否有必要执行
    finalize() 方法。当对象没有覆盖 finalize() 方法或者已被虚拟机
    调用过,那么就认为是没必要的。 如果该对象有必要执行
    finalize() 方法,那么这个对象将会放在一个称为 F-Queue 的对
    队列中,虚拟机会触发一个 Finalize() 线程去执行,此线程是低
    优先级的,并且虚拟机不会承诺一直等待它运行完,这是因为如果
    finalize() 执行缓慢或者发生了死锁,那么就会造成 F-Queue 队
    列一直等待,造成了内存回收系统的崩溃。GC 对处于 F-Queue
    中的对象进行第二次被标记,这时,该对象将被移除” 即将回收”
    集合,等待回收。

7. 垃圾回收的优点和原理。并考虑 2 种回收机制。

马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
Java 语言中一个显著的特点就是引入了垃圾回收机制,使 C++
程序员最头疼的内存管理的问题迎刃而解,它使得 Java 程序员在
编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,
Java 中的对象不再有“作用域”的概念,只有对象的引用才有"
作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使
用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,
不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的
对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对
象或所有对象进行垃圾回收。
回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

8. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内 存吗?有什么办法主动通知虚拟机进行垃圾回收?

马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
对于 GC 来说,当程序员创建对象时,GC 就开始监控这个对象
的地址、大小以及使用情况。通常,GC 采用有向图的方式记录和
管理堆(heap)中的所有对象。通过这种方式确定哪些对象是”
可达的”,哪些对象是”不可达的”。当 GC 确定一些对象为“不
可达”时,GC 就有责任回收这些内存空间。可以。程序员可以手
动执行 System.gc(),通知 GC 运行,但是 Java 语言规范并不
保证 GC 一定会执行。

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

所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占
据在内存中。Java 中有垃圾回收机制,它可以保证一对象不再被
引用的时候,即对象变成了孤儿的时候,对象将自动被垃圾回收器
从内存中清除掉。由于 Java 使用有向图的方式进行垃圾回收管
理,可以消除引用循环的问题,例如有两个对象,相互引用,只要
它们和根进程不可达的,那么 GC 也是可以回收它们的,例如下
面的代码可以看到这种情况的内存回收:
import java.io.IOException;
public class GarbageTest {
/**

  • @param args
  • @throws IOException
    */
    public static void main(String[] args) throws IOException
    {
    // TODO Auto-generated method stub
    try {
    gcTest();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } S
    ystem.out.println(“has exited gcTest!”);
    System.in.read();
    System.in.read();
    System.out.println(“out begin gc!”);
    for(int i=0;i<100;i++)
    {
    System.gc();
    System.in.read();
    System.in.read();
    }
    }

p
rivate static void gcTest() throws IOException {
System.in.read();
System.in.read();
Person p1 = new Person();
System.in.read();
System.in.read();
Person p2 = new Person();
p1.setMate(p2);
p2.setMate(p1);
System.out.println(“before exit gctest!”);
System.in.read();
System.in.read();
System.gc();
System.out.println(“exit gctest!”);
}
private static class Person
{
byte[] data = new byte[20000000];
Person mate = null;
public void setMate(Person other)
{
mate = other;
}
}
}
Java 中的内存泄露的情况:长生命周期的对象持有短生命周期对
象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需
要,但是因为长生命周期对象持有它的引用而导致不能被回收,这
就是 Java 中内存泄露的发生场景,通俗地说,就是程序员可能创
建了一个对象,以后一直不再使用这个对象,这个对象却一直被引
用,即这个对象无用但是却无法被垃圾回收器回收的,这就是 java
中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对
象放在缓存中 (例如放在一个全局 map 对象中),然后一直不再
使用它,这个对象一直被缓存引用,但却不再被使用。
检查 Java 中的内存泄露,一定要让程序将各种分支情况都完整执
行到程序结束,然后看某个对象是否被使用过,如果没有,则才能
判定这个对象属于内存泄露。
如果一个外部类的实例对象的方法返回了一个内部类的实例对象,
这个内部类对象被长期引用了,即使那个外部类实例对象不再被使
用,但由于内部类持久外部类的实例对象,这个外部类对象将不会
被垃圾回收,这也会造成内存泄露。
下面内容来自于网上(主要特点就是清空堆栈中的某个元素,并不
是彻底把它从数组中拿掉,而是把存储的总数减少,本人写得可以
比这个好,在拿掉某个元素时,顺便也让它从数组中消失,将那个
元素所在的位置的值设置为 null 即可):
我实在想不到比那个堆栈更经典的例子了,以致于我还要引用别人
的例子,下面的例子不是我想到的,是书上看到的,当然如果没有
在书上看到,可能过一段时间我自己也想的到,可是那时我说是我
自己想到的也没有人相信的。
public class Stack {
priva

te Object[] elements=new Object[10];
private int size = 0;
public void push(Object e){
ensureCapacity();
elements[size++] = e;
}
public Object pop(){
if( size == 0) throw new EmptyStackException();
return elements[–size];
}
private void ensureCapacity(){
if(elements.length == size){
Object[] oldElements = elements;
elements = new Object[2 * elements.length+1];
System.arraycopy(oldElements,0, elements, 0,
size);
}
}
}

上面的原理应该很简单,假如堆栈加了 10 个元素,然后全部弹
出来,虽然堆栈是空的,没有我们要的东西,但是这是个对象是无
法回收的,这个才符合了内存泄露的两个条件:无用,无法回收。
但是就是存在这样的东西也不一定会导致什么样的后果,如果这个
堆栈用的比较少,也就浪费了几个 K 内存而已,反正我们的内存都
上 G 了,哪里会有什么影响,再说这个东西很快就会被回收的,
有什么关系。下面看两个例子。
public class Bad{
public static Stack s=Stack();
static{
s.push(new Object());
s.pop(); //这里有一个对象发生内存泄露
s.push(new Object()); //上面的对象可以被回收了,等于是自
愈了
}
}

因为是 static,就一直存在到程序退出,但是我们也可以看到它有
自愈功能,就是说如果你的 Stack 最多有 100 个对象,那么最
多也就只有 100 个对象无法被回收其实这个应该很容易理解,
Stack 内部持有 100 个引用,最坏的情况就是他们都是无用的,
因为我们一旦放新的进取,以前的引用自然消失!
内存泄露的另外一种情况:当一个对象被存储进 HashSet 集合中
以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否
则,对象修改后的哈希值与最初存储进 HashSet 集合中时的哈希
值就不同了,在这种情况下,即使在 contains 方法使用该对象的
当前引用作为的参数去 HashSet 集合中检索对象,也将返回找不
到对象的结果,这也会导致无法从 HashSet 集合中单独删除当前
对象,造成内存泄露。

11. 深拷贝和浅拷贝。

马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
简单来讲就是复制、克隆。
Person p=new Person(“张三”);
浅拷贝就是对对象中的数据成员进行简单赋值,如果存在动态成员
或者指针就会报错。
深拷贝就是对对象中存在的动态成员或指针重新开辟内存空间。

12. System.gc() 和 Runtime.gc() 会做什么事情?

这两个方法用来提示 JVM 要进行垃圾回收。但是,立即开始还是
延迟进行垃圾回收是取决于 JVM 的。

13. finalize() 方法什么时候被调用?析构函数 (finalization) 的目的是什么?

垃圾回收器(garbage colector)决定回收某对象时,就会运行该
对象的 finalize() 方法 但是在 Java 中很不幸,如果内存总是充
足的,那么垃圾回收可能永远不会进行,也就是说 filalize() 可能
永远不被执行,显然指望它做收尾工作是靠不住的。 那么
finalize() 究竟是做什么的呢? 它最主要的用途是回收特殊渠道
申请的内存。Java 程序有垃圾回收器,所以一般情况下内存问题
不用程序员操心。但有一种 JNI(Java Native Interface)调用
non-Java 程序(C 或 C++), finalize() 的工作就是回收这部
分的内存。

14. 如果对象的引用被置为 null,垃圾收集器是否会立即释放 对象占用的内存?

不会,在下一个垃圾回收周期中,这个对象将是可被回收的。

15. 什么是分布式垃圾回收(DGC)?它是如何工作的?

马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
DGC 叫做分布式垃圾回收。RMI 使用 DGC 来做自动垃圾回收。
因为 RMI 包含了跨虚拟机的远程对象的引用,垃圾回收是很困难
的。DGC 使用引用计数算法来给远程对象提供自动内存管理。

16. 串行(serial)收集器和吞吐量(throughput)收集器的区 别是什么?

吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模
和大规模数据的应用程序。 而串行收集器对大多数的小应用(在
现代处理器上需要大概 100M 左右的内存)就足够了。

17. 在 Java 中,对象什么时候可以被垃圾回收?

当对象对当前使用这个对象的应用程序变得不可触及的时候,这个
对象就可以被回收了。

18. 简述 Java 内存分配与回收策率以及 Minor GC 和 Major GC

马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
• 对象优先在堆的 Eden 区分配
• 大对象直接进入老年代
• 长期存活的对象将直接进入老年代
当 Eden 区没有足够的空间进行分配时,虚拟机会执行一次
Minor GC。Minor GC 通常发生在新生代的 Eden 区,在这个区
的对象生存期短,往往发生 Gc 的频率较高,回收速度比较快;
Full GC/Major GC 发生在老年代,一般情况下,触发老年代 GC
的时候不会触发 Minor GC,但是通过配置,可以在 Full GC 之
前进行一次 Minor GC 这样可以加快老年代的回收速度。

19. JVM 的永久代中会发生垃圾回收么?

垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界
值,会触发完全垃圾回收(Full GC)。
注:Java 8 中已经移除了永久代,新加了一个叫做元数据区的
native 内存区。

20. Java 中垃圾收集的方法有哪些?

马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
标记 - 清除:这是垃圾收集算法中最基础的,根据名字就可以知
道,它的思想就是标记哪些要被回收的对象,然后统一回收。这种
方法很简单,但是会有两个主要问题:

  1. 效率不高,标记和清除的效率都很低;
  2. 会产生大量不连续的内存碎片,导致以后程序在分配较大的
    对象时,由于没有充足的连续内存而提前触发一次 GC 动
    作。
    复制算法:为了解决效率问题,复制算法将可用内存按容量划分为
    相等的两部分,然后每次只使用其中的一块,当一块内存用完时,
    就将还存活的对象复制到第二块内存上,然后一次性清楚完第一块
    内存,再将第二块上的对象复制到第一块。但是这种方式,内存的
    代价太高,每次基本上都要浪费一般的内存。
    于是将该算法进行了改进,内存区域不再是按照 1:1 去划分,而
    是将内存划分为 8:1:1 三部分,较大那份内存交 Eden 区,其余
    是两块较小的内存区叫 Survior 区。每次都会优先使用 Eden
    区,若 Eden 区满,就将对象复制到第二块内存区上,然后清除
    Eden 区,如果此时存活的对象太多,以至于 Survivor 不够时,

会将这些对象通过分配担保机制复制到老年代中。(java 堆又分
为新生代和老年代)
标记 - 整理:该算法主要是为了解决标记 - 清除,产生大量内存
碎片的问题;当对象存活率较高时,也解决了复制算法的效率问题。
它的不同之处就是在清除对象的时候现将可回收对象移动到一端,
然后清除掉端边界以外的对象,这样就不会产生内存碎片了。
分代收集:现在的虚拟机垃圾收集大多采用这种方式,它根据对象
的生存周期,将堆分为新生代和老年代。在新生代中,由于对象生
存期短,每次回收都会有大量对象死去,那么这时就采用复制算法。
老年代里的对象存活率较高,没有额外的空间进行分配担保。

21. 什么是类加载器,类加载器有哪些?

实现通过类的权限定名获取该类的二进制字节流的代码块叫做类
加载器。
主要有一下四种类加载器:
• 启动类加载器(Bootstrap ClassLoader)用来加载 Java 核
心类库,无法被 Java 程序直接引用。
• 扩展类加载器(extensions class loader):它用来加载 Java
的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类
加载器在此目录里面查找并加载 Java 类。
• 系统类加载器(system class loader):它根据 Java 应用
的类路径(CLASSPATH)来加载 Java 类。一般来说,Java
应用的类都是由它来完成加载的。可以通过
ClassLoader.getSystemClassLoader() 来获取它。
• 用户自定义类加载器,通过继承 java.lang.ClassLoader 类
的方式实现。

22. 类加载器双亲委派模型机制?

马士兵java架构课程, 开课吧, 图灵, 咕泡, 享学, 奈学教育, 极客大学, 极客时间, 慕课网课程都是最新, 同步更新, 大家一起众筹早日拿到心仪offer
V 15123957473 欢迎技术交流,其他合作
当一个类收到了类加载请求时,不会自己先去加载这个类,而是将
其委派给父类,由父类去加载,如果此时父类不能加载,反馈给子
类,由子类去完成类的加载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jvm面试题,jvm常见高频面试题汇总,必知必会 的相关文章

  • leveldb官方手册摘录

    本文内容摘自leveldb官方手册 版权归其所有 CHAPTER 1 基本概念 leveldb是一个写性能十分优秀的存储引擎 是典型的LSM树 Log Structured Merge Tree 实现 LSM树的核心思想就是放弃部分读的性能
  • 【趣味编程】线型图统计不同字母的数量

    include
  • 深入理解js数组自定义排序sort

    定义和用法 sort 方法用于对数组的元素进行排序 语法 arrayObject sort function nextValue currentValue code 案例 var arr 5 4 3 2 1 6 7 8 9 倒序 arr s
  • dropout层加在哪里_【Keras】减少过拟合的秘诀——Dropout正则化

    摘要 Dropout正则化是最简单的神经网络正则化方法 阅读完本文 你就学会了在Keras框架中 如何将深度学习神经网络Dropout正则化添加到深度学习神经网络模型里 Dropout正则化是最简单的神经网络正则化方法 其原理非常简单粗暴
  • Qt QSettings读写ini时 General 读不出来值

    简述 我有一个配置文件 其中一个组General 怎么都读不出正确的值 全是空 但是别的组能读出来 改General2试试 果然可以 就怀疑是不是组名称被内置了 打开QSettings的帮助文档 搜索General 有内容 看下解释 The
  • Android Service启动方式

    1 启动方式 Service 的启动方式主要有两种 分别是 startService 和 bindService 其中 StartService 使用的是同一个 Service onCreate 只执行一次 onStartCommand 也
  • bios显存改8g rx_玩屏蔽?爆4GB显存版RX480可刷成8GB版

    原标题 玩屏蔽 爆4GB显存版RX480可刷成8GB版 近日多名用户发现通过刷新固件方式将4GB显存的AMD Radeon RX480显卡变成更昂贵的8GB版本 部分4GB版显卡包含和8GB Radeon RX480显卡相同的芯片 只是在B
  • 【转载】OpenCV函数汇总

    一 读入图像 cv2 imread filepath flags filepath 要读入图片的完整路径 flags 读入图片的标志 cv2 IMREAD COLOR 默认参数 读入一副彩色图片 忽略alpha通道 cv2 IMREAD G
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 关于Linux上面无法读取资源目录下文件的问题

    一开始我的代码是这样子的 读取本地子路径下的json文件 代码运行的时候 在window是可以正常的 Override public String getBannerStr String str try Resource resource
  • 计算机网络面试要点总结

    概述 带宽 网络可通过的最高数据率 即每秒多少比特 宽带 发送速率 宽带线路 每秒有更多的比特注入到线路中 依然是串行传输 电路交换 需要拨号建立连接 专线 浪费资源 分组交换 分组发送 接收组合 存储转发 根据路由表的下一条 协议 语法
  • Java基础(8)面向对象基础

    面向对象是Java最重要的特性 Java是彻底的 纯粹的面向对象语言 在Java中 一切都是对象 本章将介绍面向对象基础知识 1 面向对象概述 面向对象的编程思想 按照真实世界客观事物的自然规律进行分析 客观世界中存在什么样的实体 构建的软
  • FOC中的PARK变换_TI和ST电机控制库的源码实现

    FOC中的Clarke变换 TI和ST电机控制库的源码实现 FOC中的PARK变换 TI和ST电机控制库的源码实现 FOC中的反PARK变换 TI和ST电机控制库的源码实现 park变换 该变换将平衡两相正交平稳系统中的矢量变换为正交旋转坐
  • winows服务器的ftp密码如何修改,windows怎么修改服务器ftp密码

    windows怎么修改服务器ftp密码 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 只有运行中的云服务器才允许用户登录
  • 服务器虚拟架构解决方案

    服务器虚拟化的意义 如何才能最大限度的节约建设成本 降低系统管理成本 节约人力投入 在提高老业务系统的性能 还降低新系统的开发部署成本 诸如此类的问题 我想一直是我们所追求的目标 特别是在当前经济发展比较困难的时期 如何才能在有效实现政府
  • Python读取大文件与内存占用检测(常用的分步调试pdb)

    大文件读取问题 顺便记录一下vim的配置 https blog csdn net sinat 33741547 article details 74781591 https blog csdn net zwbill article deta
  • bp神经网络算法步流程_MATLAB BP神经网络的非线性系统建模非线性函数拟合

    点击上方蓝字关注 公众号 MATLAB BP神经网络的非线性系统建模 非线性函数拟合 在实际工程应用中会遇到一些复杂的非线性系统 这些系统方程复杂 难以用数学方法建模 在这种情况下 可以使用BP神经网络表达这些非线性系统 该方法把位置系统看
  • MATLAB利用FFT对信号进行频谱分析

    1 实验目的 1 进一步加深DFT算法原理和基本性质的理解 因为FFT只是DFT的一种快速算法 所以FFT的运算结果必然满足DFT的基本性质 2 熟悉FFT算法原理和FFT程序的应用 3 学习利用FFT对离散时间信号进行频谱分析的方法 了解
  • 最新golang语言面试题总结(一)

    1 go中make和new区别 new 分配内存 内存里存的值是对应类型的零值 只有一个参数 参数是分配的内存空间所存储的变量类型 Go语言里的任何类型都可以是new的参数 比如int 数组 结构体 甚至函数类型都可以 返回的是指针 mak
  • 【02】2022.11最新超详细Vuforia图片识别教程

    02 2022 11最新超详细Vuforia图片识别教程 文章目录 02 2022 11最新超详细Vuforia图片识别教程 1 Vuforia环境搭建 2 License Key获取及注册 3 AR Camera 4 图片选择条件与图片上

随机推荐

  • 热门面试题:v-show和v-if的区别

    v show 和 v if 都可以控制dom元素的显示和隐藏 那么具体区别是什么呢 话不多说 先来段代码对比一下 就会更容易明白 希望能对你有所帮助哦 1 先来看 v show div div
  • 34道C++面试问答(C++基础)

    C和C 有什么区别 C 是面向对象的语言 而C是面向过程的语言 C 引入new delete运算符 取代了C中的malloc free库函数 C 引入引用的概念 而C中没有 C 引入类的概念 而C中没有 C 引入函数重载的特性 而C中没有
  • php.exe f,PHP命令行执行程序php.exe使用及常用参数

    PHP命令行执行程序php exe参数说明 f 以命令行方式运行指定的PHP文件 只要指定具体的PHP文件 带绝对路径 php exe就可以执行PHP文件 所以这个参数单个使用其实有没有都无所谓 他有点类似于在游览器方式下显示PHP执行的结
  • XLSX纯前端导出(简单导出)

    npm install xlsx 安装插件 直接上代码 div a a div
  • 或的方式触发多个条件

    或的方式触发多个条件 include
  • Bat批处理生成带随机数的毫秒时间戳验证码

    second bat echo off set temp Spring gt Echo WScript Echo new Date getTime for f a in cscript nologo e jscript do set tim
  • POJ 1789, Truck History

    Time Limit 2000MS Memory Limit 65536KTotal Submissions 5256 Accepted 1851 DescriptionAdvanced Cargo Movement Ltd uses tr
  • 图像的频谱图简单理解

    https zhuanlan zhihu com p 99605178 utm source qq https blog csdn net dazhuan0429 article details 85774692 一维信号的傅里叶变换 将一
  • Keil 5报错identifier “KEY0“ is undefined怎末解决呀大侠们【哭】

    错误 HARDWARE EXTI exti c 42 error 20 identifier KEY0 is undefined key c include key h include delay h 按键初始化函数 PA0 15和PC5
  • 把一个对象的key全部换成大写/小写

    前言 把一个对象 他的key都是大写 或者小写的情况下给他转换类型 大写 小写 实现效果 实现方法 1 封装两个方法 大写转换 export function upperJSONKey jsonObj for var key in json
  • robot framework 使用五:CentOS上运行robot framework 并自动发送测试结果

    操作系统版本 centos 6 0 x86 64 想要在linux上运行robot framework的测试用例 需要安装以下工具和软件 1 安装python 2 7 6 首先python version 查看系统是否装有python 并且
  • Python编程:实现整数反转(含完整源代码)

    Python编程 实现整数反转 含完整源代码 在Python中 实现整数反转非常简单 我们只需要将整数转换为字符串 然后对字符串进行反转操作 最后再将反转后的字符串转换回整数即可完成整数反转 下面是实现整数反转的Python源代码 def
  • 深入浅出--梯度下降法及其实现

    转自 https www jianshu com p c7e642877b0e 深入浅出 梯度下降法及其实现 六尺帐篷 关注 2018 01 17 21 06 字数 3001 阅读 1210 评论 2 喜欢 23 赞赏 1 梯度下降的场景假
  • 常用文件的文件头(十六进制)

    JPEG jpg 文件头 FFD8FF PNG png 文件头 89504E47 GIF gif 文件头 47494638 TIFF tif 文件头 49492A00 Windows Bitmap bmp 文件头 424D CAD dwg
  • 嘀嗒出行再闯IPO:千军万马我无懈

    羽扇纶巾笑谈间 千军万马我无懈 在激烈竞争中再度冲刺港交所IPO的嘀嗒出行 闪露出一丝歌词里的气魄 交通运输部下属网约车监管信息交互系统的数据显示 截至2023年1月31日 全国共有300家网约车平台公司取得网约车平台经营许可 在2022年
  • 隐式声明函数‘raw_copy_to_user’的问题

    隐式声明函数 raw copy to user 的问题 其实一般来说都是隐式声明函数 copy to user 的问题 这类问题你就看看有没有引用正确的头文件 例如有些是
  • 一些常见面试OO design题目总结

    最近很多公司面试喜欢问一些OO design的题目 我总结了一些比较高频的题目 需求不一定准确 设计的也不一定好 欢迎提出建议 1 电梯设计 2 停车厂设计 3 通用卡牌游戏blackjack设计 4 1 电梯设计 需求 以面向对象的方式设
  • vue知识点总结

    vue知识点总结 1 vue是渐进式的javaScript框架 其作者是尤雨溪是以为华裔前google工程师 是一个动态构建用户界面 个人理解为可以在一个界面中动态展示其中某一部分的数据显示 运行 转换等功能 相比于jsp html页面有着
  • VRRP技术(详解)

    一 VRRP的概述 用户一般都是采用一个默认的网关来访问外部网络 如果此时默认网关设备发生故障 将中 断所有用户终端的网络访问 导致不可挽回的损失 VRRP可以实现多网关 并且可以解决多网关运行中冲突的错误 二 VRRP术语 VRRP路由器
  • jvm面试题,jvm常见高频面试题汇总,必知必会

    1 Java 类加载过程 Java 类加载需要经历一下 7 个过程 1 加载 加载是类加载的第一个过程 在这个阶段 将完成一下三件事情 通过一个类的全限定名获取该类的二进制流 将该二进制流中的静态存储结构转化为方法去运行时数据结 构 在内存