【美团笔试题汇总】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)关…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
