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

五、数组——Java基础篇

五、数组

1、数组元素的遍历

1.1数组的遍历:将数组内的元素展现出来

1、普通for遍历:根据下表获取数组内的元素
2、增强for遍历:
for(数据元素类型 变量名:数组名){
变量名:数组内的每一个值
}

区别:
(1)、需要下标:就是用普通for,不需要下标使用增强for
(2)、增强遍历的底层原理就是普通for

public class Travesal1 {public static void main(String[] args) {String[] sArr={"安其拉","妲己","吕布"};//增强for遍历for (String e : sArr) {System.out.println("e = " + e);}//普通for遍历for(int index=0;index<sArr.length;index++){String ele=sArr[index];System.out.println("ele = " + ele);}}
}class Travesal02{public static void main(String[] args) {int[] arr={30,20,40,50,90,80};//增强for遍历for (int i : arr) {System.out.println("增强for= " + i+"");}//普通for遍历for (int e = 0; e < arr.length; e++) {System.out.println("普通for =" + arr[e]);}}
}
1.2 定义一个整形数组

int[] arr={66,77,88,99,11,22,33};
获取总和?

   public class TrversalExer2 {public static void main(String[] args) {int[] arr={66,77,88,99,11,22,33};//定义变量记录总和int sum=0;//增强遍历for(int e:arr){sum+=e;}//普通遍历
//        for (int i = 0; i < arr.length; i++) {
//            sum+=arr[i];
//        }System.out.println("总和为:" + sum);}
}
1.3 定义一个整型数组,获取最大值和标出下标?

int[] arr={66,77,88,99,11,22,33};

public class TrversalExer_1{public static void main(String[] args) {//1、定义数组int[] arr={66,77,88,99,11,22,33};//todo定义变量 记录最大值,下标int maxNum=0;int index=0;//2、开始遍历for (int i = 0; i < arr.length; i++) {//数组中的每一个元素与假设的”int maxNum=1;“进行比较,如果数组元素>假设值,则元素是最大值if(arr[i]>maxNum){maxNum=arr[i];//记录最大值下标index=i;}}//3、展示数组System.out.println("最大值是:" + maxNum+",下标是"+index);}
}
class TrversalExer_2{public static void main(String[] args) {//1.定义变量int[] arr={66,77,88,99,11,22,33};//2.定义变量记录最小值下标int minNum=arr[0];int index=0;for (int i = 0; i < arr.length; i++) {if(arr[i]<minNum){minNum=arr[i];index=1;}}System.out.println("最小值三十:" + minNum+",下标是"+index);}
}

2、Java虚拟机的内存划分

​ 为了提高运算效率,就对空间进行了不同的区域划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
在这里插入图片描述

​ 程序运行时才会在虚拟机上开辟内存,内存区域划分的目的,提高运算效率

1 .栈:存储着方法内的局部变量信息。
2 .堆:对象。new的对象,包括数组,都存在堆中。
3 .本地方法栈:Java并不是万能的,有些功能时无法实现的额,需要救助与其他语言来实现,通过调用本地方法调用其他语言。
4 .方法区(元空间):静态信息,常量信息,类中的描述信息。
5 .程序计数器:存储计算机下一条指令的地址。

2.1 怎么画栈堆图
public class JVMMemory3 {public static void main(String[] args) {int m=10;int[] arr=new int[3];arr[0]=99;arr[2]=66;System.out.println("arr[0] = " + arr[0]);System.out.println("arr[1] = " + arr[1]);System.out.println("arr[3] = " + arr[3]);}
}

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

2.2 输出英文星期几

​ 用一个数组,保存星期一到星期天的7个英语单词,从键盘输入1-7,显示对应的单词
​ {“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”,“Saturday”,“Sunday”}

public class ArrayExer4 {public static void main(String[] args) {/***///1、准备数组String[] arr={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};//2、创建键盘输入对象Scanner in=new Scanner(System.in);//3、接受数组System.out.println("请输入数字1-7:");int month=in.nextInt();//4、展示单词String mesage = arr[month - 1];System.out.println("mesage = " + mesage);//5、关闭资源in.close();}
}
2.3 从键盘读入学生成绩,找出最高分,并输出学生成绩等级
- 成绩>=最高分-10  等级为’A’- 成绩>=最高分-20  等级为’B’- 成绩>=最高分-30  等级为’C’- 其余            等级为’D’提示:先读入学生人数,根据人数创建int数组,存放学生成绩。请您输入第1个学生的成绩90请您输入第2个学生的成绩80请您输入第3个学生的成绩70请您输入第4个学生的成绩60请您输入第5个学生的成绩80
class ArrayExery_2{public static void main(String[] args) {//1、创建键盘输入对象Scanner in=new Scanner(System.in);//2、获取学生的个数System.out.println("请输入学生的个数:");int count=in.nextInt();//3、创建数组,存储学生的成绩int[] arr=new int[count];//4、遍历数组、存储成绩for (int i = 0; i < arr.length; i++) {System.out.println("请您输入第"+(i+1)+"个学生的成绩");int soure=in.nextInt();arr[i]=soure;}//5、过去最高成绩int maxsoure=arr[0];for (int i : arr) {if(i>maxsoure){maxsoure=i;}}System.out.println("maxsoure = " + maxsoure);//6、判断学生的等级for (int i = 0; i < arr.length; i++) {int score = arr[i];if(score>=maxsoure-10){System.out.println("第"+(i+1)+"个学生成绩等级是:A");}else if(score>=maxsoure-20){System.out.println("第"+(i+1)+"个学生成绩等级是:A");}else if(score>=maxsoure-30){System.out.println("第"+(i+1)+"个学生成绩等级是:A");}else{System.out.println("第"+(i+1)+"个学生成绩等级是:A");}}//7、关闭资源in.close();}
}

3、冒泡排序

在这里插入图片描述

3.1 冒泡排序的准备
public class BubbleSort5 {public static void main(String[] args) {int m=20;int n=10;System.out.println("交换前:m = " + m+",n="+n);int temp=m;m=n;n=temp;System.out.println("交换后:m = " + m+",n="+n);int[] arr={77,66,55,44,33,22,11};System.out.println("arr = " + arr);//地址值:[I@5b480cf9//Arrays.toString(arr)+soutv,展示arr中的值System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));}}
3.2 冒泡排序的基础写法
class BubbleSort_1{public static void main(String[] args) {int[] arr={77,66,55,44,33,22,11};System.out.println("排序前 = " + Arrays.toString(arr));//todo-1:数组元素时7个,最多6次有序for (int i = 0; i < arr.length-1; i++) {//todo进行每一次排序,-1:为了防止下标越界for(int j=0;j<arr.length-1;j++){//如果前一个>后一个,,两个数进行交换if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}System.out.println("排序中 = " + Arrays.toString(arr));}System.out.println("排序后 = " + Arrays.toString(arr));
}
}
3.3 冒泡排序的优化
class BubbleSort_2{public static void main(String[] args) {int[] arr={77,66,55,44,33,22,11};System.out.println("排序前 = " + Arrays.toString(arr));//todo-1:数组元素时7个,最多6次有序for (int i = 0; i < arr.length-1; i++) {//假设此次排序已经有序,若是假设失败boolean flag=true;//todo进行每一次排序,-1:为了防止下标越界// -i:为了专注于无序部分即可,不需要对有序部分排序for(int j=0;j<arr.length-1-i;j++){//如果前一个>后一个,,两个数进行交换if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;//如果有前一个>后一个则假设失败,数组无序flag=false;}}if(flag){break;}System.out.println("排序中 = " + Arrays.toString(arr));}System.out.println("排序后 = " + Arrays.toString(arr));
}
3.4 定义一个数组存储学生的成绩求总分平均分
3.5 定义一个数字 对数组元素进行反转

​ 10 20 30 40 50 60 70

​ 70 60 50 40 30 20 10

3.6 定义一个数组 键盘输入一个数字 判断此数字是否在数组内

​ 请您输入一个数
​ 55
​ 有此元素 55 下标是 3

​ 请您输入一个数
​ 99
​ 查无此元素 99

import java.util.Scanner;
public class ArrayText {public static void main(String[] args) {//1、创建键盘输入对象Scanner in=new Scanner(System.in);//2、获取成绩System.out.println("请问您要存储几个学生的成绩");int count=in.nextInt();//3、创建数组int[] arr=new int[count];//4、遍历数组for (int i = 0; i < arr.length; i++) {System.out.println("请您输入第"+(i+1)+"个学生的成绩");arr[i]=in.nextInt();}//4.1获取最大值、最小值、总成绩int maxNum=arr[0] , minNum=arr[0],sum=0;for (int e : arr) {if(e>maxNum){maxNum=e;}if(e<minNum){minNum=e;}sum+=e;}//5、展示总成绩,平均分,System.out.println("总成绩 = " + sum+",最高成绩="+maxNum+",最低成绩="+minNum+",平均分"+sum/arr.length);//6、关闭资源in.close();}
}

4、反转

4.1 反转1(开辟了新内存进行反转)
public class Reverse7 {public static void main(String[] args) {int[] arr={11,22,33,44,55,66,77};//反转前System.out.println("反转前 = " + Arrays.toString(arr));//反转//1、创建一个新数据 长度为7int[] newArr=new int[arr.length];//2、将旧数据内容 反转后存储到新数组内int index=0;for(int i=arr.length-1;i>=0;i--){newArr[index]=arr[i];//更改index下标index++;}//3、将新数组地址赋值给旧数组arr=newArr;//反转后System.out.println("反转后 = " + Arrays.toString(arr));}
}
4.2 反转2(就在原来的内存上进行反转)

在这里插入图片描述

class Reverse7_1{public static void main(String[] args) {int[] arr={11,22,33,44,55,66,77};//反转前System.out.println("反转前 = " + Arrays.toString(arr));//反转for(int i=0;i<arr.length/2;i++){int temp=arr[i];arr[i]=arr[arr.length-1-i];arr[arr.length-1-i]=temp;}//反转后System.out.println("反转后 = " + Arrays.toString(arr));}
}
4.3 反转3

在这里插入图片描述

LIndex=0左边从0开始,RIndex=arr.length-1右边往左开始,,左边<右边,,左边一直加,右边一直减

class Reverse7_3{public static void main(String[] args) {int[] arr={11,22,33,44,55,66,77};//反转前System.out.println("反转前 = " + Arrays.toString(arr));//反转//LIndex=0左边从0开始,RIndex=arr.length-1右边往左开始,,左边<右边,,左边一直加,右边一直减for(int LIndex=0,RIndex=arr.length-1;LIndex<RIndex;LIndex++,RIndex--){int temp=arr[LIndex];arr[LIndex]=arr[RIndex];arr[RIndex]=temp;}//反转后System.out.println("反转后 = " + Arrays.toString(arr));}
}
4.5 数组元素的扩容
4.6找出所有的偶数并求和
public class EvenTest8 {public static void main(String[] args) {int[] arr={10,11,12,13,14,15,16,17};//找出所有的偶数并求和int sum=0;for (int e : arr) {if(e%2==0){sum+=e;}}System.out.println("sum = " + sum);}
}
4.7 数组扩容(数组已经满了,再添加元素)
class EvenTest8_1{public static void main(String[] args) {String[] arr={"张三","王五","李四"};//1.创建一个新数组String[] newArr = new String[arr.length << 1];//2.将旧数组赋值为新数组for (int i = 0; i < arr.length; i++) {newArr[i]=arr[i];}//3.将新数组地址赋值给旧数组arr = newArr;arr[3]="安其拉";System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));}
}

在这里插入图片描述

5、总结

5.1数组元素的遍历

(1)普通for(值+fori)

(2)增强for(值+for):底层是普通for

5.2 数组元素的内存图

(1)单个数组

(2)多个数组

(3)两个数组指向同一个地址

5.3数组的小算法

(1)顺序查找

(2)冒泡排序

(3)特殊值

(4)反转

(5)数组的扩容

6、二维数据的初始

7、二维数组的静态初始化

静态初始化:编译时确定数组的长度以及内容
形式1:
数据类型[][] 数据名={{},{}};
形式2:
数据类型[][] 数组名=new 数据类型[][]{{“李白”,“李三”},{“安其拉”,“哈哈”,“喜喜”}};

public class DoublearrayTest_1 {public static void main(String[] args) {System.out.println("---------静态数组------------");int[][] arr = {{20, 40, 60}, {11, 22, 33, 44}, {55, 66, 77, 88, 99},{100,200}};System.out.println("arr.length = " + arr.length);//4System.out.println("arr[0] = " + arr[0]);//第一个一维数组中的第三个元素System.out.println("arr[0][2] = " + arr[0][2]); //60System.out.println("arr[2][4] = " + arr[2][4]); //99System.out.println("arr[3].length = " + arr[3].length);//2String[][] arr1;arr1=new String[][]{{"李白","李三"},{"安其拉","哈哈","喜喜"}};System.out.println("arr1.length = " + arr1.length);//2System.out.println("arr1[1][2] = " + arr1[1][2]); //喜喜}
}

8、二维数组的动态初始化

动态初始化:编译时确定数组的长度和默认值
形式1:规则矩形
数据类型[][] 数组名=new 数据类型[ 数组1][ 数值2];
数值1:一位数组的的个数
数组2:一维数组内元素的个数

class DoublearrayTest1_2 {public static void main(String[] args) {//数据类型[][] 数组名=new 数据类型[数组1][数值2];int[][] arr = new int[5][6];System.out.println("arr.length = " + arr.length);System.out.println("arr[0].length = " + arr[0].length);System.out.println("arr[4].length = " + arr[4].length);System.out.println("arr[0][0] = " + arr[0][0]);}
}

​ 形式2:非规则矩形
​ 数据类型[][] 数组名=new 数据类型[数组1][][ ];
​ 数值1:一位数组的的个数

class DoublearrayTest1_2 {public static void main(String[] args) {//数据类型[][] 数组名=new 数据类型[数组1][];int[][] iArr = new int[3][];System.out.println("iArr[0] = " + iArr[0]);iArr[0] = new int[6];iArr[0][0] = 66;iArr[1] = new int[]{33,55,77};}
}

8、二维数组的遍历

public class Taversal_2 {public static void main(String[] args) {String[][] arr = {{"侵权","王五"},{"嗯嗯","让人","头疼"},{"右移","哈哈","更改","得到"}};
//只遍历第一个一维数组,其他的依次类推//        for(int i=0;i<arr[0].length;i++){
//            System.out.println(arr[0][i]+"\t");
//        }for (String[] eleArr : arr) {//对一堆数组再次遍历for (String e : eleArr) {System.out.println(e+"\t");}System.out.println();}}
}
class Taversal2_1{public static void main(String[] args) {int[][] arr={{11,22},{33,44,55}};for (int[] eleArr : arr) {for (int e : eleArr) {System.out.println(e+"\t");}}}
}

9、二维数组的内存图

​ 二位数组的元素是一维数组,一维数组不是基本类型数据,不是基本那就是引用,引用数据类型默认值null。
在这里插入图片描述

10、二维数组求最值

public class BoubleArrayExer_3 {public static void main(String[] args) {//获取最大值/最小值int[][] arr={{111,222,333},{10,20,30},{-1,-2,99}};//定义变量记录最大值和最小值int maxNum=arr[0][0];int minNum=arr[0][0];//遍历数据,获取每一个值for (int[] eleArr : arr) {for (int e : eleArr) {//如果数组元素>假设得最大值 则说明数组元素是最大值if(e>maxNum){maxNum=e;}//如果数组元素<假设得最小值 则说明数组元素是最小值if(e<minNum){minNum=e;}}}System.out.println("最大值 = " + maxNum+",最小值 = " + minNum);}
}

键盘输入一个正整数 ,动态 创建长度为输入的数得二维数组,遍历此二维数组再控制台。
1
22
333
4444
55555

class BoubleArrayExer3_1{public static void main(String[] args) {//1、创建键盘输入对象Scanner in=new Scanner(System.in);//2、获取数组得长度System.out.println("请您输入数组的长度:");int length = in.nextInt();//3、创建二维数组int[][] arr=new int[length][];//4、遍历数组给元素赋值//4.1遍历二维数据获取每一个一维数组下标for (int i = 0; i < arr.length; i++) {//4.2给一位数组开辟空间(初始化)arr[i] = new int[i + 1];//4.3遍历一维数组,给每一个元素赋值for (int j = 0; j < arr[i].length; j++) {arr[i][j]=i+1;}}
//        System.out.println("arr[0] = " + arr[0]);
//        arr[0]=new int[0+1];
//        arr[0][0]=0+1;
//        arr[1]=new int[1+1];
//        arr[1][0]=1+1;
//        arr[1][1]=1+1;
//        arr[2]=new int[2+1];
//        arr[2][0]=2+1;
//        arr[2][1]=2+1;
//        arr[2][2]=2+1;//5、展示数据for (int[] eleArr : arr) {for (int e : eleArr) {System.out.print(e);}System.out.println();}//6、关闭资源in.close();}
}

相关文章:

五、数组——Java基础篇

五、数组 1、数组元素的遍历 1.1数组的遍历&#xff1a;将数组内的元素展现出来 1、普通for遍历&#xff1a;根据下表获取数组内的元素 2、增强for遍历&#xff1a; for&#xff08;数据元素类型 变量名&#xff1a;数组名&#xff09;{ 变量名&#xff1a;数组内的每一个值…...

如何用golang写一个自己的后端框架

如果你想要不使用任何现有的后端框架,完全从头开始创建一个后端框架,你需要实现Web服务器的基本组件,比如路由器、请求处理、中间件支持等。以下是一个简单的指南,用于创建一个基本的、不使用任何外部框架的Go后端框架。 步骤 1: 设置工作环境 确保你已经安装了Go语言环境…...

linux 如何给服务器批量做免密,如何批量挂在磁盘

前提条件 所有机器网络互通&#xff0c;且已做了免密登录 linux服务器批量做免密脚本如下 #!/bin/bash # 定义服务器列表文件 SERVERS_FILE"host" # 定义生成的密钥的存储目录 KEY_DIR"/root/.ssh" # 检查是否输入了文件路径 if [ $# -ne 1 ]; then …...

Android Activity的生命周期详解

在Android开发中&#xff0c;了解Activity的生命周期是非常重要的&#xff0c;它决定了Activity在不同状态下的行为和处理逻辑。Android中的Activity生命周期包括多个方法&#xff0c;每个方法都代表了Activity在特定状态下的行为。下面我们来逐一介绍这些方法及其对应的生命周…...

python学习笔记-内置类型

Python内置类型是Python编程语言中自带的基本数据类型&#xff0c;它们用于存储和处理数据。其中包括数字、序列、映射、类、实例和异常等主要类型。 在这些内置类型中&#xff0c;有一些是可变的&#xff0c;它们具有修改自身内容的能力&#xff0c;比如添加、移除或重排成员…...

校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码

云开发校园微社区微信小程序开源源码&#xff0c;这是一款云开发校园微社区-二手交易_兼职_交友_项目微信小程序开源源码&#xff0c;可以给你提供快捷方便的校园生活&#xff0c;有很多有趣实用的板块和功能&#xff0c;如&#xff1a;闲置交易、表白交友、疑问互答、任务兼职…...

如何在 Angular 中使用 NgTemplateOutlet 创建可重用组件

简介 单一职责原则是指应用程序的各个部分应该只有一个目的。遵循这个原则可以使您的 Angular 应用程序更容易测试和开发。 在 Angular 中&#xff0c;使用 NgTemplateOutlet 而不是创建特定组件&#xff0c;可以使组件在不修改组件本身的情况下轻松修改为各种用例。 在本文…...

改进的yolo交通标志tt100k数据集目标检测(代码+原理+毕设可用)

YOLO TT100K: 基于YOLO训练的交通标志检测模型 在原始代码基础上&#xff1a; 修改数据加载类&#xff0c;支持CoCo格式&#xff08;使用cocoapi&#xff09;&#xff1b;修改数据增强&#xff1b;validation增加mAP计算&#xff1b;修改anchor&#xff1b; 注: 实验开启weig…...

nginx 日志,压缩,https功能介绍

一&#xff0c; 自定义访问日志 &#xff08;一&#xff09;日志位置存放 1&#xff0c;格式 2&#xff0c; 级别 level: debug, info, notice, warn, error, crit, alert, emerg 3&#xff0c;示例 服务机定义 错误日志存放位置 客户机错误访问 查看错误日志 4&#xff…...

代码随想录三刷day17

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣144. 二叉树的前序遍历二、力扣145. 二叉树的后序遍历三、力扣94. 二叉树的中序遍历四、力扣144. 二叉树的前序遍历无、力扣145. 二叉树的后序遍历六、…...

postcss-px-to-viewport include属性

包含include配置的(github)&#xff1a;npm i https://github.com/evrone/postcss-px-to-viewport -S 包含include配置的(npm)&#xff1a;npm i postcss-px-to-viewport-8-with-include -S 不包含包include配置的(npm)&#xff1a;npm i postcss-px-to-viewport 看了一下这篇文…...

C++设计模式——抽象工厂模式

文章目录 抽象工厂模式的主要组成部分抽象工厂模式的一个典型例子抽象工厂模式用于其他场景抽象工厂模式与其他设计模式结合使用 C 中的抽象工厂模式是一种创建型设计模式&#xff0c;它主要用于处理对象家族的创建&#xff0c;这些对象之间可能存在一定的关联关系或属于相同的…...

Windows安装VNC连接工具并结合cpolar实现远程内网Ubuntu系统桌面

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…...

Vue3 Hooks函数使用及封装思想

一、什么是Hooks函数&#xff1f; 想象一下&#xff0c;你在做饭&#xff0c;有一些调料你经常会用到&#xff0c;比如盐、酱油和辣椒。每次做饭时&#xff0c;你都会从柜子里拿出这些调料。如果你每次用完都把它们随便放在厨房的某个角落&#xff0c;下次做饭时就可能找不到它…...

YOLOv8改进涨点,添加GSConv+Slim Neck,有效提升目标检测效果,代码改进(超详细)

目录 摘要 主要想法 GSConv GSConv代码实现 slim-neck slim-neck代码实现 yaml文件 完整代码分享 总结 摘要 目标检测是计算机视觉中重要的下游任务。对于车载边缘计算平台来说&#xff0c;巨大的模型很难达到实时检测的要求。而且&#xff0c;由大量深度可分离卷积层构…...

华为s5720s-28p-power-li-ac堆叠配置

叠物理约束&#xff1a; • 连线推荐示意图选用产品子系列中固定的一款设备做示例&#xff0c;与选择产品时指定型号的外观可能不同。示意图主要用于让用户了解相同子系列设备可以用作堆叠的端口的位置&#xff0c;以及使用不同的连线方式时如何连接设备上的端口。因此&#xf…...

c# aes加密解密私钥公钥通钥

using System.Security.Cryptography; using System.Text; namespace EncryptTest { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); string 密 EncryptAESBASE64("你…...

上拉电阻与下拉电阻、电容的作用

上拉电阻与下拉电阻 在单片机电路中&#xff0c;上拉电阻和下拉电阻都是常见的电路元件&#xff0c;它们在数字电路设计中扮演着重要的角色。它们的作用如下&#xff1a; 1. **上拉电阻**&#xff1a; - **作用**&#xff1a;当一个引脚没有外部信号时&#xff0c;上拉电阻…...

《Spring Security 简易速速上手小册》第1章 Spring Security 概述(2024 最新版)

文章目录 1.1 Spring Security 的重要性1.1.1 基础知识详解1.1.2 主要案例&#xff1a;用户认证与授权1.1.3 拓展案例 1&#xff1a;OAuth2 社交登录1.1.4 拓展案例 2&#xff1a;JWT 认证 1.2 Spring Security 的核心特性1.2.1 基础知识详解1.2.2 主要案例&#xff1a;基于角色…...

vue页面菜单权限问题解决

带锚点的url,#后面部分后端获取不到. vue的页面是带有#的路由,#后端服务获取不到,只在浏览器端有用. URL 中的哈希符号 (#) 被用来作为网页中的 锚点 使用&#xff0c;锚点的含义就是页面中的某个特定的位置&#xff0c;这个位置可以被快速找到&#xff0c;很类似于在该位置抛…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...