Java--数组的定义与使用
1.数组的基本概念
1.1为什么用数组
在程序设计中,每一个数据总是对应一个变量.当数据量越大,就需要更多的变量来存储.我们将相同类型的数据存储到一个集合中,就可以更方便我们对数据进行访问,同时可以减少不断定义变量.这个集合就叫做数组
1.2数组的定义
数组是一种基本的数据结构,用于存储相同类型的多个值。数组是引用数据类型,它可以存储基本数据类型或对象的集合。
1.3数组的创建及初始化
1.3.1语法格式
T[] 数组名 = new T[N];
T : 表示数组中存放元素的类型
T[ ] : 表示数组的类型
N : 表示数组的长度
int[] arr = new arr[10];
这样我们就创建了一个可以容纳10个int类型元素的数组
1.3.2数组的初始化
数组的初始化主要分为动态初始化和静态初始化
1.动态初始化:在创建数组时,直接指定数组中元素的个数
int[] arr = new arr[10];
2.静态初始化:在创建数组时不指定元素个数,而是直接用数据进行指定
语法格式:
T[] 数组名称 = {data1,data2,data3.....datan};
int[] arr = new int[]{0,1,2,3,4,5,6};
注意事项:
- 静态初始化虽然没有指定数组的长度,编译器在编译时会根据{ }中元素个数来确定数组的长度.
- 静态初始化时, { }中数据类型必须与[]前数据类型一致.
- 静态初始化可以简写,省去后面的 new T[ ],但是编译器编译代码时还是会还原.
- 如果没有对数组初始化,数组中元素有其默认值,如果是基本数据类型,默认值为对应的默认值,如图
如果数组中存储元素类型为引用类型,默认值为null.
1.4数组的使用
1.4.1数组中元素访问
数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素.
int[] arr = new int[]{11,22,33,44};
System.out.println(arr[0]);//11
System.out.println(arr[1]);//22
System.out.println(arr[2]);//33
System.out.println(arr[3]);//44
也可以通过下标对数组元素进行修改
arr[3] = 55;
System.out.println(arr[3]);//55
注意事项:
下标从0开始,介于 [ 0 , N ) 之间,不包含N,N为元素个数,不能越界,否则会报出下标越界异常
1.4.2数组遍历
遍历指的是将数组中所有元素都访问一遍,访问是指对数组中的元素进行某种操作,比如打印
1.4.1中的代码就是对数组arr进行了遍历,但问题是这种方法不易于修改,增加一个元素就要多一条打印语句,通过观察代码可以发现,遍历的下标都是是按照顺序逐渐增大,所有我们可以用一个循环来表示下标.
int[] arr = new int[]{11,22,33,44};
for(int i = 0;i<4;i++){System.out.println(arr[i]);
}
这样就简写了对数组的遍历,但是问题还没有解决,数组变大时还需要修改循环,我们可以通过 数组对象.length 来获取数组的长度,代码修改如下
int[] arr = new int[]{11,22,33,44};
for(int i = 0;i< arr.length;i++){System.out.println(arr[i]);
}
还可以通过 for-each 来遍历数组
int[] arr = new int[]{11,22,33,44};
for(int i:arr){System.out.println(i);
}
这种写法更简洁,但是无法反向遍历
2.数组是引用类型
2.1基本类型变量与应用类型变量的区别
基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;
而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址.
public static void main(String[] args) {int a = 10;int b = 20;int[] arr = new int[]{1, 2, 3};
}
在上述代码中, a、b、arr 都是函数内部的变量,因此其空间都在main方法对应的栈帧中分配;
a、b是内置类型的变量,因此其空间中保存的就是给该变量初始化的值;
array是数组类型的引用变量,其内部保存的内容可以简单理解成是数组在堆空间中的首地址.
从上图可以看到,引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址.通过该地址,引用变量便可以去操作对象.
2.2引用变量的赋值
int[] arr1 = new int[]{1,2,3};
int[] arr2 = new int[]{100,200,300};
arr1 = arr2;
arr2[2] = 400;
for(int i:arr1){System.out.println(i);
}
for(int i:arr2){System.out.println(i);
}
这段代码中,定义了两个数组 arr1 和 arr2 ,修改了 arr2 的一个元素并对两个数组进行遍历打印
但是结果却把 arr2 打印了两遍,因为 arr1 = arr2 本质是把 arr1 去引用 arr2引用的数组的空间,此时arr1 和 arr2 实际是一个数组
修改之前
修改之后
2.3认识 null
null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用.
null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操 作. 一旦尝试读写, 就会抛出 NullPointerException.同时 Java 中并没有约定 null 和 0 号地址的内存有任何关联
int[] arr = null;
System.out.println(arr[0]);
3.数组的应用场景
3.1保存数据
int[] arr = new int[]{11,22,33,44};
for(int i = 0;i<4;i++){System.out.println(arr[i]);
}
3.2作为函数的参数
1.参数传基本类型
public static void main(String[] args) {int num = 0;func(num);System.out.println("num=" + num);}public static int func(int x){x = 10;System.out.println("x="+ x);return x;}
在 func 方法中修改形参 x 的值,不会影响实参的 num 的值
2.参数传数组类型(引用数据类型)
public static void main(String[] args) {int[] arr ={1};func(arr);System.out.println("arr[0]="+arr[0]);}public static void func(int[] a){a[0] = 10;System.out.println("a[0]="+ a[0]);}
这一次改变了方法外部的值,是因为数组是引用类型,按照引用类型来进行传递,是可以修改其中存放的内容的
总结: 所谓的 "引用" 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实 只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大).
3.3数组转字符串
代码示例
import java.util.Arrays;int[] arr = {1,2,3,4,5,6};
String newArr = Arrays.toString(arr);
System.out.println(newArr);
执行结果
通过将数组转为字符串,可以让打印更方便一些
3.4数组拷贝
代码示例
int[] arr = {1,2,3,4,5};
int[] newArr = arr;
newArr[0] = 10;
System.out.println("arr:"+Arrays.toString(arr));
System.out.println("newArr:"+Arrays.toString(newArr));
当前 newArr 数组指向了 arr 数组,修改了 newArr 中的内容, arr 也会发生改变,虽然结果一样,但是不算真正意义上的拷贝
所以我们需要用到 Arrays 中的 copyOf 方法来完成数组的拷贝
语法格式: Arrays.copyOf(拷贝的数组,拷贝的长度)
int[] arr = {1,2,3,4,5};
int[] newArr = Arrays.copyOf(arr,arr.length);
newArr[0] = 10;
System.out.println("arr:"+Arrays.toString(arr));
System.out.println("newArr:"+Arrays.toString(newArr));
这个时候,arr 和 newArr 就不是引用同一个数组了,改变其中一项就不会对另一个数组改变.
还可以使用 Arrays.copyOfRange 来指定拷贝范围
语法格式: Arrays.copyOfRange(拷贝的数组,拷贝的起点,拷贝的终点)
int[] arr = {1,2,3,4,5};
int[] newArr = Arrays.copyOfRange(arr,2,4);
System.out.println("arr:"+Arrays.toString(arr));
System.out.println("newArr:"+Arrays.toString(newArr));
可以看到拷贝的范围是左闭右开区间 [ 2 , 4)
实现自己版本的拷贝数组
public static int[] copyOf(int[] arr){int[] ret = new int[arr.length];for(int i = 0;i< arr.length;i++){ret[i] = arr[i];}return ret;
}
3.5查找指定元素(二分查找)
针对有序数组,可以使用更高效的二分查找
以升序数组为例,二分查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较:
- 如果相等,即找到了返回该元素在数组中的下标;
- 如果小于,以类似方式到数组左半侧查找;
- 如果大于,以类似方式到数组右半侧查找.
代码示例
public static void main(String[] args) {int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};System.out.println(binarySearch(arr,7));}public static int binarySearch(int[] arr,int toFind){int left = 0;int right = arr.length;while (left <= right){int mid = (left+right) / 2;if(toFind < arr[mid]){//小于,去左侧找right = mid-1;} else if (toFind > arr[mid]) {//大于,去右侧找left = mid+1;}else//相等,说明找到了,返回下标return mid;}return -1; //没找到}
3.6数组排序(冒泡排序)
给定一个数组,让数组实现升序或降序
算法思路:
将相邻两个数进行比较,将大的数交换置于后面,遍历一躺以后,最大的数就会被交换到最后一位
每一次遍历会有一个数到自己该有的位置,所以循环次数为数组元素的个数
(生活中泡泡总是不断向上,这个排序方法也是不断的向上,所以称为冒泡排序)
代码示例
public static void main(String[] args) {int[] arr = new int[]{9,5,8,3};bubbleSort(arr);System.out.println(Arrays.toString(arr));
}
public static void bubbleSort(int[] arr){for(int i = 0;i< arr.length;i++){for(int j = 0;j< arr.length-i-1;j++){if(arr[j] > arr[j+1]){int tmp = arr[j+1];arr[j+1] = arr[j];arr[j] = tmp;}}}
}
运行结果
冒泡排序性能较低,Java中内置了更高效的排序算法
public static void main(String[] args) {int[] arr = new int[]{9,5,8,3};Arrays.sort(arr);System.out.println(Arrays.toString(arr));}
运行结果如上
3.7二维数组
二维数组本质上也是一维数组,只不过每个元素又是一个一维数组
语法格式
数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 }
同理,还有 "三维数组" , "四维数组",出现频率不高,这里不再介绍
感谢阅读,希望对你有帮助
相关文章:
Java--数组的定义与使用
1.数组的基本概念 1.1为什么用数组 在程序设计中,每一个数据总是对应一个变量.当数据量越大,就需要更多的变量来存储.我们将相同类型的数据存储到一个集合中,就可以更方便我们对数据进行访问,同时可以减少不断定义变量.这个集合就叫做数组 1.2数组的定义 数组是一种基本的数…...
tcpdump抓包wireshark分析
背景 分析特定协议的数据包,如 HTTP、DNS、TCP、UDP 等,诊断网络问题,例如连接故障、延迟和数据包丢失。 大概过程 1.安装tcpdump yum update yum install tcpdump2.抓包,从当前时间起,一小时后停止,…...
qtcanpool 知 09:测试框架
文章目录 前言不满改进优化后语 前言 很久以前,作者写的代码都没有测试用例,最多就是写个 demo 验证一下,毕竟不是专业出身,也没经过大公司的洗礼。 后来,参与到一些项目才知道有专门的测试,而且开发也要测…...
使用Apache HttpClient发起一个GET HTTP请求
Apache HttpClient 是一个强大且灵活的Java库,用于处理HTTP请求。 它提供了广泛的功能,包括对不同HTTP方法的支持、连接管理、Cookie处理等。 无论是与RESTful API交互、下载网页内容还是自动化网页任务,Apache HttpClient 都能通过其简洁而…...
C++ STL 容器系列(三)list —— 编程世界的万能胶,数据结构中的百变精灵
STL系列学习参考: C STL系列__zwy的博客-CSDN博客https://blog.csdn.net/bite_zwy/category_12838593.html 学习C STL的三个境界,会用,明理,能扩展,STL中的所有容器都遵循这个规律,下面我们就按照这三个境…...
【前端学习笔记】TypeScript学习
1.什么是TypeScript TypeScript(简称 TS)是微软公司开发的一种基于 JavaScript (简称 JS)语言的编程语言。TypeScript 可以看成是 JavaScript 的超集(superset),添加了类型系统和编译时类型检查…...
qt三大调试方法总结(printf\qDebug\qCDebug)
文章目录 1 传统方法2 qDebug传统方法扩展1 控制输出扩展2 日志格式扩展3 日志保存扩展4 源码定义护展5 开源扩展3 qCDebug方法扩展1 控制扩展2 格式化扩展3 保存日志扩展4 源码定义参考1 传统方法 #include<stdio.h> printf(“xboard hello printf”) 2 qDebug传统方法…...
耶鲁大学公开课《心理学导论》学习笔记:第 1 课 - 导论
概述 作为一个程序员,或者说,我们不管做什么行业,都可以或多或少的学习一些心理学 我们在生活工作中,其实都会有意无意的接触一些心理学原理,例如,【番茄工作法】、【内在动机与外在激励】 这里选择的是&…...
Android ConstraintLayout 约束布局的使用手册
目录 前言 一、ConstraintLayout基本介绍 二、ConstraintLayout使用步骤 1、引入库 2、基本使用,实现按钮居中。相对于父布局的约束。 3、A Button 居中展示,B Button展示在A Button正下方(距离A 46dp)。相对于兄弟控件的约束…...
STM32F030单片机AD采集应用总结
最近在设计一款产品的AD时,采集到的电压老是比输入电压0.2V左右,电路如图所示 查阅资料得知,STM32f030 的输入阻抗应小于 50K。于是将电阻改为 39K/10K,但情况依旧。随后,干脆将电阻值改为 3.9K/1K,虽有一定…...
Web开发基础学习——通过React示例学习模态对话框
Web开发基础学习系列文章目录 第一章 基础知识学习之通过React组件学习模态对话框 文章目录 Web开发基础学习系列文章目录前言一、创建新的 React 应用二、 创建模态对话框组件三、修改 App.js四、 添加样式五、启动应用六、访问应用总结 前言 模态对话框(Modal D…...
实例分割详解
实例分割详解 引言 实例分割是计算机视觉领域的一项复杂任务,它要求模型能够识别图像中不同类别的对象,并对每个单独的对象进行像素级别的分类。与语义分割不同的是,实例分割不仅要区分不同的类别,还要识别同一类别中的不同个体…...
Flink四大基石之State(状态) 的使用详解
目录 一、有状态计算与无状态计算 (一)概念差异 (二)应用场景 二、有状态计算中的状态分类 (一)托管状态(Managed State)与原生状态(Raw State) 两者的…...
vue深入理解输入框字符限制的优化设计
文章目录 深入理解输入框字符限制的优化设计背景与挑战输入框限制的重要性常见需求 多种实现方法解析方法一:基于实时过滤的字符限制方法二:借助正则验证方法三:提交时二次校验 性能优化无障碍设计延伸场景与最佳实践1. 多语言国际化支持2. 动…...
MySQL的子查询
SQL语句中嵌套select语句,嵌套查询 案例: select * from t1 where column1 (select column1 from t2); 补: 1.子查询外部的语句可以是insert/update/delete/select的任何一个 2.位置也可以在where/from/select之后 类型: 1.标量子查询…...
Kubernetes架构原则和对象设计
云原生学习路线导航页(持续更新中) 快捷链接 Kubernetes常见问题解答 本文从 Google Borg系统的架构设计开始,深入讲解Kubernetes架构及组件的基本原理 1.什么是云计算 1.1.传统行业应用 假设有10台服务器,两个应用。小规模管…...
npm : 无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本
要以管理员身份打开PowerShell,请按照以下步骤操作: 在Windows搜索框中查找PowerShell: 在任务栏上,点击左下角的Windows徽标(或按Win S键)以打开搜索框。输入“PowerShell”以查找PowerShell应用程序。右…...
Linux CentOS
阿里云开源镜像下载链接 https://mirrors.aliyun.com/centos/7/isos/x86_64/ VMware 安装 CentOS7 自定义 下一步 选择稍后安装操作系统 选择 输入 查看物理机CPU内核数量 CtrlShiftEsc 总数不超过物理机内核数量 推荐内存 自选 推荐 推荐 默认 拆分成多个 默认 自定义硬件…...
如何用注册机破解Reflexive游戏
相信有许多小朋友(像我以前一样)已经迫不及待地准备准备对浩瀚的、像三星堆一般的Reflexive游戏合集进行考古挖掘工作了。不巧的是,打开游戏之后发现常常提示要付费才能解锁完整版。 一、下载注册机与破解文件 首先,在我的永硕网…...
【算法day7】字符串:反转与替换
题目引用 反转字符串反转字符串II替换数字 1.反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&am…...
基于Linux C++多线程服务器 + Qt上位机开发 + STM32 + 8266WIFI的智慧无人超市
前言 针对传统超市购物车结账排队时间长、付款效率低的问题,提出了一种更符合现代社会人们购物方式-基于RFID的自助收银系统。习惯了快节奏生活的人们都会选择自助收银机结账,理由显而易见:自助收银机结账很方便,几乎不用排队&am…...
继电器测试的培训和学习资源有哪些推荐?
继电器是电气控制设备中常见的一种元件,用于实现电路的开关控制和保护功能。对于从事电气相关工作的人员来说,掌握继电器的测试技能是非常重要的。以下是一些推荐的继电器测试培训和学习资源: 1. 在线课程:许多在线学习平台提供了…...
学习日志020---qt信号与槽
作业 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QPushButton,QLineEditfrom Form import Ui_Form from second import Ui_second from PySide6.QtCore import Qtclass MyWidget(QWidget,Ui_Form):def __init__(self):super().__init__()self.setupUi(se…...
小迪安全笔记 第四十四天 sql盲注 实战利用sql盲注 进行漏洞的利用
sql盲注的分类 什么是盲注 就是我们什么也不知道的情况下进行的注入 前边的注入 都是简单的注入 我们猜测 数据类型 之后 可以直接 union 去查 这种情况多用于 数据库增删查改中的 查 bool盲注也用于查 这个的情况的就是我们前边都试了 没有用 就需要…...
AMEYA360:上海永铭电子全新高压牛角型铝电解电容IDC3系列,助力AI服务器电源高效运转
随着数据中心和云计算的高速发展,AI服务器的能效要求日益提高。如何在有限空间内实现更高的功率密度和稳定的电源管理,成为AI服务器电源设计的一大挑战。永铭推出全新高压牛角型铝电解电容IDC3系列,以大容量、小尺寸的创新特性,为…...
SpringBoot Web 开发请求参数
SpringBoot Web 开发请求参数 简单的 web 请求: @RestController public class HelloController {@RequestMapping("sayHello")public String sayHello(){System.out.println("Hello World");return "hello world";} }获取请求参数 简单参数…...
力扣92.反转链表Ⅱ
题目描述 题目链接92. 反转链表 II 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 1: 输入:head [1,2,3,4,5], left …...
网络安全、Web安全、渗透测试之笔经面经总结(一)
本篇文章总结涉及以下几个方面: 一:对称加密非对称加密? 对称加密:加解密用同一密钥,密钥维护复杂n(n-1)/2,不适合互联网传输密钥,加解密效率高。应用于加密数据。 非…...
11 设计模式之代理模式(送资料案例)
一、什么是代理模式? 在现实生活中,我们常常遇到这样的场景:由于某些原因,我们可能无法亲自完成某个任务,便会委托他人代为执行。在设计模式中,代理模式 就是用来解决这种“委托”问题的࿰…...
matlab2024a安装
1.开始安装 2.点击安装 3.选择安装密钥 4.接受条款 5.安装密钥 21471-07182-41807-00726-32378-34241-61866-60308-44209-03650-51035-48216-24734-36781-57695-35731-64525-44540-57877-31100-06573-50736-60034-42697-39512-63953 6 7.选择许可证文件 8.找许可证文件 9.选…...
齐护机器人ModbusRTU RS485转TTL通信模块与ESP32 Arduino通信可Mixly的图形化编程Scratch图形化编程
齐护机器人ModbusRTU RS485-TTL通信模块 一、概念理解 Modbus协议是一种由Modicon公司(现为施耐德电气Schneider Electric)于1979年发表的网络通信协议,旨在实现可编辑逻辑控制器(PLC)之间的通信。 1.1 什么是Mod…...
JDK、JRE、JVM的区别
JDK(Java Development Kit)、JRE(Java Runtime Environment)和JVM(Java Virtual Machine)是Java技术栈中的三个核心组件,它们各自有不同的功能和用途: 1. JDK(Java Deve…...
linux基础2
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
vue 项目实现阻止浏览器记住密码
在各个浏览器中,登录输入密码一般都会弹出是否记住密码的功能,如果记住之后,会在各个密码框自动填充记住的密码,这无疑是一种不安全的操作,所以要实现禁用阻止浏览器记住密码的行为 查阅资料,也得到很多…...
【23种设计模式】工厂模式:理论剖析与Java实践
文章目录 工厂模式:理论、Java 实现与实践应用一、工厂模式概述二、简单工厂模式(一)理论介绍(二)代码实现(三)关键步骤(四)流程图 三、工厂方法模式(一&…...
(补充)JSON在Java后端的应用
JSON在Java后端的应用 本篇介绍 本篇文档不涉及到写一个JSON字符串,只是介绍如何在后端实现JSON字符串和Java对象的相互转换 Java对象转换为JSON字符串 在Java中,可以使用一个第三方工具包Jackson将Java对象转换为JSON对象,假设现在有一个…...
使用 Apache Commons IO 实现文件读写
在 Java 编程中,文件读写是常见的操作。虽然 Java 标准库提供了基本的文件 I/O 功能,但使用 Apache Commons IO 库可以进一步简化这些操作,提高开发效率。Apache Commons IO 是一个强大的工具库,提供了许多实用的类和方法…...
AWS ECS Task 添加 Prometheus 监控采集配置详细指南
以下是一篇完整的博文,介绍如何在 AWS ECS 环境中实现 JVM 监控。 AWS ECS 环境下的 JVM 监控实践 概述 在 AWS ECS (Elastic Container Service) 环境中监控 Java 应用性能是一项重要任务。本文将详细介绍如何使用 AWS Distro for OpenTelemetry (ADOT) 结合 Spring Boot …...
Vue+vite 组件开发的环境准备
一.nodejs安装 进入Node.js 官网(Node.js — Run JavaScript Everywhere),点击下载。 双击打开,进行安装 双击打开后,点击 next(下一步),后面也是一直点击 next 无其他设置,直到 …...
STM32 进阶 定时器:1系统定时器 系统中断案例 LED闪烁
定时器: 功能从高到低: TIM1和TIM8 高级控制定时器:输出能力更强,刹车控制、死区时间。 TIMx 通用定时器:可以输出PWM方波 TIM6和TIM7 基本定时器:只能计时 系统定时器 系统定时器(SysTic…...
基于微信小程序的教学质量评价系统
私信我获取源码和万字论文,制作不易,感谢点赞支持。 基于微信小程序的教学质量评价系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的教学质量评价系统的开发全过…...
Qt Qtablewidget 标题 QHeaderView 增加可选框 QcheckBox
创建自定义QHeaderView #pragma once#include <QObject> #include <QHeaderView> #include <QPainter> #include <QMouseEvent>class SSHeaderView : public QHeaderView {Q_OBJECTprivate:bool isChecked;int m_checkColIdx; public:SSHeaderView(i…...
在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案
在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案 背景概述解决方案脚本实现脚本说明使用指南注意事项在CentOS操作系统环境中,若需并发上传特定目录下的.wav文件至HTTP服务器,而系统未安装GNU parallel工具,我们可通过其他方法实现此需求。本文将介绍一种利用Sh…...
实战ansible-playbook(四) -文件操作重定向/追加
原始命令: ----------阶段1--------------- apt-get update -y apt install nano vim iputils-ping net-tools dialog gcc apt-utils make -y systemctl stop unattended-upgradessystemctl disable unattended-upgradesecho APT::Periodic::Update-Package-Lists "1&qu…...
嵌入式 C 编程必备(7):const 关键字 —— 打造稳定的常量空间
目录 一、const关键字的基本含义与用法 1.1. 修饰基本数据类型 1.2. 修饰指针 1.3. 修饰数组 1.4. 修饰结构体 二、const关键字在嵌入式编程中的优势 2.1. 提升代码可读性 2.2. 增强代码安全性 2.3. 优化内存使用 2.4. 促进模块化设计 2.5. 支持静态分析和测试 三、…...
电脑显示没信号显示屏不亮怎么办?电脑没信号解决方法
电脑没信号显示屏不亮这种故障的原因可能有多种,例如显示器的供电、连接、设置等问题,或者电脑的显卡、内存、硬盘、主板等硬件问题。所以我们想要解决这个问题,也是需要多方面排除找到具体原因然后进行修复。下面将为大家介绍一些常见的电脑…...
C++零基础入门:运算符与表达式详解 —— 树莓派Pico编程应用
C语言作为信息学奥赛的指定语言,广泛应用于嵌入式开发、系统编程、游戏开发等领域。对于初学者而言,掌握基本的运算符和表达式是进行编程的基础,而这些基础知识能够帮助你解决各种实际问题。本文将带你深入理解C中的运算符与表达式࿰…...
mvc命令
命令 mvc MVC(Model-View-Controller)是一种软件架构模式,用于组织和管理应用程序的代码mvc重要的三部分 (1)模型(Model):负责存储系统的中心数据,提供访问数据的函数,封装了应用程序的功能内核。 (2)视图&…...
Kafka-创建topic源码
一、命令创建topic kafka-topics --create --topic quickstart-events --bootstrap-server cdh1:9092 --partitions 2 --replication-factor 2 二、kafka-topics脚本 exec $(dirname $0)/kafka-run-class.sh org.apache.kafka.tools.TopicCommand "$" 脚本中指定了…...
如何开展单元测试
1、是什么 单元测试(Unit Testing)又称为模块测试,是针对程序模块来进行正确性检验的测试工作。 程序模块是软件设计的最小单位,程序单元是应用的最小可测试部件 • 在面向过程编程中,一个单元就是单个程序、函数、过…...