【2024年华为OD机试】(C卷,100分)- 字符串筛选排序 (Java JS PythonC/C++)

一、问题描述
题目描述
输入一个由N个大小写字母组成的字符串
按照ASCII码值从小到大进行排序
查找字符串中第K个最小ASCII码值的字母 (k >= 1)
输出该字母所在字符串中的位置索引 (字符串的第一个位置索引为0)
k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引
如果有重复字母则输出字母的最小位置索引
输入描述
第一行输入一个由大小写字母组成的字符串
第二行输入k,k必须大于0,k可以大于输入字符串的长度
输出描述
输出字符串中第K个最小ASCII码值的字母所在字符串的位置索引
k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引
如果第K个最小ASCII码值的字母存在重复,则输出该字母的最小位置索引
用例
用例 1
输入:
AbCdeFG
3
输出:
5
说明:
根据ASCII码值排序,第三个ASCII码值的字母为F
F在字符串中位置索引为5 (0为字符串的第一个字母位置索引)
用例 2
输入:
fAdDAkBbBq
4
输出:
6
说明:
根据ASCII码值排序前4个字母为AABB由于B重复则只取B的第一个最小位置索引6
而不是第二个B的位置索引8
题目解析
本题是简单的字符串操作题。
2023.05.20 补充了第二个用例
根据第二个用例来看,题目要找的第k个,不是去重+升序后的第k个,而只是排序后的第k个。
详细步骤
-
读取输入:
- 读取一个由大小写字母组成的字符串
s。 - 读取一个整数
k。
- 读取一个由大小写字母组成的字符串
-
创建字符索引映射:
- 创建一个字典
char_index,键为字符,值为该字符在字符串中的最小索引。 - 遍历字符串
s,记录每个字符的最小索引。
- 创建一个字典
-
排序字符:
- 将字符串
s中的字符按ASCII码值排序,得到排序后的字符列表sorted_chars。
- 将字符串
-
查找第K个字符:
- 如果
k大于字符串长度,取最大ASCII码值的字符。 - 否则,取排序后第
k个字符。
- 如果
-
输出结果:
- 输出该字符在字符串中的最小位置索引。
用例解释
用例 1
- 输入:
s = "AbCdeFG"k = 3
- 输出:
5
解释:
- 按ASCII码值排序后的字符列表:
['A', 'C', 'd', 'e', 'F', 'G', 'b'] - 第3个字符是
F,其在字符串中的位置索引为 5。
用例 2
- 输入:
s = "fAdDAkBbBq"k = 4
- 输出:
6
解释:
- 按ASCII码值排序后的字符列表:
['A', 'A', 'B', 'B', 'B', 'D', 'D', 'f', 'k', 'q'] - 第4个字符是
B,其在字符串中的最小位置索引为 6。
通过上述步骤,我们可以高效地求出第K个最小ASCII码值的字母在字符串中的位置索引。这种方法的时间复杂度为 O(n log n),其中 n 是字符串的长度。
二、JavaScript算法源码
以下是 JavaScript 代码的详细中文注释和逻辑讲解:
JavaScript 代码
/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline"); // 引入 readline 模块,用于读取控制台输入// 创建 readline 接口
const rl = readline.createInterface({input: process.stdin, // 输入流为标准输入output: process.stdout, // 输出流为标准输出
});// 存储输入行的数组
const lines = [];// 监听输入事件
rl.on("line", (line) => {lines.push(line); // 将每一行输入存入 lines 数组// 当输入行数为 2 时,表示输入完成if (lines.length === 2) {const [str, k] = lines; // 解构赋值,获取输入的两行数据// 调用算法函数并输出结果console.log(getKIndex(str, k));// 清空 lines 数组,以便处理下一组输入lines.length = 0;}
});// 算法函数:获取字符串中第 k 小的字符的索引
function getKIndex(str, k) {// 如果 k 大于字符串长度,则将 k 设置为字符串长度if (k > str.length) k = str.length;// 将字符串转换为数组,排序后获取第 k 小的字符const tar = [...str].sort()[k - 1];// 返回该字符在原字符串中的索引return str.indexOf(tar);
}
代码逻辑讲解
1. 输入处理
- 使用
readline模块读取控制台输入。 - 将每一行输入存入
lines数组。 - 当
lines数组的长度为 2 时,表示输入完成,开始处理数据。
2. 算法逻辑
- 函数
getKIndex:- 参数:
str:输入的字符串。k:表示需要查找的第k小的字符。
- 逻辑:
- 如果
k大于字符串长度,则将k设置为字符串长度(避免越界)。 - 将字符串转换为数组,并对数组进行排序。
- 获取排序后数组中第
k - 1个字符(因为数组索引从 0 开始)。 - 返回该字符在原字符串中的索引。
- 如果
- 参数:
3. 示例验证
示例 1:
- 输入:
hello 3 - 处理过程:
- 将字符串
"hello"转换为数组:['h', 'e', 'l', 'l', 'o']。 - 对数组排序:
['e', 'h', 'l', 'l', 'o']。 - 获取第 3 小的字符:
'l'。 - 返回
'l'在原字符串中的索引:2。
- 将字符串
- 输出:
2。
示例 2:
- 输入:
world 5 - 处理过程:
- 将字符串
"world"转换为数组:['w', 'o', 'r', 'l', 'd']。 - 对数组排序:
['d', 'l', 'o', 'r', 'w']。 - 获取第 5 小的字符:
'w'。 - 返回
'w'在原字符串中的索引:0。
- 将字符串
- 输出:
0。
总结
- 功能:在给定字符串
str和整数k的情况下,找到字符串中第k小的字符,并返回其索引。 - 核心逻辑:
- 将字符串转换为数组并排序。
- 获取排序后数组中第
k - 1个字符。 - 返回该字符在原字符串中的索引。
- 适用场景:需要查找字符串中第
k小的字符及其索引的场景。 - 注意事项:
- 如果
k大于字符串长度,则k会被设置为字符串长度。 - 时间复杂度为
O(n log n),其中n是字符串长度(排序操作的时间复杂度)。
- 如果
如果有其他问题,欢迎随时提问!
三、Java算法源码
以下是对代码的详细中文注释和讲解:
import java.util.Arrays; // 导入Arrays类,用于数组操作
import java.util.Scanner; // 导入Scanner类,用于从控制台读取输入public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in); // 创建Scanner对象,用于读取用户输入String str = sc.next(); // 读取用户输入的字符串int k = sc.nextInt(); // 读取用户输入的整数kSystem.out.println(getResult(str, k)); // 调用getResult方法并输出结果}public static int getResult(String str, int k) {char[] chars = str.toCharArray(); // 将字符串转换为字符数组Arrays.sort(chars); // 对字符数组进行排序,按字典序升序排列if (k > str.length()) k = str.length(); // 如果k大于字符串长度,则将k设置为字符串长度char tar = chars[k - 1]; // 获取排序后字符数组中的第k个字符(索引为k-1)return str.indexOf(tar); // 返回该字符在原字符串中的索引位置}
}
代码讲解:
-
导入类库:
import java.util.Arrays;:导入Arrays类,用于对数组进行排序等操作。import java.util.Scanner;:导入Scanner类,用于从控制台读取用户输入。
-
主方法
main:Scanner sc = new Scanner(System.in);:创建一个Scanner对象,用于读取用户输入。String str = sc.next();:读取用户输入的字符串。int k = sc.nextInt();:读取用户输入的整数k。System.out.println(getResult(str, k));:调用getResult方法,并将结果输出到控制台。
-
getResult方法:char[] chars = str.toCharArray();:将输入的字符串str转换为字符数组chars。Arrays.sort(chars);:对字符数组chars进行排序,排序后字符数组中的字符按字典序升序排列。if (k > str.length()) k = str.length();:如果输入的k大于字符串的长度,则将k设置为字符串的长度,防止数组越界。char tar = chars[k - 1];:获取排序后字符数组中的第k个字符(由于数组索引从0开始,所以是k-1)。return str.indexOf(tar);:返回该字符在原字符串str中的索引位置。
代码功能总结:
- 该程序的功能是:给定一个字符串和一个整数
k,程序会先对字符串中的字符进行排序,然后找到排序后的第k个字符,并返回该字符在原字符串中的索引位置。
示例:
假设输入字符串为"hello",k为3:
- 将字符串转换为字符数组:
['h', 'e', 'l', 'l', 'o']。 - 对字符数组进行排序:
['e', 'h', 'l', 'l', 'o']。 - 取第
3个字符(索引为2):'l'。 - 返回
'l'在原字符串"hello"中的索引位置:2。
因此,程序输出为2。
希望这个解释对您理解代码有所帮助!
四、Python算法源码
以下是对代码的详细中文注释和讲解:
# 输入获取
s = input() # 从控制台读取用户输入的字符串
k = int(input()) # 从控制台读取用户输入的整数k# 算法入口
def getResult(s, k):chars = list(s) # 将字符串s转换为字符列表chars.sort() # 对字符列表进行排序,按字典序升序排列if k > len(s): # 如果k大于字符串的长度k = len(s) # 将k设置为字符串的长度,防止越界tar = chars[k - 1] # 获取排序后字符列表中的第k个字符(索引为k-1)return s.index(tar) # 返回该字符在原字符串s中的索引位置# 调用算法
print(getResult(s, k)) # 调用getResult函数并输出结果
代码讲解:
-
输入获取:
s = input():从控制台读取用户输入的字符串,并赋值给变量s。k = int(input()):从控制台读取用户输入的整数,并赋值给变量k。
-
getResult函数:chars = list(s):将字符串s转换为字符列表chars。chars.sort():对字符列表chars进行排序,排序后字符列表中的字符按字典序升序排列。if k > len(s): k = len(s):如果输入的k大于字符串的长度,则将k设置为字符串的长度,防止索引越界。tar = chars[k - 1]:获取排序后字符列表中的第k个字符(由于列表索引从0开始,所以是k-1)。return s.index(tar):返回该字符在原字符串s中的索引位置。
-
调用算法:
print(getResult(s, k)):调用getResult函数,并将结果输出到控制台。
代码功能总结:
- 该程序的功能是:给定一个字符串和一个整数
k,程序会先对字符串中的字符进行排序,然后找到排序后的第k个字符,并返回该字符在原字符串中的索引位置。
示例:
假设输入字符串为"hello",k为3:
- 将字符串转换为字符列表:
['h', 'e', 'l', 'l', 'o']。 - 对字符列表进行排序:
['e', 'h', 'l', 'l', 'o']。 - 取第
3个字符(索引为2):'l'。 - 返回
'l'在原字符串"hello"中的索引位置:2。
因此,程序输出为2。
注意事项:
- 索引从0开始:
- Python中的列表索引从0开始,因此第
k个字符的索引是k-1。
- Python中的列表索引从0开始,因此第
- 越界处理:
- 如果
k大于字符串的长度,程序会将k设置为字符串的长度,避免索引越界。
- 如果
- 字符重复:
- 如果字符串中有重复字符,
s.index(tar)会返回第一个匹配字符的索引。
- 如果字符串中有重复字符,
希望这个解释对您理解代码有所帮助!
五、C/C++算法源码:
以下是 C语言代码 和 C++代码 的详细中文注释和讲解,并附上代码转换。
C语言代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_SIZE 10000 // 定义最大字符串长度// 比较函数,用于qsort排序
int cmp(const void* a, const void* b) {return (*(char*) a) - (*(char*) b); // 按字符的ASCII值升序排序
}int main() {char s[MAX_SIZE]; // 定义字符数组,用于存储输入的字符串gets(s); // 从控制台读取字符串(注意:gets不安全,建议使用fgets)int k;scanf("%d", &k); // 从控制台读取整数kint n = strlen(s); // 获取字符串的长度char s_cp[n + 1]; // 定义字符数组,用于存储字符串的副本strcpy(s_cp, s); // 将原字符串复制到副本中qsort(s_cp, n, sizeof(char), cmp); // 对副本字符串进行排序if (k > n) { // 如果k大于字符串长度k = n; // 将k设置为字符串长度,防止越界}char target = s_cp[k - 1]; // 获取排序后字符串的第k个字符(索引为k-1)printf("%lld\n", strchr(s, target) - s); // 输出目标字符在原字符串中的索引return 0;
}
C语言代码讲解:
-
头文件:
#include <stdio.h>:标准输入输出库,用于printf和scanf。#include <stdlib.h>:标准库,用于qsort。#include <string.h>:字符串处理库,用于strlen和strcpy。
-
宏定义:
#define MAX_SIZE 10000:定义最大字符串长度为10000。
-
比较函数
cmp:- 用于
qsort排序,按字符的ASCII值升序排列。
- 用于
-
主函数
main:char s[MAX_SIZE];:定义字符数组,用于存储输入的字符串。gets(s);:从控制台读取字符串(注意:gets不安全,建议使用fgets)。scanf("%d", &k);:从控制台读取整数k。int n = strlen(s);:获取字符串的长度。char s_cp[n + 1];:定义字符数组,用于存储字符串的副本。strcpy(s_cp, s);:将原字符串复制到副本中。qsort(s_cp, n, sizeof(char), cmp);:对副本字符串进行排序。if (k > n) { k = n; }:如果k大于字符串长度,将k设置为字符串长度。char target = s_cp[k - 1];:获取排序后字符串的第k个字符。printf("%lld\n", strchr(s, target) - s);:输出目标字符在原字符串中的索引。
C++代码
#include <iostream>
#include <algorithm> // 包含sort函数
#include <cstring> // 包含strlen和strchr函数using namespace std;int main() {char s[10000]; // 定义字符数组,用于存储输入的字符串cin.getline(s, 10000); // 从控制台读取字符串(安全的方式)int k;cin >> k; // 从控制台读取整数kint n = strlen(s); // 获取字符串的长度char s_cp[n + 1]; // 定义字符数组,用于存储字符串的副本strcpy(s_cp, s); // 将原字符串复制到副本中sort(s_cp, s_cp + n); // 对副本字符串进行排序if (k > n) { // 如果k大于字符串长度k = n; // 将k设置为字符串长度,防止越界}char target = s_cp[k - 1]; // 获取排序后字符串的第k个字符(索引为k-1)cout << (strchr(s, target) - s) << endl; // 输出目标字符在原字符串中的索引return 0;
}
C++代码讲解:
-
头文件:
#include <iostream>:输入输出流库,用于cin和cout。#include <algorithm>:算法库,用于sort函数。#include <cstring>:C风格字符串处理库,用于strlen和strchr。
-
主函数
main:char s[10000];:定义字符数组,用于存储输入的字符串。cin.getline(s, 10000);:从控制台读取字符串(安全的方式)。cin >> k;:从控制台读取整数k。int n = strlen(s);:获取字符串的长度。char s_cp[n + 1];:定义字符数组,用于存储字符串的副本。strcpy(s_cp, s);:将原字符串复制到副本中。sort(s_cp, s_cp + n);:对副本字符串进行排序。if (k > n) { k = n; }:如果k大于字符串长度,将k设置为字符串长度。char target = s_cp[k - 1];:获取排序后字符串的第k个字符。cout << (strchr(s, target) - s) << endl;:输出目标字符在原字符串中的索引。
代码功能总结:
- 该程序的功能是:给定一个字符串和一个整数
k,程序会先对字符串中的字符进行排序,然后找到排序后的第k个字符,并返回该字符在原字符串中的索引位置。
示例:
假设输入字符串为"hello",k为3:
- 将字符串转换为字符数组:
['h', 'e', 'l', 'l', 'o']。 - 对字符数组进行排序:
['e', 'h', 'l', 'l', 'o']。 - 取第
3个字符(索引为2):'l'。 - 返回
'l'在原字符串"hello"中的索引位置:2。
因此,程序输出为2。
注意事项:
- C语言中的
gets不安全:- 建议使用
fgets替代gets,例如:fgets(s, MAX_SIZE, stdin);。
- 建议使用
- C++中的
cin.getline:- 是安全的输入方式,可以避免缓冲区溢出。
- 字符重复:
- 如果字符串中有重复字符,
strchr会返回第一个匹配字符的索引。
- 如果字符串中有重复字符,
希望这个解释对您理解代码有所帮助!
相关文章:
【2024年华为OD机试】(C卷,100分)- 字符串筛选排序 (Java JS PythonC/C++)
一、问题描述 题目描述 输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母 (k > 1) 输出该字母所在字符串中的位置索引 (字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串…...
iOS - runtime总结
详细总结一下 Runtime 的核心内容: 1. 消息发送机制 // 消息发送的基本流程 id objc_msgSend(id self, SEL _cmd, ...) {// 1. 获取 isaClass cls object_getClass(self);// 2. 查找缓存IMP imp cache_getImp(cls, _cmd);if (imp) return imp(self, _cmd, ...);…...
第33 章 - ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题
思维导图 0. 前言 MySQL 与 Elasticsearch 一致性问题是老生常谈了。网上有太多关于这方面的文章了,但是千篇一律,看了跟没看没有太大区别。 在生产中,我们往往会通过 DTS 工具将 binlog 导入到 Kafka,再通过 Kafka 消费 binlog&…...
Artec Leo 3D扫描仪与Ray助力野生水生动物法医鉴定【沪敖3D】
挑战:捕获大型水生哺乳动物(如鲸鱼)的数据,搭建全彩3D模型,用于水生野生动物的法医鉴定、研究和保护工作。 解决方案:Artec Eva、Artec Space Spider、Artec Leo、Artec Ray、Artec Studio、CT scans 效果&…...
PythonQT5打包exe线程使用
打包: pyinstaller --noconsole --onefile test.py–noconsole 表示不需要打开命令行 修改:test.spec 一般项目里面需要用的资源文件,比如lib、png、exe等。 需要单独修改spec文件 pathex[.],binaries[(D:/test.png, .),(D:/simsun.ttc, .…...
【Powershell】Windows大法powershell好(二)
PowerShell基础(二) 声明:该笔记为up主 泷羽的课程笔记,本节链接指路。 警告:本教程仅作学习用途,若有用于非法行为的,概不负责。 1. powershell 执行外部命令 powershell也可以执行一些外部的…...
前端学习-环境this对象以及回调函数(二十七)
目录 前言 目标 环境对象 作用 环境对象this是什么? 判断this指向的粗略规则是什么? 回调函数 目标 常见的使用场景 综合案例:Tab任务栏切换 总结 前言 男儿何不带吴钩,收取关山五十州 目标 能够分析判断函数运行在不…...
Element-plus、Element-ui之Tree 树形控件回显Bug问题。
需求:提交时,需要把选中状态和半选中状态 的数据id提交。如图所示: 数据回显时,会出现代码如下: <template><el-tree ref"treeRef" :data"tree" show-checkbox node-key"id" …...
互联网全景消息(10)之Kafka深度剖析(中)
一、深入应用 1.1 SpringBoot集成Kafka 引入对应的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…...
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步 目录 Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动…...
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)/ x y 代码代码 1:torch.matmul(x, y)输入张量:计算逻辑:输出结果: 代码 2:y y.view(4,1)…...
PyTorch环境配置常见报错的解决办法
目标 小白在最基础的环境配置里一般都会出现许多问题。 这里把一些常见的问题分享出来。希望可以节省大家一些时间。 最终目标是可以在cmd虚拟环境里进入jupyter notebook,new的时候有对应的环境,并且可以跑通所有的import code。 第一步:…...
罗永浩再创业,这次盯上了 AI?
罗永浩,1972年7月9日生于中国延边朝鲜族自治州的一个军人家庭,是一名朝鲜族人;早年在新东方授课,2004年当选 “网络十大红人” ;2006年8月1日,罗永浩创办牛博网;2008年5月,罗永浩注册…...
VUE3 provide 和 inject,跨越多层级组件传递数据
provide 和 inject 是 Vue 3 提供的 API,主要用于实现祖先组件与后代组件之间的依赖注入。它们可以让你在组件树中,跨越多层组件传递数据,而不需要通过 props 或事件的方式逐层传递。这个机制主要用于状态共享、插件系统或某些跨层级的功能。…...
git打补丁
1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞,作者进行了修复,我们可以通过使用git补丁的方式,将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量,生成…...
机械燃油车知识图谱、知识大纲、知识结构(持续更新...)
一、发动机 曲柄连杆机构 配气机构 点火系统 起动系统 燃油供给系统 润滑系统 冷却系统 二、底盘 (一)传动系统 1、离合器 2、变速器 3、万向传动装置 4、驱动桥 (二)行驶系统 1、车架 2、车桥 3、悬架 4、车轮 &a…...
Vue3学习总结
一、Vue 3 基础搭建与核心语法 1.创建 Vue 3 应用 在项目的入口文件 main.js 中,通过以下代码创建 Vue 3 应用实例: import { createApp } from vue; import App from ./App.vue;const app createApp(App); app.mount(#app); 这几行代码的作用是引入…...
Type-C双屏显示器方案
在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…...
【读书与思考】焦虑与内耗
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 导言 今天一个朋友和我说,最近比较焦虑和内耗,无心工作和学习,我问他你焦虑内耗的时候,时间主要花在哪了,他告诉我说主要花在看有关移…...
基于python的网页表格数据下载--转excel
基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
