当前位置: 首页 > news >正文

对象的前世今生与和事佬(static)的故事

目录

1.对象村的秘密(对象在内存的实现)

1.1 内存的好兄弟“堆”与“栈”

1.1.1方法喜欢玩泰山压顶

1.1.2 stack的实现

1.2栈上的对象引用

1.2.1有关对象局部变量

1.2.2 如果局部变量生存在栈上,那么实例变量呢?

1.2.3创建对象的奇迹

1.3对象的消亡

1.3.1"life"与“scope”的差别

1.3.2杀死对象的三位杀手

2.和事佬在对象村的处境(static成员)

2.1 和事佬的处事方式(static的特性)

2.2 static修饰成员变量

2.3 static修饰成员方法

 2.4 static成员变量初始化

3.代码块

3.1代码块概念以及分类

3.2 普通代码块

3.3 构造代码块

3.4 静态代码块


 

导读:上节我们拜访了对象村,我们不禁产生很多疑问。怎么做到遍地都是对象的呢?对象村又是如何出现的?下面就由我来进行揭秘。

 

前言:

对象有生有死。你必须为对象的生命循环周期负责。你决定着对象何时创建,如何创建,也决定着何时销毁对象。其实你不是真的自消灭对象,只是声明要放弃它而巳。一旦它被放弃了,冷血无情的垃圾收集器(GC)就会将它蒸发掉、回收对象所占用的内存空间。如果你要编写Java程序,就必须创建对象。早晚你得将它们释放掉,不然就会出现内存不足的问题。这一章会讨论对象如何创建、存在于何处以及如何让保存和抛弃更有效率。这代表我们会述及堆、栈、范围、构造器、超级构造器、空引用等。注意:内容含有死亡成份,12岁以下儿童需由家长陪同观赏


1.对象村的秘密(对象在内存的实现)

1.1 内存的好兄弟“堆”与“栈”

在Java中,堆(heap)和栈(stack)是两种不同的内存区域,用于存储程序运行时的不同类型的数据和对象。

1. 栈(Stack):

  • 栈是一种线性数据结构,遵循"先进后出"(Last-In-First-Out, LIFO)的原则。栈中的数据主要包括基本数据类型的变量和对象的引用。
  •  栈内存用于存储局部变量、方法参数、方法调用以及方法返回时的临时数据。当一个方法被调用时,会在栈上创建一个称为"栈帧"的区域,用于存储该方法的局部变量和方法调用信息。栈帧在方法执行完毕后被销毁。
  •  栈的大小在程序运行时是固定的,由Java虚拟机(JVM)进行分配和管理。如果栈的内存空间不足,会抛出 StackOverflowError 错误。

2. 堆(Heap):

  •  堆是用于存储动态分配的对象的一块内存区域。堆是Java中最大的一块内存区域,也是最复杂的一块内存区域。
  • 所有的类实例(对象)和数组对象都存储在堆上。
  • 堆的大小在程序运行时是可变的。Java虚拟机根据堆的使用情况动态地分配和回收内存。
  • 堆的内存分配由垃圾回收器(Garbage Collector)负责,它自动扫描并回收不再使用的对象,使可用内存得到重复利用。

通常情况下,栈的内存空间比较小,用于存储局部变量等临时数据。而堆的内存空间比较大,用于存储动态创建的对象。在Java中,基本类型的变量(如int、boolean等)和对象的引用被存储在栈上,而对象的实际数据(包括成员变量)则存储在堆上。

了解栈和堆的原理对于理解Java的内存管理和内存分配非常重要,它们的不同特点也直接影响到程序的性能和内存使用情况。

如图所示:

b5343cbc9fd04c908c2462e026cf7725.png

实例变量:

 

  • 实例变量是定义在类中,方法外的变量。
  • 每个实例变量属于该类的每个实例对象,每个对象都有自己的实例变量副本。
  • 实例变量在对象创建时被初始化,并在对象的整个生命周期内都存在。
  • 实例变量可以被类中的任何方法、构造方法或块使用。
  • 访问实例变量时,必须通过对象引用来访问。

示例代码如下:

public class MyClass {// 实例变量private String name; // 字符串类型的实例变量public void setName(String name) {this.name = name;}public void printName() {System.out.println("Name: " + name);}
}

 

局部变量:

 

  • 局部变量是在方法、构造方法或块中定义的变量,只在其所在的作用域内可见。
  • 局部变量仅在其所在的方法或块执行期间存在,并且在方法或块的执行结束后被销毁。
  • 在方法中定义的局部变量在每次方法调用时都会重新创建,每个方法调用都会为其分配内存空间。
  • 访问局部变量时,只能在其声明的作用域内访问。

示例代码如下:

public class MyClass {public void printNumber(int number) {// 局部变量String message = "The number is: "; // 字符串类型的局部变量System.out.println(message + number);}
}

1.1.1方法喜欢玩泰山压顶

当你调用一个方法时,该方法会放在调用栈的栈顶,实际被堆上栈的是堆栈块。它带有方法的状态,包括执行到哪一行程序以及所有的局部变量的值。

栈顶上的方法是目前正在执行的方法,方法会一直待在这里直到执行完毕,如果foo() 方法调用bar()方法则bar()方法会放在foo()方法的上面。

c0ef4aee1b3f4d599bf30100febe27d2.png

1.1.2 stack的实现

下边有三个方法,第一个方法在执行过程中会调用第二个方法,第二个会调用第三个。每个方法都在内容中声明一个局部变量,而go()方法还有声明一个参数(这代表go()方法有两个局部变量)。

public void doStuff(){boolean b = true;go(4);
}
public void go(int x){int z = x + 24;crazy();//假设还有很多代码
}
public void crazy(){char = 'a';
}

如图

8f881e0c679f4220b8d7536d4a7681d5.png

1.2栈上的对象引用

1.2.1有关对象局部变量

要记得非primitive的变量只是保存对象的引用而已,而不是对象本身。你已经知道对象存在于何处——堆。不论对象是否声明或创建,如果局部变量是个对该对象的引用,只有变量本身会放在栈上
对象本身只会存在于堆上。

primitive:在Java中,primitive(原始类型)是指Java语言中的基本数据类型。Java的原始类型包括boolean、char、byte、short、int、long、float和double。这些原始类型是Java语言的基本构建块,用于存储简单的数据值。

public class stackRef{
public void foof(){barf();}public void barf(){Duck d = new Duck(24);}}

19710efaa8b64b95b768e0cb7db13654.png

 

要点:

我们关心栈 与堆这两种内存空间。

实例变量是声明在类中方法之外的地方。
局部变量声明在方法或方法的参数上。
所有局部变量都存在于栈上相对应的堆栈块中。
对象引用变量 与primitive主数据类型变量都是放在栈上。

不管是实例变量或局部变量, 对象本身都会在堆上。

1.2.2 如果局部变量生存在栈上,那么实例变量呢?

当你要新建一个CellPhone()时,Java必须在堆上帮CellPhone找一个位置。这会需要多少空间呢?足以存放该对象所有实例变量的空间。没错,实例变量存在于对象所属的堆空间上。

记住对象的实例变量的值是存放于该对象中。如果实例变量全都是primitive主数据类型的,则Java会依据primitive主数据类型的大小为该实例变量留下空间。int需要32位,long需要64位,依此类推。Java并不在乎私有变量的值,不管是32或32,000,000的int 都会占用32位


1.2.3创建对象的奇迹

三个步骤的回顾:声明、创建、赋值

981109076e834aa5a34434ce346ec6ad.png

 

1.3对象的消亡

1.局部变量只会存活在声明该变量的方法中

局部变量只会存活在声明该变量的方法中
 

public void read(){
int s = 42;//'s'只能用在此方法中
//当方法结束时// s会完全消失


变量s只能用在read()方法中。换句话说,此变量的范围只会在所属方法的范围内。其余的程序代码完全见不到s。

2.实例变量的寿命与对象相同。 如果对象还活着,则实例变量也会是活的。

 

public class Life {int size;public void setSize (int s) {size = s;//'s'会在方法结束时//消失,但size在类中//到处都可用



此时s变量(这次是方法的参数)的范国同样也只限制在所属的setSize()这方法中。

1.3.1"life"与“scope”的差别

Lite
只要变量的堆栈块还存在于堆栈上,局部变量就算活着。也就是说,活到方法执行完毕为止。
Scope
局部变量的范围只限于声明它的方法之内.当此方法调用别的方法时,该变量还活着,但不在目前的范围内。执行其他方法完毕返回时,范围也就跟着回来。
 

public void doStuff(){
boolean b=true;
go(4) ;
}
public void go(int x){
int z = x + 24;
crazy();
//这里有更多的代码
}
public void crazy(){
char c = 'a';
}

a4fb5f86fa48420aa75e1650de6145c7.png

 

当局部变量活着的时候,它的状态会被保存。只要doStuff()还在堆栈上,b变量就会保持它的值。但b变量只能在doStuffO待在栈顶时才能使用。也就是说局部变量只能在声明它的方法在执行中才能被使用
 

1.3.2杀死对象的三位杀手

有3种方法可以释放(杀死)对象的引用:
当最后一个引用消失时,对象就会变成可回收的。
1 引用永久性的离开它的范围。

void go() {
Life z=new Life() ;

}
2 引用被赋值到其他的对象上.
Life z = new Life() ;
z = new Life();
3 直接将引用设定为null。
Life z = new Life();
 z = null;

对象杀手1号

引用永久性的离开他的范围

public class StackRef{
public void foof(){barf();}public void barf(){Duck d = new Duck;}}

04429dd90ef342f5a82c2b63355c20c6.png

对象杀手三号

引用被赋值到其他对象

public class ReRef{Duck d = new Duck();public void go(){d = new Duck;} 
}

如下图:

954d97b36170460f954b3f92406dd6a3.png

对象杀手三号

直接将引用设定为null

public class ReRef {Duck d = new Duck();public void go() {d = null;}
}

77c6a6f3c4df4344b821e6f298fe66b0.png

那null又是什么呢?

null的真相
当你把引用设为null时,你就等于是抹除遥控器的功能。换句话说,你会拿到一个没有电视的遥控器。null是代表“空” 的字节组合(实际上是什么只有Java虚拟机才会知道)。

 

如果你真地按下这种逼控器上的按钮,什么事情也不会发生。但在Java.上,你是不能对null引用按钮的。因为Java虚拟机会知道(这是运行期,不是编译时的错误)你期待喵喵叫,但是却没有Cat可以执行!


对null引用使用圆点运算符会在执行期遇到NullPointerException这样的错误。后而会有讨论异常的章节。

2.和事佬在对象村的处境(static成员)

2.1 和事佬的处事方式(static的特性)

通过以下三个代码对学生进行描述,如下所示:

public class Student{
// ...
public static void main(String[] args) {
Student s1 = new Student("Li leilei", "男", 18, 3.8);
Student s2 = new Student("Han MeiMei", "女", 19, 4.0);
Student s3 = new Student("Jim", "男", 18, 2.6);
}
}

得到以下三个对象的特征

de39398b104542ecb98fa3040526b472.png

每个对象中都会包含一份 ( 称之为实例变量 ),因为需要使用这些信息来描述 具体的学生。而现在要表示学生上课的教室,这个教室的属性并不需要每个学生对象中都存储一份,而是需要让所 有的学生来共享。 Java 中,被 static 修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对 象,是所有对象所共享的

2.2 static修饰成员变量

static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。

 

【静态成员变量特性】
1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
public class Student{
public String name;
public String gender;
public int age;
public double score;
public static String classRoom = "Bit306";
// ...
public static void main(String[] args) {
// 静态成员变量可以直接通过类名访问
System.out.println(Student.classRoom);
Student s1 = new Student("Li leilei", "男", 18, 3.8);
Student s2 = new Student("Han MeiMei", "女", 19, 4.0);
Student s3 = new Student("Jim", "男", 18, 2.6);
// 也可以通过对象访问:但是classRoom是三个对象共享的
System.out.println(s1.classRoom);
System.out.println(s2.classRoom);
System.out.println(s3.classRoom);}
}

静态成员变量可以直接通过类名访问

8218e6b7b34e4d17865c3571eeb5023b.png

同学以调试方式运行上述代码,然后在监视窗口中可以看到,静态成员变量并没有存储到某个具体的对象中。
28b2d6598e02415ca651dec8dbf3d5e3.png

2.3 static修饰成员方法

被private修饰的:只有自己知道,其他人都不知道(封装会进行详细讲解)

 一般类中的数据成员都设置为private,而成员方法设置为public,那设置之后,Student类中classRoom属性如何在类外访问呢?

public class Student{
private String name;
private String gender;
private int age;
private double score;
private static String classRoom = "Bit306";
// ...
}
public class TestStudent {
public static void main(String[] args) {
System.out.println(Student.classRoom);
}
}
编译失败:
Error:(10, 35) java: classRoom 在 extend01.Student 中是 private 访问控制

 那static属性应该如何访问呢?

Java中,static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。

public class Student{
// ...
private static String classRoom = "Bit306";
// ...
public static String getClassRoom(){
return classRoom;
}
}
public class TestStudent {
public static void main(String[] args) {
System.out.println(Student.getClassRoom());
}
}
输出:Bit306
静态方法特性
1. 不属于某个具体的对象,是类方法
2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
3. 不能在静态方法中(直接)访问任何非静态成员变量​​​​​​

 66aa188c1b77417c8177752c78b1fb94.png

 无法从静态上下文引用非静态变量name

4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用
9b971c68be214320a83523eae60f415a.png

 5. 静态方法无法重写,不能用来实现多态(此处大家暂时不用管,后序多态位置详细讲解)

 2.4 static成员变量初始化

注意:静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性

静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。

   1.     就地初始化

​​​​​​​​​​​​​​就地初始化指的是:在定义时直接给出初始值

public class Student{
private String name;
private String gender;
private int age;
private double score;
private static String classRoom = "Bit306"; 
// ...
}

    2.​​​​​​​    静态代码块初始化

那什么是代码块呢?继续往后看 :) ~~~

3.代码块

3.1代码块概念以及分类

使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种:

普通代码块
构造块
静态块
同步代码块(后续讲解多线程部分再谈)

3.2 普通代码块

普通代码块:定义在方法中的代码块

public class Main{
public static void main(String[] args) {
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x1 = " +x);
}
int x = 100 ;
System.out.println("x2 = " +x);//外面用不了内部的x
}
}
// 执行结果
x1 = 10
x2 = 100

这种用法较少见

3.3 构造代码块

构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。

public class Student{
//实例成员变量
private String name;
private String gender;
private int age;
private double score;
public Student() {
System.out.println("I am Student init()!");
}
//实例代码块
{
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main {
public static void main(String[] args) {
Student stu = new Student();
stu.show();
}
}
// 运行结果
I am instance init()!
I am Student init()!
name: bit age: 12 sex: man

构造代码块在方法的外面,类的里面

实例代码块比构造方法先执行(和放在哪里没有关系)

8aad817bd7e24d74a9a60d68a4bd02ec.png

6defcb2589ef44dca59b54effae554ce.png

3.4 静态代码块

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。

public class Student{
private String name;
private String gender;
private int age;
private double score;
private static String classRoom;
//实例代码块
{
this.name = "bit";
this.age = 12;
this.gender = "man";
System.out.println("实例代码块");
}
// 静态代码块
static {
classRoom = "bit306";
System.out.println("静态代码块");
}
public Student(){
System.out.println("构造代码块");
}
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}

 注意事项

静态代码块不管生成多少个对象,其只会执行一次
静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
实例代码块只有在创建对象时才会执行

实例化两个对象:

90b760f65b05403db10a0874f9594431.png

 当没有实例化对象时:

a00c5b1e3c6e4577a996f851fb90964c.png

结尾:

以上就是全部内容,送一句话该大家:

让我们如大自然般悠然自在地生活一天吧,
别因为有坚果外壳或者蚊子翅膀落在铁轨上而翻了车。

让我们该起床时就赶紧起床,
该休息时就安心休息,
保持安宁而没有烦扰的心态;

身边的人要来就让他来,要去就让他去,​​​​​​​
让钟声回荡,让孩子哭喊—
下定决心好好地过一天。

 

相关文章:

对象的前世今生与和事佬(static)的故事

目录 1.对象村的秘密(对象在内存的实现) 1.1 内存的好兄弟“堆”与“栈” 1.1.1方法喜欢玩泰山压顶 1.1.2 stack的实现 1.2栈上的对象引用 1.2.1有关对象局部变量 1.2.2 如果局部变量生存在栈上,那么实例变量呢? 1.2.3创建…...

报错curl: (6) Could not resolve host: raw.githubusercontent...的解决办法

我起初想要在macOS系统安装pip包,首先在终端安装homebrew,敲了命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent...)" 之后触发的报错,报错内容:curl: (6) Could not resolve host: raw.…...

【基础篇】十二、引用计数法 可达性分析算法

文章目录 1、Garbage Collection2、方法区的回收3、堆对象回收4、引用计数法5、可达性分析算法6、查看GC Root对象 1、Garbage Collection C/C,无自动回收机制,对象不用时需要手动释放,否则积累导致内存泄漏: Java、C#、Python、…...

C语言算法(二分查找、文件读写)

二分查找 前提条件&#xff1a;数据有序&#xff0c;随机访问 #include <stdio.h>int binary_search(int arr[],int n,int key);int main(void) {}int search(int arr[],int left,int right,int key) {//边界条件if(left > right) return -1;//int mid (left righ…...

流媒体学习之路(WebRTC)——Pacer与GCC(5)

流媒体学习之路(WebRTC)——Pacer与GCC&#xff08;5&#xff09; —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标&#xff1a;可以让大家熟悉各类Qos能力、带宽估计能力&#xff0c;提供每个环节关键参数调节接口并实现一个json全…...

2023版本QT学习记录 -11- 多线程的使用(QT的方式)

———————多线程的使用(QT方式)——————— &#x1f384;效果演示 两个线程都输出一些调试信息 &#x1f384;创建多线程的流程 &#x1f384;头文件 #include "qthread.h"&#x1f384;利用多态重写任务函数 class rlthread1 : public QThread {Q_OBJE…...

iOS苹果和Android安卓测试APP应用程序的差异

Hello大家好呀&#xff0c;我是咕噜铁蛋&#xff01;我们经常需要关注移动应用程序的测试和优化&#xff0c;以提供更好的用户体验。在移动应用开发领域&#xff0c;iOS和Android是两个主要的操作系统平台。本文铁蛋讲给各位小伙伴们详细介绍在App测试中iOS和Android的差异&…...

每日算法打卡:数的三次方根 day 7

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 题目分析示例代码 原题链接 790. 数的三次方根 题目难度&#xff1a;简单 题目描述 给定一个浮点数 n&#xff0c;求它的三次方根。 输入格式 共一行&#xff0c;包含一个浮…...

人机交互主板定制_基于MT8735安卓核心板的自助查询机方案

人机交互主板是一种商显智能终端主板&#xff0c;广泛应用于广告机、工控一体机、教学一体机、智能自助终端、考勤机、智能零售终端、O2O智能设备、取号机、计算机视觉、医疗健康设备、机器人设备等领域。 人机交互主板采用联发科MTK8735芯片平台&#xff0c;四核Cortex-A53架构…...

全志F1C100s Linux 系统编译出错:不能连接 github

环境 Ubuntu 20.04 LTS 64 位虚拟机 开发板:Lichee Pi Nano 源代码:GitHub - florpor/licheepi-nano 问题描述 该源码库使用了 git 子模块的概念,一个库中包含了 u-boot、Linux等代码库。不需要分别编译,一个 make 全搞定 编译时提示错误: >>> linux-hea…...

如何保障 MySQL 和 Redis 的数据一致性?

数据一致性问题是如何产生的&#xff1f; 数据一致性问题通常产生于数据在不同的时间点、地点或系统中存在多个副本的情况&#xff0c; 系统只存在一个副本的情况下也完全可能会产生。 设想一下&#xff0c;你在一家连锁咖啡店有一张会员卡这张会员卡可以绑定两个账号&#x…...

Leetcode 2999. Count the Number of Powerful Integers

Leetcode 2999. Count the Number of Powerful Integers 1. 解题思路2. 代码实现 题目链接&#xff1a;10034. Count the Number of Powerful Integers 1. 解题思路 这一题的话其实还是一个典型的求不大于 N N N的特殊数字个数的问题。 这道题本质上进行一下替换还是要求如…...

【Reading Notes】(2)

文章目录 FreestyleHip-hop dance and MusicProgrammerMaster Freestyle 都说人的成长有三个阶段&#xff0c;第一个阶段认为自己独一无二&#xff0c;天之骄子&#xff1b;第二个阶段发现自己原来如此渺小&#xff0c;如此普通&#xff0c;沮丧失望&#xff1b;第三阶段&#…...

【设计模式之美】SOLID 原则之一:怎么才算是单一原则、如何取舍单一原则

文章目录 一. 如何判断类的职责是否足够单一&#xff1f;二. 类的职责是否设计得越单一越好&#xff1f; 开始学习一些经典的设计原则&#xff0c;其中包括&#xff0c;SOLID、KISS、YAGNI、DRY、LOD 等。 本文主要学习单一职责原则的相关内容。 单一职责原则的定义&#xff1a…...

# [NOIP2015 普及组] 扫雷游戏#洛谷

题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n n n 行 m m m 列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩家翻开一个非地雷格时&#…...

Unity中Shader的_Time精度问题

文章目录 前言一、U方向上优化二、V方向上优化在这里插入图片描述 三、最终代码1、效果2、Shader 前言 在Unity的Shader中&#xff0c;使用了_Time来达到UV的流动效果&#xff0c;普遍会出现一个问题。我们的UV值会随着时间一直增加&#xff08;uv值增加了&#xff0c;但是因为…...

听GPT 讲Rust源代码--compiler(15)

File: rust/compiler/rustc_arena/src/lib.rs 在Rust源代码中&#xff0c;rustc_arena/src/lib.rs文件定义了TypedArena&#xff0c;ArenaChunk&#xff0c;DroplessArena和Arena结构体&#xff0c;以及一些与内存分配和容器操作相关的函数。 cold_path<F: FnOnce,drop,new,…...

关键字联合体union的定义和使用

联合体的定义 联合体的定义和结构体相同。 联合体成员共用存储空间&#xff0c;联合体占用的空间最大长度的数据成员的长度。 union State {char sleep;char run;int suspend;double error; }state_u;以上例子&#xff0c;State表示联合体的名字&#xff0c;它相当于声明了一…...

基于GA-PSO遗传粒子群混合优化算法的VRPTW问题求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 遗传算法&#xff08;GA&#xff09;基本原理 4.2 粒子群优化&#xff08;PSO&#xff09;基本原理 4.3 算法优化策略 5.完整程序 1.程序功能描述 VRPTW是车辆路径问题&#xff08;VR…...

【leetcode100-033】【链表】排序链表

【题干】 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 【思路】 递归版归并法链表版&#xff5e;没什么特别好说的&#xff08;非递归版归并也是可以哒&#xff0c;但是马上要考试了今天懒得写了&#xff01;打个flag在这里也许哪天想起来…...

[Kubernetes]5. k8s集群StatefulSet详解,以及数据持久化(SC PV PVC)

前面通过deployment结合service来部署无状态的应用,下面来讲解通过satefulSet结合service来部署有状态的应用 一.StatefulSet详解 1.有状态和无状态区别 无状态: 无状态(stateless)、牲畜(cattle)、无名(nameless)、可丢弃(disposable) 有状态: 有状态(stateful)、宠物(pet)…...

数据库系统-甘晴void学习笔记

数据库系统笔记 计科210X 甘晴void 202108010XXX 教材&#xff1a;《数据库系统概论》第6版 &#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文章目录 数据库系统<br>笔记第一篇 基础篇1 绪论1.1数据库系统概述1.2数据模型1.3数据库系统的结构(三级模式结构…...

Azure Machine Learning - 人脸识别任务概述与技术实战

Azure AI 人脸服务提供了可检测、识别和分析图像中的人脸的 AI 算法。 人脸识别软件在许多不同情形中都十分重要&#xff0c;例如识别、无接触访问控制和实现隐私的人脸模糊。你可以通过客户端库 SDK&#xff0c;或者直接调用 REST API 使用人脸服务。 目录 一、人脸识别服务场…...

强化学习的数学原理学习笔记 - 蒙特卡洛方法(Monte Carlo)

文章目录 概览&#xff1a;RL方法分类蒙特卡洛方法&#xff08;Monte Carlo&#xff0c;MC&#xff09;MC BasicMC Exploring Starts&#x1f7e6;MC ε-Greedy 本系列文章介绍强化学习基础知识与经典算法原理&#xff0c;大部分内容来自西湖大学赵世钰老师的强化学习的数学原理…...

DDIA 第十一章:流处理

本文是《数据密集型应用系统设计》&#xff08;DDIA&#xff09;的读书笔记&#xff0c;一共十二章&#xff0c;我已经全部阅读并且整理完毕。 采用一问一答的形式&#xff0c;并且用列表形式整理了原文。 笔记的内容大概是原文的 1/5 ~ 1/3&#xff0c;所以你如果没有很多时间…...

webpack知识点总结(高级应用篇)

除开公共基础配置之外&#xff0c;我们意识到两点: 1. 开发环境(modedevelopment),追求强大的开发功能和效率&#xff0c;配置各种方便开 发的功能;2. 生产环境(modeproduction),追求更小更轻量的bundle(即打包产物); 而所谓高级应用&#xff0c;实际上就是进行 Webpack 优化…...

均匀与准均匀 B样条算法

B 样条曲线的定义 p ( t ) ∑ i 0 n P i F i , k ( t ) p(t) \sum_{i0}{n} P_i F_{i, k}(t) p(t)i0∑​nPi​Fi,k​(t) 方程中 n 1 n1 n1 个控制点&#xff0c; P i P_i Pi​, i 0 , 1 , ⋯ n i0, 1, \cdots n i0,1,⋯n 要用到 n 1 n1 n1 个 k k k 次 B 样条基函数 …...

2023年12 月电子学会Python等级考试试卷(一级)答案解析

青少年软件编程(Python)等级考试试卷(一级) 分数:100 题数:37 一、单选题(共25题,共50分) 1. 下列程序运行的结果是?( ) print(hello) print(world) A. helloworld...

启发式算法解决TSP、0/1背包和电路板问题

1. Las Vegas 题目 设计一个 Las Vegas 随机算法&#xff0c;求解电路板布线问题。将该算法与分支限界算法结合&#xff0c;观察求解效率。 代码 python代码如下&#xff1a; # -*- coding: utf-8 -*- """ Date : 2024/1/4 Time : 16:21 Author : …...

阿里云新用户的定义与权益

随着云计算的普及&#xff0c;阿里云作为国内领先的云计算服务提供商&#xff0c;吸引了越来越多的用户。对于新用户来说&#xff0c;了解阿里云新用户的定义和相关权益非常重要&#xff0c;因为它关系到用户能否享受到更多的优惠和服务。 一、阿里云新用户的定义 阿里云新用户…...

推广网官方推广网站/免费涨粉工具

云与虚拟化云计算是通过 Internet 服务的方式提供动态可伸缩资源的计算模式&#xff0c;经过多年的发展已成为企业 IT 技术的重要支撑。虚拟化是云计算的核心技术之一&#xff0c;将一台计算机抽象为多台逻辑计算机&#xff0c;即虚拟机&#xff0c;每个虚拟机是一个单独安全的…...

wordpress底部信息修改/徐州网站建设

SSL网关是基于SSL/TLS 协议&#xff0c;在通信网络中构建安全通道的设备。SSL网关国密标准包括&#xff1a; &#xff08;1&#xff09;GMT0024-2014 SSL V*N技术规范&#xff08;密码产品类&#xff09; &#xff08;2&#xff09;GMT0025-2014 SSL V*N网关产品规范 &#xff…...

福田网站建设seo信科/seo网络推广公司排名

云计算建设分为三个阶段&#xff1a;基础云阶段、平台云阶段、服务云阶段。企业首先需要将现有的信息架构变成云架构&#xff0c;即实现虚拟化的数据中心&#xff1b;然后&#xff0c;在这个基础的云架构上部署基础软件&#xff0c;也就是中间件&#xff0c;实现IT资源平台化&a…...

什么网站可以做单词书/谷歌seo网站排名优化

十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见) 原文:十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见)非常开心能够和大家一起分享这些&#xff0c;让我受益匪浅&#xff0c;感激之情也溢于言表&#xff0c;&#xff0c;code m…...

北京抖音代运营公司/网站关键字优化公司

DNS域名服务基础一、1.DNS解析作用&#xff1a; 正向解析&#xff1a;根据主机名称&#xff08;域名&#xff09;查找对应的ip地址&#xff0c;这是最基本、最常用的功能。反向解析&#xff1a;根据ip地址查找对应的主机名称&#xff08;域名&#xff09;&#xff0c;例如反垃圾…...

wordpress 相关推荐/企业网络策划

A.优化站点资源 速度很重要。用户很关心。我们的站点必须加载够快&#xff0c;否则用户就会走人。SEO 也很重要。我们的站点必须加载够快&#xff0c;否者搜索排名就会下降。 明白了这样&#xff0c;我们就来清点一下 【Bootstrap】2.作品展示站点 中的资源。特别的&#xff0c…...