蓝桥杯(Java)(ing)
Java前置知识
输入流:
(在Java面向对象编程-CSDN博客里面有提过相关知识------IO流)
// 快读快写
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
// 常见读入
static Scanner sc = new Scanner(System.in);
Scanner:
基本类型和字符串的读取方法
- next():查找并返回下一个完整标记(token),即下一个由分隔符界定的字符串。
- nextLine():返回当前行的剩余部分,并移动到下一行。注意,nextLine() 在使用其他 nextXxx() 方法后可能需要单独处理换行符的问题。
- nextInt():扫描下一个整数作为 int 类型。
- nextLong():扫描下一个整数作为 long 类型。
- nextDouble():扫描下一个浮点数作为 double 类型。
- nextFloat():扫描下一个浮点数作为 float 类型。
- nextByte():扫描下一个字节值作为 byte 类型。
- nextShort():扫描下一个短整数值作为 short 类型。
- nextBoolean():扫描下一个布尔值作为 boolean 类型。
- nextBigInteger() 和 nextBigDecimal():分别扫描下一个大整数或大浮点数。
检查下一个元素是否存在的方法
- hasNext():如果输入有另一个标记,则返回 true。
- hasNextLine():如果有另一行输入,则返回 true。
- hasNextInt()、hasNextLong()、hasNextDouble() 等等:检查下一个标记是否为指定类型的值。
设置和获取分隔符
- useDelimiter(String pattern) 或 useDelimiter(Pattern pattern):设置此扫描器用于划分标记的分隔符模式。
- delimiter():返回此扫描器当前的分隔符模式。
其他有用的方法
- close():关闭此扫描器。如果这个扫描器已经关闭,则调用此方法将不起作用。
- reset():重置此扫描器,使其丢弃所有局部状态并恢复到其初始状态。
- findWithinHorizon(Pattern pattern, int horizon):尝试找到与给定模式匹配的输入子序列。
- skip(Pattern pattern):跳过输入中的所有输入,直到遇到与给定模式匹配的内容为止。
注意事项
当使用 nextXXX() 方法(如 nextInt()、nextDouble() 等)读取基本类型数据后,如果接下来想用 nextLine() 读取一整行输入,应该先调用一次 nextLine() 来消耗掉之前的换行符。否则,nextLine() 可能会立即返回一个空字符串。
使用完 Scanner 后应当调用 close() 方法以释放资源,尤其是在读取文件时。
BufferedWriter
- 缓冲写入:BufferedWriter 可以显著减少磁盘I/O次数,从而提高写入速度。
- 自动换行:newLine() 方法可以根据当前平台添加正确的换行符。
- 批量刷新:使用 flush() 方法确保所有缓冲的数据都被写入目标输出流。
BufferedReader
- 按行读取:BufferedReader 的 readLine() 方法可以高效地读取整行文本。
- 字符数组读取:如果需要逐字符处理,可以使用 read(char[] cbuf, int off, int len) 方法批量读取字符到一个字符数组中。
注意事项:
在读取多个值时,通常会先读取一行,然后用空格分割字符串,再转换为相应的类型。
使用 trim() 方法去除多余的空白字符,特别是换行符,这在读取整数或浮点数时非常重要。
二维字符数组读取:
在Java中读取二维字符数组,通常是通过读取每一行的字符串,然后将这些字符串转换为字符数组,并将其分配给二维字符数组的相应行。
for (int i = 0; i < 4; i ++) {String t = sc.nextLine();g[i] = t.toCharArray();}
递归和递推
指数型枚举
题目简述:从1~n中选取任意个数字,升序排列
解题思路:
对于每一个数字都有两种选择,选或者不选,从根节点开始搜索(空节点,什么都不选),可以类似于看作为有n位数字位,你往下搜索的过程中,你都可以选择向这个空位是否填数字,当你做完最后一个选择时(对第n个数进行选择之后),就可以递归回溯了,整个搜索的过程可以画出一个递归搜索树,如下图
import java.util.Scanner;public class Main{private static final int N = 20;private static int n;private static boolean[] st = new boolean[N];public static void dfs(int u) {if (u == n + 1){for (int i = 1; i <= n; i ++)if (st[i])System.out.printf("%d ", i);System.out.println();return; // 回溯}// 选当前数字st[u] = true;dfs(u + 1);// 不选当前数字st[u] = false;dfs(u + 1);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();dfs(1);sc.close();}
}
排列型枚举
题目简述:将1~n进行排列组合
题目思路:考虑每一位可以填哪几个数,用过的数字需要标记
补充:
输入输出流
InputStream/OutputStream 类:
InputStream.read(): 读取一个字节。
OutputStream.write(byte b): 写入一个字节。
BufferedReader/BufferedWriter 类:
BufferedReader.readLine(): 读取一行。
BufferedWriter.write(String str): 写入字符串。
import java.util.Scanner;
import java.io.*;public class Main {private static final int N = 15;private static int n;private static boolean[] st = new boolean[N];private static int[] path = new int[N];private static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));private static void dfs(int u) throws IOException{// 递归出口if (u == n) {for (int i = 0; i < n; i ++)out.write(path[i] + " ");out.write("\n"); return; // 回溯}// 向第u位填数for (int i = 1; i <= n; i ++) {if (!st[i]) {path[u] = i; // 第u位填上ist[i] = true; // 代表在当前分支上 i已经被用过了dfs(u + 1); // 填下一位st[i] = false; // 恢复现场,回溯过程}}}public static void main(String[] args) throws IOException{Scanner sc = new Scanner(System.in);n = sc.nextInt();dfs(0);out.flush();out.close();}
}
简单递推
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();if (n == 0) System.out.println(0);else if (n == 1) System.out.println("0");else if (n == 2) System.out.println("0 1");else {int a = 0, b = 1, c = 0;System.out.printf("0 1");for (int i = 3; i <= n; i ++) {c = a + b;System.out.printf(" %d", c);a = b;b = c;}}}
}
费解的开关
解析:
每一盏灯都有两种选择 : 按或者不按。
通过递推发现规律:
1. 当第一行的操作方案确定时,剩余行的操作方案也确定了
2.前一行的状态影响下一行的操作
举例:
假设第一行选择某一种方案进行操作后的状态如图所示:
第一行的状态决定了第二行的操作(要使得第一行灯灭的格子变亮,就必须对该格子下方的方格进行操作):
操作完成后第一行的格子全亮
以此类推......
思路:
1.枚举第一行格子的每一种操作方案:使用二进制表示操作方式,1表示按,0表示不按
2.枚举前四行的状态,操作下一行,使得前四行的格子全亮
3.判断最后一行格子是否全亮
题目:
你玩过“拉灯”游戏吗?
25盏灯排成一个 5×5 的方形。
每一个灯都有一个开关,游戏者可以改变它的状态。
每一步,游戏者可以改变某一个灯的状态。
游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。
我们用数字 1 表示一盏开着的灯,用数字 0 表示关着的灯。
给定一些游戏的初始状态,编写程序判断游戏者是否可能在 6 步以内使所有的灯都变亮。
输入格式
第一行输入正整数 n,代表数据中共有 n 个待解决的游戏初始状态。
以下若干行数据分为 n组,每组数据有 5 行,每行 5 个字符。
每组数据描述了一个游戏的初始状态。
各组数据间用一个空行分隔。
输出格式
一共输出 n 行数据,每行有一个小于等于 6 的整数,它表示对于输入数据中对应的游戏状态最少需要几步才能使所有灯变亮。
对于某一个游戏初始状态,若 6 步以内无法使所有灯变亮,则输出 −1。
数据范围
0<n≤500
输入样例:
3 00111 01011 10001 11010 1110011101 11101 11110 11111 1111101111 11111 11111 11111 11111
输出样例:
3 2 -1
import java.io.*;
import java.util.Scanner;public class Main {static int n;static final int N = 510;static char[][] c = new char[N][N];static int[][] g = new int[N][N];static int[][] backup = new int[N][N];static int[] dx = {0, 1, 0, -1, 0};static int[] dy = {0, 0, 1, 0, -1}; // 改变上下左右四个灯的状态private static void turn(int x, int y){for (int i = 0; i < 5; i ++){int a = x + dx[i], b = y + dy[i];if (a >= 1 && a <= 5 && b >= 1 && b <= 5){if (g[a][b] == 0) g[a][b] = 1;else g[a][b] = 0;}}}// 当前状态的最小步数private static int bfs(int[][] g) {int cnt = 0;for (int i = 1; i <= 4; i ++){for (int j = 1; j <= 5; j ++){if (g[i][j] == 0) {turn(i + 1, j);cnt ++;}}}for (int i = 1; i <= 5; i ++)if (g[5][i] == 0)return -1;return cnt;}// 将g数组重置private static void AmemcpyB(){for (int i = 1; i <= 5; i ++){for (int j = 1; j <= 5; j ++){g[i][j] = backup[i][j];}}}public static void main(String[] args) throws IOException{Scanner sc = new Scanner(System.in);n = sc.nextInt();while (true){if (n == 0) break;if (n >= 1)sc.nextLine();for (int i = 1; i <= 5; i ++){String str;str = sc.nextLine();c[i] = str.toCharArray();}for (int i = 1; i <= 5; i ++){for (int j = 1; j <= 5; j ++){g[i][j] = c[i][j - 1] - '0';backup[i][j] = g[i][j];}}int ans = 10; // 最终步数for (int op = 0; op < (1 << 5); op ++){AmemcpyB();int res = 0;for (int i = 0; i < 5; i ++){if ((op >> i & 1) == 1){turn(1, i + 1);res ++;}}int x = bfs(g);if (x != -1){res += x;ans = Integer.min(ans, res);}}if (ans > 6) ans = -1;System.out.println(ans);n --;}}
}
组合型枚举
AcWing 93. 递归实现组合型枚举
输入样例:
5 3
输出样例:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
import java.util.Scanner;public class Main {static final int N = 50;static int n, m;static boolean[] st = new boolean[N];static int[] path = new int[N];private static void dfs(int u, int last) {if (m - u > n - last) return;if (u == m + 1) {for (int i = 1; i <= m; i ++)System.out.printf("%d ", path[i]);System.out.println();return;}for (int i = last; i <= n; i ++) {if (!st[i]) {path[u] = i;st[i] = true;dfs(u + 1, i);st[i] = false;}}}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);n = scanner.nextInt();m = scanner.nextInt();dfs(1, 1);scanner.close();}
}
带分数
解析: n = a + b / c
经过变形得:b = nc - ac
import java.util.Scanner;public class Main {static final int N = 15;static int n;static boolean[] st = new boolean[N]; // 标记用过的数字static boolean[] backup = new boolean[N];static int res = 0;// n = a + b / c// b = nc - ac// 枚举a的全排列: u表示当前用掉的位数,a表示当前啊的值private static boolean check(int a, int c) {long b = (long)n * c - (long)a * c;if (a == 0 || b == 0 || c == 0) return false;System.arraycopy(st, 0, backup, 0, N);while (b > 0) {int x = (int)(b % 10);b /= 10;if (x == 0 || backup[x]) return false;backup[x] = true;}for (int i = 1; i <= 9; i ++) {if (!backup[i]) return false;}return true;}private static void dfs_c(int u, int a, int c) {if (u == 9) return; // 用完了if (check(a, c)) res ++;for (int i = 1; i <= 9; i ++) {if (!st[i]) {st[i] = true;dfs_c(u + 1, a, c * 10 + i);st[i] = false;}}}private static void dfs_a(int u, int a) {if (u == 9) return; // 全部用光了if (a != 0) dfs_c(u, a, 0); // 枚举可填的数for(int i = 1; i <= 9; i ++) {if (!st[i]) {st[i] = true; // 表示当前这个数字已用dfs_a(u + 1, a * 10 + i);st[i] = false; // 恢复现场}}}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);n = scanner.nextInt();dfs_a(0, 0);System.out.println(res);}
}
飞行员兄弟
输入样例:
-+--
----
----
-+--
输出样例:
6
1 1
1 3
1 4
4 1
4 3
4 4
思路:
这一题的数据范围较小,暴力枚举每一种方案,运用二进制表示操作方案
import java.util.Scanner;public class Main {private static final int N = 4;private static char[][] g = new char[N][N];private static char[][] backup = new char[N][N];public static void Print_Char(char[][] str) {for (int i = 0; i < 4; i ++) {for (int j = 0; j < 4; j++) {System.out.printf("%c", str[i][j]);}System.out.println();}System.out.println();}public static void op_c(char[][] str, int x, int y) {if (str[x][y] == '+') str[x][y] = '-';else if (str[x][y] == '-') str[x][y] = '+';}// 改变行列public static void Change_col_row(char[][] str, int x, int y) {// 改变x这一行,y这一列for (int i = 0; i < 4; i ++) {op_c(str, x, i);op_c(str, i, y);}op_c(str, x, y);}// 判断冰箱是否打开public static boolean is_success(char[][] str) {for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {if (str[i][j] == '+') {return false;}}}return true;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);for (int i = 0; i < 4; i ++) {String t = sc.nextLine();g[i] = t.toCharArray();}for (int i = 0; i < (1 << 16); i ++) {for (int k = 0; k < 4; k ++) {System.arraycopy(g[k], 0, backup[k], 0, N);}int cnt = 0;for (int k = 0; k < 16; k ++) {if (((i >> k)&1) == 1) {Change_col_row(backup, k/4, k%4);cnt ++;} }boolean flag = is_success(backup);if (flag) {System.out.println(cnt);for (int k = 0; k < 16; k ++) {if (((i>>k)&1) == 1) {System.out.printf("%d %d\n", k / 4 + 1, k % 4 + 1);}}}}}
}
翻硬币
输入样例1:
**********
o****o****
输出样例1:
5
输入样例2:
*o**o***o***
*o***o**o***
输出样例2:
1
import java.util.Scanner;public class Main {private static final int N = 110;private static char[] a = new char[N];private static char[] b = new char[N];public static void turn(char[] str, int x) {if (str[x] == '*') str[x] = 'o';else if (str[x] == 'o') str[x] = '*';if (str[x + 1] == '*') str[x + 1] = 'o';else if (str[x + 1] == 'o') str[x + 1] = '*';}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);a = scanner.next().toCharArray();b = scanner.next().toCharArray();int cnt = 0;for (int i = 0; i < a.length - 1; i ++) {if (a[i] != b[i]) {cnt ++;turn(a, i);}}System.out.println(cnt);}
}
二分与前缀和
基础知识:
二分查找与前缀和文章浏览阅读197次。基础算法复习总结:快速排序+归并排序+二分查找+高精度运算+前缀和与差分+双指针算法+位运算+离散化+区间合并https://blog.csdn.net/m0_73569492/article/details/133460398?spm=1001.2014.3001.5501
机器人跳跃问题
输入样例1:
5
3 4 3 2 4
输出样例1:
4
输入样例2:
3
4 4 4
输出样例2:
4
输入样例3:
3
1 6 4
输出样例3:
3
思路:
从左边开始查找的二分问题
import java.util.Arrays;
import java.util.Scanner;public class Main {private static final int N = 1000010;private static int[] h = new int[N];private static int n;// 判断初始能量为e是否成功public static boolean check(int e) {for (int i = 0; i < n; i ++) {e += (e-h[i]);if (e < 0) return false;if (e >= N) return true;}return true;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();int l = 0, r = N;for (int i = 0; i < n; i ++) {h[i] = sc.nextInt();}// 二分法while (l < r) {int mid = (l + r) / 2;if (check(mid)) r = mid;else l = mid + 1;}System.out.println(l);}
}
四平方和
输入样例:
5
输出样例:
0 0 1 2
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();for (int a = 0; a * a <= n; a ++) {for (int b = a; a * a + b * b <= n; b ++) {for (int c = b; a * a + b * b + c * c <= n; c ++) {int x = n - a * a - b * b - c * c;if (x < c * c) continue;else {double t = Math.sqrt((double)x); if (t - (int)t == 0) {System.out.printf("%d %d %d %d\n", a, b, c, (int)t);return;}}}}}}
}
分巧克力
输入样例:
2 10
6 5
5 6
输出样例:
2
思路:
分出来的巧克力边长越大越好,所以可以采用从右边开始查找的二分法
import java.util.Scanner;public class Main {private static final int N = 1000010;private static int[] h = new int[N];private static int[] w = new int[N];public static boolean check(int x, int n, int k) {int sum = 0;for (int i = 1; i <= n; i ++) {sum += (h[i] / x) * (w[i] / x);}if (sum >= k) return true;return false;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int k = scanner.nextInt();for (int i = 1; i <= n; i ++) {h[i] = scanner.nextInt();w[i] = scanner.nextInt();}int l = 1, r = h[1];while (l < r) {int mid = (l + r + 1) / 2;if (check(mid, n, k)) l = mid;else r = mid - 1;}System.out.println(r);}
}
激光炸弹
输入样例:
2 1
0 0 1
1 1 1
输出样例:
1
思路:
二维前缀和
import java.util.Scanner;public class Main {private static final int N = 5100;private static int[][] g = new int[N][N];private static int[][] s = new int[N][N];private static int n, r;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);n = scanner.nextInt();r = scanner.nextInt();for (int i = 1; i <= n; i ++) {int x, y, c;x = scanner.nextInt();y = scanner.nextInt();c = scanner.nextInt();g[x + 1][y + 1] += c;}// 求二维前缀和for (int i = 1; i < N; i ++) {for (int j = 1; j < N; j ++) {s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + g[i][j];}}if (r >= N) {System.out.println(s[N - 1][N - 1]);return;}// 枚举起点int res = Integer.MIN_VALUE;for (int i = 1; i < N - r; i ++) {for (int j = 1; j < N - r; j ++) {// (i, j) 到 (i + r - 1, j + r - 1)的和int sum = s[i + r - 1][j + r - 1] - s[i - 1][j + r - 1] - s[i + r - 1][j - 1] + s[i - 1][j - 1];res = Math.max(res, sum);}}System.out.println(res);}
}
K倍区间
输入样例:
5 2
1
2
3
4
5
输出样例:
6
思路:
注意:
cnt[(int)(s[i] % k + k) % k]
因为s[i]的数据类型为long,数组下标可能会越界变成负数,所以需要将其操作使其为非负数
import java.util.Scanner;public class Main {private static final int N = 100010;private static int[] a = new int[N];private static long[] s = new long[N];private static int[] cnt = new int[N];public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int k = scanner.nextInt();long sum = 0;for (int i = 1; i <= n; i ++) {a[i] = scanner.nextInt();s[i] = s[i - 1] + a[i];cnt[(int)(s[i] % k + k) % k] ++;}for (int i = 0; i < k; i ++) {if (cnt[i] != 0) sum += (long)(cnt[i] - 1) * cnt[i] / 2;}System.out.println(sum + cnt[0]);}
}
数学与简单Dp
小编:
人甚至不能共情自己。。。花了五个小时证明买不到的数目这题。。。
买不到的数目(裴蜀定理)
思路:
1.只有互质的情况下才有解
2.当两数互质时,根据裴蜀定理 ax+by=1
3.具体方法:
(1).通过暴力枚举,观察结果,发现规律,提出假设。
n = (p - 1)*(q - 1) - 1 = pq - p - q
import java.util.Scanner;public class Main {private static int p, q;public static boolean dfs(int m, int p, int q) {if (m == 0) return true;if (m >= p && dfs(m - p, p, q)) return true;if (m >= q && dfs(m - q, p, q)) return true;return false;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 输入个数while (n -- > 0) {p = scanner.nextInt();q = scanner.nextInt();int res = 0;for (int i = 1; i <= 1000; i ++) {if (!dfs(i, p, q)) res = i;}System.out.println(res);}}
}
(2).证明假设:
代码:
import java.util.Scanner;public class Main {private static int p, q;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);p = scanner.nextInt();q = scanner.nextInt();System.out.println(p * q - p - q);}
}
注意:如有错误,欢迎指正!!!
相关文章:

蓝桥杯(Java)(ing)
Java前置知识 输入流: (在Java面向对象编程-CSDN博客里面有提过相关知识------IO流) // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…...

【Linux-多线程】线程互斥(锁和它的接口等)
一、线程互斥 我们把多个线程能够看到的资源叫做共享资源,我们对共享资源进行保护,就是互斥 1.多线程访问问题 【示例】见一见多线程访问问题,下面是一个抢票的代码,共计票数10000张,4个线程去抢 之前我们展示过封…...

[江科大STM32] 第五集快速建立STM32工程模板——笔记
保存,进去选芯片型号,我们是F10C8T6 一个MD,还有所有.c.h 这里所有文件 这里所有文件...

流水线并行举例说明;GPU 的细粒度问题
GPU 的细粒度与模型并行和流水线并行关系 使用模型并行和流水线并行之后会涉及到一个模型切分细粒度的问题,先切分多头(并行执行),每一个多头在切分不同阶段(串行执行)。这种情况下GPU的细粒度是多少 在这种模型并行和流水线并行结合且按多头和阶段切分的情况下,GPU 的…...

如何确保Kafka集群的高可用?
大家好,我是锋哥。今天分享关于【如何确保Kafka集群的高可用?】面试题。希望对大家有帮助; 如何确保Kafka集群的高可用? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 要确保 Kafka 集群 的高可用性,需要…...

计算机毕业设计Python+Spark考研预测系统 考研推荐系统 考研数据分析 考研大数据 大数据毕业设计 大数据毕设
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Oracle SqlPlus常用命令简介
参考资料 【SQL*Plus】SETシステム変数の設定前後の具体例 目录 一. 执行系命令1.1 执行系统命令1.2 执行sql脚本文件1.2.1 在数据库中执行sql脚本1.2.2 通过sqlplus执行sql脚本 二. show命令2.1 显示SqlPlus中的全部环境变量2.2 显示指定环境变量的设置 三. 时间显示3.1 set …...

8.若依系统监控与定时任务
帮助开发者和运维快速了解应用程序的性能状态。 数据监控 定时任务 实现动态管理任务。 需求:每间隔5s,控制台输出系统时间。 新建的任务类必须在指定目录ruoyi-quartz模块下的task包下。 状态设置为启动 执行策略 场景:比如一个任务每个…...

《计算机组成及汇编语言原理》阅读笔记:p160-p176
《计算机组成及汇编语言原理》学习第 12 天,p160-p176 总结,总计 17 页。 一、技术总结 1.PowerPC (1)programming model(mode) As in most modern computers, there are at least two separate views of the system (formally called programming m…...

TCP网络编程(三)—— 客户端的编写/服务器端和客户端的通信
上篇文章我们学习了TCP的服务器端模式的编写,这篇文章我们将开始编写客户端的代码,完成服务器端和客户端的通信。完整代码和演示在文章的后面。 和服务器端不同,在客户端我们只需要服务器端的套接字和服务器端的地址和端口,用于向…...

如何在谷歌浏览器中使用自定义模板
作为最常用的网络浏览器之一,谷歌浏览器不仅提供了强大的功能,还允许用户通过各种方式自定义其外观和功能。其中,使用自定义模板可以极大地提升用户体验,无论是更改浏览器的外观还是优化网页显示效果。本文将详细介绍如何在谷歌浏…...

Day2 微服务 网关路由转发、网关登录校验、配置管理
目录 1.网关路由转发 1.1 网关 1.2 快速入门 1.2.1 创建项目 1.2.2 引入依赖 1.2.3 启动类 1.2.4 配置路由 1.2.5 测试 1.3 路由过滤 2.网关登录校验 2.1 鉴权思路分析 2.2 网关过滤器 2.3 自定义过滤器 2.3.1 自定义GatewayFilter 2.3.2 自定义GlobalFilter 2.4 登录校验 2.4.…...

Android 旋转盘导航栏
1.直接上源码: package com.you.arc;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android.graphics.RectF; import android.support…...

空域降噪、频域降噪和时域降噪
目录 算法原理: 1.图像噪声 2.图像中常见的噪声的类型 3.不同域的定义 4.空域降噪 4.1.空域降噪的定义: 4.2.思想核心: 4.3.局部的线性算法 高斯降噪 4.4.非局部算法 5.频域降噪 傅里叶降噪: 小波降噪: …...

Cornerstone3D:了解Nifti文件,并查看元数据
Nifti 全称Neuroimaging Informatics Technology Initiative是一种专为存储医学和神经影像数据而设计的文件格式。设计目的是高效的存储三维或四维图像数据,同时将相关的元数据紧凑地嵌入文件中。Nifti文件的组成:头信息(元数据)…...

设计模式の状态策略责任链模式
文章目录 前言一、状态模式二、策略模式三、责任链模式 前言 本篇是关于设计模式中的状态模式、策略模式、以及责任链模式的学习笔记。 一、状态模式 状态模式是一种行为设计模式,核心思想在于,使某个对象在其内部状态改变时,改变该对象的行为…...

DevOps流程CICD之Jenkins使用操作
一、jenkins的docker-compose安装部署 请参考 jenkins的docker安装部署配置全网最详细教程-CSDN博客 二、创建repository 三、创建ssh 四、创建视图 五、创建任务 六、配置gitlab钩子 七、自动构建部署CI/CD验证...

【玩转23种Java设计模式】行为型模式篇:备忘录模式
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...

Unity Shader TexelSize的意义
TexelSize在制作玻璃折射效果时会用到。 // Get the normal in tangent space fixed3 bump UnpackNormal(tex2D(_BumpMap, i.uv.zw)); // Compute the offset in tangent space float2 offset bump.xy * _Distortion * _RefractionTex_TexelSize.xy; i.scrPos.xy offset * i…...

三、STM32MP257系列之定制Yocto Machine
文章目录 STM32MP257系列之定制的Yocto Machine1. TFA 定制2. OPTEE OS定制3. Uboot 定制3.1 创建 board3.2 创建 board的头文件3.3 创建 board的配置文件3.4 添加我们自己的dtb文件3.5 生成新patch打包到uboot recipe中3.6 修改yocto中的配置 4. Kernel 定制4.1 定制设备树 5.…...

小程序信息收集(小迪网络安全笔记~
免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,…...

使用 Docker 搭建 Drogon 框架
使用 Docker 搭建 Drogon 框架 Drogon 是一个基于 C 的高性能 Web 框架,支持异步 I/O 和协程。使用 Docker 可以快速搭建 Drogon 开发环境,避免依赖冲突和配置问题。 以下是使用 Docker 搭建 Drogon 框架的详细步骤: 1. 准备工作 安装 Doc…...

【Linux报告】实训一:GNME桌面环境的设置及应用
实训一:GNME桌面环境的设置及应用 【练习1】在图形模式和文本模式下登录Linux系统。 1、开启Linux虚拟机。 答:打开此虚拟机如图所示 2、观察屏幕上显示的启动信息。 3、当系统启动到图形界面时,用普通用户身份登录。 答:如图…...

活动预告 |【Part1】Microsoft Azure 在线技术公开课:基础知识
课程介绍 参加“Azure 在线技术公开课:基础知识”活动,培养有助于创造新的技术可能性的技能并探索基础云概念。参加我们举办的本次免费培训活动,扩充自身的云模型和云服务类型知识。你还可以查看以计算、网络和存储为核心的 Azure 服务。 活…...

vulnhub靶场【Hogwarts】之bellatrix
前言 靶机:hotwarts-dobby,ip地址为192.168.1.69 攻击:kali,ip地址为192.168.1.16 都采用虚拟机,网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24扫描发现主机 信息收集 使用nmap扫描端…...

移动 APP 设计规范参考
一、界面设计规范 布局原则: 内容优先:以内容为核心进行布局,突出用户需要的信息,简化页面导航,提升屏幕空间利用率.一致性:保持界面元素风格一致,包括颜色、字体、图标等,使用户在…...

HarmonyOS:@Require装饰器:校验构造传参
一、前言 Require是校验Prop、State、Provide、BuilderParam和普通变量(无状态装饰器修饰的变量)是否需要构造传参的一个装饰器。 说明 从API version 11开始对Prop/BuilderParam进行校验。 从API version 11开始,该装饰器支持在元服务中使用。 从API version 12开…...

github提交不上去,网络超时问题解决
问题出现的原因: DNS服务器数据不同步,github的服务器发送迁移,在本地缓存的ip地址现在无效了。 解决方案: 1)点击这里,查询github.com最新的ip地址 2.0)编辑linux系统地址缓存文件&#x…...

国产数据库OceanBase从入门到放弃教程
1. 介绍 是由蚂蚁集团(Ant Group,原蚂蚁金服)自主研发的分布式关系型数据库。它旨在解决海量数据存储和高并发访问的问题,特别适合金融级应用场景,如支付宝等对数据一致性、可靠性和性能有极高要求的服务。以下是关于…...

风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注
风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注 数据集下载: yolo v&#…...