【美团笔试题汇总】2023-09-02-美团春秋招笔试题-三语言题解(CPP/Python/Java)
🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员
✨ 本系列打算持续跟新美团近期的春秋招笔试题汇总~
💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导
👏 感谢大家的订阅➕ 和 喜欢💗
📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。
**
💻听说明天上午要笔美团啦,这里给大家带来一些去年秋招的题目来练练手。
🎉 祝大家明天超常发挥,笔试AK,rp ++++++
**
文章目录
- 💻听说明天上午要笔美团啦,这里给大家带来一些去年秋招的题目来练练手。
- 🎉 祝大家明天超常发挥,笔试AK,rp `++++++`
- 01.LYA的魔法药水
- 问题描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 数据范围
- 题解
- 参考代码
- 02.K 小姐的魔法书
- 问题描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 数据范围
- 题解
- 参考代码
- 03.K小姐的蛋糕店
- 题目描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 样例解释
- 数据范围
- 题解
- 参考代码
- 04.LYA的魔法卡牌
- 问题描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 数据范围
- 题解
- 参考代码
- 05.K 小姐的珠宝搭配
- 问题描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 数据范围
- 题解
- 参考代码
- 写在最后
- 📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。
01.LYA的魔法药水
问题描述
LYA是一位魔法学徒,她正在学习制作魔法药水。一个合格的魔法药水需要满足以下两个条件:
-
药水中的材料必须按照一定的顺序排列,材料的魔力值需要严格递增。即对于相邻的两种材料,后一种材料的魔力值必须大于前一种。
-
相邻两种材料的魔力值之差也需要严格递增。即对于排序后的任意三种连续的材料,第三种与第二种材料魔力值之差必须大于第二种与第一种材料魔力值之差。
现在LYA准备了一组材料,她想知道这组材料是否可以制作出合格的魔法药水。你能帮助她吗?
输入格式
第一行包含一个正整数 n ( 1 ≤ n ≤ 1 0 5 ) n(1 \leq n \leq 10^5) n(1≤n≤105),表示材料的数量。
第二行包含 n n n 个正整数 a 1 , a 2 , … , a n ( 1 ≤ a i ≤ 1 0 9 ) a_1, a_2, \ldots, a_n(1 \leq a_i \leq 10^9) a1,a2,…,an(1≤ai≤109),表示每种材料的魔力值。
输出格式
如果这组材料可以制作合格的魔法药水,输出 "Yes",否则输出 "No"。
样例输入
5
1 3 7 13 21
样例输出
Yes
数据范围
- 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1≤n≤105
- 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1≤ai≤109
题解
本题可以通过遍历材料的魔力值数组,同时维护相邻两个材料的魔力值之差来判断是否满足题目要求。
具体步骤如下:
-
遍历材料魔力值数组,检查是否满足严格递增,如果不满足直接输出
"No"。 -
在遍历的过程中,计算相邻两个材料的魔力值之差,并用一个数组 b b b 存储。
-
遍历数组 b b b,检查是否满足严格递增,如果不满足直接输出
"No"。 -
如果遍历完成后没有出现不满足条件的情况,输出
"Yes"。
时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( n ) O(n) O(n)。
参考代码
- Python
n = int(input())
a = list(map(int, input().split()))b = [0] * (n - 1)
for i in range(1, n):if a[i] <= a[i - 1]:print("No")exit()b[i - 1] = a[i] - a[i - 1]for i in range(1, n - 1):if b[i] <= b[i - 1]:print("No")exit()print("Yes")
- Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] a = new int[n];for (int i = 0; i < n; i++) {a[i] = sc.nextInt();}int[] b = new int[n - 1];for (int i = 1; i < n; i++) {if (a[i] <= a[i - 1]) {System.out.println("No");return;}b[i - 1] = a[i] - a[i - 1];}for (int i = 1; i < n - 1; i++) {if (b[i] <= b[i - 1]) {System.out.println("No");return;}}System.out.println("Yes");}
}
- Cpp
#include <iostream>
#include <vector>using namespace std;int main() {int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}vector<int> b(n - 1);for (int i = 1; i < n; i++) {if (a[i] <= a[i - 1]) {cout << "No" << endl;return 0;}b[i - 1] = a[i] - a[i - 1];}for (int i = 1; i < n - 1; i++) {if (b[i] <= b[i - 1]) {cout << "No" << endl;return 0;}}cout << "Yes" << endl;return 0;
}
02.K 小姐的魔法书
问题描述
K 小姐是一位热爱收藏古籍的魔法师。她拥有 n n n 本魔法书,每本书都有 m m m 页。
这些魔法书中蕴藏着强大的魔力,每一页都记载着神秘的魔法符号。K 小姐相信,如果从每本书中选取一个符号,并按照从上到下的顺序将它们组合成一个新的咒语,就能够释放出非凡的魔力。
现在,K 小姐想知道能否从这些符号中找到一个 "lyasuki" 的咒语。
输入格式
第一行包含两个整数 n n n 和 m m m ( 1 ≤ n , m ≤ 1000 ) (1 \leq n, m \leq 1000) (1≤n,m≤1000),分别表示魔法书的数量和每本书的页数。
接下来 n n n 行,每行一个长度为 m m m 的字符串,表示从上到下每本魔法书的符号。
输出格式
如果能够找到 "lyasuki" 的咒语,则输出 "Yes",否则输出 "No"。
样例输入
7 4
lkjh
yqrs
airt
yszx
uvmw
noky
abki
样例输出
Yes
数据范围
- 1 ≤ n , m ≤ 1000 1 \leq n, m \leq 1000 1≤n,m≤1000
题解
本题可以使用贪心的思想来解决。我们可以按照 "lyasuki" 中字符的顺序,从上到下遍历每一本魔法书,看是否能找到对应的字符。
具体做法如下:
- 将
"lyasuki"转换为字符数组index。 - 从上到下遍历每本魔法书,用指针
l表示当前需要匹配的字符在index中的位置,用指针r表示当前遍历到的魔法书的编号。 - 如果当前魔法书包含
index[l]字符,则l和r都向后移动一位。 - 如果当前魔法书不包含
index[l]字符,则只将r向后移动一位。 - 重复步骤 3 和 4,直到
l到达index的末尾或r到达最后一本魔法书。 - 如果
l到达了index的末尾,说明找到了"lyasuki"咒语,输出"Yes",否则输出"No"。
时间复杂度 O ( n m ) O(nm) O(nm),空间复杂度 O ( n ) O(n) O(n)。
参考代码
- Python
n, m = map(int, input().split())
index = list("lyasuki")
books = [input() for _ in range(n)]l = r = 0
while l < len(index) and r < n:if index[l] in books[r]:l += 1r += 1print("Yes" if l == len(index) else "No")
- Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(), m = sc.nextInt();char[] idx = "lyasuki".toCharArray();sc.nextLine();String[] books = new String[n];for (int i = 0; i < n; i++) {books[i] = sc.nextLine();}int l = 0, r = 0;while (l < idx.length && r < n) {if (books[r].indexOf(idx[l]) != -1) {l++;}r++;}System.out.println(l == idx.length ? "Yes" : "No");}
}
- Cpp
#include <iostream>
#include <string>
using namespace std;int main() {int n, m;cin >> n >> m;string idx = "lyasuki";string books[1005];for (int i = 0; i < n; i++) {cin >> books[i];}int l = 0, r = 0;while (l < idx.size() && r < n) {if (books[r].find(idx[l]) != string::npos) {l++;}r++;}cout << (l == idx.size() ? "Yes" : "No") << endl;return 0;
}
03.K小姐的蛋糕店
题目描述
K小姐开了一家蛋糕店,店里有 n n n 种不同口味的蛋糕。每种蛋糕都有一个美味度,第 i i i 种蛋糕的美味度为 a i a_i ai。
K小姐想要通过一些操作,使得第一种蛋糕的美味度 a 1 a_1 a1 成为所有蛋糕中最高的。她可以进行以下两种操作:
- 将 a 1 a_1 a1 的美味度乘以 2 2 2。
- 选择一种蛋糕 i ( 2 ≤ i ≤ n ) i(2\leq i \leq n) i(2≤i≤n),将其美味度 a i a_i ai 变成 ⌊ a i 2 ⌋ \lfloor\frac{a_i}{2}\rfloor ⌊2ai⌋。
现在K小姐想知道,最少需要多少次操作,才能使得第一种蛋糕的美味度成为最高。
输入格式
第一行输入一个正整数 n ( 1 ≤ n ≤ 1 0 5 ) n(1\leq n\leq 10^5) n(1≤n≤105),表示蛋糕的种类数。
第二行输入 n n n 个正整数,第 i i i 个数为 a i ( 1 ≤ a i ≤ 1 0 9 ) a_i(1\leq a_i\leq 10^9) ai(1≤ai≤109),表示第 i i i 种蛋糕的美味度。
输出格式
输出一个整数,表示最少需要的操作次数。
样例输入
6
1 1 4 4 1 4
样例输出
2
样例解释
将第一种蛋糕的美味度连续乘 2 2 2 两次,就可以使其美味度达到 4 4 4,成为所有蛋糕中最高的。
数据范围
- 1 ≤ n ≤ 1 0 5 1\leq n\leq 10^5 1≤n≤105
- 1 ≤ a i ≤ 1 0 9 1\leq a_i\leq 10^9 1≤ai≤109
题解
本题可以用贪心的思想来解决。首先统计出有多少种蛋糕的美味度高于第一种蛋糕,记为 c n t cnt cnt。然后进行如下操作:
- 如果 c n t ≥ 2 cnt\geq 2 cnt≥2,就将第一种蛋糕的美味度乘以 2 2 2,同时更新 c n t cnt cnt 的值。
- 如果 c n t = 1 cnt=1 cnt=1,就将唯一比第一种蛋糕美味度高的那种蛋糕的美味度除以 2 2 2,同时更新 c n t cnt cnt 的值。
重复上述操作,直到 c n t = 0 cnt=0 cnt=0,此时第一种蛋糕的美味度就成为了最高。
总操作次数即为最少需要的操作次数。
时间复杂度为 O ( n log M ) O(n\log M) O(nlogM),其中 M = max { a i } M=\max\{a_i\} M=max{ai}。空间复杂度为 O ( n ) O(n) O(n)。
参考代码
- Python
n = int(input())
a = list(map(int, input().split()))a1 = a[0]
cnt = sum(ai > a1 for ai in a[1:])
ops = 0while cnt > 0:if cnt >= 2:a1 *= 2cnt = sum(ai > a1 for ai in a[1:]) else:for i in range(1, n):if a[i] > a1:a[i] //= 2if a[i] <= a1:cnt -= 1breakops += 1print(ops)
- Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] a = new int[n];for (int i = 0; i < n; i++) {a[i] = sc.nextInt();}int a1 = a[0];int cnt = 0;for (int i = 1; i < n; i++) {if (a[i] > a1) {cnt++;}}int ops = 0;while (cnt > 0) {if (cnt >= 2) {a1 *= 2;cnt = 0;for (int i = 1; i < n; i++) {if (a[i] > a1) {cnt++;}}} else {for (int i = 1; i < n; i++) {if (a[i] > a1) {a[i] /= 2;if (a[i] <= a1) {cnt--;}break;}}}ops++;}System.out.println(ops);}
}
- Cpp
#include <iostream>
#include <vector>
using namespace std;int main() {int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}int a1 = a[0];int cnt = 0;for (int i = 1; i < n; i++) {if (a[i] > a1) {cnt++;}}int ops = 0;while (cnt > 0) {if (cnt >= 2) {a1 *= 2;cnt = 0;for (int i = 1; i < n; i++) {if (a[i] > a1) {cnt++;}}} else {for (int i = 1; i < n; i++) {if (a[i] > a1) {a[i] /= 2;if (a[i] <= a1) {cnt--;}break;}}}ops++;}cout << ops << endl;return 0;
}
04.LYA的魔法卡牌
问题描述
LYA是一名魔法学徒,她有一套由 n n n 张卡牌组成的魔法卡牌。每张卡牌上都有一个魔力值 a i ( 1 ≤ a i ≤ 1 0 9 ) a_i(1 \leq a_i \leq 10^9) ai(1≤ai≤109)。
现在,LYA需要从这套卡牌中移除恰好 k k k 张卡牌,使得剩下的卡牌满足以下条件:对于任意两张卡牌,它们的魔力值要么互为倍数,要么其中一张卡牌的魔力值是另一张的倍数。特别地,如果移除后卡牌数量为 1 1 1 或 0 0 0,也视为满足条件。
LYA想知道,一共有多少种不同的移除方案呢?
输入格式
第一行包含两个整数 n n n 和 k ( 1 ≤ k ≤ n ≤ 1 0 3 ) k(1 \leq k \leq n \leq 10^3) k(1≤k≤n≤103),分别表示初始卡牌数量和需要移除的卡牌数量。
第二行包含 n n n 个整数,第 i i i 个整数表示第 i i i 张卡牌的魔力值 a i ( 1 ≤ a i ≤ 1 0 9 ) a_i(1 \leq a_i \leq 10^9) ai(1≤ai≤109)。
数据保证初始卡牌的魔力值两两不同。
输出格式
输出一个整数,表示不同的移除方案数。
样例输入
3 1
1 2 4
样例输出
3
数据范围
- 1 ≤ k ≤ n ≤ 1 0 3 1 \leq k \leq n \leq 10^3 1≤k≤n≤103
- 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1≤ai≤109
- 初始卡牌的魔力值两两不同
题解
本题可以使用动态规划求解。令 d p [ i ] [ j ] dp[i][j] dp[i][j] 表示考虑前 i i i 张卡牌,保留 j j j 张卡牌的方案数。
首先,我们对卡牌按照魔力值从小到大排序。然后,我们可以得到以下状态转移方程:
- 对于第一张卡牌,只有一种方案,即 d p [ 1 ] [ 1 ] = 1 dp[1][1] = 1 dp[1][1]=1。
- 对于第 i i i 张卡牌,如果我们不保留它,则方案数等于不考虑第 i i i 张卡牌时的方案数,即 d p [ i ] [ j ] = d p [ i − 1 ] [ j ] dp[i][j] = dp[i-1][j] dp[i][j]=dp[i−1][j]。
- 如果我们保留第 i i i 张卡牌,则需要枚举第 i i i 张卡牌之前的所有卡牌,如果它们的魔力值是第 i i i 张卡牌魔力值的因数,则可以转移状态,即 d p [ i ] [ j ] + = d p [ k ] [ j − 1 ] dp[i][j] += dp[k][j-1] dp[i][j]+=dp[k][j−1],其中 a [ i ] a[i] a[i] 是 a [ k ] a[k] a[k] 的倍数。
最后,我们将所有 d p [ i ] [ n − k ] dp[i][n-k] dp[i][n−k] 的值求和即可得到答案。
时间复杂度为 O ( n 3 ) O(n^3) O(n3),空间复杂度为 O ( n 2 ) O(n^2) O(n2)。
参考代码
- Python
n, k = map(int, input().split())
a = list(map(int, input().split()))if n == k:print(1)exit()a.sort()
m = n - k
dp = [[0] * (m + 1) for _ in range(n + 1)]for i in range(1, n + 1):dp[i][1] = 1for i in range(1, n + 1):for j in range(1, i):if a[i - 1] % a[j - 1] == 0:for l in range(1, min(m, i) + 1):dp[i][l] += dp[j][l - 1]ans = 0
for i in range(1, n + 1):ans += dp[i][m]print(ans)
- Java
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int k = sc.nextInt();int[] a = new int[n];for (int i = 0; i < n; i++) {a[i] = sc.nextInt();}if (n == k) {System.out.println(1);return;}Arrays.sort(a);int m = n - k;long[][] dp = new long[n + 1][m + 1];for (int i = 1; i <= n; i++) {dp[i][1] = 1;}for (int i = 1; i <= n; i++) {for (int j = 1; j < i; j++) {if (a[i - 1] % a[j - 1] == 0) {for (int l = 1; l <= Math.min(m, i); l++) {dp[i][l] += dp[j][l - 1];}}}}long ans = 0;for (int i = 1; i <= n; i++) {ans += dp[i][m];}System.out.println(ans);}
}
- Cpp
#include <iostream>
#include <algorithm>
#include <vector>using namespace std;int main() {int n, k;cin >> n >> k;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}if (n == k) {cout << 1 << endl;return 0;}sort(a.begin(), a.end());int m = n - k;vector<vector<long long>> dp(n + 1, vector<long long>(m + 1));for (int i = 1; i <= n; i++) {dp[i][1] = 1;}for (int i = 1; i <= n; i++) {for (int j = 1; j < i; j++) {if (a[i - 1] % a[j - 1] == 0) {for (int l = 1; l <= min(m, i); l++) {dp[i][l] += dp[j][l - 1];}}}}long long ans = 0;for (int i = 1; i <= n; i++) {ans += dp[i][m];}cout << ans << endl;return 0;
}
05.K 小姐的珠宝搭配
问题描述
K 小姐是一位珠宝设计师,她有 n n n 颗宝石。现在,她想把这些宝石两两配对,设计出独特的珠宝首饰。
为了让珠宝更加美观,K 小姐规定,在每一对宝石 ( a , b ) (a,b) (a,b) 中,第一颗宝石的大小 a a a 必须小于等于第二颗宝石的大小 b b b。
现在,K 小姐想知道,在满足上述条件的情况下,她最多能设计出多少种不同的宝石搭配方案。
注意, ( a , b ) (a,b) (a,b) 和 ( b , a ) (b,a) (b,a) 被视为同一种搭配方案。
输入格式
第一行包含一个整数 n n n ( 1 ≤ n ≤ 1 0 5 ) (1 \leq n \leq 10^5) (1≤n≤105),表示宝石的数量。
第二行包含 n n n 个整数,第 i i i 个整数 a i a_i ai ( 1 ≤ a i ≤ 1 0 9 ) (1 \leq a_i \leq 10^9) (1≤ai≤109) 表示第 i i i 颗宝石的大小。
输出格式
输出一个整数,表示最多能设计出的不同宝石搭配方案数。
样例输入
8
1 1 2 2 2 2 3 3
样例输出
4
数据范围
- 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1≤n≤105
- 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1≤ai≤109
题解
本题可以使用贪心的思想来解决。我们可以先将宝石按照大小进行排序,然后统计每种大小的宝石的数量。
接下来,我们按照宝石数量从多到少的顺序进行配对。对于数量最多的宝石,我们优先与其他种类的宝石进行配对。如果配对完所有其他种类的宝石后,该种宝石还有剩余,则再将剩余的宝石两两配对。
具体步骤如下:
- 将宝石按照大小进行排序。
- 使用字典
dict_统计每种大小的宝石的数量。 - 将字典转换为列表
a_,其中每个元素为 ( s i z e , c o u n t ) (size, count) (size,count) 的元组,表示宝石的大小和数量。 - 将列表
a_按照宝石数量从多到少进行排序。 - 遍历列表
a_,对于每种宝石:- 从下一种宝石开始,依次与其配对,直到当前宝石数量为 0 0 0 或者遍历完所有其他种类的宝石。
- 如果当前宝石还有剩余,则将剩余的宝石两两配对。
- 输出配对的总数。
时间复杂度为 O ( n log n ) O(n \log n) O(nlogn),空间复杂度为 O ( n ) O(n) O(n)。
参考代码
- Python
n = int(input())
a = list(map(int, input().split()))
a.sort()count = {}
for x in a:count[x] = count.get(x, 0) + 1pairs = [(size, cnt) for size, cnt in count.items()]
pairs.sort(key=lambda x: x[1], reverse=True)res = 0
for i in range(len(pairs) - 1):while count[pairs[i][0]] > 0:j = i + 1while j < len(pairs) and count[pairs[j][0]] > 0:count[pairs[i][0]] -= 1count[pairs[j][0]] -= 1res += 1j += 1if count[pairs[i][0]] >= 2:count[pairs[i][0]] -= 2res += 1print(res)
- Java
import java.io.*;
import java.util.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int n = Integer.parseInt(br.readLine());int[] a = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();Arrays.sort(a);Map<Integer, Integer> count = new HashMap<>();for (int x : a) {count.put(x, count.getOrDefault(x, 0) + 1);}List<int[]> pairs = new ArrayList<>();for (int size : count.keySet()) {pairs.add(new int[]{size, count.get(size)});}pairs.sort((p1, p2) -> p2[1] - p1[1]);int res = 0;for (int i = 0; i < pairs.size() - 1; i++) {while (count.get(pairs.get(i)[0]) > 0) {int j = i + 1;while (j < pairs.size() && count.get(pairs.get(j)[0]) > 0) {count.put(pairs.get(i)[0], count.get(pairs.get(i)[0]) - 1);count.put(pairs.get(j)[0], count.get(pairs.get(j)[0]) - 1);res++;j++;}if (count.get(pairs.get(i)[0]) >= 2) {count.put(pairs.get(i)[0], count.get(pairs.get(i)[0]) - 2);res++;}}}System.out.println(res);}
}
- Cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;int main() {int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}sort(a.begin(), a.end());unordered_map<int, int> count;for (int x : a) {count[x]++;}vector<pair<int, int>> pairs;for (auto p : count) {pairs.emplace_back(p.first, p.second);}sort(pairs.begin(), pairs.end(), [](const auto& p1, const auto& p2) {return p1.second > p2.second;});int res = 0;for (int i = 0; i < pairs.size() - 1; i++) {while (count[pairs[i].first] > 0) {int j = i + 1;while (j < pairs.size() && count[pairs[j].first] > 0) {count[pairs[i].first]--;count[pairs[j].first]--;res++;j++;}if (count[pairs[i].first] >= 2) {count[pairs[i].first] -= 2;res++;}}}cout << res << endl;return 0;
}
写在最后
📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。

相关文章:
【美团笔试题汇总】2023-09-02-美团春秋招笔试题-三语言题解(CPP/Python/Java)
🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新美团近期的春秋招笔试题汇总~ 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢…...
小黑逆向爬虫探索与成长之路:小黑独立破解毛毛租数据加密与解密
前言 有道和招标网的加密入口定位在前面两期做了详细的介绍,本小结将通过简单的关键词搜索定位到加密与解密入口 数据接口寻找与请求 根据响应数据长度,确定数据接口,发现传入的参数需要加密,响应的结果需要解密,后…...
深入浅出 -- 系统架构之微服务架构常见的六种设计模式
面向服务的架构(SOA) 面向服务的架构(SOA)是一种设计方法,也是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的…...
SSM框架学习——SqlSession以及Spring与MyBatis整合
SqlSession以及Spring与MyBatis整合 准备所需要的JAR包 要实现MyBatis与Spring的整合,很明显需要这两个框架的JAR包,但是只是使用这两个框架中所提供的JAR包是不够的,还需要配合其他包使用: Spring的JAR包MyBatis的JAR包Spring…...
6、【单例模式】确保了一个类在程序运行期间只有一个实例
你好,我是程序员雪球 在软件设计中,单例模式是一种常见的设计模式。它确保了一个类在程序运行期间只有一个实例,并提供了全局访问该实例的方式。单例模式在许多场景中都有广泛的应用,例如共享资源管理、数据库连接、日志记录器等…...
vuex插件实现数据共享
vuex插件 vuex是管理多个vue通用的数据的插件.(状态管理工具,状态是数据) 我们对于多个vue文件之间的共同数据,是用props传递,或者对于一个vue实例对象,进行绑定,传参,也是多次传参,多个文件之间,比较麻烦. 但是我们vuex会创建一个公共对象,从这个公共对象上赋值,比较简单易…...
【吊打面试官系列】Redis篇 - 使用过 Redis 分布式锁么,它是什么回事?
大家好,我是锋哥。今天分享关于 【使用过 Redis 分布式锁么,它是什么回事?】面试题,希望对大家有帮助; 使用过 Redis 分布式锁么,它是什么回事? 先拿 setnx 来争抢锁,抢到之后&#…...
DashOJ-8.奇偶统计
题目链接: 题目详情 - 奇偶统计 - DashOJ 思路: (while循环加if分支语句) 巧用死循环 while(1) 然后在里面第一句就判断输入的数字是否等于0 if(x0) ,如果 等于0就直接break跳出循环 或者用 while(cin>>x) 代…...
车源宝微信小程序源码
源码介绍 车源宝微信小程序源码 images — 存放项目图片文件 pages — 存放项目页面相关文件 store — 存放数据接口文件 utils — 存放时间格式化等文件 演示截图 源码下载 https://download.csdn.net/download/huayula/89082980...
“双碳”目标下资源环境中的可计算一般均衡(CGE)模型应用
我国政府承诺在2030年实现“碳达峰”,2060年实现“碳中和”,这就是“双碳”目标。为了实现这一目标就必须应用各种二氧化碳排放量很高技术的替代技术,不仅需要考虑技术上的可靠性,也需要考虑经济上的可行性。可计算一般均衡模型&a…...
在 Git Bash 中调整字体大小,可以按照以下步骤进行操作,注意这里是linux虚拟机,命令都是Linux方式的
在 Git Bash 中调整字体大小,可以按照以下步骤进行操作: 打开 Git Bash 终端。 在终端中,点击顶部菜单栏的 "Options"(选项)。 在弹出的下拉菜单中,选择“text”文本 右侧font那里…...
STM32之HAL开发——不同系列SPI功能对比(附STM32Cube配置)
不同系列STM32——SPI框图 F1系列框图 F4系列框图 TI模式时序图特性 F7系列框图 H7系列框图 注意:F7系列以及H7系列支持Quad-SPI模式,可以连接单,双或者四条数据线的Flash存储介质。 SPI——Cube配置流程 RCC时钟源配置 SYS系统调试模式配…...
Codeforces Round 836 (Div. 2) D. Range = √Sum
题目 思路: #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5; c…...
阿里云python-SDK配置
OSS管理控制台 (aliyun.com) SDK地址 GitHub - aliyun/aliyun-oss-python-sdk: Aliyun OSS SDK for Python 下载文件并运行 python setup.py install oss2包配置完成。 上传、下载开发文档: Python SDK快速入门_对象存储(OSS)-阿里云帮助中心 (aliyun.com)...
深入理解MP4视频文件裁剪原理[下下]
深入理解MP4视频文件裁剪原理[上] 深入理解MP4视频文件裁剪原理[中] 深入理解MP4视频文件裁剪原理[下] 深入理解MP4视频文件裁剪原理[下下] 3.22 stco box* stco box记录了每个chunk在MP4文件中的偏移量。如下图24: 图24 这里的offset指的是chunk的起始位置相对于整个MP4文…...
Java中copy 一个list,不用BeanUtils.copyProperties
1.List不起作用(单个对象拷贝有用,list没有用) cn.hutool.core.bean.BeanUtils.copyProperties(a, b); org.springframework.beans.BeanUtils.copyProperties(a, b); 2.有效(使用JSONObject 先转成字符串再转成List对象&#x…...
Vue3中props和emits的使用总结
Vue3中props和emits的使用介绍 1,看代码1.1,App.vue1.2,TodoItem.vue 2,总结2.1 props2.2 emits 1,看代码 1.1,App.vue <script setup> import { ref,reactive } from vue import TodoItem from ./…...
HUAWEI 华为交换机 配置 Eth-Trunk 接口流量本地优先转发示例(堆叠)
组网需求 说明 S5720I-10X-PWH-SI-AC 和 S5720I-6X-PWH-SI-AC 不支持此配置。 如 图 3-23 所示,为了增加设备的容量采用设备堆叠技术,将 Switch3 和 Switch4通过专用的堆叠电缆链接起来,对外呈现为一台逻辑交换机。为了实现设备间的备份、…...
MySQL 优化及故障排查
目录 一、mysql 前置知识点 二、MySQL 单实例常见故障 故障一 故障二 故障三 故障四 故障五 故障六 故障七 故障八 三、MySQL 主从故障排查 故障一 故障二 故障三 四、MySQL 优化 1.硬件方面 (1)关于 CPU (2)关…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
