java基础应用-循环控制

news2024/10/3 0:06:24

1、使用while与自增运算符循环遍历数组

1.1 实例说明

        本实例利用自增运算符结合while循环获取每个数组元素的值,然后把它们输出到控制台中。其中自增运算符控制索引变量的递增。程序运行结果如图1所示。

图1  实例运行结果

1.2 实现过程 

         创建ErgodicArray类,在该类的主方法中创建一个鸟类数组,然后创建一个索引变量,这个变量用于指定数组下标,随着该索引的递增,while循环会逐步获取每个数组的元素并输出到控制台中。关键代码如下:

public class ErgodicArray {
    public static void main(String[] args) {
        // 创建鸟类数组
        String[] aves = new String[] { "白鹭", "丹顶鹤", "黄鹂", "鹦鹉", "乌鸦", "喜鹊",
                "布谷鸟", "灰纹鸟", "百灵鸟" };
        int index = 0;// 创建索引变量
        System.out.println("我的花园里有很多鸟,种类大约包括:");
        while (index < aves.length) {// 遍历数组
            System.out.println(aves[index++]);// 自增索引值
        }
    }
}

1.3 秘笈心法

1.3.1 前置与后置的自增运算

        自增自减运算符分前置与后置两种,其中前置运算例如“++index”会先将index的值递增,然后在使用递增后的值,而后置运算例如“index++”会首先使用该变量的值,然后在把变量值递增。

2、使用for循环输出杨辉三角

2.1 实例说明

        杨辉三角形由数字排列,可以把它看做一个数字表,其基本特性是两侧数值均为1,其他位置的数值是其正上方的数值与左上角数值之和。本实例通过数组来实现这个杨辉三角形,其运行结果如图1所示。

图1  杨辉三角形

2.2 实现过程

        创建YanghuiTriangle类,在该类的主方法中创建一个二维数组,并指定二维数组的第一维长度,这个数组用于存放杨辉三角形的数值表,通过双层for循环来实现第二维数组的长度,然后计算整个数组的每个元素的值。程序关键代码如下:

public class YanghuiTriangle {
    public static void main(String[] args) {
        int triangle[][]=new int[8][];// 创建二维数组
        // 遍历二维数组的第一层
        for (int i = 0; i < triangle.length; i++) {
            triangle[i]=new int[i+1];// 初始化第二层数组的大小
            // 遍历第二层数组
            for(int j=0;j<=triangle[i].length-1;j++){
                // 将两侧的数组元素赋值为1
                if(i==0||j==0||j==triangle[i].length-1){
                    triangle[i][j]=1;
                }else{// 其它数值通过公式计算
                    triangle[i][j]=triangle[i-1][j]+triangle[i-1][j-1];
                }
                // 输出数组元素
                System.out.print(triangle[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

2.3 秘笈心法

2.3.1 Java二维数组可以不等长

        Java语言中的二维数组其实是一维数组的每个元素都是另一个一维数组,所以第二维数组的长度可以任意,就像本实例中那样。这比其他语言的数组更灵活,而且多维数组也是如此。

3、使用嵌套循环在控制台上输出九九乘法表

3.1 实例说明

        Java基本语法中的for循环非常灵活并且可以嵌套使用,其中双层for循环是程序开发中使用最频繁的,常用于操作表格数据,对于行数与列数相同的表格操作代码比较简单,但是类似九九乘法表就不好控制了,因为它的列数要与行数对应,可以说这个表格是个三角形,本实例通过双层循环输出了这个九九乘法表,效果如图1所示。在面试与等级考试中也常出现这类题目。

图1  九九乘法表

3.2 实现过程

        创建MultiplicationTable类在该类的主方法中创建双层for循环,第一层for循环也称为外层循环,它用于控制表格的行,第二层循环也称为内层循环,它用于控制表格的列,这里第二层循环的控制变量非常重要,它的条件判断是列数要等于行数的最大值,然后输出内层与外层循环控制变量的乘积,这样就实现了九九乘法表。程序关键代码如下:

public class MultiplicationTable {
    public static void main(String[] args) {
        for(int i=1;i<=9;i++){// 循环控制变量从1遍历到9
            for(int j=1;j<=i;j++){// 第二层循环控制变量与第一层最大索引相等
                // 输出计算结果但不换行
                System.out.print(j+"*"+i+"="+i*j+"\t");
            }
            System.out.println();// 在外层循环中换行
        }
    }
}

3.3 秘笈心法

3.3.1 灵活使用嵌套循环

        循环语句可以完成复杂的运算,也可以用于控制程序的递归流程,而多层循环可以实现更加复杂的业务逻辑,是学习编程必须掌握的一种应用。在处理有规则的大量数据时,应该考虑使用多层循环来优化程序代码,但是建议添加详细的代码注释,便于以后的维护与修改工作。

 4、用while循环计算1+1/2!+1/3!…1/20!

4.1 实例说明

        本实例在计算阶阶乘的算法之上应用while循环语句计算1+1/2!+1/3!…1/20!的和。如果使用基本数据类型double是无法精确的显示运算结果的,所以本实例使用了BigDecimal类的实例来完成这个运算,实例运行结果如图1所示。

图1  实例运行结果

说明:由于本实例的运行结果精度非常高,小数位数过长,所以特殊设置了控制台折行,读者的运行结果可能是单行的数字。

4.2 实现过程

        创建Example类,在该类的主方法中创建保存总和的sum变量和计算阶乘的factorial变量,为保证计算结果的精度,这两个变量都是BigDecimal类的实例对象。然后通过while实现20次循环,并完成计算,程序代码如下:

import java.math.BigDecimal;
public class Example {
    public static void main(String args[]) {
        BigDecimal sum = new BigDecimal(0.0); // 和
        BigDecimal factorial = new BigDecimal(1.0); // 阶乘项的计算结果
        int i = 1; // 循环增量
        while (i <= 20) {
            sum = sum.add(factorial); // 累加各项阶乘的和
            ++i; // i加1
            factorial = factorial.multiply(new BigDecimal(1.0 / i)); // 计算阶乘项
        }
      System.out.println("1+1/2!+1/3!¡¤¡¤¡¤1/20!的计算结果等于:\n" + sum);// 输出计算结果
    }
}

4.3 秘笈心法

4.3.1 使用BigDecimal类完成大数字与高精度运算

        对于高精度要求或者运算数较大的计算,应该使用BigDecimal类实现,否则Java基本类型的数据无法保证浮点数的精度也无法对超出其表示范围的数字进行运算。

 5、for循环输出空心的菱形

5.1 实例说明

        本实例在输出菱形基础上加大难度,输出空心的菱形图案,这在等级考试与公司面试时也出现过类似题目,实例目的在于熟练掌握for循环的嵌套使用。实例运行结果如图1所示。

图1  实例输出结果

5.2 实现过程

        创建Diamond类,在该类的主方法中调用printHollowRhombus()方法完成10行的空心菱形输出,其中printHollowRhombus()方法是实例中自定义的,该方法使用两个双层for循环分别输出菱形的上半部分与下半部分,程序关键代码如下:
public class Diamond {
    public static void main(String[] args) {
        printHollowRhombus(10);
    }
    public static void printHollowRhombus(int size) {
        if (size % 2 == 0) {
            size++;// 计算菱形大小
        }
        for (int i = 0; i < size / 2 + 1; i++) {
            for (int j = size / 2 + 1; j > i + 1; j--) {
                System.out.print(" ");// 输出左上角位置的空白
            }
            for (int j = 0; j < 2 * i + 1; j++) {
                if (j == 0 || j == 2 * i) {
                    System.out.print("*");// 输出菱形上半部边缘
                } else {
                    System.out.print(" ");// 输出菱形上半部空心
                }
            }
            System.out.println("");
        }
        for (int i = size / 2 + 1; i < size; i++) {
            for (int j = 0; j < i - size / 2; j++) {
                System.out.print(" ");// 输出菱形左下角空白
            }
            for (int j = 0; j < 2 * size - 1 - 2 * i; j++) {
                if (j == 0 || j == 2 * (size - i - 1)) {
                    System.out.print("*");// 输出菱形下半部边缘
                } else {
                    System.out.print(" ");// 输出菱形下半部空心
                }
            }
            System.out.println("");
        }
    }
}

5.3 秘笈心法

5.3.1 没有表达式的for循环

        for循环中有3个表达式,这3个表达式都是可选的,也就是说for循环可以没有表达式,例如for(;;)这样的for循环将是一个无限循环,读者在使用for循环时应注意避免无限循环。

6、foreach循环优于for循环

6.1 实例说明

        JDK1.8为Java添加了新的for循环foreach。它是原有for循环遍历数据的一种简写格式,使用的关键字依然是for但是参数格式不同。本实例使用foreach循环分别遍历集合对象与数组,并把元素值输出到控制台,实例运行结果如图1所示。

图1  实例运行结果

6.2 关键技术

        foreach循环是for循环的一种简写格式,只用于遍历数据集合或数组,其语法格式如下:

        for ( Type e : collections ) {

            // 对变量e的使用

        }

参数说明:

         e:其类型Type是集合或数组中元素值的类型,该参数是集合或数组collections中的一个元素。

        collections:要遍历的集合或数组,也可以是迭代器。

说明:

在循环体中使用参数e,该参数是foreach从集合或数组以及迭代器中取得的元素值,元素值是从头到尾进行遍历的。

6.3 实现过程

        创建UseForeach类在该类的主方法中创建List集合对象,并为该对象添加内容,然后使用foreach循环遍历该集合输出所有内容,再从List集合中提取一个字符串数组,然后使用foreach循环遍历该数组,所有数组元素输出到控制台。程序关键代码如下:

import java.util.ArrayList;
import java.util.List;
public class UseForeach {
    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();// 创建list集合
        list.add("abc");// 初始化list集合
        list.add("def");
        list.add("hij");
        list.add("klm");
        list.add("nop");
        list.add("qrs");
        System.out.print("foreach遍历集合:\n\t");
        for (String string : list) {// 遍历list集合
            System.out.print(string);// 输出集合的元素值
        }
        System.out.println();
        String[] strs=new String[list.size()];
        list.toArray(strs);// 创建数组
        System.out.print("foreach遍历数组:\n\t");
        for (String string : strs) {// 遍历数组
            System.out.print(string);// 输出数组元素值
        }
    }
}

6.4 秘笈心法

6.4.1 使用foreach遍历数据

        在JDK1.5之前使用for循环对集合、数值和迭代器进行遍历,这需要创建索引变量、条件表达式,这写会使代码造成混乱,并增加出错的几率,并且每次循环中索引变量或迭代器都会出现三次,有两次出错的机会。而且会有一些性能损失,其性能稍微落后于foreach循环。所以对于数据集合的遍历,建议使用foreach循环完成。

7、终止循环体

7.1  实例说明

        循环用于复杂的业务处理可以提高程序的性能和代码的可读性,但是循环中也有特殊情况,例如由于某些原因需要立刻中断循环去执行下面的业务逻辑。实例运行如图1所示。

图1  实例运行结果

7.2 实现过程

        在Eclipse中创建一个Java项目,在项目中创建BreakCyc类,在该类的主方法中创建一个字符串数组,在使用foreach遍历的时候判断如果发现数组中包含字符串“老鹰”则立刻中断循环。在创建一个整数类型二维数组,使用双层foreach循环遍历,当发现第一个小于60的数组元素,则立刻中断整个双层循环,而不是内层循环。程序关键代码如下:

public class BreakCyc {
    public static void main(String[] args) {
        System.out.println("\n-------------中断单层循环的例子。-------------");
        // 创建数组
        String[] array = new String[] { "白鹭", "丹顶鹤", "黄鹂", "鹦鹉", "乌鸦", "喜鹊",
                "老鹰", "布谷鸟", "老鹰", "灰纹鸟", "老鹰", "百灵鸟" };
        System.out.println("在你发现第一只老鹰之前,告诉我都有什么鸟。");
        for (String string : array) {// foreach遍历数组
            if (string.equals("老鹰"))// 如果遇到老鹰
                break;// 中断循环
            System.out.print("有:" + string+"        ");// 否则输出数组元素
        }
        System.out.println("\n\n-------------中断双层循环的例子。-------------");
        // 创建成绩数组
        int[][] myScores = new int[][] { { 67, 78, 63, 22, 66 },
                { 55, 68, 78, 95, 44 }, { 95, 97, 92, 93, 81 } };
        System.out.println("宝宝这次考试成绩:\n数学\t语文\t英语\t美术\t历史");
        No1: for (int[] is : myScores) {// 遍历成绩表格
            for (int i : is) {
                System.out.print(i + "\t");// 输出成绩
                if (i < 60) {// 如果中途遇到不及格的,立刻中断所有输出
                    System.out.println("\n等等," + i + "分的是什么?这个为什么不及格?");
                    break No1;
                }
            }
            System.out.println();
        }
    }
}

7.3 秘笈心法

7.3.1 用break避免死循环

        充分利用循环可以提高程序的开发与执行效率,但是如果不注重循环中的算法很容易导致程序的死循环,那将是程序的死穴。所以在循环体中要对可能出现的特殊情况使用break语句中断循环。

8、循环体的过滤器

8.1 实例说明

        循环体中可以通过break语句中断整个循环,这增加了循环的控制能力,但是对于特殊情况还是不够,例如某些条件下需要放弃部分循环处理,而不是整个循环体。Java提供了continue语句来实现这一功能,continue可以放弃本次循环体的剩余代码,不执行它们而开始下一轮的循环,本实例利用continue语句实现了循环体过滤器,可以过滤“老鹰”字符串,并做相应的处理,但是放弃continue语句之后的所有代码。程序运行结果如图1所示。

图1  实例运行结果

8.2 实现过程

        在Eclipse项目中创建CycFilter类,在该类的主方法中创建鸟类名称的字符串数组,其中包含多个“老鹰”字符串,然后通过foreach循环遍历该数组,在循环过程中如果遍历的数组元素是“老鹰”字符串,则输出发现老鹰的信息并过滤循环体之后的需哦有代码。关键代码如下:

public class CycFilter {
    public static void main(String[] args) {
        // 创建数组
        String[] array = new String[] { "白鹭", "丹顶鹤", "黄鹂", "鹦鹉", "乌鸦", "喜鹊",
                "老鹰", "布谷鸟", "老鹰", "灰纹鸟", "老鹰", "百灵鸟" };
        System.out.println("在我的花园里有很多鸟类,但是最近来了几只老鹰,请帮我把它们抓走。");
        int eagleCount = 0;
        for (String string : array) {// foreach遍历数组
            if (string.equals("老鹰")) {// 如果遇到老鹰
                System.out.println("发现一只老鹰,已经抓到笼子里。");
                eagleCount++;
                continue;// 中断循环
            }
            System.out.println("搜索鸟类,发现了:" + string);// 否则输出数组元素
        }
        System.out.println("一共捉到了:" + eagleCount + "只老鹰。");
    }
}

8.3 秘笈心法

8.3.1 让循环多一些控制

        break语句和continue语句都是对循环体的控制语句,它们不仅应用于for循环,在任何循环体中都可以使用这些语句,灵活使用可以让循环实现更加复杂的运算和业务处理。

 9、循环的极限

9.1 实例说明

        循环是常用的开发模式,它可以简化业务处理,提高代码编写与程序运行效率,但是循环中的控制算法要掌握好,否则容易造成死循环导致程序崩溃。本实例将向读者介绍一个Java语言中很难发现的导致程序死循环的实例,实例将测试使用int整数类型作为循环索引变量,也是循环控制变量,用它来控制循环的次数,但是当这个程序的条件是索引小于等于变量类型的最大值时会发生什么。

9.2 实现过程

        创建CycUtmost类,在该类的主方法中CycUtmost类,在该类中创建int整数类型的变量end,使其等于整数类型的最大值,然后从该值减去50开始作为循环的起始点,条件是循环控制变量小于等于end变量,在循环体中累加循环计数器,最后循环结束时显示这个计数器。
public class CycUtmost {
    public static void main(String[] args) {
        int end=Integer.MAX_VALUE;// 定义循环终止数
        int start=end-50;// 定义循环起始数
        int count=0;// 定义循环计数器
        for (int i = start; i <= end; i++) {// 执行循环
            count++;// 循环计数
        }
        // 输出循环计数器
        System.out.println("本次循环次数为:"+count);
    }
}

技巧:

        你会认为这个程序会循环至少50次,然后把计数器的值输出,但实际上这个程序的运行结果会导致死循环,因为控制条件是索引小于等于整数类型的最大值,当整数类型达到其最大值再累加1的时候会的到整数类型的最小值,所以它永远不可能大于end变量,这样就导致了程序的死循环,所以在程序开发时注意控制变量的取值范围。

9.3 秘笈心法

9.3.1 了解变量的取值范围

        Java基本数据类型都有其取值范围,熟悉二进制原理的读者应该能够裂解,当超出取值范围时,数值会被截取。例如本实例中的循环控制变量超出整数类型的最大取值范围时,就会绕回整数类型的最小值。所以在进行条件判断涉及取值边界时,要考虑这个因素。

************关于作者************

学习过程中有任何问题不懂得都可以进行咨询,欢迎来撩!

 

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

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

相关文章

企业网盘预算规划,了解2024年最新价格标准

2024年全球企业云存储市场将增15%&#xff0c;企业网盘收费多样&#xff0c;包括用户数量、存储容量定价及综合功能套餐。ZohoWorkDrive、DropboxBusiness、GoogleWorkspace为主流选择&#xff0c;价格因企业规模、功能需求而异&#xff0c;建议灵活选择套餐和长期合作计划。 一…

yub‘s Algorithmic Adventures_Day3

yub’s Algorithmic Adventures_Day3 有序数组的平方 link&#xff1a;977. 有序数组的平方 - 力扣&#xff08;LeetCode&#xff09; 非递减顺序 一个数列中的元素从左到右依次不减&#xff0c;或者说不降序排列. 比如&#xff1a;1233445&#xff0c;12345. 思路分析 如果…

CORE MVC 过滤器 (筛选器)《2》 TypeFilter、ServiceFilter

TypeFilter、ServiceFilter ServiceFilter vs TypeFilter ServiceFilter和TypeFilter都实现了IFilterFactory ServiceFilter需要对自定义的Filter进行注册&#xff0c;TypeFilter不需要 ServiceFilter的Filter生命周期源自于您如何注册&#xff08;全局、区域&#xff09;&…

vite中sass警告JS API过期

1.问题 在Vite创建项目中引入Sass弹出The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 - vite中sass警告JS API过期 The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0警告提示表明你当前正在使用的 Dart Sass 版本中&#…

Python画图|渐变背景

Python画图在有些时候&#xff0c;需要使用渐变过度。 在matplotlib官网中&#xff0c;提供了一个为柱状图画渐变背景的案例&#xff0c;我们一同探索一番。 【1】官网教程 点开下述链接&#xff0c;直达官网教程&#xff1a; https://matplotlib.org/stable/gallery/lines…

【Bug】解决 Ubuntu 中 “error: Unable to Find Python3 Executable” 错误

解决 Ubuntu 中 “Unable to Find Python3 Executable” 错误 在 Ubuntu 系统上使用 Python 进行开发时&#xff0c;遇到找不到 python3 可执行文件的错误。 主要问题是无法正常打开终端&#xff08;原生与terminator&#xff09;&#xff0c;找不到python3&#xff0c;且无法…

基于muduo库函数实现protobuf协议的通信

文章目录 先定义具体的业务请求类型2. 实现服务端提供的服务protobuf_server.cppprotobuf_client.cpp 建议先去了解muduo库和protobuf协议&#xff1a; Protobuf库的使用Muduo库介绍及使用 先定义具体的业务请求类型 先使用protobuf库创建我们所要完成的业务请求类型&#xf…

域内用户名枚举 实验

1. 实验网络拓扑 kali: 192.168.72.128win2008: 192.168.135.129 192.168.72.139win7: 192.168.72.149win2012:(DC) 192.168.72.131 2. 简单原理 详细的报文分析在之前写过了&#xff0c;这里简单提一提。 利用的是Kerberos的AS阶段&#xff0c;AS_REP的回显不同&#xff0c…

迷宫中的最短路径:如何用 BFS 找到最近出口【算法模板】

如何通过广度优先搜索&#xff08;BFS&#xff09;求解迷宫问题 在这篇文章中&#xff0c;我们将学习如何使用 广度优先搜索&#xff08;BFS&#xff09; 解决一个典型的迷宫问题&#xff0c;具体是从迷宫的一个入口出发&#xff0c;找到最近的出口。我们将一步步分析 BFS 是如…

初识CyberBattleSim

现在许多企业都在使用AD域服务进行管理&#xff0c;我们现在通俗理解里面蕴含着许多重要资产。 对于这个东西有下列的描述: 1、攻击他能够获得用户权限 2、里面存在许多的计算机资产&#xff0c;当攻击者攻击其中的一台机器&#xff0c;可以通过某种手段在域中的环境横向移动…

golang rpc

RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用&#xff0c;简单的理解是一个节点请求另一个节点提供的服务&#xff0c;对应rpc的是本地过程调用&#xff0c;函数调用是最常用的本地过程调用&#xff0c;将本地过程调用变成远程调用会面临着各种问题。 以两数…

第 21 章 一条记录的多幅面孔——事务的隔离级别与 MVCC

21.1 事前准备 CREATE TABLE hero ( number INT, NAME VARCHAR ( 100 ), country VARCHAR ( 100 ), PRIMARY KEY ( number ) ) ENGINE INNODB CHARSET utf8;INSERT INTO hero VALUES ( 1, 刘备, 蜀 );21.2 事务隔离级别 在保证事务隔离性的前提下&#xff0c;使用不同的隔…

【Burp入门第三十三篇】IP Rotate 插件实现IP轮换爆破

Burp Suite是一款功能强大的渗透测试工具,被广泛应用于Web应用程序的安全测试和漏洞挖掘中。 本专栏将结合实操及具体案例,带领读者入门、掌握这款漏洞挖掘利器 读者可订阅专栏:【Burp由入门到精通 |CSDN秋说】 文章目录 正文安装步骤使用步骤应用场景实战文章正文 在 Burp…

基于SpringBoot+Vue+MySQL的智能垃圾分类系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着城市化进程的加速&#xff0c;垃圾问题日益凸显&#xff0c;不仅对环境造成污染&#xff0c;也给城市管理带来了巨大挑战。传统的垃圾分类方式不仅费时费力&#xff0c;而且手工操作容易出现错误&#xff0c;导致垃圾分类效…

探索未来工业自动化的钥匙:OPC UA与AI的融合

文章目录 探索未来工业自动化的钥匙&#xff1a;OPC UA与AI的融合背景&#xff1a;为什么选择OPC UA&#xff1f;OPC UA库简介安装OPC UA库简单的库函数使用方法连接到服务器获取节点读取节点值设置节点值订阅数据变更 库的使用场景工业自动化监控能源管理系统预测性维护 常见问…

L8910 【哈工大_操作系统】CPU管理的直观想法多进程图像用户级线程

L2.1 CPU管理的直观想法 管理CPU -> 引出多进程视图 设置 PC 指针初值为程序在内存中开始的地址&#xff0c;自动取指执行多个程序同时放在内存中&#xff0c;让CPU交替执行&#xff08;并发&#xff1a;程序在读I/O时太慢&#xff0c;CPU空闲&#xff0c;则会去执行其他程序…

Jupyterhub 多用户分析平台在线和离线部署(自定义用户认证)

Jupyterhub 文章目录 Jupyterhub1、简介2、安装配置&#xff08;在线&#xff09;2.1 安装准备2.2 安装jupyterhub2.2 自定义身份验证器2.3 自定义单用户jupyter服务生成器2.4 配置 jupyterhub_config.py2.4 启动服务2.5 登录测试2.5.1 用户登录 http://da.db.com2.5.2 管理界面…

synchronized底层是怎么通过monitor进行加锁的?

一、monitor是什么 monitor叫做对象监视器、也叫作监视器锁&#xff0c;JVM规定了每一个java对象都有一个monitor对象与之对应&#xff0c;这monitor是JVM帮我们创建的&#xff0c;在底层使用C实现的。 ObjectMonitor() {_header;_count ; // 非常重要&#xff0c;表示锁计数…

3 个简单的微分段项目

与许多大型网络安全项目一样&#xff0c;微分段似乎很复杂、耗时且成本高昂。 它涉及管理有关设备间服务连接的复杂细节。 一台 Web 服务器应连接到特定数据库&#xff0c;但不连接到其他数据库&#xff0c;或者负载平衡器应连接到某些 Web 服务器&#xff0c;同时限制与其他…

图解大模型计算加速系列:vLLM源码解析1,整体架构

整个vLLM代码读下来&#xff0c;给我最深的感觉就是&#xff1a;代码呈现上非常干净历练&#xff0c;但是逻辑比较复杂&#xff0c;环环嵌套&#xff0c;毕竟它是一个耦合了工程调度和模型架构改进的巨大工程。 所以在源码解读的第一篇&#xff0c;我想先写一下对整个代码架构…