【第十六届蓝桥杯省赛】比赛心得与经验分享(PythonA 组)

文章目录

  • 一、我的成绩
  • 二、我的备赛经历
  • 三、如何备赛(个人观点)
    • 1. 基础语法
    • 2. 数据结构
    • 3. 算法
    • 4. 数学
  • 四、做题技巧与注意事项
  • 五、我的题解
    • 试题A 偏蓝 🏆100%
    • 试题B IPV6 🏆0%
    • 试题C 2025图形 🏆100%
    • 试题D 最大数字 🏆100%
    • 试题E 倒水 🏆10%
    • 试题F 拼好数 🏆40%
    • 试题 G 登山 🏆15%
    • 试题H 原料采购 🏆20%
  • 五、结语

一、我的成绩

这是我第一次参加蓝桥杯,很高兴的是最后的成绩是省一等奖。在这里我想把我的经验分享给要参加蓝桥杯的其他同学们,也算是对我这段时间学习的一个总结。

(acmer 可以划走了,报名就送国一)

请添加图片描述


二、我的备赛经历

如果你还在因为实力不足而纠结到底报不报蓝桥杯的话,我的答案是:报就完事儿了

我是一个大一的小菜鸡,进入大学之前没接触过编程,大一上学期也只学了一下 C 语言。当时听说有蓝桥杯比赛,想着大学里面至少也得拿个什么比赛的奖吧,就报名了。当时听学长说 Python 组比较好拿奖,因此就报名了 Python 组。

到了25年放寒假的时候,我在年前(大概 1 月中下旬左右)花了 5 天时间把 Python 的语法全部过了一遍,年后(2月份)开始学习基础的数据结构(顺序表、链表、栈、队列、二叉树等)。然后开始在力扣上刷算法题,不刷不知道,一刷吓一跳,最简单的基础题我甚至可以做到毫无思路,当评论区的大佬都在嘲讽“这也能算一个题”的时候,我正坐在电脑前苦思冥想。每天刷题的心路历程就是“刷题——>不会——>看题解——>if 看得懂:感叹大佬nb,else:崩溃——>下一道题”。当时挫败感非常强,不过我也只能每天不断练习和积累。

我刷 Python 题最大的感受就是:Python 库函数简直太多了…几乎我每刷一道题看题解的时候都能看到一个新的函数,比如 enumeratereducemap 等等。于是我专门建立了一个新的 markdown 文本写我的刷题笔记,不断积累

到了 3 月份我开始系统地学习算法,从最简单的双指针、前缀和到 dfs、bfs 再到稍微复杂一点的动态规划、贪心等等。起初我还边学边写博客,后来发现这样好像时间不太够了,毕竟 4 月份就要比赛了(哀),所以我在后面的学习中主要以刷题为主。通过我逐步学习算法,我也能感受到自己的进步。从做开始力扣上简单题无从下手——>简单题也不过如此——>中等题我跟你拼了——>中等题你难不倒我——>困难题初探——>在别人的思路带领下完成困难题——>自己独立完成困难题。当你真正自己独立完成一道高难度的题的时候那种成就感与喜悦是任何东西都无法比拟的。我还记得我有一次花了一个半小时自己独立写出来了一道某年国赛真题,好像叫路径之谜。谁懂通过100% 弹出来那一刻的救赎感!

从备考到 4 月份比赛为止,我一共在力扣上刷了 200+ 道题,也在蓝桥杯官网上练了不少真题。其实我在刷真题之前已经学习了不少算法,也在力扣上刷了不少算法题,但是我做往年的题目的时候发现我还是不会做 (?),这就很尴尬了。一部分原因我总结的是力扣的题题干都非常简洁直白,基本上思考一下就知道它考的是什么算法,但是像洛谷、蓝桥杯这样的题都是有一个特殊的情景,你需要透过现象看本质去挖掘出它到底要考什么,这一点是很重要的我觉得。再其次就是做不出来也完全没关系,不会的题思考了一定的时间之后就去看题解,把大佬们的经验技巧积累下来。做题都是一个不断历练的过程,欲问青云路,先叩荆棘门。并且蓝桥杯是一个很好拿奖的比赛,基本上只要你有十来分就有奖。

之后到了 4 月份就比赛了,我是线上参赛,要求双机位监考,只能使用指定的 IDE 编写代码(Python 是 IDLE,C++ 是 dev),草稿纸也是自己准备。从上午 9:00 比赛开始到下午的 13:00 一共 4 个小时。所以尽量前一天就把官方要求的配置都配好了然后第二天起床就开干。

考试之后大约两周多一点出的成绩。


三、如何备赛(个人观点)

1. 基础语法

首先我觉得无论是什么语言,都应该先把最基础的语法学好,毕竟有了语法基础才能更好地去写代码。这里我觉得我没有做的很好,因为我过 Python 基础语法过的比较快,学的不够扎实,导致我在开始做算法题的时候有一部分时间都在查语法…


2. 数据结构

其次是数据结构,都说 程序 = 数据结构 + 算法,数据结构是一个容器,我们想要解决一个问题通常要选择恰当的容器再选择一个合适的算法去解决。所以数据结构是必不可少的。下面我列举了一个我认为比较重要的数据结构。(这里只是我在做题的时候总结出来的可能用的比较多的,不一定准确

T0 级别:

  • 栈、队列、字符串、堆 (优先队列)、哈希表、并查集

T1 级别:

  • 单调栈、单调队列、树、图、线段树

3. 算法

算法是解决一道题的核心,通过我刷题的经验以及看了其他大佬的总结然后我梳理了以下比较重要的算法。(如有任何遗漏或不妥,还请大佬指出)

T0 级别(基础):

  • 暴力,暴力,还是暴力!:其实严格来说它不是一个算法,但是蓝桥杯经常被调侃说是暴力杯就是因为它有很多题目都是可以通过暴力求解的方式来 AC 的。只要你会写循环,你就能拿奖!
  • 模拟:这个本质上是在锻炼你的代码能力,就是题目要求你干啥你就干啥,并且这个算法也不需要系统地去学习,掌握语法和基本的数据结构之后就可以去刷,我建议这个可以多刷
  • 双指针、滑动窗口、前缀和、差分、位运算、二分、递归、分治
  • DFS:基础的 DFS 需要掌握二叉树的前、中、后序遍历方式。
  • BFS:基础的 BFS 需要掌握二叉树的层序遍历。

T0 级别(进阶):

(下面给出的经典习题没有特别说明均来自力扣)

  • 动态规划:好像往年蓝桥杯被说是 dp 杯来着,dp 就是动态规划,也是蓝桥杯很喜欢的一个算法。我个人觉得学动态规划不要从背包问题开始学,这样容易崩溃。可以从简单的线性dp开始学起,这个比背包问题简单多了,只要你认真去学一定能学好。之后就是子数组、子序列、回文串、两个数组dp之类相关的问题。把动态规划基本了解了之后再去学背包问题就会轻松很多。背包问题优先学习 01背包完全背包,然后是二维费用的背包

    经典习题:

    • 简单一维dp:斐波那契数、爬楼梯…
    • 简单二维dp:不同路径、不同路径Ⅱ、最小路径和…
    • 子序列问题:最长递增子序列…
    • 回文串问题:最长回文串、回文串分割…
    • 两个数组dp:最长公共子序列…
    • 01 背包、完全背包(这俩在牛客上有模板题)
  • 回溯与剪枝(DFS):我个人觉得这是我学起来比较抽象的算法,因为回溯是靠递归实现的,而递归本身就比较难理解,我最大的感受就是:不要总是去关心递归里面到底怎么深入的,要不然会把你绕晕。把递归想象成一个黑盒,你把任务交给这个黑盒,相信这个黑盒一定能完成任务的。

    经典习题:全排列、八皇后、解数独…

  • BFS:稍微进阶一点的 BFS 包括边权为 1 的最短路问题、Floodfill 问题、多源 BFS 和拓扑排序。

    **经典习题:**01矩阵、岛屿数量、课程表…

  • 贪心:我个人感觉贪心是一个神奇的算法,有些贪心题你根据常识就能轻松想得到,有些贪心题就算你刷了 100 到贪心题你还是可能毫无思路。这个算法我觉得吧,还是多积累,积累贪心策略

    经典习题:最大数、最长递增子序列(贪心 + 二分)、优势洗牌(田忌赛马)、合并区间(区间问题)…


T1 级别:

  • 图论:Dijkstra、Floyed、Kruskal、Prim、SPFA、最小生成树
  • 动态规划:学有余力可以再去学多重背包混合背包等等。再然后有时间可以去学学区间dp,树形dp、状压dp
  • 排序:并不是说排序没那么重要,只是我觉得就参加比赛来说,能用库中的排序就足够了,不需要我们手写。但是从长远的角度来看,排序算法本身非常重要,需要掌握基本的 7 大排序。

T2 级别:

  • 字符串相关算法:kmp、马拉车、字符串hash、字典树…
  • 高精度

4. 数学

感觉蓝桥杯前几道题就很喜欢考数学和思维相关的东西。


T0 级别:

  • 唯一分解定理、素数筛、快速幂、gcd、lcm、组合数学

T1 级别:

  • 裴蜀定理、欧拉函数、费马小定理、逆元、扩展欧几里得算法、中国剩余定理、扩展中国剩余定理、欧拉定理、扩展欧拉定理、高斯消元、矩阵快速幂

    别看上面这么多,其实它们很多都是互相关联的,比如费马小定理可以用于求解逆元,扩展欧几里得算法涉及到裴蜀定理和逆元,中国剩余定理又涉及到扩展欧几里得算法…


T2 级别:

  • 计算几何、博弈

四、做题技巧与注意事项

其实是骗分技巧

  • 不要老想着一定要用某某算法去解题,用暴力不是什么可耻的事情,大胆去写循环就完事儿了,蓝桥杯是按通过的测试样例数量来给分的,只要你有样例过了,就有分。
  • 遇到不会做的题没关系,如果这道题明确说明了无解的情况要输出 -1 的话,那么你可以直接打印一个-1(print(-1)),这样能骗不少分。
  • 如果没有说要输出 -1,你可以打印一个随机值。比如 Python 的话就 import random 然后调用对应的函数打印一个随机值。你别看这样希望很渺茫,这个命中的概率真不小(我也不知道原理是什么)。
  • 一些找规律的题不妨通过打表的方式来摸索答案。就是说把一定范围内的答案枚举出来,然后肉眼观察有什么规律。
  • 正式比赛填空题直接交数字,不要 print 不要 printf 不要 cout。但是 OJ 上做题的时候要用输出语句。
  • C/C++ 组的同学记得在 main 函数中加上 return 0,我在有些评论区经常看到有些人忘记加了然后痛苦哀嚎。
  • (如果还有其他的还请大佬们补充)

五、我的题解

试题A 偏蓝 🏆100%

在这里插入图片描述

思路:枚举

这个题比较简单,就是通过循环把所有情况全部枚举出来然后用一个变量记录结果即可。

ans = 0
for k in range(1, 256):for i in range(0, k):for j in range(0, k):ans += 1
print(ans)

最终答案是 5559680,在正式比赛的时候只交这个数字即可。


试题B IPV6 🏆0%

在这里插入图片描述
在这里插入图片描述

恕我直言,我都没怎么读懂题意,当时做这道题的时候想了 5 分钟完全没思路就直接跳过了,到最后也没做出来,还好是个填空题。但好像可以用 dp (?)


试题C 2025图形 🏆100%

在这里插入图片描述
在这里插入图片描述

思路:

这道题也简单,由于数据范围比较小我就直接先打印了一串 2025 然后每行截取一段即可。

st = '2025' * 100  # 其实这里都用不着 100 个 2025, 最少是 50 个
h, w = map(int, input().split())
for i in range(h):print(st[i:i + w])

试题D 最大数字 🏆100%

在这里插入图片描述
在这里插入图片描述

思路:贪心 + 排序

题目意思就是把 1~n 之间的数转换成二进制然后拼接起来组成一个最大的二进制数然后返回它的十进制。比如 3,那么 1~3 这些数转换成二进制就是 1、10、11,把他们拼接在一起组成的最大二进制数就是 11110,对应十进制就是 30。

这个题和力扣上的 “最大数” 的思路几乎一样,由于这个题我记忆犹新,所以在做题的之后马上就反应出来了hhh,所以我说贪心要不断积累贪心策略。首先把 1~n 之间的所有数转换成 2 进制之后,然后开始贪心。这里的贪心策略就是如果 ab (b 拼接在 a 后面) 组成的数字比 ba (a 拼接在 b 后面) 组成的数字大的话,那么最终的二进制数中 a 一定要放在 b 的前面。比如说 100 和 11,11100 明显比 10011 大,所以在最终我们组成的最大二进制数中 11 就要排在 100 的前面。

这里就产生了一种新的排序规则,我们平时排序比如说升序,就是小的放前面大的放后面,现在就需要根据我们上面这样的新的规则进行排序。如何依照这样的规则进行排序就可以用到 cmp_to_key,你需要自己实现这个规则然后传给这个函数他就会根据你的规则进行排序。

import sys 
import functools
sys.set_int_max_str_digits(0) # 由于组成的数字很大,所以把int设置为无上限n = int(input())
a = [bin(x) for x in range(1, n + 1)]  # 把 1~n 所有数字转化成 2 进制然后存储在列表中
def cmp(a, b):  # 重写排序规则return -1 if a + b > b + a else 1  # 这里的规则就是我上面所说的
a = [x[2:] for x in a]  # 把二进制数前面两位无关的符号去掉,只保留数字
a.sort(key = functools.cmp_to_key(cmp))  # 排序
print(int(''.join(a), 2))

试题E 倒水 🏆10%

在这里插入图片描述
在这里插入图片描述

唉,做题做的太少了,都没想到二分,当时还在思考这到底要考啥,暴力也没暴出个名堂。罢了,打印个随机值溜了。

import random
n, k = map(int, input().split())
water = list(map(int, input().split()))
t = sum(water) // nprint(random.randint(1, t))

这样在洛谷的 10 个测试用例中还对了一个,不知道蓝桥杯那边的测试用例怎么样。


试题F 拼好数 🏆40%

在这里插入图片描述
在这里插入图片描述

疑似出题人吃完拼好饭吃多了出的题。这题还是做了挺久的,我当时个人的想法是贪心,先把每个数中 6 的次数统计出来放到列表中并排升序,然后如果 6 的出现次数大于等于 6 就单独成一组,统计一个次数。接着如果能两个一组就两个一组,不能再三个一组。赛后重新看到数据范围——原来是枚举

在洛谷上测评只拿了 40% 的分。

n = int(input())
arr = input().split()
target = [x.count('6') for x in arr]
ret = 0
target.sort()
left_1, left_2, right = 0, 1, n - 1
while right >= 0 and target[right] >= 6:right -= 1ret += 1
while left_2 < right:if target[left_1] + target[right] >= 6:ret += 1left_1 += 1left_2 += 1right -= 1elif target[left_1] + target[left_2] + target[right] >= 6:ret += 1left_1 += 2left_2 += 2right -= 1else:left_1 += 1left_2 += 1
if left_1 < right:if target[left_1] + target[right] >= 6:ret += 1
print(ret)

枚举的思路如下:

对于 6:单独一组

对于 5:可以匹配 1, 2, 3, 4, 5

对于 4:可以匹配(1, 1), 2, 3, 4, 5

对于 3:可以匹配(2, 1),3

对于 2:可以匹配(2, 2)

最后再加上(3, 2, 2)

优先级从上到下从左往右依次递减


试题 G 登山 🏆15%

在这里插入图片描述
在这里插入图片描述

这题我只能想到暴力了,就纯模拟。遇到一个点我就往上下左右走去更新最大值。测试用例 AC 了 15%(我前段时间测还 30% 来着),小部分 WA,其他全是 TLE。

下面展示一下我那不堪入目代码。

n, m = map(int, input().split())
mount = [[]] * ndef get_max1(x, y):a, b = mount[x][y], mount[x][y]for i in range(x + 1):a = max(a, mount[i][y])for j in range(y + 1):b = max(b, mount[x][j])return max(a, b)def get_max2(x, y, n, m):max_num1, max_num2 = mount[x][y], mount[x][y]a, b = mount[x][y], mount[x][y]for i in range(x, n):if mount[i][y] > mount[x][y]:max_num1 = mount[i][y]if mount[i][y] < mount[x][y]:a = max_num1for j in range(y, m):if mount[x][j] > mount[x][y]:max_num2 = mount[x][j]if mount[x][j] < mount[x][y]:b = max_num2return max(a, b)for i in range(n):mount[i] = list(map(int, input().split()))
for i in range(n):for j in range(m):max1 = get_max1(i, j)max2 = get_max2(i, j, n, m)mount[i][j] = max(max1, max2)
ret = sum(map(sum, mount)) / (n * m)
print(f"{ret:.6f}")

试题H 原料采购 🏆20%

在这里插入图片描述
在这里插入图片描述

开始我还想用背包做来着,后来发现不对劲,然后做了半天也没做出来,不管了,直接 print(-1) 走人。还可以骗 20% 的分。

print(-1)

唉,只能说能力还是太差了,稍微套个壳子或者上点难度就不会做了,之后还得多练习。这样算下来可能就 35+ 分左右,如果蓝桥杯官方那边的数据水一点可能能上 40 分。


五、结语

无论怎么样吧,最后我想说,参加蓝桥杯以及其他算法比赛的意义远不止争夺奖项,它更是一个促进你学习进步的一种动力来源。比赛中收获的不仅仅是技术的提升,更是解决问题时的韧性与思维方式。这些恰恰都是书本和课程中无法传授给你的能力,也是未来职场竞技中真正的护城河

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot+Mysql的校园博客系统(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能&#xff1a;首页、个人中心、博主管理、文章分类管理、文章信息管理、举报投诉管理、系统管理&#xff1b;博主功能&#xff1a;首页、个人中心、文章信息管理、举报投诉管理、我的收藏管理&#xff1b;前台首页功能&#xff1a;首页、文章信息、系统公告…

第三次作业(密码学)

#include <stdio.h> #include <stdlib.h> // 计算最大公约数 int gcd(int a, int b) { while (b ! 0) { int temp b; b a % b; a temp; } return a; } // 计算模幂运算 int mod_pow(int base, int exponent, int modulus) { …

3.0/Q1,Charls最新文章解读

文章题目&#xff1a;Association between outdoor artificial light at night and metabolic diseases in middle-aged to older adults-the CHARLS survey DOI&#xff1a;10.3389/fpubh.2025.1515597 中文标题&#xff1a;夜间户外人工光与中老年人代谢性疾病的关联-CHARLS调…

MATLAB 中zerophase函数——零相位响应

零相位响应&#xff08;Zero-Phase Response&#xff09;是指滤波器的幅度函数&#xff0c;但相位为零。滤波器的相位响应为零&#xff0c;意味着不同频率的信号通过滤波器后&#xff0c;其相位不发生任何变化&#xff0c;即信号的波形在时间轴上没有偏移。 零相位响应指的是当…

马克思最基本的哲学思想--改造世界以实现人的自由全面发展--deepseek

马克思的哲学思想可以概括为“改造世界以实现人的自由全面发展”&#xff0c;这句话看似简单&#xff0c;却包含了其哲学的核心逻辑。我们可以从三个层面展开分析&#xff1a; 1. “改造世界”——实践是哲学的终极使命 马克思在《关于费尔巴哈的提纲》中写道&#xff1a; “哲…

JAVA学习-练习试用Java实现“一个简单的文本摘要系统 :基于关键词提取或句子摘要”

问题&#xff1a; java语言编辑&#xff0c;实现一个简单的文本摘要系统 &#xff1a;基于关键词提取或句子摘要。 解答思路&#xff1a; 实现一个简单的文本摘要系统&#xff0c;我们可以采用基于关键词提取的方法。以下是一个简单的Java实现&#xff0c;使用TF-IDF&#xff0…

案例解析:基于量子计算的分子对接-QDOCK(Quantum Docking)

分子对接&#xff08;Moleculardocking&#xff09;在药物发现中具有重要意义&#xff0c;但对接的计算速度和准确率始终难以平衡&#xff0c;其巨大解搜索空间对传统计算机来说异常艰巨。 本文通过引入网格点匹配&#xff08;GPM, Grind point matching&#xff09;和特征原子…

【Mytais系列】Datasource模块:数据源连接

MyBatis 的 DataSource 模块是框架与数据库交互的核心基础设施&#xff0c;负责管理数据库连接的创建、分配、释放及池化&#xff0c;直接影响 SQL 执行效率和资源利用率。以下是其核心内容、功能及在 SQL 执行中的作用详解&#xff1a; 一、DataSource 模块的核心组件 组件 功…

React 组件prop添加类型

给函数的props做注解 import { useState } from reacttype Props { className:string,title?:string } // 自定义一个Button组件 function Button(props:Props){// 解构出classname\const {className} propsreturn <button className{className}>点击我</button&g…

MCP多智能体消息传递机制(Message Passing Between Agents)

目录 &#x1f680; MCP多智能体消息传递机制&#xff08;Message Passing Between Agents&#xff09; &#x1f31f; 为什么要引入消息传递机制&#xff1f; &#x1f3d7;️ 核心设计&#xff1a;Agent间消息传递模型 &#x1f6e0;️ 1. 定义标准消息格式 &#x1f6e…

高中数学联赛模拟试题精选学数学系列第4套几何题

△ A B C \triangle ABC △ABC 的外心为点 O O O, 外接圆为 Γ \Gamma Γ. 射线 A O AO AO, B O BO BO, C O CO CO 分别交 Γ \Gamma Γ 于点 D D D, E E E, F F F. X X X 是 △ A B C \triangle ABC △ABC 内部的一点. 射线 A X AX AX, B X BX BX, C X CX CX 分…

如何实现Prometheus告警规则动态配置

在大部分的项目中都有自定义告警规则的需求&#xff0c;目前市面上都是基于Prometheus实现的监控告警。但是Prometheus本身并不支持修改告警规则自动生效&#xff0c;我们可以通过下面这些步骤实现告警规则动态配置。 1. 启动Promethues并指定参数--web.enable-lifecycle noh…

私人医生通过AI分析基因数据,是否有权提前告知癌症风险?

首席数据官高鹏律师团队编著 在精准医疗的浪潮中&#xff0c;私人医生借助AI技术解析基因数据、预判癌症风险&#xff0c;已成为高端医疗服务的“隐形标配”。然而&#xff0c;这一技术的光环之下&#xff0c;潜藏着法律与伦理的复杂博弈——医生是否有权基于AI的基因分析提前…

TFT(薄膜晶体管)和LCD(液晶显示器)区别

TFT&#xff08;薄膜晶体管&#xff09;和LCD&#xff08;液晶显示器&#xff09;是显示技术中常见的术语&#xff0c;二者既有联系又有区别。以下是它们的核心区别和关系&#xff1a; 1. 基本概念 LCD&#xff08;液晶显示器&#xff09; LCD是一种利用液晶材料特性控制光线通…

Go小技巧易错点100例(二十八)

本期分享&#xff1a; 1. runtime.Caller(1)获取调用者信息 2. for循环 select{}语法 正文&#xff1a; runtime.Caller(1)获取调用者信息 在 Go 语言中&#xff0c;runtime.Caller(1) 是 runtime 包提供的一个函数&#xff0c;用于获取当前 goroutine 的调用堆栈中的特定…

ipvsadm,是一个什么工具?

1. ipvsadm 是什么&#xff1f; ipvsadm&#xff08;IP Virtual Server Administration&#xff09;是 Linux 内核中 IPVS&#xff08;IP Virtual Server&#xff09; 模块的管理工具&#xff0c;用于配置和监控内核级的负载均衡规则。它是 Kubernetes 中 kube-proxy 在 IPVS …

用手机相册教我数组概念——照片分类术[特殊字符][特殊字符]

目录 前言一、现实场景1.1 手机相册的照片管理1.2 照片分类的需求 二、技术映射2.1 数组与照片分类的对应关系2.2 数组索引与照片标签的类比 三、知识点呈现3.1 数组的基本概念3.2 数组在编程中的重要性3.3 数组的定义与初始化3.4 数组的常见操作&#xff08;增删改查&#xff…

Java面试资源获取

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 **1. GitHub开源项目****2. 技术博客与社区*…

spring中的@Conditional注解详解

Conditional是Spring框架中用于条件化Bean注册的核心注解&#xff0c;它允许开发者根据特定条件动态决定是否将Bean注册到Spring容器中。这一特性在模块化开发、多环境适配和动态配置等场景中非常有用。 核心原理 Conditional注解通过实现Condition接口的类来定义条件逻辑。当…

MYSQL-设计表

一.范式 数据库的范式是⼀组规则。在设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数 据库&#xff0c;这些不同的规范要求被称为不同的范式。 关系数据库有六种范式&#xff1a;第⼀范式&#xff08;1NF&#xff09;、第⼆范式&#xff08;…