鸿蒙NEXT开发案例:随机数生成
【引言】
本项目是一个简单的随机数生成器应用,用户可以通过设置随机数的范围和个数,并选择是否允许生成重复的随机数,来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。
【环境准备】
• 操作系统:Windows 10
• 开发工具:DevEco Studio NEXT Beta1 Build Version: 5.0.3.806
• 目标设备:华为Mate60 Pro
• 开发语言:ArkTS
• 框架:ArkUI
• API版本:API 12
【关键技术点】
1. 用户界面设计
用户界面主要包括以下几个部分:
• 标题栏:显示应用名称。
• 输入框:用户可以输入随机数的起始值、结束值和生成个数。
• 开关:用户可以选择生成的随机数是否允许重复。
• 生成按钮:点击后生成随机数。
• 结果显示区:显示生成的随机数,并提供复制功能。
2. 随机数生成算法
随机数生成是本项目的重点。根据用户是否允许生成重复的随机数,算法分为两种情况:
2.1 不允许重复
当用户选择不允许生成重复的随机数时,程序使用一个 Set 来存储生成的随机数,利用 Set 的特性自动去重。具体步骤如下:
1)计算范围:计算用户指定的随机数范围 range = endValue - startValue + 1。
2)生成随机数:使用一个临时数组 tempArray 来辅助生成不重复的随机数。每次生成一个随机索引 randomIndex,从 tempArray 中取出或计算一个新的随机数 randomNum,并将其添加到 Set 中。
3)更新临时数组:将 tempArray 中末尾的元素移动到随机位置,以确保下次生成的随机数仍然是唯一的。
if (!this.isUnique) {if (countValue > range) {// 显示错误提示this.getUIContext().showAlertDialog({title: '错误提示',message: `请求的随机数数量超过了范围内的总数`,confirm: {defaultFocus: true,value: '我知道了',fontColor: Color.White,backgroundColor: this.primaryColor,action: () => {}},onWillDismiss: () => {},alignment: DialogAlignment.Center,});return;}for (let i = 0; i < countValue; i++) {let randomIndex = Math.floor(Math.random() * (range - i));let randomNum = 0;if (tempArray[randomIndex] !== undefined) {randomNum = tempArray[randomIndex];} else {randomNum = startValue + randomIndex;}generatedNumbers.add(randomNum);if (tempArray[range - 1 - i] === undefined) {tempArray[range - 1 - i] = startValue + range - 1 - i;}tempArray[randomIndex] = tempArray[range - 1 - i];}this.generatedNumbers = JSON.stringify(Array.from(generatedNumbers));
}
2.2 允许重复
当用户选择允许生成重复的随机数时,程序直接在指定范围内生成随机数,并将其添加到结果数组中。
else {for (let i = 0; i < this.countValue; i++) {let randomNumber = this.startValue + Math.floor(Math.random() * (this.endValue - this.startValue));tempArray.push(randomNumber);}this.generatedNumbers = JSON.stringify(tempArray);
}
3. 剪贴板功能
为了方便用户使用,程序提供了将生成的随机数复制到剪贴板的功能。具体实现如下:
private copyToClipboard(text: string): void {const pasteboardData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, text);const systemPasteboard = pasteboard.getSystemPasteboard();systemPasteboard.setData(pasteboardData);promptAction.showToast({ message: '已复制' });
}
【完整代码】
// 导入剪贴板服务模块,用于后续实现复制功能
import { pasteboard } from '@kit.BasicServicesKit';
// 导入用于显示提示信息的服务
import { promptAction } from '@kit.ArkUI';// 使用装饰器定义一个入口组件,这是应用的主界面
@Entry
@Component
struct RandomNumberGenerator {// 定义基础间距,用于布局中的间距设置@State private baseSpacing: number = 30;// 存储生成的随机数字符串@State private generatedNumbers: string = '';// 应用的主题色@State private primaryColor: string = '#fea024';// 文本的颜色@State private fontColor: string = "#2e2e2e";// 输入框是否获取焦点的状态变量@State private isFocusStart: boolean = false;@State private isFocusEnd: boolean = false;@State private isFocusCount: boolean = false;// 是否允许生成的随机数重复@State private isUnique: boolean = true;// 随机数生成的起始值@State private startValue: number = 0;// 随机数生成的结束值@State private endValue: number = 0;// 要生成的随机数个数@State private countValue: number = 0;// 生成随机数的方法private generateRandomNumbers(): void {const startValue = this.startValue; // 获取当前设定的起始值const endValue = this.endValue; // 获取当前设定的结束值const countValue = this.countValue; // 获取当前设定的生成个数const range: number = endValue - startValue + 1; // 计算生成范围// 用于存储生成的随机数const generatedNumbers = new Set<number>(); // 使用Set来自动去重const tempArray: number[] = []; // 临时数组,用于辅助生成不重复的随机数// 如果不允许重复,则使用去重算法生成随机数if (!this.isUnique) {// 如果请求的随机数数量超过了范围内的总数,则显示错误提示if (countValue > range) {this.getUIContext().showAlertDialog({title: '错误提示',message: `请求的随机数数量超过了范围内的总数`,confirm: {defaultFocus: true,value: '我知道了',fontColor: Color.White,backgroundColor: this.primaryColor,action: () => {} // 点击确认后的回调},onWillDismiss: () => {}, // 对话框即将关闭时的回调alignment: DialogAlignment.Center, // 对话框的对齐方式});return;}for (let i = 0; i < countValue; i++) {let randomIndex = Math.floor(Math.random() * (range - i)); // 在剩余范围内选择一个随机索引let randomNum = 0;if (tempArray[randomIndex] !== undefined) { // 如果索引位置已有值,则使用该值randomNum = tempArray[randomIndex];} else {randomNum = startValue + randomIndex; // 否则计算新的随机数}generatedNumbers.add(randomNum); // 添加到Set中,自动去重if (tempArray[range - 1 - i] === undefined) { // 更新末尾元素的位置tempArray[range - 1 - i] = startValue + range - 1 - i;}tempArray[randomIndex] = tempArray[range - 1 - i]; // 将末尾元素移到随机位置}// 将生成的随机数转换成JSON格式的字符串this.generatedNumbers = JSON.stringify(Array.from(generatedNumbers));} else {// 如果允许重复,则直接生成随机数for (let i = 0; i < this.countValue; i++) {let randomNumber = this.startValue + Math.floor(Math.random() * (this.endValue - this.startValue));tempArray.push(randomNumber);}// 将生成的随机数转换成JSON格式的字符串this.generatedNumbers = JSON.stringify(tempArray);}}// 将生成的随机数复制到剪贴板的方法private copyToClipboard(text: string): void {const pasteboardData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, text); // 创建剪贴板数据const systemPasteboard = pasteboard.getSystemPasteboard(); // 获取系统剪贴板systemPasteboard.setData(pasteboardData); // 设置剪贴板数据// 显示复制成功的提示信息promptAction.showToast({ message: '已复制' });}// 构建页面布局的方法build() {Column() {// 标题栏,展示应用名Text("随机数生成").width('100%') // 设置宽度为100%.height(54) // 设置高度为54.fontSize(18) // 设置字体大小为18.fontWeight(600) // 设置字体粗细为600.backgroundColor(Color.White) // 设置背景颜色为白色.textAlign(TextAlign.Center) // 设置文本居中对齐.fontColor(this.fontColor); // 设置文本颜色// 随机数范围设置区域Column() {Row() {Text(`随机数范围`).fontWeight(600) // 设置字体粗细为600.fontSize(18) // 设置字体大小为18.fontColor(this.fontColor); // 设置文本颜色}.margin({ top: `${this.baseSpacing}lpx`, left: `${this.baseSpacing}lpx` }); // 设置边距// 输入随机数范围的两个值Row() {TextInput({ placeholder: '开始(>=)' }) // 输入框,显示占位符.layoutWeight(1) // 设置布局权重为1.type(InputType.Number) // 设置输入类型为数字.placeholderColor(this.isFocusStart ? this.primaryColor : Color.Gray) // 设置占位符颜色.fontColor(this.isFocusStart ? this.primaryColor : this.fontColor) // 设置文本颜色.borderColor(this.isFocusStart ? this.primaryColor : Color.Gray) // 设置边框颜色.borderWidth(1) // 设置边框宽度.borderRadius(10) // 设置圆角半径.backgroundColor(Color.White) // 设置背景颜色.showUnderline(false) // 不显示下划线.onBlur(() => this.isFocusStart = false) // 输入框失去焦点时的处理.onFocus(() => this.isFocusStart = true) // 输入框获得焦点时的处理.onChange((value: string) => this.startValue = Number(value)); // 输入值变化时的处理// 分隔符Line().width(10) // 设置分隔符宽度TextInput({ placeholder: '结束(<=)' }) // 输入框,显示占位符.layoutWeight(1) // 设置布局权重为1.type(InputType.Number) // 设置输入类型为数字.placeholderColor(this.isFocusEnd ? this.primaryColor : Color.Gray) // 设置占位符颜色.fontColor(this.isFocusEnd ? this.primaryColor : this.fontColor) // 设置文本颜色.borderColor(this.isFocusEnd ? this.primaryColor : Color.Gray) // 设置边框颜色.borderWidth(1) // 设置边框宽度.borderRadius(10) // 设置圆角半径.backgroundColor(Color.White) // 设置背景颜色.showUnderline(false) // 不显示下划线.onBlur(() => this.isFocusEnd = false) // 输入框失去焦点时的处理.onFocus(() => this.isFocusEnd = true) // 输入框获得焦点时的处理.onChange((value: string) => this.endValue = Number(value)); // 输入值变化时的处理}.margin({left: `${this.baseSpacing}lpx`, // 左边距right: `${this.baseSpacing}lpx`, // 右边距top: `${this.baseSpacing}lpx`, // 上边距});// 输入生成随机数的个数Text('生成随机数个数').fontWeight(600) // 设置字体粗细为600.fontSize(18) // 设置字体大小为18.fontColor(this.fontColor) // 设置文本颜色.margin({ left: `${this.baseSpacing}lpx`, top: `${this.baseSpacing}lpx` }); // 设置边距Row() {TextInput({ placeholder: '' }) // 输入框,显示占位符.layoutWeight(1) // 设置布局权重为1.type(InputType.Number) // 设置输入类型为数字.placeholderColor(this.isFocusCount ? this.primaryColor : Color.Gray) // 设置占位符颜色.fontColor(this.isFocusCount ? this.primaryColor : this.fontColor) // 设置文本颜色.borderColor(this.isFocusCount ? this.primaryColor : Color.Gray) // 设置边框颜色.borderWidth(1) // 设置边框宽度.borderRadius(10) // 设置圆角半径.backgroundColor(Color.White) // 设置背景颜色.showUnderline(false) // 不显示下划线.onBlur(() => this.isFocusCount = false) // 输入框失去焦点时的处理.onFocus(() => this.isFocusCount = true) // 输入框获得焦点时的处理.onChange((value: string) => this.countValue = Number(value)); // 输入值变化时的处理}.margin({left: `${this.baseSpacing}lpx`, // 左边距right: `${this.baseSpacing}lpx`, // 右边距top: `${this.baseSpacing}lpx`, // 上边距});// 设置数字是否可重复的开关Row() {Text('数字是否可重复').fontWeight(400) // 设置字体粗细为400.fontSize(16) // 设置字体大小为16.fontColor(this.fontColor) // 设置文本颜色.layoutWeight(1); // 设置布局权重为1Toggle({ type: ToggleType.Checkbox, isOn: this.isUnique }) // 切换按钮.width('100lpx') // 设置宽度.height('50lpx') // 设置高度.borderColor(Color.Gray) // 设置边框颜色.selectedColor(this.primaryColor) // 设置选中时的颜色.onChange((isOn: boolean) => this.isUnique = isOn) // 切换状态变化时的处理.align(Alignment.End); // 设置对齐方式为右对齐}.margin({top: `${this.baseSpacing}lpx`, // 上边距}).width('100%') // 设置宽度为100%.padding({left: `${this.baseSpacing}lpx`, // 左内边距right: `${this.baseSpacing}lpx`, // 右内边距top: `${this.baseSpacing / 3}lpx`, // 上内边距}).hitTestBehavior(HitTestMode.Block) // 设置点击测试行为.onClick(() => this.isUnique = !this.isUnique); // 点击时切换状态// 生成随机数的按钮Text('开始生成').fontColor(Color.White) // 设置文本颜色为白色.backgroundColor(this.primaryColor) // 设置背景颜色为主题色.height(54) // 设置高度为54.textAlign(TextAlign.Center) // 设置文本居中对齐.borderRadius(10) // 设置圆角半径.fontSize(18) // 设置字体大小为18.width(`${650 - this.baseSpacing * 2}lpx`) // 设置宽度.margin({top: `${this.baseSpacing}lpx`, // 上边距left: `${this.baseSpacing}lpx`, // 左边距right: `${this.baseSpacing}lpx`, // 右边距bottom: `${this.baseSpacing}lpx` // 下边距}).clickEffect({ level: ClickEffectLevel.HEAVY, scale: 0.8 }) // 设置点击效果.onClick(() => this.generateRandomNumbers()); // 点击时生成随机数}.width('650lpx') // 设置宽度.margin({ top: 20 }) // 设置上边距.backgroundColor(Color.White) // 设置背景颜色为白色.borderRadius(10) // 设置圆角半径.alignItems(HorizontalAlign.Start); // 设置水平对齐方式为左对齐// 显示生成的随机数Column() {Text(`生成的随机数为:`).fontWeight(600) // 设置字体粗细为600.fontSize(18) // 设置字体大小为18.fontColor(this.fontColor) // 设置文本颜色.margin({top: `${this.baseSpacing}lpx`, // 上边距left: `${this.baseSpacing}lpx`, // 左边距});Text(`${this.generatedNumbers}`) // 显示生成的随机数.width('650lpx') // 设置宽度.fontColor(this.primaryColor) // 设置文本颜色为主题色.fontSize(18) // 设置字体大小为18.textAlign(TextAlign.Center) // 设置文本居中对齐.padding({ left: 5, right: 5 }) // 设置内边距.margin({top: `${this.baseSpacing / 3}lpx` // 上边距});// 复制生成的随机数到剪贴板的按钮Text('复制').enabled(this.generatedNumbers ? true : false) // 按钮是否可用.fontColor(Color.White) // 设置文本颜色为白色.backgroundColor(this.primaryColor) // 设置背景颜色为主题色.height(54) // 设置高度为54.textAlign(TextAlign.Center) // 设置文本居中对齐.borderRadius(10) // 设置圆角半径.fontSize(18) // 设置字体大小为18.width(`${650 - this.baseSpacing * 2}lpx`) // 设置宽度.margin({top: `${this.baseSpacing}lpx`, // 上边距left: `${this.baseSpacing}lpx`, // 左边距right: `${this.baseSpacing}lpx`, // 右边距bottom: `${this.baseSpacing}lpx` // 下边距}).clickEffect({ level: ClickEffectLevel.HEAVY, scale: 0.8 }) // 设置点击效果.onClick(() => this.copyToClipboard(this.generatedNumbers)); // 点击时复制随机数}.width('650lpx') // 设置宽度.backgroundColor(Color.White) // 设置背景颜色为白色.borderRadius(10) // 设置圆角半径.margin({ top: `${this.baseSpacing}lpx` }) // 设置上边距.alignItems(HorizontalAlign.Start); // 设置水平对齐方式为左对齐}.height('100%') // 设置高度为100%.width('100%') // 设置宽度为100%.backgroundColor("#f2f3f5"); // 设置背景颜色}
}
相关文章:

鸿蒙NEXT开发案例:随机数生成
【引言】 本项目是一个简单的随机数生成器应用,用户可以通过设置随机数的范围和个数,并选择是否允许生成重复的随机数,来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统:W…...

nwjs崩溃复现、 nwjs-控制台手动操纵、nwjs崩溃调用栈解码、剪切板例子中、nwjs混合模式、xdotool显示nwjs所有进程窗口列表
-1. nwjs在低版本ubuntu运行情况 ubuntu16.04运行nw-v0.93或0.89报错找不到NSS_3.30、GLIBC_2.25 uname -a #Linux Asus 4.15.0-112-generic #113~16.04.1-Ubuntu SMP Fri Jul 10 04:37:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux cat /etc/issue #Ubuntu 16.04.7 LTS \n \l…...

视觉SLAM--经典视觉SLAM框架
整个视觉SLAM流程主要包括以下步骤: 1、传感器信息读取:在视觉SLAM中主要为相机图像信息的读取和预处理。 2、前端视觉里程计:估算相邻图像间相机的运动,以及局部地图的样子。 3、后端(非线性)优化&#…...

Wallpaper壁纸制作学习记录05
效果简介 效果可以应用于现有组件,主要是您导入的图像。您可以在图像图层、文本图层、全屏图层和合成图层上使用效果。要添加效果需要打开之前的项目或创建一个新的项目,然后点击右侧效果区域的添加按钮。 将鼠标悬停在效果列表是,将显示眼睛…...

Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
作者:来自 Elastic Sachin Frayne 探索 Elasticsearch 中的热点以及如何使用 AutoOps 解决它。 Elasticsearch 集群中出现热点的方式有很多种。有些我们可以控制,比如吵闹的邻居,有些我们控制得较差,比如 Elasticsearch 中的分片分…...

springboot基于微信小程序的食堂预约点餐系统
摘 要 基于微信小程序的食堂预约点餐系统是一种服务于学校和企事业单位食堂的智能化解决方案,旨在提高食堂就餐的效率、缓解排队压力,并优化用户的就餐体验。系统作为一种现代化的解决方案,为食堂管理和用户就餐提供了便捷高效的途径。它不仅…...

字符串学习篇-java
API:应用程序编程接口。 ctrlaltv,自动生成一个变量接收数据 字符串: 注意点 创建string对象两种方式 1.直接赋值 2.构造器来创建 详情看黑马JAVA入门学习笔记7-CSDN博客 常用方法:比较 引用数据类型,比较的是地址值。 b…...

2024亚太杯数学建模C题【Development Analyses and Strategies for Pet Industry 】思路详解
C:宠物行业及相关产业的发展分析与战略 随着人们消费观念的发展,宠物行业作为一个新兴产业,正在全球范围内逐渐积聚势头,这得益于快速的经济发展和人均收入的提高。1992年,中国小动物保护协会成立,随后1993…...
STM32串口——5个串口的使用方法
参考文档 STM32串口——5个串口的使用方法_51CTO博客_stm32串口通信的接收与发送 串口是我们常用的一个数据传输接口,STM32F103系列单片机共有5个串口,其中1-3是通用同步/异步串行接口USART(Universal Synchronous/Asynchronous Receiver/Transmitter)…...

NVR接入录像回放平台EasyCVR视频融合平台加油站监控应用场景与实际功能
在现代社会中,加油站作为重要的能源供应点,面临着安全监管与风险管理的双重挑战。为应对这些问题,安防监控平台EasyCVR推出了一套全面的加油站监控方案。该方案结合了智能分析网关V4的先进识别技术和EasyCVR视频监控平台的强大监控功能&#…...
Ubuntu24.04安装gpfs客户端
文章目录 Ubuntu24.04安装gpfs客户端拷贝软件包在客户端执行命令,提取产品包进入安装包目录,安装相关产品包编译。编译过程中会检查系统依赖接入集群(后续) Ubuntu24.04安装gpfs客户端 拷贝软件包 scp /root/Spectrum_Scale_Dat…...

Android Framework层介绍
文章目录 前言一、Android Framework 层概述二、主要组件1. 应用程序接口(API)2. 系统服务3. Binder4. 资源管理5. Content Provider6. 广播接收器(BroadcastReceiver)7. 服务(Service) 三、与 Linux Kerne…...

如何利用 Puppeteer 的 Evaluate 函数操作网页数据
介绍 在现代的爬虫技术中,Puppeteer 因其强大的功能和灵活性而备受青睐。Puppeteer 是一个用于控制 Chromium 或 Chrome 浏览器的 Node.js 库,提供了丰富的 API 接口,能够帮助开发者高效地处理动态网页数据。本文将重点讲解 Puppeteer 的 ev…...

SpringMVC接收请求参数
(5)请求参数》五种普通参数 1.普通参数 代码块 RequestMapping("/commonParam") ResponseBody public String commonParam(String name,int age){System.out.println("普通参数传递 name > "name);System.out.println("普通…...

安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!
在生死时速的紧急救援战场上,每一秒都至关重要!随着科技的发展,增强现实(AR)技术正在逐步渗透到医疗健康领域,改变着传统的医疗服务模式。 安宝特AR远程协助解决方案,凭借其先进的技术支持和创新…...

蓝桥杯每日真题 - 第18天
题目:(出差) 题目描述(13届 C&C B组E题) 解题思路: 问题分析 问题实质是一个带权图的最短路径问题,但路径的权重包含两个部分: 从当前城市到下一个城市的路程时间。 当前城市的…...
HTTP 协议应用场景
一、HTTP 协议简介 HTTP(Hypertext Transfer Protocol)即超文本传输协议,是用于分布式、协作式和超媒体信息系统的应用层协议,是互联网数据通信的基础。它采用客户端 - 服务器(Client-Server)的通信模式&am…...

【Linux庖丁解牛】—Linux基本指令(下)!
目录 1、grep指令 2、zip/unzip指令 3、sz/rz指令 4、tar指令 编辑 5、scp指令 6、bc指令 7、uname –r指令 8、重要的几个热键 9、关机 10、完结撒花 1、grep指令 grep是文本过滤器,其作用是在指定的文件中过滤出包含你指定字符串的内容,…...

python: generator model using sql server 2019
設計或生成好數據庫,可以生成自己設計好的框架項目 # encoding: utf-8 # 版权所有 :2024 ©涂聚文有限公司 # 许可信息查看 :言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述: : 生成实体 # Author …...

Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例
1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId><version>3.1.6</version></dependency> 2、配置application.yml 加入Kafk…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...