【2024年华为OD机试】(C卷,100分)- 悄悄话 (Java JS PythonC/C++)

在这里插入图片描述

一、问题描述

题目描述

给定一个二叉树,每个节点上站一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。

初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。

输入描述

给定二叉树的层序遍历序列:

0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2

注:-1表示空节点。

输出描述

返回所有节点都接收到悄悄话花费的时间。

38

用例

输入

0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2

输出

38

说明

题目解析

层序遍历序列与二叉树结构

题目给出的输入信息是二叉树的层序遍历序列。层序遍历序列中,父子节点存在如下关系:

  • 如果父节点在序列中的索引是k,则其左子节点在序列中的索引为2k+1,右子节点在序列中的索引为2k+2

通过这种关系,我们可以直接从层序遍历序列中推导出二叉树的结构,而无需显式地构建二叉树。

悄悄话传递的时延计算

初始时,根节点所在位置的人有一个悄悄话想要传递给其他人。传递过程中,父节点将自身得到消息的时延累加到其各个子节点上。具体来说:

  1. 根节点的时延为0
  2. 对于每个非空节点,其左子节点的时延为父节点的时延加上左子节点的传递时间。
  3. 对于每个非空节点,其右子节点的时延为父节点的时延加上右子节点的传递时间。

最终,所有节点都接收到悄悄话花费的时间就是所有叶子节点中最大的时延值。

示例解析

以输入序列0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2为例:

  1. 根节点的时延为0
  2. 左子节点的时延为0 + 9 = 9
  3. 右子节点的时延为0 + 20 = 20
  4. 左子节点的左子节点为空,右子节点的左子节点的时延为20 + 15 = 35
  5. 右子节点的右子节点的时延为20 + 7 = 27
  6. 左子节点的右子节点的左子节点的时延为35 + 3 = 38
  7. 左子节点的右子节点的右子节点的时延为35 + 2 = 37

最终,所有叶子节点中最大的时延值为38,因此所有节点都接收到悄悄话花费的时间为38

通过这种方式,我们可以直接从层序遍历序列中计算出所有节点接收到悄悄话的总时间。

二、JavaScript算法源码

以下是对您提供的 JavaScript 代码的详细注释和讲解:

// 引入 readline 模块,并创建接口实例
const rl = require("readline").createInterface({ input: process.stdin });// 获取异步迭代器,用于逐行读取输入
var iter = rl[Symbol.asyncIterator]();// 定义异步函数 readline,用于读取一行输入
const readline = async () => (await iter.next()).value;// 立即执行异步函数
void (async function () {// 读取第一行输入,并将其按空格分割成数组,转换为数字数组 timesconst times = (await readline()).split(" ").map(Number);// 初始化变量 ans,用于记录最终结果(最大时延)let ans = 0;// 使用队列进行广度优先搜索(BFS),初始时将根节点(索引为 0)加入队列const queue = [0];// 当队列不为空时,继续处理while (queue.length > 0) {// 取出队列中的第一个节点(父节点)const fa = queue.shift();// 计算左子节点和右子节点的索引const ch1 = 2 * fa + 1; // 左子节点索引const ch2 = 2 * fa + 2; // 右子节点索引// 判断左子节点是否存在const ch1_exist = ch1 < times.length && times[ch1] != -1;// 判断右子节点是否存在const ch2_exist = ch2 < times.length && times[ch2] != -1;// 如果左子节点存在if (ch1_exist) {// 将父节点的时延累加到左子节点times[ch1] += times[fa];// 将左子节点加入队列,继续处理queue.push(ch1);}// 如果右子节点存在if (ch2_exist) {// 将父节点的时延累加到右子节点times[ch2] += times[fa];// 将右子节点加入队列,继续处理queue.push(ch2);}// 如果当前节点是叶子节点(没有左子节点和右子节点)if (!ch1_exist && !ch2_exist) {// 更新最大时延 ansans = Math.max(ans, times[fa]);}}// 输出最终结果(最大时延)console.log(ans);
})();

代码功能讲解:

  1. 输入部分

    • 使用 readline 模块从控制台读取输入。
    • 第一行输入是一个数组 times,表示每个节点的时延值,-1 表示节点不存在。
  2. 广度优先搜索(BFS)

    • 使用队列实现 BFS,从根节点(索引为 0)开始遍历二叉树。
    • 对于每个节点,计算其左子节点和右子节点的索引。
    • 如果子节点存在,则将父节点的时延累加到子节点,并将子节点加入队列。
  3. 叶子节点处理

    • 如果当前节点是叶子节点(没有左子节点和右子节点),则更新最大时延 ans
  4. 输出结果

    • 输出所有叶子节点中的最大时延。

示例运行:

假设输入如下:

1 2 3 -1 -1 4 5

程序会构建二叉树并计算每个叶子节点的时延:

9

总结:

该代码的主要功能是通过广度优先搜索(BFS)遍历二叉树,计算每个叶子节点的时延,并输出最大时延。通过队列和累加时延的方式,代码实现了对输入数据的处理和结果计算。

三、Java算法源码

以下是对您提供的 Java 代码的详细注释和讲解:

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;public class Main {public static void main(String[] args) {// 创建 Scanner 对象,用于读取控制台输入Scanner sc = new Scanner(System.in);// 读取一行输入,按空格分割成字符串数组,并将其转换为整数数组 timesint[] times = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 初始化变量 ans,用于记录最终结果(最大时延)int ans = 0;// 使用 LinkedList 实现队列,用于广度优先搜索(BFS)LinkedList<Integer> queue = new LinkedList<>();// 将根节点(索引为 0)加入队列queue.addLast(0);// 当队列不为空时,继续处理while (queue.size() > 0) {// 取出队列中的第一个节点(父节点)int fa = queue.removeFirst();// 计算左子节点和右子节点的索引int ch1 = 2 * fa + 1; // 左子节点索引int ch2 = 2 * fa + 2; // 右子节点索引// 判断左子节点是否存在boolean ch1_exist = ch1 < times.length && times[ch1] != -1;// 判断右子节点是否存在boolean ch2_exist = ch2 < times.length && times[ch2] != -1;// 如果左子节点存在if (ch1_exist) {// 将父节点的时延累加到左子节点times[ch1] += times[fa];// 将左子节点加入队列,继续处理queue.addLast(ch1);}// 如果右子节点存在if (ch2_exist) {// 将父节点的时延累加到右子节点times[ch2] += times[fa];// 将右子节点加入队列,继续处理queue.addLast(ch2);}// 如果当前节点是叶子节点(没有左子节点和右子节点)if (!ch1_exist && !ch2_exist) {// 更新最大时延 ansans = Math.max(ans, times[fa]);}}// 输出最终结果(最大时延)System.out.println(ans);}
}

代码功能讲解:

  1. 输入部分

    • 使用 Scanner 从控制台读取一行输入。
    • 将输入按空格分割成字符串数组,并转换为整数数组 times,表示每个节点的时延值,-1 表示节点不存在。
  2. 广度优先搜索(BFS)

    • 使用 LinkedList 实现队列,从根节点(索引为 0)开始遍历二叉树。
    • 对于每个节点,计算其左子节点和右子节点的索引。
    • 如果子节点存在,则将父节点的时延累加到子节点,并将子节点加入队列。
  3. 叶子节点处理

    • 如果当前节点是叶子节点(没有左子节点和右子节点),则更新最大时延 ans
  4. 输出结果

    • 输出所有叶子节点中的最大时延。

示例运行:

假设输入如下:

1 2 3 -1 -1 4 5

程序会构建二叉树并计算每个叶子节点的时延:

9

总结:

该代码的主要功能是通过广度优先搜索(BFS)遍历二叉树,计算每个叶子节点的时延,并输出最大时延。通过队列和累加时延的方式,代码实现了对输入数据的处理和结果计算。

四、Python算法源码

以下是对您提供的 Python 代码的详细注释和讲解:

# 输入获取
# 从控制台读取一行输入,按空格分割成字符串列表,并将其转换为整数列表 times
times = list(map(int, input().split()))# 算法入口
def getResult():# 初始化变量 ans,用于记录最终结果(最大时延)ans = 0# 使用列表实现队列,用于广度优先搜索(BFS)# 将根节点(索引为 0)加入队列queue = [0]# 当队列不为空时,继续处理while len(queue) > 0:# 取出队列中的第一个节点(父节点)fa = queue.pop(0)# 计算左子节点和右子节点的索引ch1 = 2 * fa + 1  # 左子节点索引ch2 = 2 * fa + 2  # 右子节点索引# 判断左子节点是否存在ch1_exist = ch1 < len(times) and times[ch1] != -1# 判断右子节点是否存在ch2_exist = ch2 < len(times) and times[ch2] != -1# 如果左子节点存在if ch1_exist:# 将父节点的时延累加到左子节点times[ch1] += times[fa]# 将左子节点加入队列,继续处理queue.append(ch1)# 如果右子节点存在if ch2_exist:# 将父节点的时延累加到右子节点times[ch2] += times[fa]# 将右子节点加入队列,继续处理queue.append(ch2)# 如果当前节点是叶子节点(没有左子节点和右子节点)if not ch1_exist and not ch2_exist:# 更新最大时延 ansans = max(ans, times[fa])# 返回最终结果(最大时延)return ans# 算法调用
print(getResult())

代码功能讲解:

  1. 输入部分

    • 使用 input() 从控制台读取一行输入。
    • 将输入按空格分割成字符串列表,并转换为整数列表 times,表示每个节点的时延值,-1 表示节点不存在。
  2. 广度优先搜索(BFS)

    • 使用列表实现队列,从根节点(索引为 0)开始遍历二叉树。
    • 对于每个节点,计算其左子节点和右子节点的索引。
    • 如果子节点存在,则将父节点的时延累加到子节点,并将子节点加入队列。
  3. 叶子节点处理

    • 如果当前节点是叶子节点(没有左子节点和右子节点),则更新最大时延 ans
  4. 输出结果

    • 输出所有叶子节点中的最大时延。

示例运行:

假设输入如下:

1 2 3 -1 -1 4 5

程序会构建二叉树并计算每个叶子节点的时延:

9

总结:

该代码的主要功能是通过广度优先搜索(BFS)遍历二叉树,计算每个叶子节点的时延,并输出最大时延。通过队列和累加时延的方式,代码实现了对输入数据的处理和结果计算。

五、C/C++算法源码:


C 语言代码注释和讲解

#include <stdio.h>
#include <stdlib.h>// 定义宏 MAX,用于比较两个数的大小
#define MAX(a,b) ((a) > (b) ? (a) : (b))// 定义数组的最大大小
#define MAX_SIZE 10000// 定义链表节点结构体
typedef struct ListNode {int ele;                // 节点存储的值struct ListNode *next;  // 指向下一个节点的指针
} ListNode;// 定义链表结构体
typedef struct LinkedList {int size;       // 链表的长度ListNode *head; // 指向链表头节点的指针ListNode *tail; // 指向链表尾节点的指针
} LinkedList;// 创建一个新的链表
LinkedList *new_LinkedList() {LinkedList *link = (LinkedList *) malloc(sizeof(LinkedList));link->size = 0;link->head = NULL;link->tail = NULL;return link;
}// 向链表尾部添加一个节点
void addLast_LinkedList(LinkedList *link, int ele) {ListNode *listNode = (ListNode *) malloc(sizeof(ListNode));listNode->ele = ele;listNode->next = NULL;if (link->size == 0) {// 如果链表为空,新节点既是头节点也是尾节点link->head = listNode;link->tail = listNode;} else {// 否则将新节点添加到链表尾部link->tail->next = listNode;link->tail = listNode;}link->size++; // 链表长度加 1
}// 移除链表的第一个节点并返回其值
int removeFirst_LinkedList(LinkedList* link) {if (link->size == 0) exit(-1); // 如果链表为空,退出程序ListNode* removed = link->head;if (link->size == 1) {// 如果链表只有一个节点,移除后链表为空link->head = NULL;link->tail = NULL;} else {// 否则将头节点指向下一个节点link->head = link->head->next;}link->size--; // 链表长度减 1int res = removed->ele; // 获取移除节点的值free(removed); // 释放移除节点的内存return res;
}int main() {int times[MAX_SIZE]; // 存储输入的时延数组int times_size = 0;  // 时延数组的大小// 从控制台读取输入,直到遇到换行符while (scanf("%d", &times[times_size++])) {if (getchar() != ' ') break;}// 记录最终结果(最大时延)int ans = 0;// 创建一个链表作为队列,用于广度优先搜索(BFS)LinkedList* queue = new_LinkedList();addLast_LinkedList(queue, 0); // 将根节点(索引为 0)加入队列// 当队列不为空时,继续处理while (queue->size > 0) {int fa = removeFirst_LinkedList(queue); // 取出队列中的第一个节点(父节点)int ch1 = 2 * fa + 1; // 左子节点索引int ch2 = 2 * fa + 2; // 右子节点索引// 判断左子节点是否存在int ch1_exist = ch1 < times_size && times[ch1] != -1;// 判断右子节点是否存在int ch2_exist = ch2 < times_size && times[ch2] != -1;// 如果左子节点存在if (ch1_exist) {times[ch1] += times[fa]; // 将父节点的时延累加到左子节点addLast_LinkedList(queue, ch1); // 将左子节点加入队列}// 如果右子节点存在if (ch2_exist) {times[ch2] += times[fa]; // 将父节点的时延累加到右子节点addLast_LinkedList(queue, ch2); // 将右子节点加入队列}// 如果当前节点是叶子节点(没有左子节点和右子节点)if (!ch1_exist && !ch2_exist) {ans = MAX(ans, times[fa]); // 更新最大时延}}// 输出最终结果(最大时延)printf("%d\n", ans);return 0;
}

C++ 代码版本

C++ 提供了标准库中的 queue,可以简化队列的实现。以下是 C++ 版本的代码:

#include <iostream>
#include <queue>
#include <algorithm>using namespace std;int main() {int times[10000]; // 存储输入的时延数组int times_size = 0; // 时延数组的大小// 从控制台读取输入,直到遇到换行符while (cin >> times[times_size++]) {if (cin.get() != ' ') break;}// 记录最终结果(最大时延)int ans = 0;// 使用 STL 的 queue 作为队列,用于广度优先搜索(BFS)queue<int> q;q.push(0); // 将根节点(索引为 0)加入队列// 当队列不为空时,继续处理while (!q.empty()) {int fa = q.front(); // 取出队列中的第一个节点(父节点)q.pop();int ch1 = 2 * fa + 1; // 左子节点索引int ch2 = 2 * fa + 2; // 右子节点索引// 判断左子节点是否存在bool ch1_exist = ch1 < times_size && times[ch1] != -1;// 判断右子节点是否存在bool ch2_exist = ch2 < times_size && times[ch2] != -1;// 如果左子节点存在if (ch1_exist) {times[ch1] += times[fa]; // 将父节点的时延累加到左子节点q.push(ch1); // 将左子节点加入队列}// 如果右子节点存在if (ch2_exist) {times[ch2] += times[fa]; // 将父节点的时延累加到右子节点q.push(ch2); // 将右子节点加入队列}// 如果当前节点是叶子节点(没有左子节点和右子节点)if (!ch1_exist && !ch2_exist) {ans = max(ans, times[fa]); // 更新最大时延}}// 输出最终结果(最大时延)cout << ans << endl;return 0;
}

代码功能总结

  1. 输入部分

    • 从控制台读取一行输入,按空格分割成整数数组 times,表示每个节点的时延值,-1 表示节点不存在。
  2. 广度优先搜索(BFS)

    • 使用队列从根节点(索引为 0)开始遍历二叉树。
    • 对于每个节点,计算其左子节点和右子节点的索引。
    • 如果子节点存在,则将父节点的时延累加到子节点,并将子节点加入队列。
  3. 叶子节点处理

    • 如果当前节点是叶子节点(没有左子节点和右子节点),则更新最大时延 ans
  4. 输出结果

    • 输出所有叶子节点中的最大时延。

示例运行

假设输入如下:

1 2 3 -1 -1 4 5

程序会构建二叉树并计算每个叶子节点的时延:

9

总结

  • C 语言版本通过手动实现链表和队列来完成 BFS。
  • C++ 版本利用 STL 的 queue 简化了队列的实现。
  • 两种版本的核心逻辑相同,都是通过 BFS 遍历二叉树,计算叶子节点的最大时延。

六、尾言

什么是华为OD?

华为OD(Outsourcing Developer,外包开发工程师)是华为针对软件开发工程师岗位的一种招聘形式,主要包括笔试、技术面试以及综合面试等环节。尤其在笔试部分,算法题的机试至关重要。

为什么刷题很重要?

  1. 机试是进入技术面的第一关:
    华为OD机试(常被称为机考)主要考察算法和编程能力。只有通过机试,才能进入后续的技术面试环节。

  2. 技术面试需要手撕代码:
    技术一面和二面通常会涉及现场编写代码或算法题。面试官会注重考察候选人的思路清晰度、代码规范性以及解决问题的能力。因此提前刷题、多练习是通过面试的重要保障。

  3. 入职后的可信考试:
    入职华为后,还需要通过“可信考试”。可信考试分为三个等级:

    • 入门级:主要考察基础算法与编程能力。
    • 工作级:更贴近实际业务需求,可能涉及复杂的算法或与工作内容相关的场景题目。
    • 专业级:最高等级,考察深层次的算法以及优化能力,与薪资直接挂钩。

刷题策略与说明:

2024年8月14日之后,华为OD机试的题库转为 E卷,由往年题库(D卷、A卷、B卷、C卷)和全新题目组成。刷题时可以参考以下策略:

  1. 关注历年真题:

    • 题库中的旧题占比较大,建议优先刷历年的A卷、B卷、C卷、D卷题目。
    • 对于每道题目,建议深度理解其解题思路、代码实现,以及相关算法的适用场景。
  2. 适应新题目:

    • E卷中包含全新题目,需要掌握全面的算法知识和一定的灵活应对能力。
    • 建议关注新的刷题平台或交流群,获取最新题目的解析和动态。
  3. 掌握常见算法:
    华为OD考试通常涉及以下算法和数据结构:

    • 排序算法(快速排序、归并排序等)
    • 动态规划(背包问题、最长公共子序列等)
    • 贪心算法
    • 栈、队列、链表的操作
    • 图论(最短路径、最小生成树等)
    • 滑动窗口、双指针算法
  4. 保持编程规范:

    • 注重代码的可读性和注释的清晰度。
    • 熟练使用常见编程语言,如C++、Java、Python等。

如何获取资源?

  1. 官方参考:

    • 华为招聘官网或相关的招聘平台会有一些参考信息。
    • 华为OD的相关公众号可能也会发布相关的刷题资料或学习资源。
  2. 加入刷题社区:

    • 找到可信的刷题交流群,与其他备考的小伙伴交流经验。
    • 关注知名的刷题网站,如LeetCode、牛客网等,这些平台上有许多华为OD的历年真题和解析。
  3. 寻找系统性的教程:

    • 学习一本经典的算法书籍,例如《算法导论》《剑指Offer》《编程之美》等。
    • 完成系统的学习课程,例如数据结构与算法的在线课程。

积极心态与持续努力:

刷题的过程可能会比较枯燥,但它能够显著提升编程能力和算法思维。无论是为了通过华为OD的招聘考试,还是为了未来的职业发展,这些积累都会成为重要的财富。

考试注意细节

  1. 本地编写代码

    • 在本地 IDE(如 VS Code、PyCharm 等)上编写、保存和调试代码,确保逻辑正确后再复制粘贴到考试页面。这样可以减少语法错误,提高代码准确性。
  2. 调整心态,保持冷静

    • 遇到提示不足或实现不确定的问题时,不必慌张,可以采用更简单或更有把握的方法替代,确保思路清晰。
  3. 输入输出完整性

    • 注意训练和考试时都需要编写完整的输入输出代码,尤其是和题目示例保持一致。完成代码后务必及时调试,确保功能符合要求。
  4. 快捷键使用

    • 删除行可用 Ctrl+D,复制、粘贴和撤销分别为 Ctrl+CCtrl+VCtrl+Z,这些可以正常使用。
    • 避免使用 Ctrl+S,以免触发浏览器的保存功能。
  5. 浏览器要求

    • 使用最新版的 Google Chrome 浏览器完成考试,确保摄像头开启并正常工作。考试期间不要切换到其他网站,以免影响考试成绩。
  6. 交卷相关

    • 答题前,务必仔细查看题目示例,避免遗漏要求。
    • 每完成一道题后,点击【保存并调试】按钮,多次保存和调试是允许的,系统会记录得分最高的一次结果。完成所有题目后,点击【提交本题型】按钮。
    • 确保在考试结束前提交试卷,避免因未保存或调试失误而丢分。
  7. 时间和分数安排

    • 总时间:150 分钟;总分:400 分。
    • 试卷结构:2 道一星难度题(每题 100 分),1 道二星难度题(200 分)。及格分为 150 分。合理分配时间,优先完成自己擅长的题目。
  8. 考试环境准备

    • 考试前请备好草稿纸和笔。考试中尽量避免离开座位,确保监控画面正常。
    • 如需上厕所,请提前规划好时间以减少中途离开监控的可能性。
  9. 技术问题处理

    • 如果考试中遇到断电、断网、死机等技术问题,可以关闭浏览器并重新打开试卷链接继续作答。
    • 出现其他问题,请第一时间联系 HR 或监考人员进行反馈。

祝你考试顺利,取得理想成绩!

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

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

相关文章

【Spring Boot】掌握 Spring 事务:隔离级别与传播机制解读与应用

前言 &#x1f31f;&#x1f31f;本期讲解关于spring 事务传播机制介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话…

【陕西省乡镇界】面图层shp格式arcgis数据乡镇名称和编码2020年wgs84坐标无偏移内容测评

标题中的“陕西省乡镇界面图层shp格式arcgis数据乡镇名称和编码2020年wgs84坐标无偏移.zip”表明这是一个地理信息系统&#xff08;GIS&#xff09;的数据集&#xff0c;专为陕西省的乡镇区域设计。该数据集以Shapefile&#xff08;shp&#xff09;格式提供&#xff0c;是GIS领…

国家统计局湖北调查总队副总队长张小青一行调研珈和科技农业遥感调查智能化算法

1月15日上午&#xff0c;国家统计局湖北调查总队党组成员、副总队长张小青一行莅临珈和科技开展调研。调研期间&#xff0c;张小青一行实地了解了珈和科技在自动化作物分布提取技术领域的最新成果&#xff0c;深入探讨了作物自动化处理模型在农业调查上应用的创新价值及优化方向…

-bash: /java: cannot execute binary file

在linux安装jdk报错 -bash: /java: cannot execute binary file 原因是jdk安装包和linux的不一致 程序员的面试宝典&#xff0c;一个免费的刷题平台

vue集成高德地图API实现坐标拾取功能

安装与配置&#xff1a; 组件 | vue-amapDescriptionhttps://elemefe.github.io/vue-amap/#/zh-cn/introduction/install简介 | vuemap/vue-amap简介https://vue-amap.guyixi.cn/zh-cn/introduction/introduction.html ​​​​我的应用 | 高德控制台高德开放平台官网控…

【大数据2025】Yarn 总结

分布式资源管理系统讲解总结 一、引言 围绕分布式资源管理系统展开&#xff0c;重点涵盖 Yarn 的简介、原理、资源调度策略以及运维和管理&#xff0c;旨在让学员全面掌握相关知识。Yet Another Resource Negotiator 二、Yarn 诞生背景 在 Hadoop 1.X 中仅有 HDFS 和 MapRe…

微服务学习:基础理论

一、微服务和应用现代化 1、时代的浪潮&#xff0c;企业的机遇和挑战 在互联网化数字化智能化全球化的当今社会&#xff0c;IT行业也面临新的挑战&#xff1a; 【快】业务需求如“滔滔江水连绵不绝”&#xff0c;企业需要更快的交付【变】林子大了&#xff0c;百色用户&…

python+django+Nacos实现配置动态更新-集中管理配置(实现mysql配置动态读取及动态更新)

一、docker-compose.yml 部署nacos服务 version: "3" services:mysql:container_name: mysql# 5.7image: mysql:5.7environment:# mysql root用户密码MYSQL_ROOT_PASSWORD: rootTZ: Asia/Shanghai# 初始化数据库(后续的初始化sql会在这个库执行)MYSQL_DATABASE: nac…

【专题二 二叉树中的深搜】98. 验证二叉搜索树

1.题目解析 2.讲解算法原理 二叉搜索树的中序遍历是一个有序序列 1.使用全局变量的优势 2.回溯 3.剪枝 左子树是二叉搜索树当前节点符合二叉搜索树的定义右子树是一个二叉搜索树 3.编写代码 /*** Definition for a binary tree node.* public class TreeNode {* in…

Reactor 模式在 Edis、Nginx 和 Netty 中的应用与高性能网络模式解析

文章目录 参考文章Reactor 模式在 Edis、Nginx 和 Netty 中的应用与高性能网络模式解析一、Reactor 模式二、Redis 中的 Reactor 模式三、Nginx 中的 Reactor 模式四、Netty 中的 Reactor 模式五、Reactor 模式的优势六、总结 参考文章 redis&#xff0c;nginx&#xff0c;net…

C++,设计模式,【目录篇】

文章目录 1. 简介2. 设计模式的分类2.1 创建型模式&#xff08;Creational Patterns&#xff09;&#xff1a;2.2 结构型模式&#xff08;Structural Patterns&#xff09;&#xff1a;2.3 行为型模式&#xff08;Behavioral Patterns&#xff09;&#xff1a; 3. 使用设计模式…

深度学习 Pytorch 基本优化思想与最小二乘法

在正式开始进行神经网络建模之前&#xff0c;我们还需要掌握pytorch中最核心的基础数学工具——autograd(自动微分)模块。虽然对于任何一个通用的深度学习框架都会提供许多自动优化的算法和现成的loss function&#xff0c;但如果想更深入理解神经网络&#xff0c;对深度学习的…

word转pdf

依赖 先安装好MAVEN https://blog.csdn.net/m0_62214280/article/details/140643392 链接&#xff1a;https://pan.baidu.com/s/1jISO-TPEyLgC8RTmMJGRQw 提取码&#xff1a;9ju8 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words…

【多线程】线程池

一、什么是线程池 线程池&#xff08;Thread Pool&#xff09;是一种多线程并发执行的设计模式&#xff0c;它通过维护一个线程集合来执行多个任务&#xff0c;避免频繁地创建和销毁线程&#xff0c;提高系统性能和响应速度。 就好比如你经营了一家餐饮店&#xff0c;你名下有…

【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

&#x1f525; 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用&#xff08;Enabled&#xff09; 2.3 坐标系&#xff08;Geometry&#xff09; **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题&#xff08;windowTiltle&a…

CSS 合法颜色值

CSS 颜色 CSS 中的颜色可以通过以下方法指定&#xff1a; 十六进制颜色带透明度的十六进制颜色RGB 颜色RGBA 颜色HSL 颜色HSLA 颜色预定义/跨浏览器的颜色名称使用 currentcolor 关键字 十六进制颜色 用 #RRGGBB 规定十六进制颜色&#xff0c;其中 RR&#xff08;红色&…

C++第十五讲:异常

C第十五讲&#xff1a;异常 1.异常的概念和使用1.1异常的抛出和捕获1.2异常抛出和捕获的注意事项1.3异常的重新抛出1.4异常规范 2.标准库的异常 1.异常的概念和使用 1.1异常的抛出和捕获 异常的抛出和捕获的过程分为三个阶段&#xff1a; 1.异常的抛出&#xff1a; 使用throw对…

HTML<bdo>标签

例子 指定文本方向&#xff1a; <bdo dir"rtl"> This text will go right-to-left. </bdo> <!DOCTYPE html> <html> <body> <h1>The bdo element</h1> <p>This paragraph will go left-to-right.</p> …

Git:问题解决办法 及 Tips 总结

目录 查看历史记录及比较区别查看所有提交的历史记录查看提交的详细历史记录查看提交之间的差异点击文件操作历史&#xff0c;筛选出所有改动过此文件的提交任意两个提交之间的比较&#xff08;开发及查BUG常用&#xff09; 在需要版本回滚的情况下处理方法短时间内无法彻查BUG…

uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推

uniApp开通unipush1.0个推&#xff0c;SpringBoot程序集成 一、APP开通unipush1.0个推(商户App源码仅支持1.0个推) 1.app模块配置开通推送 2.应用开通推送 3.开通后点击消息推送菜单会看到如下页面 完成以上步骤后 此时android 仅支持在线推送。 4.配置各厂商离线推送 暂未…