当前位置: 首页 > news >正文

Java笔试面试题AI答之设计模式(1)

文章目录

  • 1. 简述什么是设计模式 ?
  • 2. 叙述常见Java设计模式分类 ?
  • 3. Java 设计模式的六大原则 ?
  • 4. 简述对 MVC 的理解, MVC 有什么优缺点?
      • MVC 的三个核心部分:
      • MVC 的优点:
      • MVC 的缺点:
  • 5. 简述什么是典型的软件三层结构?软件设计为什么要分层?
      • 典型的软件三层结构
      • 软件设计为什么要分层

1. 简述什么是设计模式 ?

设计模式(Design Patterns)是软件工程中一种广泛使用的概念,它代表了在特定上下文中解决常见设计问题的一种典型方式。设计模式是经验的总结,是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是久经考验的,被证明是有效的,并且可以被重复使用。

设计模式通常包含以下几个要素:

  1. 模式名称:一个简洁的、描述性的名字,用于标识设计模式。
  2. 问题:描述了在何种情况下应该使用设计模式,即设计模式的适用场景。
  3. 解决方案:详细描述了设计模式是如何解决问题的,包括类、对象以及它们之间的交互方式。
  4. 效果:描述了使用设计模式后带来的好处和可能引入的副作用。

设计模式主要分为三大类:

  • 创建型模式(Creational Patterns):用于创建对象,特别是使用“工厂方法”模式、“抽象工厂”模式、“单例”模式、“建造者”模式、“原型”模式等,来创建对象实例。
  • 结构型模式(Structural Patterns):用于处理类或对象的组合,如“适配器”模式、“桥接”模式、“组合”模式、“装饰器”模式、“外观”模式、“享元”模式、“代理”模式等,它们通过描述类或对象之间的静态关系来定义系统的结构。
  • 行为型模式(Behavioral Patterns):用于描述类或对象之间如何交互以及职责的分配,如“策略”模式、“模板方法”模式、“观察者”模式、“迭代器”模式、“状态”模式、“职责链”模式、“命令”模式、“访问者”模式、“中介者”模式、“备忘录”模式、“解释器”模式等,它们通过描述类或对象之间的交互和通信来定义系统的行为。

使用设计模式可以帮助开发人员更好地理解、设计和实现软件,提高软件的可维护性、可扩展性和可重用性。同时,设计模式也是软件设计领域的一种交流语言,有助于团队成员之间的沟通和协作。

2. 叙述常见Java设计模式分类 ?

Java设计模式是面向对象程序设计中的一种可复用的解决方案,用于解决软件设计中常见的问题。这些模式在Java社区中非常流行,因为它们提供了一种标准的方式来构建灵活、可维护和可扩展的软件系统。设计模式大致可以分为以下几类:

  1. 创建型模式(Creational Patterns)
    这类设计模式提供了一种在创建对象时隐藏创建逻辑的方式,而不是使用new运算符直接实例化对象。这样可以增加代码的灵活性和可重用性。常见的创建型模式包括:

    • 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。
    • 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪个类。
    • 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
    • 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    • 原型模式(Prototype):通过复制现有的实例来创建新的实例。
  2. 结构型模式(Structural Patterns)
    结构型模式关注于类和对象的组合。它们采用继承以外的方法来组合对象以获得更大的灵活性。结构型模式描述了如何将类或对象结合在一起形成更大的结构,同时保持结构的灵活和高效。常见的结构型模式包括:

    • 适配器模式(Adapter):将一个类的接口转换成客户端所期待的另一种接口形式。
    • 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
    • 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
    • 装饰器模式(Decorator):动态地给一个对象添加一些额外的职责。就扩展功能而言,装饰器模式比生成子类更为灵活。
    • 外观模式(Facade):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
    • 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
    • 享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。
  3. 行为型模式(Behavioral Patterns)
    行为型模式不仅关注类和对象的组织,还关注它们之间的通信。这些模式描述了算法和对象间职责的分配。常见的行为型模式包括:

    • 模板方法模式(Template Method):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
    • 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。此模式让算法的变化独立于使用算法的客户。
    • 状态模式(State):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
    • 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
    • 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
    • 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
    • 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
    • 命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
    • 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
    • 责任链模式(Chain of Responsibility):为请求的发送者和接收者之间解耦提供了一种松散的耦合方式,使得多个对象都有机会处理这个请求,或者将这个请求传递给链上的下一个对象。
    • 解释器模式(Interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

这些设计模式在Java及其他面向对象的编程语言中得到了广泛的应用,帮助开发者设计更加灵活、可维护和可扩展的软件系统。

3. Java 设计模式的六大原则 ?

Java 设计模式的六大原则,也被称为面向对象设计原则,是指导我们如何设计可维护、可扩展、可复用的软件系统的基本原则。这些原则帮助开发者在软件设计过程中做出更好的决策,减少设计错误,提高软件质量。以下是六大原则的具体内容:

  1. 单一职责原则(Single Responsibility Principle, SRP)

    • 一个类应该仅有一个引起它变化的原因。即一个类应该负责一组相对独立的功能。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。因此,应当遵守单一职责原则,将类的职责单一化。
  2. 开放-封闭原则(Open-Closed Principle, OCP)

    • 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即软件实体在尽量不修改原有代码的基础上进行扩展。实现开放-封闭原则的关键是抽象化,通过抽象化,我们可以将系统的所有可能的行为抽象成一个抽象层,让系统依赖于抽象层,而不是依赖于具体的实现。
  3. 里氏替换原则(Liskov Substitution Principle, LSP)

    • 子类型必须能够替换掉它们的基类型。即所有引用基类的地方必须能透明地使用其子类的对象。这要求子类在扩展父类的功能时,尽量不要改变父类原有方法的预期行为。
  4. 依赖倒置原则(Dependency Inversion Principle, DIP)

    • 高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即要针对接口编程,不要针对实现编程。依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。
  5. 接口隔离原则(Interface Segregation Principle, ISP)

    • 不应该强迫客户依赖于它们不使用的方法。即一个类对另一个类的依赖应该建立在最小的接口上。接口隔离原则要求我们将臃肿庞大的接口拆分成更小的和更具体的接口,让客户端需要多少接口就依赖多少接口,这样有助于我们构建一个松耦合的系统。
  6. 迪米特法则(Law of Demeter, LoD)

    • 一个软件实体应当尽可能少地与其他实体发生相互作用。即一个对象应该对其他对象保持最少的了解。迪米特法则又称为最少知识原则,它要求我们在设计系统时,应该尽量减少对象之间的交互,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

这六大原则为面向对象设计提供了指导方针,帮助开发者设计出更加健壮、灵活和可维护的软件系统。

4. 简述对 MVC 的理解, MVC 有什么优缺点?

MVC(Model-View-Controller)是一种软件设计典范,用于将应用程序的输入逻辑、处理逻辑和显示逻辑分离,以使得它们能够互相独立地修改和扩展。MVC 模式最早由 Trygve Reenskaug 在1978年提出,被广泛应用于Web开发中,特别是在构建复杂的Web应用程序时。

MVC 的三个核心部分:

  1. Model(模型)

    • 负责管理应用程序的数据以及业务逻辑(如数据验证、计算等)。
    • 模型接收来自视图的数据请求,处理数据后返回结果给视图或控制器。
    • 它是应用程序的核心部分,通常与数据库或其他数据存储进行交互。
  2. View(视图)

    • 负责显示数据给用户。
    • 视图从模型接收数据并生成用户界面,但不包含任何业务逻辑或处理逻辑。
    • 视图通常是由HTML、CSS和JavaScript等技术构建的。
  3. Controller(控制器)

    • 负责接收用户的输入(如点击按钮、提交表单等),并将这些输入转化为对模型和视图的调用。
    • 控制器是模型和视图之间的桥梁,它解释用户的请求,调用模型和视图去完成用户的需求。

MVC 的优点:

  1. 低耦合性:模型、视图和控制器之间的职责清晰分离,减少了系统组件之间的依赖,使得修改和扩展变得容易。
  2. 高内聚性:每个部分都专注于自己的职责,提高了代码的可读性和可维护性。
  3. 易于测试:由于模型和视图的分离,可以更容易地对它们进行单元测试。
  4. 支持并行开发:开发团队可以并行地开发模型、视图和控制器,提高了开发效率。

MVC 的缺点:

  1. 增加系统复杂性:对于小型项目,使用MVC可能会增加不必要的复杂性。
  2. 学习曲线:对于新手来说,理解MVC的概念和如何正确使用它可能需要一些时间。
  3. 调试困难:由于组件之间的交互,当出现问题时,可能需要跨越多个组件进行调试。
  4. 性能考虑:在某些情况下,由于额外的调用和层次,MVC架构可能会影响应用程序的性能。然而,这种影响通常可以通过优化和缓存来减轻。

总的来说,MVC 模式是一种强大的设计模式,它提供了清晰的代码结构,提高了应用程序的可维护性和可扩展性。然而,是否采用MVC模式取决于项目的具体需求和团队的实际情况。

5. 简述什么是典型的软件三层结构?软件设计为什么要分层?

典型的软件三层结构

典型的软件三层结构,也被称为三层架构(3-tier architecture),通常指的是将整个业务应用划分为三个主要层次:

  1. 界面层(User Interface Layer)

    • 主要负责用户界面的展示,包括数据的显示和用户输入的接收。它是用户与系统交互的窗口,位于最外层(最上层),最接近用户。
    • 界面层的设计应尽可能简单,以便用户无需培训即可方便地访问信息。
  2. 业务逻辑层(Business Logic Layer)

    • 也称为应用层或中间件层,是系统架构中体现核心价值的部分。它主要负责业务规则的制定、业务流程的实现等与业务需求相关的逻辑处理。
    • 所有的应用系统、应用逻辑、控制都在这一层,系统的复杂性也主要体现在这一层。
  3. 数据访问层(Data Access Layer)

    • 主要负责数据库的管理,包括数据的存储、检索、更新和删除等操作。所有与数据有关的安全、完整性控制、数据的一致性、并发操作等都在这一层完成。
    • 数据库服务器存储大量的数据信息和数据逻辑,是系统数据的基础。

软件设计为什么要分层

软件设计采用分层架构的原因主要有以下几点:

  1. 降低复杂度:通过将复杂的系统划分为多个更小、更专注的部分,可以显著降低系统的整体复杂度,使得每个层次都有明确的职责,从而更容易理解和维护。

  2. 提高可维护性:分层架构使得修改和扩展系统变得更加容易。如果需要修改某个功能,通常只需要关注并修改相应的层次,而不会影响到其他层次。

  3. 提高可重用性:分层架构有助于提高代码的可重用性。例如,数据访问层的代码可以在多个地方被重用,而不需要每次都编写新的代码。

  4. 提高灵活性:分层架构使得系统更加灵活,能够轻松应对变化。如果需要添加新的功能或修改现有功能,可以通过添加新的层次或修改现有层次来实现。

  5. 促进团队协作:分层架构有助于促进团队成员之间的协作。不同的团队可以专注于不同的层次,从而提高开发效率和质量。

  6. 标准化:通过分层,可以制定标准化的接口和协议,使得不同层次之间的交互更加规范和统一。

  7. 提高安全性:分层架构能够更严格地控制信息访问,通过在数据传输过程中采用数据加密技术,可以进一步降低信息失密的风险。

综上所述,软件设计采用分层架构是为了降低复杂度、提高可维护性、可重用性和灵活性,促进团队协作,实现标准化,并提高系统的安全性。这种设计模式在大型软件开发中尤为重要,能够帮助开发团队更好地应对复杂的业务需求和技术挑战。

答案来自文心一言,仅供参考
在这里插入图片描述

相关文章:

Java笔试面试题AI答之设计模式(1)

文章目录 1. 简述什么是设计模式 ?2. 叙述常见Java设计模式分类 ?3. Java 设计模式的六大原则 ?4. 简述对 MVC 的理解, MVC 有什么优缺点?MVC 的三个核心部分:MVC 的优点:MVC 的缺点&#xff1a…...

java调用opencv部署到centos7

1、官网下载opencv https://opencv.org/releases/ 2、下载opencv并解压 unzip opencv-3.4.7.zip cd opencv-3.4.7 mkdir build cd build/ 3、安装cmake yum remove cmake -y ; yum install -y gcc gcc-c make automake openssl openssl-devel wget https://cmake.org/files/…...

【python qdrant 向量数据库 完整示例代码】

测试一下python版本的dqrant向量数据库的效果,完整代码如下: 安装库 !pip install qdrant-client>1.1.1 !pip install -U sentence-transformers导入 from qdrant_client import models, QdrantClient from sentence_transformers import SentenceT…...

初识C语言(三)

感兴趣的朋友们可以留个关注,我们共同交流,相互促进学习。 文章目录 前言 八、函数 九、数组 (1)数组的定义 (2)数组的下标和使用 十、操作符 (1)算数操作符 (2&#xff…...

用通义灵码如何快速合理解决遗留代码问题?

本文首先介绍了遗留代码的概念,并对遗留代码进行了分类。针对不同类型的遗留代码,提供了相应的处理策略。此外,本文重点介绍了通义灵码在维护遗留代码过程中能提供哪些支持。 什么是遗留代码 与过时技术相关的代码: 与不再受支持的…...

新书推荐——《Python贝叶斯深度学习》

在过去的十年中,机器学习领域取得了长足的进步,并因此激发了公众的想象力。但我们必须记住,尽管这些算法令人印象深刻,但它们并非完美无缺。本书旨在通过平实的语言介绍如何在深度学习中利用贝叶斯推理,帮助读者掌握开…...

数据结构-3.1.栈的基本概念

一.栈的定义: 栈和线性表的区别:栈只能在表尾一端进行插入或者删除的操作,而线性表可以在任意一个地方进行插入或者删除 二.有关栈的关键术语: 三.栈的基本操作: 1.回顾线性表的基本操作: 2.栈的基本操作&…...

关于 NLP 应用方向与深度训练的核心流程

文章目录 主流应用方向核心流程(5步)1.选定语言模型结构2.收集标注数据3.forward 正向传播4.backward 反向传播5.使用模型预测真实场景 主流应用方向 文本分类文本匹配序列标注生成式任务 核心流程(5步) 基本流程实现的先后顺序…...

linux如何启用ipv6随机地址

简介 在 IPv6 中,临时随机地址(Temporary IPv6 Address)是一种为了提高隐私和安全而设计的功能。通常,默认的 IPv6 地址是基于设备的 MAC 地址生成的,容易导致跟踪和识别设备。启用临时 IPv6 地址可以避免这个问题&am…...

探索 Android DataBinding:实现数据与视图的完美融合

在 Android 开发中,数据与视图的交互一直是一个关键的问题。为了更好地实现数据的展示和更新,Google 推出了 DataBinding 库,它为开发者提供了一种简洁、高效的方式来处理数据与视图之间的绑定关系,大大提高了开发效率和代码的可读…...

Java 编码系列:线程基础与最佳实践

引言 在多任务处理和并发编程中,线程是不可或缺的一部分。Java 提供了丰富的线程管理和并发控制机制,使得开发者可以轻松地实现多线程应用。本文将深入探讨 Java 线程的基础知识,包括 Thread 类、Runnable 接口、Callable 接口以及线程的生命…...

《深度学习》—— ResNet 残差神经网络

文章目录 一、什么是ResNet?二、残差结构(Residual Structure)三、Batch Normalization(BN----批归一化) 一、什么是ResNet? ResNet 网络是在 2015年 由微软实验室中的何凯明等几位大神提出,斩获…...

针对考研的C语言学习(定制化快速掌握重点3)

1.数组常见错误 数组传参实际传递的是数组的起始地址&#xff0c;若在函数中改变数组内容&#xff0c;数组本身也会发生变化 #include<stdio.h> void change_ch(char* str) {str[0] H; } int main() {char ch[] "hello";change_ch(ch);printf("%s\n&q…...

pikachu XXE(XML外部实体注入)通关

靶场&#xff1a;pikachu 环境: 系统&#xff1a;Windows10 服务器&#xff1a;PHPstudy2018 靶场&#xff1a;pikachu 关卡提示说&#xff1a;这是一个接收xml数据的api 常用的Payload 回显 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY …...

shell脚本定时任务通知到钉钉

shell脚本定时任务通知到钉钉 1、背景 ​ 前两天看了一下定时任务&#xff0c;垃圾清理、日志相关、系统巡检这些&#xff0c;有的服务器运行就有问题&#xff0c;或者不运行&#xff0c;正好最近在做运维标准重制运维手册&#xff0c;顺便把自动化这块优化一下&#xff0c;所…...

2.4K star的GOT-OCR2.0:端到端OCR 模型

GOT-OCR2.0是一款新一代的光学字符识别&#xff08;OCR&#xff09;技术&#xff0c;标志着人工智能在文本识别领域的重大进步。作为一款开源模型&#xff0c;GOT-OCR2.0不仅支持传统的文本和文档识别&#xff0c;还能够处理乐谱、图表以及复杂的数学公式&#xff0c;为用户提供…...

【JavaEE】——线程的安全问题和解决方式

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;问题引入 二&#xff1a;问题深入 1&#xff1a;举例说明 2&#xff1a;图解双线程计算…...

初步认识了解分布式系统

背景认识&#xff1a;我们要学习redis&#xff0c;还是得了解一下什么是分布式。为什么呢&#xff1f;因为redis只有在分布式系统中才能发挥它最大的作用&#xff0c;也就是领域展开&#xff0c;所以接下来我们就简单过一下什么是分布式系统 一些术语认识&#xff1a; &#x…...

react 为什么不能学习 vue3 进行静态节点标记优化性能?

因为 React 使用的是 JSX&#xff0c;而 JSX 本质上就是 JS 语言&#xff0c;是具有非常高的动态的&#xff0c;而 Vue 使用的 template 则是给了足够的约束&#xff0c;比如说 Vue 的 template 里面使用了很多特定的标记来做不同的事情&#xff0c;比如说 v-if 就是进行变量判…...

Elasticsearch黑窗口启动乱码问题解决方案

问题描述 elasticsearch启动后有乱码现象 解决方案&#xff1a; 提示&#xff1a;这里填写该问题的具体解决方案&#xff1a; 到 \config 文件下找到 jvm.options 文件 打开后 在文件末尾空白处 添加 -Dfile.encodingGBK 保存后重启即可。...

Logtus IT员工参加国际技术大会

Logtus IT的员工参加了国际技术大会&#xff0c;该大会致力于在金砖国家框架内开发俄罗斯的技术。该活动包括一个展览&#xff0c;俄罗斯开发商展示了他们的信息技术、电子和电信成就。展示了面向国内和国际市场&#xff08;包括政府机构&#xff09;的解决方案、产品和平台。 …...

ant design vue组件中table组件设置分组头部和固定总结栏

问题&#xff1a;遇到了个需求&#xff0c;不仅要设置分组的头部&#xff0c;还要在顶部有个统计总和的栏。 分组表头的配置主要是这个&#xff0c;就是套娃原理&#xff0c;不需要展示数据的直接写个title就行&#xff0c;需要展示数据的字段才需要详细的配置属性。 const co…...

2024年信息安全企业CRM选型与应用研究报告

数字化的生活给人们带来便利的同时也带来一定的信息安全隐患&#xff0c;如网络侵权、泄露用户隐私、黑客攻击等。在互联网高度发展的今天&#xff0c;信息安全与我们每个人、每个组织甚至每个国家都息息相关。 信息安全行业蓬勃发展。根据智研咨询数据&#xff0c;2021年&…...

【后端开发】JavaEE初阶——计算机是如何工作的???

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解计算机工作原理&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【MySQL】MySQL中JDBC编程——MySQL驱动包安装——&#xff08;超详解&#xff09; &#x1f308;感兴趣的小伙伴看一看小编主…...

Linux(Ubuntu)源码安装postgresql16.3

文章目录 Linux&#xff08;Ubuntu&#xff09;源码安装postgresql016.3下载程序包编译安装软件初次执行configure错误调试1:configure: error: ICU library not found再次执行configureBuild 设置环境初始化数据库启动数据库参考 Linux&#xff08;Ubuntu&#xff09;源码安装…...

Python 入门教程(7)面向对象 | 7.6、多态

文章目录 一、多态1、鸭子类型2、实现多态的机制2.1、鸭子类型2.2、继承与重写 3、Python多态的优势4、总结 前言&#xff1a; 在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;多态&#xff08;Polymorphism&#xff09;是一种非常重要的概念&#xff0c;多态就是同一…...

Cilium + ebpf 系列文章-什么是ebpf?(一)

前言&#xff1a; 这篇非常非常干&#xff0c;很有可能读不懂。 这里非常非常推荐&#xff0c;建议使用Cilium官网的lab来辅助学习&#xff01;&#xff01;&#xff01;Resources Library - IsovalentExplore Isovalents Resource Library, your one-stop destination for ins…...

RabbitMQ08_保证消息可靠性

保证消息可靠性 一、生产者可靠性1、生产者重连机制&#xff08;防止网络波动&#xff09;2、生产者确认机制Publisher Return 确认机制Publisher Confirm 确认机制 二、MQ 可靠性1、数据持久化交换机、队列持久化消息持久化 2、Lazy Queue 惰性队列 三、消费者可靠性1、消费者…...

恶意Bot流量识别分析实践

1、摘要 随着互联网的发展&#xff0c;自动化工具和脚本&#xff08;Bots&#xff09;的使用越来越普遍。虽然一些善意 Bots 对于网站的正常运行和数据采集至关重要&#xff0c;但恶意 Bots 可能会对网站带来负面影响&#xff0c;如爬取敏感信息、恶意注册、刷流量等。因此&am…...

Java2 实用教程(第6版)习题2 第四题

【源文件的命名与书中的不同】 四、阅读程序题 1、上机运行下列程序&#xff0c;注意观察输出的结果。 public class E2_1 {public static void main(String args[]){for(int i20302;i<20322;i){System.out.println((char) i);}} } 运行结果&#xff1a; 低 住 佐 佑 佒…...