华为OD机试 - 云服务安全策略最优选择 - 深度优先搜索DFS(Java 新系统 200分)

2026华为OD机考新系统真题 + 双机位C卷 + 往年真题 - 题库目录分值说明 + 考点说明+在线OJ 2026年4月1日起,华为OD机试正式切换至新系统模式!采用力扣模式,无需自己写输入! 难度大幅度降低。正在备考华为OD机试的同学,优先刷新系统机试真题,可大幅提升通过率。 新系统考题考点与旧版一致,无需重新适应。本专栏所有算法题均配有详细思路解析,并提供C语言、JS、C++、Python、Go、Java多语言源码实现。订阅后私信即可开通专属OJ刷题权限,高效备考一次上岸! 阅读详情

在这里插入图片描述

华为OD机试 新系统 题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。

一、题目描述

在云服务中,有 n 个安全策略,编号 1 到 n。每个策略有一个重要度权重(正整数)。某些策略对之间互斥,不能同时启用。
现在需要为某个实例恰好选择 k 个策略,要求:

  1. 选中的策略之间没有互斥关系(即构成一个独立集);

  2. 在满足条件1的所有大小为 k 的策略组合中,使得选中策略的权重之和最大(权重之和就是重要度权重数组中的权重的和)。
    请返回所有满足上述条件的最优策略组合(即权重和最大的所有合法组合)。

二、输入描述

• 第一行:整数 n(策略总数)

• 第二行:整数 k(需要选择的策略数量)

• 第三行:长度为 n 的整数数组 weights,其中 weights[i] 表示策略 i + 1 的权重,字符串表示通过 , 分割

• 第四行:二维整数数组 conflicts,每个元素为 [a, b],表示策略 a 和 b 互斥(无向,无重复边),通过字符串表示,a和b之间通过 , 分割,不同组通过空格分割

数据规模:

• 1 ≤ n ≤ 25

• 0 ≤ k ≤ n

• 1 ≤ weights[i] ≤ 1000

• 0 ≤ conflicts.length ≤ n(n − 1)/2

三、输出描述

• 每个组合内的策略编号按升序排列;

• 所有组合按字典序排列(将每个组合视为一个数字序列);

• 如果没有合法组合(例如不存在大小为 k 的独立集),则返回空数组 []。

注意

• 如果没有大小为 k 的独立集,则返回 空

四、测试用例

测试用例1:

1、输入

4
2
5,1,3,4
1,2 2,3

2、输出

1,4

3、说明

合法的两策略组合中,1,4 的权重为 5+4=9,为唯一最大值。

测试用例2:

1、输入

5
3
3,4,3,4,3
1,3 2,4 3,5

2、输出

1,2,5 1,4,5

3、说明

1,2,5 和 1,4,5 均不存在内部冲突,权重都为 10,并且已经按照字典序输出。

五、解题思路

把 n 个安全策略看成图中的 n 个顶点,互斥关系看成无向边,题目实际要求寻找“大小恰好为 k 的最大权独立集”,并输出所有权重和相同的最优方案。

由于 n 最大只有 25,可以采用 DFS 回溯枚举组合。为了快速判断新选择的策略是否与已经选择的策略冲突,使用一个整数位掩码表示当前已选择策略,同时为每个策略维护 conflictMask:若 conflictMask[i] 的第 j 位为 1,说明策略 i 与策略 j 互斥。判断能否选择策略 i 只需执行 conflictMask[i] & selectedMask,复杂度为 O(1)。

单纯回溯最坏情况下需要枚举大量组合,因此增加一个 DP 乐观上界 upper[i][c]:表示从策略 i 到 n-1 中暂时忽略互斥关系、恰好再选 c 个策略时能够获得的最大权重。忽略冲突后的结果一定不小于真实可行结果,因此如果“当前权重 + upper”仍小于已经找到的最优权重,该分支一定不可能产生最优解,可以安全剪枝。

算法执行两遍 DFS。第一遍只计算最大权重 bestSum,不保存方案;第二遍再次按策略编号从小到大搜索,只输出权重恰好等于 bestSum 的方案。由于 DFS 始终按编号递增选择,所以每个组合内部天然升序,所有组合也天然按照字典序输出,无需额外排序。

预处理 upper 的复杂度为 O(nk),搜索最坏仍可能达到 O(2^n),这是一般图最大权独立集问题本身的性质;但 n≤25,并结合选取数量限制、冲突判断和上界剪枝后具有较好的实际性能。除递归路径和 upper 外不保存全部答案,额外空间约为 O(nk+n)。

六、Java算法源码

public class OdTest {
    static int n, k;
    static int[] weights;

    // conflictMask[i]:与策略 i 互斥的所有策略的位集合
    static long[] conflictMask;

    /*
     * upper[i][c]:
     * 从 i ~ n-1 中忽略互斥关系,恰好选择 c 个策略时,
     * 可以获得的最大权重和。
     *
     * 因为忽略了互斥关系,所以它一定是实际可行解的“乐观上界”,
     * 可以用来进行安全剪枝。
     */
    static long[][] upper;

    static long bestSum = Long.MIN_VALUE;

    // 表示 upper 中“不可能恰好选择指定数量”的状态
    static final long NEG = Long.MIN_VALUE / 4;

    // 第二遍 DFS 输出时,用于控制不同组合之间的空格
    static boolean firstOutput = true;

    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);

        n = Integer.parseInt(sc.nextLine().trim());
        k = Integer.parseInt(sc.nextLine().trim());

        String[] weightParts = sc.nextLine().trim().split(",");
        weights = new int[n];

        for (int i = 0; i < n; i++) {
            weights[i] = Integer.parseInt(weightParts[i].trim());
        }

        /*
         * n <= 25,一个 long 足够表示所有策略。
         * 第 j 位为 1 表示与策略 j 存在互斥关系。
         */
        conflictMask = new long[n];

        String conflictLine = sc.hasNextLine()
                ? sc.nextLine().trim()
                : "";

        if (!conflictLine.isEmpty()) {
            String[] pairs = conflictLine.split("\\s+");

            for (String pair : pairs) {
                String[] ab = pair.split(",");

                int a = Integer.parseInt(ab[0].trim()) - 1;
                int b = Integer.parseInt(ab[1].trim()) - 1;

                // 互斥关系是无向边,因此两个方向都需要记录
                conflictMask[a] |= 1L << b;
                conflictMask[b] |= 1L << a;
            }
        }

        buildUpperBound();

        /*
         * 第一遍 DFS:
         * 只寻找最大权重 bestSum,不保存具体组合。
         *
         * 这样即使最优组合数量非常多,也不会在这里消耗大量内存。
         */
        dfsBest(0, k, 0L, 0L);

        BufferedWriter out =
                new BufferedWriter(new OutputStreamWriter(System.out));

        /*
         * 不存在大小为 k 的独立集时输出 []。
         *
         * k = 0 时数学上存在一个“空组合”,这里按照题目的数组输出形式
         * 同样使用 [] 表示。
         */
        if (bestSum == Long.MIN_VALUE || k == 0) {
            out.write("[]");
            out.newLine();
            out.flush();
            return;
        }

        /*
         * 第二遍 DFS:
         * 重新搜索,只输出权重和等于 bestSum 的方案。
         *
         * DFS 按编号升序搜索,因此无需额外排序。
         */
        dfsPrint(
                0,
                k,
                0L,
                0L,
                new ArrayList<>(),
                out
        );

        out.newLine();
        out.flush();
    }

    /**
     * 构造 DFS 使用的乐观上界。
     */
    static void buildUpperBound() {
        upper = new long[n + 1][k + 1];

        Arrays.fill(upper[n], NEG);
        upper[n][0] = 0;

        /*
         * 类似 0/1 背包:
         *
         * upper[i][need] 有两种情况:
         * 1. 不选择策略 i
         * 2. 选择策略 i
         *
         * 注意这里故意不考虑互斥关系,因为我们需要的是一个
         * “一定不会低估真实最大值”的乐观上界。
         */
        for (int i = n - 1; i >= 0; i--) {
            Arrays.fill(upper[i], NEG);
            upper[i][0] = 0;

            for (int need = 1; need <= k; need++) {
                long skip = upper[i + 1][need];

                long take =
                        upper[i + 1][need - 1] == NEG
                                ? NEG
                                : weights[i]
                                + upper[i + 1][need - 1];

                upper[i][need] = Math.max(skip, take);
            }
        }
    }

    /**
     * 第一遍 DFS:寻找最大的权重和。
     *
     * @param start        下一次可以选择的最小策略下标
     * @param need         还需要选择多少个策略
     * @param selectedMask 当前已经选择的策略集合
     * @param sum          当前权重和
     */
    static void dfsBest(
            int start,
            int need,
            long selectedMask,
            long sum
    ) {

        // 已经恰好选择 k 个策略
        if (need == 0) {
            bestSum = Math.max(bestSum, sum);
            return;
        }

        // 剩余策略数量不足,不可能选满 need 个
        if (n - start < need) {
            return;
        }

        /*
         * upper[start][need] 是忽略所有冲突后的理论最大增量。
         *
         * 如果:
         * 当前权重 + 理论最大增量 < 当前已经找到的最优值
         *
         * 那么这个分支无论如何都不可能成为最优方案,可以直接剪枝。
         */
        if (upper[start][need] == NEG
                || (bestSum != Long.MIN_VALUE
                && sum + upper[start][need] < bestSum)) {
            return;
        }

        /*
         * 始终按照策略编号由小到大选择。
         *
         * i 最大只能到 n - need,
         * 否则后面剩余策略数量不足以选满 need 个。
         */
        for (int i = start; i <= n - need; i++) {

            /*
             * conflictMask[i] & selectedMask != 0
             *
             * 表示策略 i 与当前已经选择的至少一个策略互斥,
             * 因而不能加入当前组合。
             */
            if ((conflictMask[i] & selectedMask) != 0) {
                continue;
            }

            dfsBest(
                    i + 1,
                    need - 1,
                    selectedMask | (1L << i),
                    sum + weights[i]
            );
        }
    }

    /**
     * 第二遍 DFS:输出所有权重等于 bestSum 的方案。
     */
    static void dfsPrint(
            int start,
            int need,
            long selectedMask,
            long sum,
            List<Integer> path,
            BufferedWriter out
    ) throws IOException {

        if (need == 0) {
            if (sum == bestSum) {

                if (!firstOutput) {
                    out.write(' ');
                }

                firstOutput = false;

                for (int i = 0; i < path.size(); i++) {
                    if (i > 0) {
                        out.write(',');
                    }

                    out.write(String.valueOf(path.get(i)));
                }
            }

            return;
        }

        // 剩余数量不够
        if (n - start < need) {
            return;
        }

        /*
         * 第二遍已经知道目标 bestSum。
         *
         * 如果该分支在最乐观情况下都达不到 bestSum,
         * 则不可能包含任何最优组合。
         */
        if (upper[start][need] == NEG
                || sum + upper[start][need] < bestSum) {
            return;
        }

        /*
         * 按编号递增枚举:
         * 1. 单个组合内部一定升序;
         * 2. 不同组合天然按照字典序产生。
         */
        for (int i = start; i <= n - need; i++) {

            if ((conflictMask[i] & selectedMask) != 0) {
                continue;
            }

            path.add(i + 1);

            dfsPrint(
                    i + 1,
                    need - 1,
                    selectedMask | (1L << i),
                    sum + weights[i],
                    path,
                    out
            );

            // 回溯,撤销刚才选择的策略
            path.remove(path.size() - 1);
        }
    }
}

七、效果展示

1、输入

6
3
5,5,5,5,1,1
1,2 3,4

2、输出

1,3,5 1,3,6 1,4,5 1,4,6 2,3,5 2,3,6 2,4,5 2,4,6

3、说明

策略 1、2 不能同时选,3、4 不能同时选。因此最优方案必须分别从 {1,2}、{3,4} 中选一个,再从 {5,6} 中选一个,共有 2×2×2=8 个并列最优解。
在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 新系统 200分)

🏆本专栏收录于《华为OD机试(JAVA)真题》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。

在这里插入图片描述

CST软件中SPICE模型的高效导出与转换技巧(txt到cir实战指南) 本文详细介绍了在CST Studio Suite中高效导出与转换SPICE模型的实战技巧,重点讲解了如何将txt格式的模型转换为通用的cir格式。内容涵盖三种模型存在形式的处理方法、格式检查与内容清理、端口一致性验证等关键步骤,并提供了利用LTspice Export功能、批处理脚本以及结果一致性校验等进阶指南,帮助工程师实现场路协同仿真模型的无缝迁移与应用。 阅读详情

相关推荐

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8657

华为OD机试 - 云服务安全策略最优选择 - 深度优先搜索DFS(Python/JS/C/C++/Go 新系统 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++/Go)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。在云服务中,有 n 个安全策略,编号 1 到 n。每个策略有一个重要度权重(正整数)。某些策略对之间互斥,不能同时启用。 现在需要为某个实例恰好选择 k 个策略,要求:选中的策略之间没有互斥关系(即构成一个独立集);在满足条件1的

学Java,找哪吒 192

西门子博图编程:使用S7-1500冗余PLC 建立ModbusTCP通信

文章目录1.1 网络结构1.2 系统 IP 介绍1.3 Modbus TCP 通讯编程1.3.1 CPU 做服务器 1.1 网络结构 以 CPU151 7H 为例, 网络结构示意如下图所示: CPU 1517H 冗余 PLC 有 PROFINET X1 接口和 X2 接口, Modbus TCP 通讯可以将设备(例如 Standard PLC)通过交换机接入到任何网络接口中。如果接入 X1 接口,需要通过交换机接入到 MRP 环网中,但是并不需要支持 H-sync 转发。如果接入 X2 接口,只需要使

2万+

Scrum 敏捷框架完全指南

形式化的质量检查清单,只有满足 DoD 的增量才能交付。

Cat_fish_snow的博客 354

山东大学软件学院计算机组成原理课程设计实验二

文章目录一、实验时间二、实验内容1.设计异步模16加1计数器2.设计4位移位器3.超前进位16位ALU的设计 一、实验时间 2021年4月1日星期四,第五周 二、实验内容 1.设计异步模16加1计数器 基本功能:使用D触发器(dff元件)和异或门构建从0开始计数的模16加1计数器 对应的电路图(这里已经实现了预置初值的功能) 拓展功能: (1)实现模256加1计数器 (2)实现计数器预置初值的功能 这里复用了上面的模16加1计数器 这里异步触发器预置初值的功能是这样实现的: (1)首先将CLR端调为0,

叶卡捷琳堡的博客 5242

高效计算斐波那契数列的C++实现及源码

斐波那契数列是一个非常经典的数学问题,通常递归方式计算斐波那契数列的时候会有很大的时间复杂度问题。首先,我们需要了解斐波那契数列的定义:斐波那契数列是指前两个数都为1,从第三个开始每个数都等于它前面两个数之和。因此,斐波那契数列的前几项为:1、1、2、3、5、8、13、21……在这个代码中,我们首先判断n是否特殊情况(即n等于0、1、2),然后通过循环计算得出对应的斐波那契数列值。通过这个例子,我们可以发现使用C++语言实现高效斐波那契数列计算的代码简单、易懂,并且时间复杂度相比递归方式有了很大的提升。

TechInk的博客 546

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 203

麒麟操作系统提示“默认密钥环已上锁”的解决办法

麒麟操作系统提示“默认密钥环已上锁”的解决办法

太极淘的博客 1万+

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 132

一张图讲透银行个人外汇业务逻辑和实操

个人外汇业务主要分为结售汇和外币兑换两类,前者满足日常跨境需求,后者因投机属性多数银行已暂停。业务核心是利用汇率波动实现货币兑换,满足支付或投资需求。交易涉及客户分类、主流币种、多种渠道和汇率计算规则,需区分直接/间接标价法判断汇率走势。银行通过"货币兑换"科目核算损益,采用期末折算确认盈亏。监管要求包括5万美元年度额度、合法渠道、真实性原则及大额申报等。随着跨境金融数字化发展,掌握基础逻辑和合规要求是安全参与外汇业务的关键。

银行信息系统应用架构详解 286

【ARMv8 异常模型入门及渐进7 - GIC及安全中断介绍】

GIC-v3中,引入了支持2种安全状态(secure state),也就是对于中断,根据secure状态,分为安全中断和非安全中断。当然也可以只支持一种安全状态。这里的2种安全状态和1种安全状态,主要是影响中断分组,所使用IRQ和FIQ管脚的映射,以及gic中的寄存器访问。

CodingCos的博客 2115

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 93

可编程逻辑控制器(PLC)系列:Mitsubishi MELSEC-Q_(8).MELSEC-Q系列PLC故障诊断与维护

MELSEC-Q系列PLC的故障诊断与维护是一个系统性的过程,需要工程师具备扎实的理论基础和丰富的实践经验。通过了解故障类型、使用诊断工具、遵循诊断步骤,可以有效地定位和解决故障问题。同时,定期的检查与保养、备份与恢复、优化程序和配置,以及提供良好的运行环境,可以减少故障的发生,提高系统的可靠性。希望本文能够帮助工程师在故障诊断与维护过程中更加得心应手,确保MELSEC-Q系列PLC的稳定运行。

2401_87715305的博客 1246

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 184

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 342

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 98

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring MVC 拦截器 Interceptor 详解:从执行流程到实战应用

Spring MVC 拦截器(Interceptor)是 Spring 官方提供的请求处理机制,可在请求到达 Controller 前、后及完成后插入自定义逻辑。它基于 HandlerInterceptor 接口,提供 preHandle(前置)、postHandle(后置)和 afterCompletion(完成)三个方法,支持登录校验、权限控制、日志记录等场景。与 Filter 相比,拦截器由 Spring 管理,可直接注入 Bean,作用于 DispatcherServlet 处理的请求。通过 Web

weixin_51288065的博客 321

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 373

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 583

从Socket到UDP回显服务器:Java网络编程完整指南

本文讲解 UDP 协议与 Java 数据报套接字编程:Socket 概念与分类、UDP 四大特点、DatagramSocket 与 DatagramPacket核心 API,并完整实现一个 UDP 回显服务器与客户端。

2502_92960941的博客 240

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 366

java框架大全

java框架大全

qq_39326137的博客 168

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 276

【共创稿事节】组件复用与@Reusable

组件复用实践:复用ID分池、aboutToReuse回填清单、状态串卡排查、命中率观测与不适合复用的边界。

2401_84996024的博客 395

Java 虚拟线程不是“更快的线程”:原理、适用场景与落地误区

Java 21 引入的虚拟线程为高并发阻塞场景提供新解:在保持同步代码简洁的同时,通过“一任务一线程”降低等待时的资源消耗。其核心优势在于释放被阻塞的载体线程,提升吞吐,而非加速计算或减少外部调用时间。适用于大量 I/O 等待的场景,如数据库、HTTP 调用,但不适用于 CPU 密集型任务或无限制访问下游服务。需避免池化虚拟线程、误用 ThreadLocal,并结合连接池、限流等机制保障系统稳定。虚拟线程不是“更快的线程”,而是更高效的资源调度方式。

此人很懒,什么都没有写~~ 188

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 269
上一篇: 华为OD机试 - 最小极差分组(Python/JS/C/C++/Go 新系统 100分)
下一篇: 华为OD机试 - 云服务安全策略最优选择 - 深度优先搜索DFS(Python/JS/C/C++/Go 新系统 200分)
哪 吒
哪 吒 2022年度博客之星TOP 1 2022年度博客之星TOP 1 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 59万+粉丝 2933原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值