当前位置: 首页 > news >正文

蓝桥杯(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前置知识 输入流&#xff1a; &#xff08;在Java面向对象编程-CSDN博客里面有提过相关知识------IO流&#xff09; // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…...

【Linux-多线程】线程互斥(锁和它的接口等)

一、线程互斥 我们把多个线程能够看到的资源叫做共享资源&#xff0c;我们对共享资源进行保护&#xff0c;就是互斥 1.多线程访问问题 【示例】见一见多线程访问问题&#xff0c;下面是一个抢票的代码&#xff0c;共计票数10000张&#xff0c;4个线程去抢 之前我们展示过封…...

[江科大STM32] 第五集快速建立STM32工程模板——笔记

保存&#xff0c;进去选芯片型号&#xff0c;我们是F10C8T6 一个MD&#xff0c;还有所有.c.h 这里所有文件 这里所有文件...

流水线并行举例说明;GPU 的细粒度问题

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

如何确保Kafka集群的高可用?

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

计算机毕业设计Python+Spark考研预测系统 考研推荐系统 考研数据分析 考研大数据 大数据毕业设计 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;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.若依系统监控与定时任务

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

《计算机组成及汇编语言原理》阅读笔记:p160-p176

《计算机组成及汇编语言原理》学习第 12 天&#xff0c;p160-p176 总结&#xff0c;总计 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的服务器端模式的编写&#xff0c;这篇文章我们将开始编写客户端的代码&#xff0c;完成服务器端和客户端的通信。完整代码和演示在文章的后面。 和服务器端不同&#xff0c;在客户端我们只需要服务器端的套接字和服务器端的地址和端口&#xff0c;用于向…...

如何在谷歌浏览器中使用自定义模板

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

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.直接上源码&#xff1a; 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…...

空域降噪、频域降噪和时域降噪

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

Cornerstone3D:了解Nifti文件,并查看元数据

Nifti 全称Neuroimaging Informatics Technology Initiative是一种专为存储医学和神经影像数据而设计的文件格式。设计目的是高效的存储三维或四维图像数据&#xff0c;同时将相关的元数据紧凑地嵌入文件中。Nifti文件的组成&#xff1a;头信息&#xff08;元数据&#xff09;…...

设计模式の状态策略责任链模式

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

DevOps流程CICD之Jenkins使用操作

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

【玩转23种Java设计模式】行为型模式篇:备忘录模式

软件设计模式&#xff08;Design pattern&#xff09;&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...

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.…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...