【秋招突围】2024届秋招笔试-阿里系列笔试题-第一套-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系计划跟新各公司春秋招的笔试题

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注CSDN同名公主号领取,会在飞书进行同步的跟新。

文章目录

    • 📖 写在前面
      • 夏天要来了 秋招还会远吗?
    • 🖥 01.字符串重排
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 💻 02.木雕艺术家的创作
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • ⌚️ 03.K小姐的树形关卡设计
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🎀 写在最后
    • 🛖 这里介绍一下咱们的笔试打卡小屋
      • 🥰 打卡奖励
      • 🕰 每日学习安排
      • 📖 打卡小屋涉及题型
        • 基础算法
        • 基础数据结构
        • 搜索
        • 动态规划 & 贪心 & 数论

📖 写在前面

夏天要来了 秋招还会远吗?

前不久春招也算是圆满结束咯,大家有拿到心仪的 offer吗?
接下来互联网的秋招也快来啦,小伙伴们有开始准备了吗?
本次给大家带来24届秋招 阿里系 的笔试题目三语言解析(Java/Python/Cpp)

文末有清隆学长的笔试陪伴打卡小屋活动介绍:
✨丰富的打卡奖励等你来领哦,大厂笔试题汇总笔试面试经验贴算法笔试模版
💽 有兴趣的小伙伴们也可以了解一下,不要错过啦~

🖥 01.字符串重排

问题描述

LYA 有一个只包含 0 0 0 1 1 1 的字符串。她认为字典序小的字符串更加优雅,所以她想通过重新排列字符串中的字符,使得字符串的字典序尽可能小。

LYA 最多可以进行 k k k 次操作,每次操作可以交换相邻的两个字符。

LYA 很忙,于是她找到了你帮忙,相信这对你来说是小菜一碟。

输入格式

第一行包含两个正整数 n n n k k k,分别表示字符串的长度和最多可以进行的操作次数。

第二行是一个长度为 n n n 的只包含 0 0 0 1 1 1 的字符串。

输出格式

输出一行,表示重排后字典序最小的字符串。

样例输入

3 1
101

样例输出

011

数据范围

1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105
1 ≤ k ≤ 1 0 9 1 \le k \le 10^9 1k109

题解

我们可以按照以下的贪心策略来重排字符串:

从左到右遍历字符串,对于当前位置 i i i

  • 如果 s [ i ] = 0 s[i] = 0 s[i]=0,说明当前位置已经是最优的,不需要操作,继续遍历下一个位置。
  • 如果 s [ i ] = 1 s[i] = 1 s[i]=1,我们希望能够把这个 1 1 1 尽可能地往后移动。只要 k > 0 k > 0 k>0 s [ i − 1 ] = 1 s[i-1] = 1 s[i1]=1,就将 s [ i ] s[i] s[i] s [ i − 1 ] s[i-1] s[i1] 交换,同时 k k k 1 1 1

直观地理解,我们希望把所有的 0 0 0 都尽可能地放在字符串的前面,而把所有的 1 1 1 都尽可能地放在字符串的后面。

具体实现时,我们可以从左到右遍历字符串,对于每个位置,如果它是 1 1 1,就尝试将它往后移动,直到无法移动或者操作次数用完为止。

参考代码

  • Python
n, k = map(int, input().split())
string = list(input())

for i in range(n):
    if string[i] == "0":
        tmp = i
        while tmp > 0 and string[tmp - 1] == "1" and k > 0:
            string[tmp], string[tmp - 1] = string[tmp - 1], string[tmp]
            tmp -= 1
            k -= 1
        if k == 0:
            break

print("".join(string))

  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        scanner.nextLine(); // Consume the newline character
        String str = scanner.nextLine();

        char[] charArray = str.toCharArray();
        for (int i = 0; i < n; i++) {
            if (charArray[i] == '0') {
                int tmp = i;
                while (tmp > 0 && charArray[tmp - 1] == '1' && k > 0) {
                    char tempChar = charArray[tmp];
                    charArray[tmp] = charArray[tmp - 1];
                    charArray[tmp - 1] = tempChar;
                    tmp -= 1;
                    k -= 1;
                }
                if (k == 0) {
                    break;
                }
            }
        }

        System.out.println(String.valueOf(charArray));
    }
}

  • Cpp
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    vector<char> str(n);
    for (int i = 0; i < n; i++) {
        cin >> str[i];
    }

    for (int i = 0; i < n; i++) {
        if (str[i] == '0') {
            int tmp = i;
            while (tmp > 0 && str[tmp - 1] == '1' && k > 0) {
                swap(str[tmp], str[tmp - 1]);
                tmp -= 1;
                k -= 1;
            }
        if (k == 0) {
            break;
        }
    }

    for (char ch : str) {
        cout << ch;
    }
    cout << endl;

    return 0;
}

💻 02.木雕艺术家的创作

问题描述

A先生是一位著名的木雕艺术家,他最近完成了一批精美的木雕作品。这批作品一共有 n n n 件,每件作品都有一个独一无二的编号,从 1 1 1 n n n。K小姐是A先生的朋友,她对这批作品很感兴趣,希望能够从中选择一些作品组成自己的收藏。

然而,K小姐有一个独特的收藏爱好,她希望自己收藏的木雕作品中,编号从 1 1 1 k k k 的作品均有且只有一件,即她想收藏一个 k k k 排列。那么请问,在这 n n n 件作品中,有多少种不同的 k k k 排列可以被收藏呢?

输入格式

第一行输入一个整数 n ( 1 ≤ n ≤ 1 0 5 ) n(1 \leq n \leq 10^5) n(1n105),表示木雕作品的总数。

第二行输入 n n n 个整数 a i ( 1 ≤ a i ≤ 1 0 9 ) a_i(1 \leq a_i \leq 10^9) ai(1ai109),表示每件作品的编号。

输出格式

一行一个整数,表示有多少种不同的 k k k 排列可以被收藏,其中 k ∈ [ 1 , n ] k \in [1, n] k[1,n]

由于答案可能很大,请对 1 0 9 + 7 10^9 + 7 109+7 取模。

样例输入

5
1 2 1 3 4

样例输出

8

可被收藏的 k k k 排列分别为:

  • [ 1 ] [1] [1]
  • [ 1 ] [1] [1]
  • [ 1 , 2 ] [1, 2] [1,2]
  • [ 2 , 1 ] [2, 1] [2,1]
  • [ 1 , 2 , 3 ] [1, 2, 3] [1,2,3]
  • [ 2 , 1 , 3 ] [2, 1, 3] [2,1,3]
  • [ 1 , 2 , 3 , 4 ] [1, 2, 3, 4] [1,2,3,4]
  • [ 2 , 1 , 3 , 4 ] [2, 1, 3, 4] [2,1,3,4]

数据范围

  • 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105
  • 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1ai109

题解

我们可以统计出每个数字在数组中出现的次数,然后对于每个长度 k k k,我们计算有多少种方案满足每个数字恰好出现一次。

具体做法是,对于每个长度 k k k,我们先假设第一个数字是 1 1 1,那么第二个数字就只能从 2 2 2 k + 1 k + 1 k+1 中选择,第三个数字就只能从 3 3 3 k + 1 k + 1 k+1 中选择,以此类推。所以方案数就是 c n t [ 1 ] × c n t [ 2 ] × ⋯ × c n t [ k ] cnt[1] \times cnt[2] \times \cdots \times cnt[k] cnt[1]×cnt[2]××cnt[k],其中 c n t [ i ] cnt[i] cnt[i] 表示数字 i i i 在数组中出现的次数。

最终的答案就是将所有长度的方案数相加即可。

时间复杂度为 O ( n + k ) O(n + k) O(n+k),空间复杂度为 O ( n ) O(n) O(n)

参考代码

  • Python
n = int(input())
a = list(map(int, input().split()))

cnt = [0] * (n + 1)
for x in a:
    cnt[x] += 1

res = 0
MOD = 10 ** 9 + 7
temp = 1
for i in range(1, n + 1):
    if cnt[i] == 0:
        break
    temp = (temp * cnt[i]) % MOD
    res = (res + temp) % MOD

print(res)
  • Java
import java.util.*;

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[] cnt = new int[n + 1];
        for (int x : a) {
            cnt[x]++;
        }

        int res = 0;
        int MOD = 1000000007;
        int temp = 1;
        for (int i = 1; i <= n; i++) {
            if (cnt[i] == 0) {
                break;
            }
            temp = (int) ((long) temp * cnt[i] % MOD);
            res = (res + temp) % MOD;
        }

        System.out.println(res);
    }
}
  • Cpp
#include <bits/stdc++.h>
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> cnt(n + 1, 0);
    for (int x : a) {
        cnt[x]++;
    }

    int res = 0;
    const int MOD = 1e9 + 7;
    int temp = 1;
    for (int i = 1; i <= n; i++) {
        if (cnt[i] == 0) {
            break;
        }
        temp = (int) ((long long) temp * cnt[i] % MOD);
        res = (res + temp) % MOD;
    }

    cout << res << endl;
    return 0;
}

⌚️ 03.K小姐的树形关卡设计

问题描述

K小姐最近沉迷于设计一款类似于植物大战僵尸(PVZ)的游戏关卡。与PVZ不同的是,她设计的关卡是在一棵以节点 1 1 1 为根的树上进行的。

树上的每个节点都有一个僵尸和一个传送门。僵尸进入某个节点的传送门后,会被传送到该节点的子树中编号最小的节点(除了该节点本身)。

现在K小姐想知道,如果僵尸从每个节点出发,到达叶子节点时,一共能吃掉多少个僵尸。

输入格式

第一行包含一个正整数 n n n,表示树上的节点数量。

接下来 n − 1 n-1 n1 行,每行包含两个正整数 u u u v v v,表示节点 u u u 和节点 v v v 之间有一条边。

输出格式

输出一行,包含 n n n 个空格分隔的正整数。其中第 i i i 个数表示从第 i i i 个节点出发,最终能吃掉的僵尸数量。

样例输入

4
1 3
3 2
4 1

样例输出

2 1 2 1

数据范围

1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1n105
1 ≤ u , v ≤ n 1\le u,v\le n 1u,vn

题解

本题可以通过DFS遍历树,并记录每个节点通过传送门后到达的最小编号节点,来求解从每个节点出发能吃掉的僵尸数量。

具体步骤如下:

  1. 建立树的邻接表表示。
  2. 从根节点开始进行DFS遍历。对于当前节点 u u u
    • 如果 u u u 是叶子节点,则从 u u u 出发只能吃掉 1 1 1 个僵尸。
    • 否则,对于 u u u 的每个子节点 v v v
      • 递归计算从 v v v 出发能吃掉的僵尸数量。
      • u u u 的所有子节点中,找到编号最小的节点 m i n _ v a l min\_val min_val
    • u u u 出发能吃掉的僵尸数量为 n u m s [ m i n _ v a l ] + 1 nums[min\_val]+1 nums[min_val]+1
  3. 最后输出每个节点出发能吃掉的僵尸数量。

时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( n ) O(n) O(n)

参考代码

  • Python
def dfs(u, fa):
    if len(graph[u]) == 1:
        nums[u] = 1
        return u
    
    min_node = n
    for v in graph[u]:
        if v == fa:
            continue
        min_node = min(min_node, dfs(v, u))
    nums[u] = nums[min_node] + 1
    
    return min(u, min_node)

n = int(input())
graph = [[] for _ in range(n)]
for _ in range(n - 1):
    u, v = map(int, input().split())
    u -= 1
    v -= 1
    graph[u].append(v)
    graph[v].append(u)

nums = [0] * n
dfs(0, -1)
print(*nums)
  • Java
import java.util.*;

public class Main {
    static int n;
    static List<Integer>[] graph;
    static int[] nums;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        graph = new List[n];
        for (int i = 0; i < n; i++) {
            graph[i] = new ArrayList<>();
        }
        for (int i = 0; i < n - 1; i++) {
            int u = sc.nextInt() - 1;
            int v = sc.nextInt() - 1;
            graph[u].add(v);
            graph[v].add(u);
        }
        
        nums = new int[n];
        dfs(0, -1);
        
        for (int i = 0; i < n; i++) {
            System.out.print(nums[i] + " ");
        }
    }
    
    static int dfs(int u, int fa) {
        if (graph[u].size() == 1) {
            nums[u] = 1;
            return u;
        }
        
        int minNode = n;
        for (int v : graph[u]) {
            if (v == fa) {
                continue;
            }
            minNode = Math.min(minNode, dfs(v, u));
        }
        nums[u] = nums[minNode] + 1;
        
        return Math.min(u, minNode);
    }
}
  • Cpp
#include <iostream>
#include <vector>
using namespace std;

const int N = 1e5 + 5;
vector<int> graph[N];
int nums[N];

int dfs(int u, int fa) {
    if (graph[u].size() == 1) {
        nums[u] = 1;
        return u;
    }
    
    int minNode = N;
    for (int v : graph[u]) {
        if (v == fa) {
            continue;
        }
        minNode = min(minNode, dfs(v, u));
    }
    nums[u] = nums[minNode] + 1;
    
    return min(u, minNode);
}

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n - 1; i++) {
        int u, v;
        cin >> u >> v;
        u--, v--;
        graph[u].push_back(v);
        graph[v].push_back(u);
    }
    
    dfs(0, -1);
    
    for (int i = 0; i < n; i++) {
        cout << nums[i] << " ";
    }
    
    return 0;
}

🎀 写在最后

🛖 这里介绍一下咱们的笔试打卡小屋

在这里插入图片描述

✨ 打卡小屋旨在陪伴大家,养成每日学习的好习惯。在这里,你可以:

  • 🤝 与备战笔试的小伙伴相识,找到志同道合的学习小组
  • 📝 通过写题解,巩固做题思路,养成良好的记录习惯
  • 💡 系统掌握常考算法和数据结构,了解互联网笔试难度
  • 🎁 坚持打卡,获得丰厚奖励,激励自己持之以恒

🥰 打卡奖励

打卡时长奖励内容
7天任选一家最新互联网笔试真题 x 1 (价值29.9r)
14天任选一家最新互联网笔试真题 x 3 + 笔试面试经验贴
21天任选一家最新互联网笔试真题 x 5 + 清隆三语言算法模版
28天最新互联网大厂笔试真题汇总(价值199r) + 华为OD机试训练营 (价值89r)

7天打卡即可值回票价,心动不如行动!

🕰 每日学习安排

小屋将在每日上午发放打卡题目,包括:

  • 一道算法模版题,帮助大家掌握常用算法套路
  • 根据算法模版,精选一道对应的大厂笔试真题,巩固算法应用

让我们一起直击笔试重点,攻克常考题型!

📖 打卡小屋涉及题型

小屋从零基础出发,涵盖笔试常考知识点:

基础算法
  • 自定义排序
  • 二分
  • 前缀和
  • 差分
  • 双指针
基础数据结构
  • 栈 & 单调栈
  • 队列 & 单调队列
  • 并查集
  • 优先队列(堆)
搜索
  • DFS & BFS 基础应用
  • 树的遍历
  • 基础图论
动态规划 & 贪心 & 数论
  • 快速幂
  • 组合数
  • 质数 & 因数
  • 位运算
  • 基础动态规划
  • 常见贪心

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/705907.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何通过Outlook大附件插件,加强外发附件的安全性和管控力度?

因邮件的便捷性和普遍性&#xff0c;企业间业务往来通常会采取邮箱业务&#xff0c;沟通使用成本也比较低&#xff0c;但容易出现附件太大无法上传的问题。Outlook大附件插件是为解决邮件系统中附件大小限制问题而开发的一系列工具。 使用邮件发送附件时&#xff0c;可能会遇到…

PR插件-图层抖动弹跳缩放旋转模糊闪烁缩放抖动动作效果预设

在PR软件中制作动画的便捷工具&#xff0c;直接点击脚本窗口的预设即可加载到时间线&#xff0c;拥有如旋转、模糊、闪烁、毛刺、弹跳、缩放、抖动等预设。脚本动画可视化预览&#xff0c;一键使用。A handy tool to make animations in Premiere Pro. 支持Win/Mac系统&#x…

【MySQL】MySQL45讲-读书笔记

1、基础架构&#xff1a;一条SQL查询语句是如何执行的&#xff1f; 1.1 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。 mysql -h$ip -P$port -u$user -p输完命令之后&#xff0c;输入密码。 1.2 查询缓存 MySQL 拿到一个查询请求后&#xff0c;会先到查询缓…

代码随想录算法训练营第37天|● 56.合并区间● 738.单调递增的数字

合并区间 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 按照左边界从小到大排序之后&#xff0c;如果 intervals[i][0] < intervals[i - 1][1] 即intervals[i]的左边界 < intervals[i - 1]的右边界&#xff0c;则一定有重叠。&#xff08;本题相邻区间也算重贴…

高考志愿填报秘籍:大学篇

选择适合自己的大学和专业&#xff0c;对广大考生来说至关重要。从某种程度上来说&#xff0c;决定了考生未来所从事的行业和发展前景。为了帮助广大考生更加科学、合理地填报志愿&#xff0c;选择适合自己的大学和专业&#xff0c;本公众号将推出如何用AI填报高考志愿专栏文章…

免费代理为什么不安全?

在数字时代&#xff0c;网络已经成为人们日常生活和商业活动中不可或缺的一部分。为了实现更广阔的业务拓展和更畅通的网络体验&#xff0c;许多人开始考虑使用代理服务器。然而&#xff0c;虽然免费代理可能听起来像是个经济实惠的选择&#xff0c;但事实上&#xff0c;它可能…

Sui Bridge在测试网上线并推出10万SUI激励计划

是一种为Sui设计的原生桥接协议&#xff0c;专门用于在Sui与其他网络之间桥接资产和数据。今天&#xff0c;Sui Bridge宣布在测试网上线。作为一种原生协议&#xff0c;Sui Bridge能够在Ethereum和Sui之间轻松且安全地转移ETH、wBTC、USDC和USDT&#xff0c;使其成为Sui基础设施…

LeNet-5训练神经网络训练

LeNet-5训练 导包 import tensorflow as tf from tensorflow.keras import layers, models, datasets, optimizers 加载Fashion-MNIST数据集 (train_images, train_labels), (test_images, test_labels) datasets.fashion_mnist.load_data() 归一化像素值到[0, 1]区间…

服务器防漏扫,主机加固方案来解决

什么是漏扫&#xff1f; 漏扫是漏洞扫描的简称。漏洞扫描是一种安全测试方法&#xff0c;用于发现计算机系统、网络或应用程序中的潜在漏洞和安全弱点。通过使用自动化工具或软件&#xff0c;漏洞扫描可以检测系统中存在的已知漏洞&#xff0c;并提供相关的报告和建议&#xf…

Matlab|基于主从博弈的智能小区代理商定价策略及电动汽车充电管理

目录 一、主要内容 二、部分代码 三、程序结果 四、下载链接 一、主要内容 主要做的是一个电动汽车充电管理和智能小区代理商动态定价的问题&#xff0c;将代理商和车主各自追求利益最大化建模为主从博弈&#xff0c;上层以代理商的充电电价作为优化变量&#xff0c;下层以…

linux配置用户

一&#xff0c;安装sudo与确保在管理员用户下 apt update apt install sudo -y 切换用户&#xff1a;密码不会显示&#xff0c;一个个输入然后回车。//图中是zfxt-->Stable用户切换 su root //root为用户名 以其他用户执行命令&#xff1a; su root ping baidu.com //su…

安装好IDEA后,就能够直接开始跑代码了吗?

我实习的第一天&#xff0c;睿哥叫我安装了IDEA&#xff0c;然后我就照做了。 之后&#xff0c;我把gitlab的代码拉下来后&#xff0c;发现好像没有编译运行的按钮&#xff0c;所以我就跑去问睿哥。睿哥当时看了看后&#xff0c;发现原来我没有安装JDK&#xff0c;他就叫我安装…

助力618!你想便宜寄快递退换货吗?

家人们&#xff0c;姐妹们&#xff0c;马上就要到618了&#xff0c;每年一到这种重要的节日&#xff0c;我们都会买买买&#xff0c;但是我们有时候买了会发现这个商品不太满意&#xff0c;我们会选择退换货&#xff0c;或者给商家邮寄回去&#xff0c;但是这个运费可真的太贵了…

ios描述文件.mobileprovision 如何查看包含的设备 udid|IPA查看是否包含设备 UDID|轻松签查看证书是否包含自己设备 UDID

前言 之前蒲公英支持上传证书查看证书有效期和包含设备 【干货】IOS苹果P12证书有效性检测 及查看证书是否包含自己的设备 【干货】IOS苹果P12证书有效性检测 及查看证书是否包含自己的设备 - 路灯IT技术博客 - 后厂村路灯 如今蒲公英下架了该功能&#xff0c;已经没有证书检…

C++--DAY7

vector容器 #include <iostream> #include <vector>using namespace std; void printVector(vector<int> &v) {//定义一个迭代器 指针vector<int>::iterator iter;//v.end&#xff08;&#xff09;是最后一个元素的下一个元素地址for(iterv.begin…

VRRP基础配置(华为)

#交换设备 VRRP基础配置 VRRP (Virtual Router Redundancy Protocol) 全称是虚拟路由规元余协议&#xff0c;它是一种容错协议。该协议通过把几台路由设备联合组成一台虚拟的路由设备&#xff0c;该虚拟路由器在本地局域网拥有唯一的一个虚拟 ID 和虚拟 IP 地址。实际上&…

【记录】ChatGLM3-6B大模型部署、微调(一):部署

ChatGLM3介绍 源码连接&#xff1a; ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型&#xff0c;在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上&#xff0c;ChatGLM3-6B 引入了如下特性&#xf…

(几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。

(几何:六边形面积)编写程序&#xff0c;提示用户输入六边形的边长&#xff0c;然后显示它的面积。计 算六边形面积的公式是: 这里的s就是边长。下面是一个运行示例 package myjava; import java.math.*; import java.util.Scanner; public class cy {public static void main(S…

Spring系统学习 -Spring IOC 的XML管理Bean之P命名空间、实现引入MySQL外部链接属性文件

P命名空间 在Spring框架中&#xff0c;P命名空间是一种用于简化XML配置文件中属性注入的方式。通过引入P命名空间&#xff0c;可以使用更简洁的语法来设置bean的属性值&#xff0c;而无需显式地使用<property>子元素。这使得XML配置文件更加简洁和易于阅读。 要在Sprin…

集合查询-并(UNION)集运算、交(INTERSECT)集运算、差(EXCEPT)集运算

一、概述 集合查询是对两个SELECT语句的查询结果进行再进行处理的查询 二、条件 1、两个SELECT语句的查询结果必须是属性列数目相同 2、两个SELECT语句的查询结果必须是对应位置上的属性列必须是相同的数据类型 三、并(UNION)运算 1、语法格式&#xff1a; SELECT 语句1…