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

【JAVA】数组的使用

文章目录

  • 前言
  • 一、数组的基本概念
    • 1.1 数组的创建和初始化
    • 1.2 数组的基本使用
  • 二、数组是引用类型
    • 2.1 初始JVM的内存分布
      • JVM内存划分(按功能分区)
    • 2.2 基本类型变量与引用类型变量的区别
    • 2.3 再谈引用变量
    • 2.4 认识null
  • 三、数组作为函数的参数和返回值
  • 四、数组的应用场景
    • 4.1 数组转字符串
    • 4.2 数组的拷贝
    • 4.3 深拷贝和浅拷贝问题
    • 4.3 冒泡排序的小优化
    • 4.4 数组逆序
    • 4.5 数组逆序
    • 4.6 数组练习
  • 五、二维数组
    • 5.1 普通二维数组
    • 5.2 不规则的二维数组
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

在Java编程的征途中,数组作为基础却至关重要的数据结构,是每个开发者必须掌握的核心技能。它不仅是存储同类型元素的​​高效容器​​,更是算法实现、数据处理的​​底层基石​​。从简单的成绩管理系统到复杂的矩阵运算,数组以其简洁的内存模型和快速的随机访问能力,奠定了程序逻辑的基本骨架。本篇博客将深入剖析Java数组的特性、应用场景及性能要点,帮助您从语法本质到实战技巧全面驾驭这一编程利器。

注意:和c语言内容大致相同的部分会简单带过或者不讲解


提示:以下是本篇文章正文内容,下面案例可供参考

一、数组的基本概念

1.1 数组的创建和初始化

数组的创建:

 T[] 数组名 = new T[N];

T:表⽰数组中存放元素的类型
T[]:表⽰数组的类型
N:表⽰数组的⻓度

public class array {public static void main(String[] args) {int[] array1=new int[10];double[] array2=new double[10];String[] array3=new String[10];}
}

数组的初始化:
数组的初始化主要分为动态初始化以及静态初始化

  1. 动态初始化:在创建数组时,直接指定数组中元素的个数,只开辟空间但是不赋初值
  2. 静态初始化:在创建数组时不直接指定数据元素个数,⽽直接将具体的数据内容进⾏指定
    示例代码:
public class array {public static void main(String[] args) {int[] array1=new int[]{0,1,2,3,4,5,6};double[] array2=new double[]{1.0,2.0,3.0,4.0,5.0,6.0};String[] array3=new String[]{"hello"};int[] array4={1,2,3,4};}
}

【注意事项】:

  • 静态初始化虽然没有指定数组的⻓度,编译器在编译时会根据{}中元素个数来确定数组的⻓度。
  • 静态初始化时,{}中数据类型必须与[]前数据类型⼀致。
  • 静态初始化可以简写,省去后⾯的new T[]。

**
静态和动态初始化也可以分为两步,但是省略格式不可以。
示例代码如下:**

public class array {public static void main(String[] args) {int[] array1;array1=new int[4];int[] array2;array2=new int[]{1,2,3};//下面方式不可行int[] array3;array3={1,2,3};}
}

在这里插入图片描述
如果没有对数组进⾏初始化,数组中元素有其默认值:
在这里插入图片描述
如果数组中存储元素类型为引⽤类型,默认值为null
在这里插入图片描述

1.2 数组的基本使用

通过代码来演示数组的使用:

public class array {public static void main(String[] args) {String[] array1=new String[]{"hhh","aaa","zzz"};array1[2]="dzj";for (String str: array1) {System.out.println(str);}}
}

遍历数组:

public class array {public static void main(String[] args) {String[] array1=new String[]{"hhh","aaa","zzz"};array1[2]="dzj";//遍历方式一for (String str: array1) {System.out.println(str);}//遍历方式二for (int i = 0; i < array1.length; i++) {System.out.println(array1[i]);}}
}

二、数组是引用类型

2.1 初始JVM的内存分布


JVM也对所使用的内存按照功能的不同进行了划分
在这里插入图片描述

JVM内存划分(按功能分区)

  1. 程序计数器(PC Register)

    • 占用极小的内存空间
    • 核心功能:保存下一条要执行的指令地址
    • 线程私有,每个线程独立存储
  2. 虚拟机栈(JVM Stack)

    • 存储方法调用相关的运行时数据
    • 方法执行机制:
      • 每个方法执行时创建对应的栈帧
      • 栈帧包含五部分:
      • 局部变量表(方法参数和局部变量)
      • 操作数栈(执行引擎的工作区)
      • 动态链接(指向运行时常量池的方法引用)
      • 返回地址(方法结束后的返回位置)
      • 附加信息(如调试数据)
    • 生命周期:
      • 方法开始执行 → 栈帧入栈
      • 方法执行结束 → 栈帧出栈销毁
  3. 本地方法栈(Native Method Stack)

    • Native方法(本地方法) 提供服务
    • 功能与虚拟机栈类似
    • 特殊说明:在HotSpot等JVM实现中与虚拟机栈合并
  4. 堆(Heap)

    • JVM管理的最主要内存区域(占比最大)
    • 存储特性:
      • 所有new创建的对象都在堆上分配(包括数组对象)
      new int[]{1, 2, 3} // 堆内存分配
      
      • 对象存储要求:
      • 被引用对象不会被销毁
      • 未被引用对象由GC回收
    • 生命周期管理:
      • JVM启动时创建
      • 程序运行期间动态调整大小
      • JVM退出时销毁
  5. 方法区(Method Area)

    • 核心存储内容:
      已被加载的类元数据(类名/字段/方法/父类/接口等)
      运行时常量池(字符串常量等)
      静态变量(static修饰的类变量)
      即时编译器编译后的代码(JIT优化产物)
    • 特殊说明:字节码指令(编译后的方法代码)存储在此区域

2.2 基本类型变量与引用类型变量的区别

基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;
⽽引⽤数据类型创建的变量,⼀般称为对象的引⽤,其空间中存储的是对象所在空间的地址。

在这里插入图片描述

在这里插入图片描述

注意:java中是不能获取到变量的地址的,也就是说java中并没有指针的概念

2.3 再谈引用变量

public class array {public static void main(String[] args) {int[] array2 = new int[]{1,2,3,4};int[] array1=array2;array1[0]=100;array1[1]=200;array1[2]=300;array1[3]=400;for (int i = 0; i < array2.length; i++) {System.out.println(array2[i]);}}
}

注意:这里的array1=array2是地址赋值,所以改变array1中的数组值所以array2中的内容也会发生改变,两个引用变量此时指向了同一块内存空间

2.4 认识null

null 在Java中表⽰"空引⽤",也就是⼀个不指向对象的引用

int[] arr = null;System.out.println(arr[0]);// 执⾏结果Exception in thread "main" java.lang.NullPointerExceptionat Test.main(Test.java:6)

在这里插入图片描述
null 的作⽤类似于C语⾔中的NULL(空指针),都是表⽰⼀个无效的内存位置.因此不能对这个内存进⾏任何读写操作.⼀旦尝试读写,就会抛出NullPointerException.

JAVA中并没有规定null是零地址

三、数组作为函数的参数和返回值

参数传数组类型(引用数据类型)

public class array {public static void main(String[] args) {int[] arr={1,2,3,4,5,6};fix(arr);for (int x:arr) {System.out.println(x);}}public static void fix(int[] arr){for (int i = 0; i < arr.length; i++) {arr[i]=i*100;}}
}

总结:所谓的"引用"本质上只是存了⼀个地址.Java将数组设定成引用类型,这样的话后续进行数组参数传参,其实只是将数组的地址传入到函数形参中.这样可以避免对整个数组的拷贝(数组可能⽐较长,那么拷贝开销就会很大).

数组作为函数的返回值
比如:获取斐波那契数列的前N项

public class array {public static void main(String[] args) {int[] array=fib(20);assert array != null;for (int x:array) {System.out.println(x);}}public static int[] fib(int n){if(n<=0){return null;}int[] array=new int[n];array[0]=array[1]=1;for (int i = 2; i <array.length ; i++) {array[i]=array[i-1]+array[i-2];}return array;}
}

在这里插入图片描述

四、数组的应用场景

4.1 数组转字符串

import java.util.Arrays;
import java.util.Scanner;public class array {public static void main(String[] args) {int[] array={1,2,3,4,5,6};String ret=Arrays.toString(array);System.out.println(ret);}public static void main1(String[] args) {Scanner scanner=new Scanner(System.in);int[] array = {2,6,4,1};System.out.println(sequence(array));}public static boolean sequence(int[] array) {boolean flag = true;int count=0;for (int i = 0; i <array.length-3 ; i++) {if(array[i]%2!=0){count++;if(count==3){return true;}}else{count=0;}}return false;}
}

在这里插入图片描述

4.2 数组的拷贝

    public static void main(String[] args) {int[] array={1,2,3,4,5,6};int[] array1=Arrays.copyOf(array,array.length);//扩容操作int[] array2=Arrays.copyOf(array,array.length*2);int[] array3=Arrays.copyOfRange(array,2,5);String ret1=Arrays.toString(array1);System.out.println(ret1);String ret2=Arrays.toString(array2);System.out.println(ret2);String ret3=Arrays.toString(array3);System.out.println(ret3);}

在这里插入图片描述

注意:数组当中存储的是基本类型数据时,不论怎么拷⻉基本都不会出现什么问题,但如果存储的是引⽤数据类型,拷⻉时需要考虑深浅拷⻉的问题,

源码部分展示:
在这里插入图片描述

4.3 深拷贝和浅拷贝问题

深拷贝和浅拷贝通常只出现在引用数据类型的范畴之上,基本数据类型不存在深拷贝和浅拷贝问题!!

当拷贝内容为引用数据类型的时候,浅拷贝指的是拷贝数组的内容仅仅是拷贝变量的值,而没有存储对象本身所存储的内容,而深拷贝恰恰相反。
在这里插入图片描述

图片左边是浅拷贝,右边是深拷贝

4.3 冒泡排序的小优化

    public static void main(String[] args) {int[] array={4,6,3,2,1,7,8,11,23,22,42,21};bubbleSort(array);for (int x: array) {System.out.print(x+" ");}}public static void bubbleSort(int[] array){for(int i=0;i<array.length-1;i++){boolean flg=false;for (int j = 0; j < array.length-1-i; j++) {if(array[j]>array[j+1]){int tmp=array[j];array[j]=array[j+1];array[j+1]=tmp;flg=true;}}if(!flg){return;}}}

在这里插入图片描述

冒泡排序本身时间复杂度比较高,使用java内置的sort函数即可:

public static void main(String[] args) {int[] array={4,6,3,2,1,7,8,11,23,22,42,21};Arrays.sort(array);for (int x: array) {System.out.print(x+" ");}}

在这里插入图片描述

4.4 数组逆序

    public static void main(String[] args) {int[] array={1,2,3,4,5,6};reverse(array);for (int x: array) {System.out.print(x+" ");}}public static void reverse(int[] array){int left=0;int right=array.length-1;while(left<right){int tmp=array[left];array[left]=array[right];array[right]=tmp;left++;right--;}}

在这里插入图片描述

4.5 数组逆序

调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。
如数组:[1,2,3,4,5,6]
调整后可能是:[1, 5, 3, 4, 2, 6]

public static void main(String[] args) {int[] array={1,2,3,4,5,6};change(array);for (int x: array) {System.out.print(x+" ");}}public static void change(int[] array){int left=0;int right=array.length-1;while(left<right){while(left<right&&array[left]%2!=0){left++;}while(left<right&&array[right]%2==0){right--;}int tmp=array[left];array[left]=array[right];array[right]=tmp;}}

4.6 数组练习

在这里插入图片描述
异或的特点是:

1、n ^ n = 0;即两个相同的数字异或是0

2、0 ^ n = n;即0和任何数字进行异或,结果就是那个任何数字。

public static void main(String[] args) {int[] array={4,1,2,1,2};int num=getNum(array);System.out.println(num);}public static int getNum(int[] array){int ret=0;for (int i = 0; i < array.length; i++) {ret^=array[i];}return ret;}public static void main6(String[] args) {int[] array={1,2,3,4,5,6};change(array);for (int x: array) {System.out.print(x+" ");}}

在这里插入图片描述

五、二维数组

5.1 普通二维数组

基本语法:

数据类型[][] 数组名称 = new 数据类型 [⾏数][列数]{ 初始化数据 };

注意:二维数组行不可以省略,但是列可以省略

public static void main(String[] args) {int[][] array = new int[3][];}

代码示例:

public static void main(String[] args) {int[][] array = {{1,2,3},{4,5,6},{7,8,9}};for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.print(array[i][j]+" ");}System.out.println();}}

在这里插入图片描述

5.2 不规则的二维数组

不规则的⼆维数组指的是,⼆维数组的列在定义的时候,没有确定。

int[][] array = new int[3][];
public static void main(String[] args) {int[][] array = new int[2][];array[0]=new int[3];array[1]=new int[5];for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.print(array[i][j]+" ");}System.out.println();}}

在这里插入图片描述
在这里插入图片描述

总结

作为Java编程的​​基础支柱​​,数组的价值远超出其简单的语法形式。它不仅提供了数据的高效组织方式,更通过多维数组支持复杂数据建模,借助Arrays工具类实现强大操作能力。尽管集合框架在现代开发中日益普及,但在性能敏感的底层系统、算法实现以及内存优化场景中,数组仍展现着不可替代的优势。真正掌握数组的内存机制、遍历技巧与异常处理,将使您的代码在严谨性和效率上实现质的飞跃——这正是构建健壮程序的关键一步。

相关文章:

【JAVA】数组的使用

文章目录 前言一、数组的基本概念1.1 数组的创建和初始化1.2 数组的基本使用 二、数组是引用类型2.1 初始JVM的内存分布JVM内存划分&#xff08;按功能分区&#xff09; 2.2 基本类型变量与引用类型变量的区别2.3 再谈引用变量2.4 认识null 三、数组作为函数的参数和返回值四、…...

Python的6万张图像数据集CIFAR-10和CIFAR-100说明

CIFAR-10和CIFAR-100数据集是8000万张微小图像数据集的标记子集。CIFAR-10和CIFAR-100都是由AlexKrizhevsky、VinodNair和GeoffreyHinton创建。数据集说明的网页&#xff1a;https://www.cs.toronto.edu/~kriz/cifar.html 一、CIFAR-10数据集 &#xff08;一&#xff09;CIFA…...

CTF--PhP Web解题(走入CTF)

前情提要 分享有趣CTF题目&#xff0c;记录学习过程 题目&#xff08;带注释,方便理解&#xff09; <?php // 开启PHP源代码高亮显示&#xff0c;输出当前文件内容&#xff08;用于调试/展示&#xff09; highlight_file(__FILE__);// 关闭所有错误报告&#xff0c;防止敏感…...

【Linux仓库】进程概念与基本操作【进程·贰】

&#x1f31f; 各位看官好&#xff0c;我是&#xff01; &#x1f30d; Linux Linux is not Unix &#xff01; &#x1f680; 今天来学习Linux中进程概念与基本操作。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更多人哦&#xff01…...

Z-Ant开源程序是简化了微处理器上神经网络的部署和优化

​一、软件介绍 文末提供程序和源码下载 Z-Ant &#xff08;Zig-Ant&#xff09; 是一个全面的开源神经网络框架&#xff0c;专门用于在微控制器和边缘设备上部署优化的 AI 模型。Z-Ant 使用 Zig 构建&#xff0c;为资源受限的硬件上的模型优化、代码生成和实时推理提供端到端…...

面试题-在ts中类型转换的方法

在 TypeScript 中&#xff0c;类型转换主要分为 类型断言&#xff08;Type Assertion&#xff09;、类型守卫&#xff08;Type Guard&#xff09; 和 类型兼容转换 三种方式。以下是详细分类和示例&#xff1a; 一、类型断言&#xff08;Type Assertion&#xff09; 强制编译…...

【论文笔记】【强化微调】T-GRPO:对视频数据进行强化微调

tulerfeng/Video-R1: Video-R1: Reinforcing Video Reasoning in MLLMs [&#x1f525;the first paper to explore R1 for video] 1. 引述 在强化微调中&#xff0c;像 GRPO、DAPO 这样的方法都是对文本或者图片进行微调思考&#xff0c;所以这类微调方法不对时序信息做处理&…...

`shallowReactive` 与 `shallowRef`:浅层响应式 API

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

使用Node.js开发服务端接口

Node.js是一个基于JavaScript的运行时环境&#xff0c;非常适合开发高性能的服务端接口。以下是开发服务端接口的主要方法和步骤。 选择合适的框架 Express、Koa或Fastify是Node.js中常用的框架。Express是最流行的选择&#xff0c;适合快速开发。Koa更轻量&#xff0c;适合需…...

`teleport` 传送 API 的使用:在 Vue 3 中的最佳实践

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

Linux 多种方式实现行转列

目录 一. 前提二. xargs 实现行转列三. paste 实现行转列四. sed 实现行转列 一. 前提 ⏹之前在这下面篇文章中使用sed命令实现了行专列&#xff0c;本篇文章再介绍几种更加简单的方式。 Linux sed案例 &#x1f449; 20231126-2.log 110120 SPLREQUEST 内容1 AAA memberID1…...

AI与SEO关键词协同进化

内容概要 人工智能&#xff08;AI&#xff09;与搜索引擎优化&#xff08;SEO&#xff09;的结合&#xff0c;正深刻变革着关键词策略的制定与执行方式。本文旨在探讨AI技术如何驱动SEO关键词领域的智能化进化&#xff0c;核心在于利用AI强大的数据处理与模式识别能力&#xf…...

C# 网络编程-关于HTTP/HTTPS的基础(一)

一、HTTP基础概念 1. 请求-响应模型 HTTP是基于客户端-服务器的无状态协议&#xff0c;流程如下&#xff1a; 客户端&#xff08;如浏览器&#xff09;发起请求。服务器接收请求并处理。服务器返回响应&#xff0c;包含状态码、Header和响应体。连接关闭&#xff0c;后续请求…...

题解:P11501 [ROIR 2019] 探险队(Day 2)

前言&#xff1a;这道题 dp 做法找环的部分还没有用拓扑做的&#xff0c;补充一下。 这道题其实很像“上司的舞会”&#xff0c;就是求树上最大独立集。 这里我们把每个人向他讨厌的那个人连边&#xff08;发现所有点出度均为 1 1 1&#xff0c;所以这是一个基环树&#xff0…...

读者写者问题与读写锁自旋锁

一、读者写者问题 读者写者问题具有以下特点&#xff1a; 一个交易场所---写者写入数据&#xff0c;读者读数据两种角色---读者&#xff0c;写者三种关系 读者和读者---并发写者和写者---互斥读者和写者---互斥 && 同步 二、读者写者VS生产消费 生产者消费者模型中…...

Sublime text启用vim

打开&#xff1a;首选项 > 设置&#xff0c;在打开的输入框中把 "ignored_packages": ["Vintage"] 修改为 "ignored_packages": []&#xff0c;不忽略Vintage&#xff0c;即为启用Vintage&#xff0c;它是Sublime的内置vim插件。 然后再添加&…...

蚂蚁百宝箱快速创建智能体AI小程序

蚂蚁百宝箱官网https://tbox.alipay.com/community?operationSource1006/ 以下是一篇关于蚂蚁百宝箱快速创建智能体 AI 小程序的图文并茂的博客&#xff1a; 标题&#xff1a;蚂蚁百宝箱快速创建智能体 AI 小程序&#xff0c;开启智能应用新体验 引言 在数字化飞速发展的当…...

【Anconda安装教程】安装到环境配置全流程

目录 前言 一、进入官网下载 二、下载Anconda​编辑 三、安装Anconda 四、配置环境变量 五、验证是否安装成功 六、anaconda的使用 情况一&#xff1a;电脑现在没有装python或者现在装的可以卸载掉 情况二&#xff1a;电脑目前装了python&#xff0c;但想保留它 6.1 进…...

Linux系统编程 | IPC对象---信号量

在前面两篇博客文章中&#xff0c;对Linux系统编程部分IPC三大对象中的消息队列和共享内存的知识体系做了一个大致的梳理&#xff0c;在本篇文章中&#xff0c;将对三大IPC对象中的最后一个信号量做一个总结。如果有需要的博客朋友&#xff0c;可以参考我的Linux系统编程专栏参…...

当数据自己会说话:聚类与分类算法全景解析

从金融风控到医疗诊断&#xff0c;两种机器学习技术如何重塑决策逻辑 在人工智能与数据驱动的时代&#xff0c;聚类和分类作为机器学习的两大核心技术&#xff0c;已成为从海量数据中提取价值的必备工具。它们看似相似——都是将数据划分到不同的组中——但内在逻辑和应用场景却…...

哈佛结构(Harvard Architecture)与冯·诺依曼架构(Von Neumann Architecture)

一、基础概念与历史溯源 哈佛结构 起源&#xff1a;1940年代由哈佛大学开发的Mark I计算机首次采用&#xff0c;专为弹道计算优化。核心特征&#xff1a; 物理分离的存储器&#xff1a;程序指令存储在ROM/Flash&#xff0c;数据存储在RAM&#xff0c;两者独立编址。独立总线系统…...

Python内存使用分析工具深度解析与实践指南(下篇)

文章目录 引言6. guppy3 / Heapy功能安装程序示例适用场景注意事项 7. objgraph功能安装程序示例适用场景注意事项 8. memory_profiler功能安装程序示例适用场景注意事项 9. profile&#xff08;标准库&#xff09;功能程序示例适用场景注意事项 总结对比表 引言 在Python编程…...

经典控制理论:线性化笔记

一、弹簧阻尼系统 求B点的位置X0&#xff0c;与弹簧形变后的位置X1的关系 ---- 解&#xff1a; 二、直流电动机模型 求输出转速与输入电压的关系 解&#xff1a;...

【StarRocks系列】查询优化

步骤参考官网 分析查询 | StarRocks StarRocks-Profile分析及优化指南 StarRocks-Profile分析及优化指南 - 经验教程 - StarRocks中文社区论坛...

【STM32】STM32的中断系统寄存器NVIC、EXTI

文章目录 中断概述中断的概念为什么需要中断STM32的中断 STM32的中断体系架构NVICNVIC的介绍中断优先级优先级寄存器优先级组 EXTI 中断概述 中断的概念 在主程序运行过程中&#xff0c;出现了特定事件&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理这个事…...

LLM-201: OpenHands与LLM交互链路分析

一、核心交互链路架构 #mermaid-svg-ZBqCSQk1PPDkIXNx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-icon{fill:#552222;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-text{fill:#552222;strok…...

税务 VR 虚拟体验,带来全新办税感受

在过去&#xff0c;企业办税难题诸多。申报纳税高峰期&#xff0c;办税服务厅人满为患&#xff0c;财务人员需早起取号排队&#xff0c;耗费大量时间。传统办税流程复杂&#xff0c;涉及多环节和部门&#xff0c;资料繁多&#xff0c;若准备不全或有误就得重新准备&#xff0c;…...

【Linux 驱动中断】

Linux 驱动中断 一、GIC 控制器&#xff1a;硬件中断的枢纽二、GPIO 中断&#xff1a;设备交互的常见入口三、Tasklet 与软中断&#xff1a;高效的异步处理机制3.1 Tasklet3.2 软中断 四、工作队列&#xff1a;灵活的任务处理框架4.1 共享工作队列4.2 自定义工作队列4.3 延迟工…...

ali 轻量服务器安装nginx

# Ubuntu sudo apt install nginx-light # 精简版 # CentOS sudo yum install nginx #启动并设置开机自启 sudo systemctl daemon-reload sudo systemctl start nginx sudo systemctl enable nginx #验证安装 nginx -v curl -I 127.0.0.1 #常用命令&#xff1a; # 重新加载配…...

2025年- H83-Lc191--139.单词拆分(动态规划)--Java版

1.题目描述 2.思路 字符串s是一个容器&#xff08;一个背包&#xff09;&#xff0c;wordDict词典是物品&#xff0c;这里面的每个物品我们可以使用多次。 动归五部曲 &#xff08;1&#xff09;字符串的长度为i&#xff0c;dp[i]true。 dp[s.size] dp[0]代表空字符串 &#x…...

【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)

&#x1f680; 将所有 WSL 发行版从 C 盘迁移到 I 盘的完整教程&#xff08;含 Podman / NVIDIA Workbench / Ubuntu 等&#xff09; 【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline-CSDN博客 免责声明 重要提示 在执行 WSL 迁移操作前&#xff0c;请务必仔细阅读…...

贪心算法思路详解

文章目录 一、贪心算法是什么&#xff1f;二、贪心算法原理三、再谈背包问题四、活动选择问题五、拟阵理论总结 一、贪心算法是什么&#xff1f; 贪心算法与动态规划算法一样是用于求解最优化类问题的算法&#xff0c;其本质上是基于动态规划算法的改进算法&#xff0c;其所求…...

Keil 安装 CMSIS-FreeRTOS 失败解决方案

一、问题现象 在 Keil 中安装 CMSIS-FreeRTOS 时出现以下错误&#xff1a; &#xff08;1&#xff09; 通过内置工具安装&#xff1a; &#xff08;2&#xff09;通过官网安装&#xff1a; 二、核心原因 Keil 版本过低&#xff0c;与 CMSIS-FreeRTOS 包不兼容&#xff1a; …...

Python打卡DAY33

DAY33&#xff1a;MLP神经网络的训练 恩师浙大疏锦行 知识点&#xff1a; PyTorch和cuda的安装查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09;cuda的检查简单神经网络的流程 数据预处理&#xff08;归一化、转换成张量&#xff09;模型的定义 继承nn.Module类定义…...

RJ45 网口实现千兆传输速率(1Gbps)的原理,涉及物理层传输技术、线缆标准、信号调制及网络协议等多方面的协同设计。以下从技术维度展开详细解析:

一、千兆以太网的标准与物理层基础 1. 标准规范 千兆以太网遵循 IEEE 802.3ab&#xff08;针对双绞线&#xff09;和 IEEE 802.3z&#xff08;针对光纤&#xff09;标准&#xff0c;其中 RJ45 接口对应双绞线场景&#xff0c;核心是通过四对双绞线&#xff08;CAT5e/CAT6 线缆…...

leetcode hot 100之:二叉树的层序遍历

层序遍历和前中后序遍历不一样&#xff0c;大家可以想象的是&#xff1a;前中后序遍历可以用递归&#xff0c;因为他是以子树为标准来选择的&#xff1b;那层序怎么办呢&#xff1f;怎么才能一层层地遍历呢&#xff1f; void First(TreeNode* root) {printf("%d",ro…...

深入解析BERT:语言分类任务的革命性引擎

“BERT的出现&#xff0c;如同在自然语言处理领域投下了一颗认知炸弹——它让机器真正学会了’联系上下文’。” ——自然语言处理研究者普遍共识 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;2018年诞生的BERT&#xff08;Bidirectional Encoder Representatio…...

Pycharm中Jupyter Notebook 插件常用快捷键

bg&#xff1a;Jupyter跟LINQPad很像&#xff0c;都是方便写的时候看数据用 快捷键功能Shift Enter执行当前单元格&#xff0c;并跳转到下一个单元格Ctrl Enter执行当前单元格&#xff0c;不跳转&#xff08;留在当前单元格&#xff09;Alt Enter执行当前单元格&#xff0c…...

【Python】Excel表格操作:ISBN转条形码

一、效果 原始文件&#xff1a; 输出文件&#xff1a; 二、代码 import os import logging from openpyxl import load_workbook from openpyxl.drawing.image import Image as ExcelImage from barcode import EAN13 from barcode.writer import ImageWriterlogging.basicCo…...

大数据Hadoop集群搭建

文章目录 大数据Hadoop集群搭建一、VMware准备Linux虚拟机二、VMware虚拟机系统设置1、主机名、IP、SSH免密登录2、JDK环境部署3、防火墙、SELinux、时间同步 三、VMware虚拟机集群上部署HDFS集群1、集群规划2、上传&解压3、Hadoop安装包目录结构4、修改配置文件&#xff0…...

饼图:数据可视化的“切蛋糕”艺术

饼图&#xff0c;作为数据可视化家族中最经典、最易识别的成员之一&#xff0c;其核心功能如同其名——像切分蛋糕一样&#xff0c;直观展示一个整体&#xff08;100%&#xff09;被划分为若干组成部分的比例关系。 往期文章推荐: 20.用Mermaid代码画ER图&#xff1a;AI时代的…...

mysql server层做了什么

服务器处理客户端请求 服务器程序在处理来自客户端的查询请求时&#xff0c;大致需要分为3部分&#xff1a;连接管理、解析与优化、存储引擎。 连接管理 每当有一个客户端进程连接到服务器进程时&#xff0c;服务器进程都会创建一个线程专门处理与这个客户端的交互&#xff…...

3.5.1_1 信道划分介质访问控制(上)

在这个视频中我们要介绍信道划分、介质访问控制&#xff0c;这是两个词&#xff0c;我们先介绍一下什么叫做介质访问控制。 通过之前的学习&#xff0c;我们知道在计算机网络当中&#xff0c;有的信道它在逻辑上属于总线型&#xff0c;我们也可以把这种信道称为广播信道&#x…...

RPC常见问题回答

项目流程和架构设计 1.服务端的功能&#xff1a; 1.提供rpc调用对应的函数 2.完成服务注册 服务发现 上线/下线通知 3.提供主题的操作 (创建/删除/订阅/取消订阅) 消息的发布 2.服务的模块划分 1.网络通信模块 net 底层套用的moude库 2.应用层通信协议模块 1.序列化 反序列化数…...

数据分析和可视化:Py爬虫-XPath解析章节要点总结

重要知识点 XPath 概述&#xff1a;XPath 是一门可以在 XML 文件中查找信息的语言&#xff0c;也可用于 HTML 文件。它功能强大&#xff0c;提供简洁明了的路径表达式和多个函数&#xff0c;用于字符串、数值、时间比较等。1999 年成为 W3C 标准&#xff0c;常用于爬虫中抓取网…...

WIFI原因造成ESP8266不断重启的解决办法

一、报错 报错信息如下&#xff1a; 21:37:21.799 -> ets Jan 8 2013,rst cause:2, boot mode:(3,7) 21:37:21.799 -> 21:37:21.799 -> load 0x4010f000, len 3424, room 16 21:37:21.799 -> tail 0 21:37:21.799 -> chksum 0x2e 21:37:21.799 -> loa…...

OSI网络通信模型详解

OSI 模型就是把这整个过程拆解成了 7 个明确分工的步骤&#xff0c;每一层只负责自己那一摊事儿&#xff0c;这样整个系统才能顺畅运转&#xff0c;出了问题也容易找到“锅”在谁那。 核心比喻&#xff1a;寄快递 &#x1f4e6; 想象你要把一份重要的礼物&#xff08;你的数据…...

第五章 中央处理器

5.1 CPU的功能和基本构造 5.1.1 CPU的基本功能 5.1.2 CPU的基本结构 1.运算器 算术逻辑单元ALU 累加寄存器ACC 程序字状态寄存器PSW 计数器CT 暂存寄存器 通用寄存器组 移位器 通用寄存器供用户自由编程,可以存放数据和地址。而指令寄存器是专门用于存放指令的专用寄存器,…...

大模型学习入门——Day3:注意力机制

本系列笔记的教材&#xff1a;快乐学习大模型-DataWhale团队 注意力机制 注意力机制最先源于计算机视觉领域&#xff0c;其核心思想为当我们关注一张图片&#xff0c;我们往往无需看清楚全部内容而仅将注意力集中在重点部分即可。而在自然语言处理领域&#xff0c;我们往往也…...

C++ 学习笔记精要(二)

第一节 特殊类的设计 1. 一个类: 只能在堆上创建对象 关键点:自己控制析构 1.1 方法一: 使用delete禁掉默认析构函数 #include <iostream> using namespace std;class HeapOnly { public:HeapOnly(){_str new char[10];}~HeapOnly() delete;void Destroy(){delete[…...