CSDN每日一题学习训练——Java版(克隆图、最接近的三数之和、求公式的值)

版本说明

当前版本号[20231109]。

版本修改说明
20231109初版

目录

文章目录

  • 版本说明
  • 目录
  • 克隆图
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码
  • 最接近的三数之和
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码
  • 求公式的值
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码

克隆图

题目

给你无向 连通(https://baike.baidu.com/item/连通图/6460995?fr=aladdin) 图中一个节点的引用,请你返回该图的 深拷贝(https://baike.baidu.com/item/深拷贝/22785317?fr=aladdin)(克隆)。

图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。

class Node {
public int val;
public List neighbors;
}

测试用例格式:

简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示。

邻接列表 是用于表示有限图的无序列表的集合。每个列表都描述了图中节点的邻居集。

给定节点将始终是图中的第一个节点(值为 1)。你必须将 给定节点的拷贝 作为对克隆图的引用返回。

示例 1:

image-20231109230708214

输入:adjList = [[2,4],[1,3],[2,4],[1,3]]
输出:[[2,4],[1,3],[2,4],[1,3]]

解释:
图中有 4 个节点。
节点 1 的值是 1,它有两个邻居:节点 2 和 4 。
节点 2 的值是 2,它有两个邻居:节点 1 和 3 。
节点 3 的值是 3,它有两个邻居:节点 2 和 4 。
节点 4 的值是 4,它有两个邻居:节点 1 和 3 。

示例 2:

image-20231109230957257

输入:adjList = [[]]
输出:[[]]

解释:输入包含一个空列表。该图仅仅只有一个值为 1 的节点,它没有任何邻居。

示例 3:

输入:adjList = []
输出:[]
解释:这个图是空的,它不含任何节点。

示例 4:

image-20231109231042597

输入:adjList = [[2],[1]]
输出:[[2],[1]]

提示:

节点数不超过 100 。
每个节点值 Node.val 都是唯一的,1 <= Node.val <= 100。
无向图是一个简单图(https://baike.baidu.com/item/简单图/1680528?fr=aladdin),这意味着图中没有重复的边,也没有自环。
由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。
图是连通图,你可以从给定节点访问到所有节点。

解题思路

  1. 创建一个哈希表,用于存储已访问过的节点及其对应的克隆节点。
  2. 使用深度优先搜索(DFS)遍历原图,对于每个节点: a. 如果该节点已经被访问过,则直接返回其克隆节点。 b. 创建一个新的克隆节点,并将其添加到哈希表中。 c. 遍历该节点的邻居列表,递归调用DFS函数,将邻居节点的克隆节点添加到克隆节点的邻居列表中。
  3. 返回克隆图的任意一个节点即可。

代码思路

  1. 首先定义了一个名为Node的类,表示图中的节点,包含一个整数值val和指向左右子节点的指针leftright,以及指向下一个节点的指针next

    class Node {
        public int val; // 节点的值
        public Node left; // 左子节点
        public Node right; // 右子节点
        public Node next; // 下一个节点
    }
    
  2. 同时,还定义了一个名为Solution的类,其中包含了两个方法:cloneGraphDFS

  3. cloneGraph方法是主要的入口点,它接受一个Node类型的参数node,表示要克隆的图的起始节点。

     // 克隆图的方法,接收一个节点作为参数
        public Node cloneGraph(Node node)
    
  4. 该方法首先创建一个空的哈希表visited,用于存储已经访问过的节点及其对应的克隆节点。然后调用DFS方法进行深度优先搜索,从起始节点开始遍历整个图,并返回克隆后的图的根节点。

      // 创建一个哈希表,用于存储已访问过的节点
            HashMap<Node, Node> visited = new HashMap<>();
            // 调用深度优先搜索方法进行克隆
            return DFS(node, visited);
    
  5. DFS方法是一个递归方法,用于实现深度优先搜索。它接受两个参数:当前节点node和一个哈希表visited,用于记录已经访问过的节点及其对应的克隆节点。

      // 深度优先搜索方法,接收一个节点和一个哈希表作为参数
        public Node DFS(Node node, HashMap<Node, Node> visited) 
    
  6. 在方法内部,首先判断当前节点是否为空,如果为空则直接返回。接着判断当前节点是否已经被访问过,如果已经访问过则直接返回其对应的克隆节点。然后创建一个新的克隆节点clone,并将其添加到visited哈希表中。

     // 如果节点为空,返回空节点
            if (node == null) {
                return node;
            }
            // 如果哈希表中已经存在该节点的克隆,直接返回克隆节点
            if (visited.containsKey(node)) {
                return visited.get(node);
            }
            // 创建一个新的克隆节点,值为原节点的值,邻居列表为空
            Node clone = new Node(node.val, new ArrayList<>());
            // 将原节点和克隆节点添加到哈希表中
            visited.put(node, clone);
    
  7. 最后,遍历当前节点的所有邻居节点,对每个邻居节点递归调用DFS方法,并将返回的克隆节点添加到当前节点的克隆节点的邻居列表中。最终返回当前节点的克隆节点。

             // 遍历原节点的邻居节点,递归调用DFS方法进行克隆,并将克隆后的邻居节点添加到克隆节点的邻居列表中
            for (Node n : node.neighbors) {
                clone.neighbors.add(DFS(n, visited));
            }
            // 返回克隆节点
            return clone;
    
  8. 这段代码实现了一个简单的图的深度优先搜索和克隆过程,可以用于处理一些需要复制或克隆图结构的场景。

参考代码

class Node {
    public int val;
    public Node left;
    public Node right;
    public Node next;
    public Node() {
    }
    public Node(int _val) {
        val = _val;
    }
    public Node(int _val, Node _left, Node _right, Node _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};
class Solution {
    public Node cloneGraph(Node node) {
        HashMap<Node, Node> visited = new HashMap<>();
        return DFS(node, visited);
    }
    public Node DFS(Node node, HashMap<Node, Node> visited) {
        if (node == null) {
            return node;
        }
        if (visited.containsKey(node)) {
            return visited.get(node);
        }
        Node clone = new Node(node.val, new ArrayList<>());
        visited.put(node, clone);
        for (Node n : node.neighbors) {
            clone.neighbors.add(DFS(n, visited));
        }
        return clone;
    }
}

最接近的三数之和

题目

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

示例:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

提示:

3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4

解题思路

  1. 首先对数组进行排序,这样可以方便后续的查找操作。
  2. 使用两层循环遍历数组中的每两个数的组合,计算它们的和,记为twoSum
  3. 对于每个twoSum,我们需要找到一个与它最接近的数,使得这三个数的和与目标值target最接近。我们可以使用递归的方法来实现这个功能。具体来说,我们可以定义一个函数oneSumCloset,它接受五个参数:数组nums、两个整数ij表示当前考虑的两个数在数组中的位置、一个整数startend表示在数组中查找的范围、以及目标值target
  4. oneSumCloset函数中,我们首先处理边界情况。如果start等于ij,则将start加1;如果end等于ij,则将end减1。接下来,我们判断startend的关系。如果它们相等,说明已经找到了与target最接近的数,直接返回该数即可。如果它们相差为1,说明只有一个数与target最接近,比较这两个数与target的差值,返回差值较小的那个数。否则,我们计算中间位置middle,并根据nums[middle]target的大小关系来更新查找范围。然后递归调用oneSumCloset函数,继续查找。
  5. 在主函数threeSumClosest中,我们初始化最小值为0,并设置一个布尔变量hasMin为false,用于标记是否已经找到了与目标值最接近的三个数。然后使用两层循环遍历数组中的每两个数的组合,计算它们的和,记为twoSum。接着,我们调用oneSumCloset函数,找到与twoSum最接近的数,记为restClost。最后,我们计算这三个数的和newValue,并与当前最小值进行比较。如果找到了更接近目标值的三个数,更新最小值和hasMin
  6. 当两层循环结束后,返回最小值minValue即可。

代码思路

它包含两个方法:oneSumCloset和threeSumClosest。

  1. oneSumCloset方法:这个方法用于在一个有序数组中找到与给定目标值最接近的数。它接受6个参数:一个整数数组nums,两个整数i和j,表示要搜索的范围,以及三个整数start、end和target,分别表示搜索的起始位置、结束位置和目标值。

  2. 方法首先检查start和end是否等于i或j,如果是,则将它们分别加1或减1。

     // 在数组nums中,从i到j范围内查找与target最接近的数
        int oneSumCloset(int[] nums, int i, int j, int start, int end, int target) {
            if (start == i || start == j) // 如果start等于i或j,则将start加1
                start = start + 1;
    
  3. 然后,根据start和end的值进行不同的处理。如果start和end相等,说明已经找到了与目标值最接近的数,直接返回该数。如果start和end相差1,说明只有一个数与目标值最接近,比较这两个数与目标值的差值,返回差值较小的那个数。否则,计算start和end的中间位置middle,并根据nums[middle]与目标值的大小关系,更新start或end的值。

    if (end == i || end == j) // 如果end等于i或j,则将end减1
                end = end - 1;
            if (start == end) { // 如果start等于end,说明已经找到了与target最接近的数,直接返回该数
                return nums[start];
            } else if (end == start + 1 || end == start - 1) { // 如果end等于start+1或start-1,说明只有一个数与target最接近,比较这两个数与target的差值,返回差值较小的那个数
                if (Math.abs(nums[end] - target) > Math.abs(nums[start] - target)) {
                    return nums[start];
                } else {
                    return nums[end];
                }
            } else { // 如果以上条件都不满足,说明需要继续查找
                int middle = (int) Math.floor((start + end) / 2); // 计算中间位置
                if (nums[middle] > target) { // 如果中间位置的数大于target,说明目标数在左半部分,将end更新为middle
                    end = middle;
                } else { // 如果中间位置的数小于等于target,说明目标数在右半部分,将start更新为middle
                    start = middle;
                }
    
  4. 最后,递归调用oneSumCloset方法,继续在更新后的范围内查找与目标值最接近的数。

       return oneSumCloset(nums, i, j, start, end, target); // 递归调用oneSumCloset方法,继续查找
    
  5. threeSumClosest方法:这个方法用于在一个有序数组中找到三个数之和最接近给定目标值的组合。它接受两个参数:一个整数数组nums和一个整数target,分别表示输入的数组和目标值。

  6. 方法首先对数组nums进行排序。然后,使用两层循环遍历数组中的每对数,计算它们的和作为twoSum,并计算剩余的目标值rest。接着,调用oneSumCloset方法,在剩余的数组元素中查找与rest最接近的数作为restClost。

     // 在数组nums中,查找三个数之和最接近target的组合
        public int threeSumClosest(int[] nums, int target) {
            Arrays.sort(nums); // 对数组进行排序
            int minValue = 0; // 初始化最小值为0
            boolean hasMin = false; // 初始化hasMin为false,表示还没有找到最小值
            for (int i = 0; i < nums.length - 2; i++) { // 遍历数组中的前n-2个数
                for (int j = i + 1; j < nums.length - 1; j++) { // 遍历数组中的第i+1个数到倒数第二个数
                    int twoSum = nums[i] + nums[j]; // 计算两个数之和
                    int rest = target - twoSum; // 计算剩余的目标值
                    int restClost = oneSumCloset(nums, i, j, j + 1, nums.length - 1, rest); // 在剩余的数组元素中查找与rest最接近的数
    
  7. 将restClost与twoSum相加得到新的值newValue。接下来,判断是否已经找到了最小值minValue,如果没有找到,则将newValue赋值给minValue,并将hasMin设置为true。如果已经找到了最小值minValue,则比较newValue与minValue与目标值的差值d1和d2,如果d1大于d2,则将newValue赋值给minValue。

      int newValue = restClost + twoSum; // 计算新的值
                    if (!hasMin) { // 如果还没有找到最小值
                        minValue = newValue; // 更新最小值
                        hasMin = true; // 将hasMin设置为true,表示已经找到了最小值
                    } else { // 如果已经找到了最小值
                        int d1 = Math.abs(minValue - target); // 计算当前最小值与目标值的差值
                        int d2 = Math.abs(newValue - target); // 计算新值与目标值的差值
                        if (d1 > d2) { // 如果当前最小值的差值大于新值的差值
                            minValue = newValue; // 更新最小值
                        }
                    }
    
  8. 最后,返回minValue作为结果。

return minValue; // 返回最小值

参考代码

class Solution {
    int oneSumCloset(int[] nums, int i, int j, int start, int end, int target) {
        if (start == i || start == j)
            start = start + 1;
        if (end == i || end == j)
            end = end - 1;
        if (start == end) {
            return nums[start];
        } else if (end == start + 1 || end == start - 1) {
            if (Math.abs(nums[end] - target) > Math.abs(nums[start] - target)) {
                return nums[start];
            } else {
                return nums[end];
            }
        } else {
            int middle = (int) Math.floor((start + end) / 2);
            if (nums[middle] > target) {
                end = middle;
            } else {
                start = middle;
            }
            return oneSumCloset(nums, i, j, start, end, target);
        }
    }
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int minValue = 0;
        boolean hasMin = false;
        for (int i = 0; i < nums.length - 2; i++) {
            for (int j = i + 1; j < nums.length - 1; j++) {
                int twoSum = nums[i] + nums[j];
                int rest = target - twoSum;
                int restClost = oneSumCloset(nums, i, j, j + 1, nums.length - 1, rest);
                int newValue = restClost + twoSum;
                ;
                if (!hasMin) {
                    minValue = newValue;
                    hasMin = true;
                } else {
                    int d1 = Math.abs(minValue - target);
                    int d2 = Math.abs(newValue - target);
                    if (d1 > d2) {
                        minValue = newValue;
                    }
                }
            }
        }
        return minValue;
    }
}

求公式的值

题目

求 1-1/2!-1/3! -… -1/10!

解题思路

  1. 首先,我们需要计算阶乘。在给定的代码中,已经有一个名为jiecheng的方法用于计算阶乘。我们可以使用这个方法来计算1-1/2!-1/3! -… -1/10!的值。
  2. sum方法中,我们需要遍历从1到n的所有整数。对于每个整数i,我们需要计算1/i!并将其累加到总和中。同时,我们需要更新变量s的值,使其在每次迭代时取反。
  3. 最后,在main方法中,我们调用sum方法并传入参数n=10,然后输出结果。

代码思路

这段代码是一个Java程序,用于计算一个数列的和。该数列由以下公式生成:

sum = 1/n! + (-1)^n / (n-1)! + ... + 1/1!
  1. 程序中定义了两个方法:jiechengsum

  2. jiecheng方法用于计算阶乘(factorial),即从1到给定整数n的所有正整数的乘积。它使用了一个循环来逐个乘以从1到n的整数,并将结果存储在变量s中。最后,该方法返回计算得到的阶乘值。

    // 定义一个静态方法jiecheng,接收一个整数n作为参数,返回n的阶乘
        public static double jiecheng(int n) {
            double s = 1; // 初始化变量s为1
            // 使用for循环计算n的阶乘
            for (int i = 1; i <= n; i++) {
                s *= i; // 将s乘以i
            }
            return s; // 返回计算结果
    
  3. sum方法用于计算数列的和。它使用了一个循环来迭代从1到n的每个整数。在每次迭代中,它将当前项的值累加到变量sum中。每一项的值由公式1/n! + (-1)^n / (n-1)!计算得出。其中,(-1)^n表示交替的符号,(n-1)!表示n-1的阶乘。最后,该方法返回计算得到的数列和。

    // 定义一个静态方法sum,接收一个整数n作为参数,返回数列的和
        public static double sum(int n) {
            double sum = 0.0; // 初始化变量sum为0.0
            int s = 1; // 初始化变量s为1
            // 使用for循环计算数列的和
            for (int i = 1; i <= n; i++) {
                sum += s / jiecheng(i); // 将s除以i的阶乘加到sum上
                s = -s; // 将s取反
            }
            return sum; // 返回计算结果
        }
    
  4. main方法中,程序将整数n设置为10,并调用sum方法来计算数列的和。然后,它将结果打印到控制台上。

// 定义一个主方法main,程序的入口点
    public static void main(String[] args) throws Exception {
        int n = 10; // 定义变量n为10
        double ss = sum(n); // 调用sum方法计算数列的和,并将结果赋值给变量ss
        System.out.println(ss); // 输出数列的和
    }

参考代码

public class TEST {
    public static double jiecheng(int n) {
        double s = 1;
        for (int i = 1; i <= n; i++)
            s *= i;
        return s;
    }
    public static double sum(int n) {
        double sum = 0.0;
        int s = 1;
        for (int i = 1; i <= n; i++) {
            sum += s / jiecheng(i);
            s = -s;
        }
        return sum;
    }
    public static void main(String[] args) throws Exception {
        int n = 10;
        double ss = sum(n);
        System.out.println(ss);
    }
}

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

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

相关文章

Docker两个容器互相请求接口

BEGIN 环境&#xff1a;Docker-Windows-Hyperf 1. 过以下命令查看Docker中的所有网络 docker network ls这个命令会列出所有的Docker网络&#xff0c;包括其ID、名称、驱动以及作用范围 在 Docker 中&#xff0c;容器通过 Docker 网络进行相互通信&#xff1b;在 Docker 中有…

第二十七章 解读Transformer_车道线检测中的Transformer(车道线感知)

前言 近期参与到了手写AI的车道线检测的学习中去&#xff0c;以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新&#xff0c;力求完整精炼&#xff0c;引人启示。所需前期知识&#xff0c;可以结合手写AI进行系统的学习。 SE简单实现 class SELayer(nn.Module):d…

Invalid bound statement (not found)

说明&#xff1a;记录一次Mapper.xml调用数据库存储过程的错误&#xff1b; 报错信息&#xff1a;Invalid bound statement (not found)&#xff0c;Mapper的全限定类名 场景&#xff1a;我仔仔细细核对过了方法名&#xff0c;参数&#xff0c;都没有问题&#xff0c;使用插件…

基于 HarmonyOS 的 HTTPS 请求过程开发示例(ArkTS)

介绍 本篇 Codelab 基于网络模块以及 Webview 实现一次 HTTPS 请求&#xff0c;并对其过程进行抓包分析。效果如图所示&#xff1a; 相关概念 ● Webview&#xff1a;提供 Web 控制能力&#xff0c;Web 组件提供网页显示能力。 ● HTTP数据请求&#xff1a;网络管理模块&am…

开发知识点-Django

Django 1 了解简介2 Django项目结构3 url 地址 和视图函数4 路由配置5 请求及响应6 GET请求和POST请求查询字符串 7 Django设计模式及模板层8 模板层-变量和标签9 模板层-过滤器和继承继承 重写 10 url反向解析11 静态文件12 Django 应用及分布式路由创建之后 注册 一下 13 模型…

力扣每日一题 ---- 2905. 找出满足差值条件的下标 II

这道题带有绝对值差的题&#xff0c;一看就是双指针的题&#xff0c;并且还带有两个限制&#xff0c;那么我们的做法就是 固定一个条件&#xff0c;维护一个条件 本题还用到了一个贪心思路&#xff0c;会介绍到 那我们怎么固定一个条件&#xff0c;维护一个条件&#xff1f; …

基于ssm的大学生社团管理系统

基于ssm的大学生社团管理系统 摘要 基于SSM的大学生社团管理系统是一个全面、高效的社团管理平台&#xff0c;旨在帮助大学生和社团管理员更方便、更快捷地进行社团活动的组织和管理。该系统基于Spring、SpringMVC和MyBatis&#xff08;简称SSM&#xff09;开发&#xff0c;这三…

CentOS Linux 系统镜像

CentOS Linux具有以下特点&#xff1a; 稳定性&#xff1a;CentOS Linux旨在提供一个稳定、可靠的服务器环境&#xff0c;适合用于关键业务应用和生产环境。高效性&#xff1a;CentOS Linux经过优化和调整&#xff0c;可以充分发挥硬件的性能&#xff0c;提高系统的整体效率。…

selenium自动化测试入门 —— 键盘鼠标事件ActionChains

在使用 Selenium WebDriver 做自动化测试的时候&#xff0c;会经常模拟鼠标和键盘的一些行为。比如使用鼠标单击、双击、右击、拖拽等动作&#xff1b;或者键盘输入、快捷键使用、组合键使用等模拟键盘的操作。在 WebDeriver 中&#xff0c;有一个专门的类来负责实现这些测试场…

DevChat:提升编程效率的AI编程助手

一、DevChat是什么&#xff1f; DevChat是一个集成了多种主流大模型的AI编程工具&#xff0c;专注于提升程序员的编程效率。它整合了ChatGPT、Codex等热门AI大模型&#xff0c;支持自然语言编程、代码编写、代码生成、代码补全等功能。DevChat最大的优势是一站式服务&#xff…

掌握未来技术趋势:深度学习与量子计算的融合

掌握未来技术趋势&#xff1a;深度学习与量子计算的融合 摘要&#xff1a;本博客将探讨深度学习与量子计算融合的未来趋势&#xff0c;分析这两大技术领域结合带来的潜力和挑战。通过具体案例和技术细节&#xff0c;我们将一睹这两大技术在人工智能、药物研发和金融科技等领域…

【HarmonyOS】HarmonyOS Test测试用例中一些断言API的使用

【关键词】 单元测试框架、HarmonyOS Test、assertThrowError、assertFail、assertEqual 【测试代码及测试结果展示】 这里以新建API9工程自动生成的ohosTest来编写单元测试代码。 1、 测试代码&#xff1a; import { describe, it, expect } from ohos/hypium import abil…

Win10 180天后怎么才能继续体验,自动保持续期,无需手动JH

环境: Win10 专业版 自制小程序 问题描述: Win10 180天后怎么才能继续体验,自动保持续期,无需手动JH 解决方案: 在执行本程序前需要以管理员身份运行!关闭杀毒软件,否则会失败,本方案只能在个人电脑测试体验, 只能用于学习测试体验 ,勿用与商业行为 1.先完全JH…

Hadoop 视频分析系统

视频分析系统 业务流程 原始数据 vedio.json {"rank":1,"title":"《逃出大英博物馆》第二集","dzl":"77.8","bfl":"523.9","zfl":"39000","type":"影视",&quo…

强化学习中广义策略迭代

一、广义策略迭代 策略迭代包括两个同时进行的交互过程&#xff0c;一个使价值函数与当前策略保持一致&#xff08;策略评估&#xff09;&#xff0c;另一个使策略在当前价值函数下变得贪婪&#xff08;策略改进&#xff09;。在策略迭代中&#xff0c;这两个过程交替进行&…

汽车之家车型_车系_配置参数数据抓取

// 导入所需的库 #include <iostream> #include <fstream> #include <string> #include <curl/curl.h> #include <regex>// 声明全局变量 std::string htmlContent; std::regex carModelRegex("\\d{4}-\\d{2}-\\d{2}"); std::regex ca…

matlab 点云最小二乘拟合平面(PCA法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 见:matlab 点云最小二乘拟合平面(PCA法详细过程版)。 二、代码实现 clc;clear; %% --------

Qt/C++开发经验小技巧286-290

国内站点&#xff1a;https://gitee.com/feiyangqingyun 国际站点&#xff1a;https://github.com/feiyangqingyun 很多时候项目越写越大&#xff0c;然后就可能遇到&#xff0c;明明之前很简单的一段代码&#xff0c;运行的好好的&#xff0c;就那么几行几十行&#xff0c;为何…

TCP发送窗口、接收窗口以及其工作原理

1*KvfIrP_Iwq40uVdRZYGnQg.png 上面的图表是从发送方的角度拍摄的快照。我们可以将数据分为4组&#xff1a; 1.已发送并已确认的字节&#xff08;蓝色&#xff09;2.已发送但尚未确认的字节&#xff08;黄色&#xff09;3.未发送但接收方准备好接收的字节&#xff08;绿色&…

spring boot 中@Value读取中文配置时乱码

1.spring boot 读取application.properties 该文件是iso8859编码 如果是直接写中文 读取时会乱码 显示成?? 必须得转ascii码才能正常显示 其他方法测试也不行 Value("${apig.order.tiaokong.qianzi}") private String apigOrderTiaokongQianzi;