【美团笔试题汇总】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)关…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...