ITMO-Study-Note

Вопросы к защите лабораторной работы:

  1. Сетевое взаимодействие - клиент-серверная архитектура, основные протоколы, их сходства и отличия. 网络交互——客户端-服务器架构、基本协议、它们的相同点和不同点。 это модель взаимодействия, при которой задачи распределяются между поставщиками ресурсов или услуг (серверами) и потребителями (клиентами). Эта модель широко используется в компьютерных сетях и позволяет эффективно управлять ресурсами и обеспечивать доступ к данным и приложениям.
    是一种交互模型,其中任务在资源或服务提供者(服务器)和消费者(客户端)之间分配。 这种模式被广泛应用于计算机网络,可实现高效的资源管理以及数据和应用程序的访问。 HTTP (无状态,基于TCP,用于Web)
    TCP (可靠,面向连接) vs UDP (不可靠,无连接)
    FTP (文件传输), SMTP (邮件)

  2. Протокол TCP. Классы Socket и ServerSocket. TCP 协议。类Socket和ServerSocket。
    • TCP通过三次握手建立可靠连接 TCP устанавливает надежное соединение с помощью трех рукопожатий
    • Socket:客户端用于连接服务器 Клиенты используются для подключения к серверу
    • ServerSocket:服务器端监听端口,接受连接 Серверная сторона прослушивает порт и принимает соединения
  3. Протокол UDP. Классы DatagramSocket и DatagramPacket. UDP 协议。类DatagramSocket和DatagramPacket。
    • UDP无连接,速度快,适合实时应用 UDP без соединений и быстро для приложений реального времени.
    • DatagramSocket:发送/接收数据包 Отправка/получение пакетов
    • DatagramPacket:封装数据包(含地址和端口) Инкапсулированные пакеты (с адресом и портом)
  4. Отличия блокирующего и неблокирующего ввода-вывода, их преимущества и недостатки. Работа с сетевыми каналами. 阻塞和非阻塞 I/O 之间的区别、它们的优点和缺点。与网络渠道合作。
    • 阻塞I/O:线程等待操作完成, 如果没有获得响应,就会阻塞当前线程,不能执行其他任务 Блокирующий ввод/вывод: поток ожидает завершения операции(Если ответ не получен, текущий поток блокируется, и никакие другие задачи не могут быть выполнены)
    • 非阻塞I/O:不会阻塞当前的线程,可以继续执行其他的任务,立即返回结果 Он не блокирует текущий поток и может продолжать выполнять другие задачи.(Возвращать результаты немедленно)
  5. Классы SocketChannel и DatagramChannel. 类 SocketChannel和 DatagramChannel。
    • Java NIO的非阻塞通道 Неблокирующие каналы для Java NIO
    • SocketChannel用于TCPDatagramChannel用于UDP (транспортный протокол)
  6. Передача данных по сети. Сериализация объектов. 通过网络传输数据。对象的序列化。
    • 序列化:对象 → 字节流(Serializable接口) Сериализация: объект → байтовый поток (интерфейс Serializable)
    • 反序列化:字节流 → 对象 Десериализация: поток байтов → объект
    • 使用transient忽略字段 Использовать transient, чтобы игнорировать поля
  7. Интерфейс Serializable. Объектный граф, сериализация и десериализация полей и методов. 界面Serializable。对象图、字段和方法的序列化和反序列化。
    • Serializable - это интерфейс в Java, который позволяет объектам быть сериализованными
    • 中间操作:filter, map(延迟执行)
    • 终端操作:collect, forEach
  8. Java Stream API. Создание конвейеров. Промежуточные и терминальные операции. Java 流 API。创建传送带。中间和终端操作。
    • 中间操作:filter, map(延迟执行)Промежуточные
    • 终端操作:collect, forEach(触发计算) терминальные
    • 示例: list.stream().filter(x -> x > 0).map(String::valueOf).collect(Collectors.toList());
  9. Шаблоны проектирования: Decorator, Iterator, Factory method, Command, Flyweight, Interpreter, Singleton, Strategy, Adapter, Facade, Proxy. 设计模式:装饰器、迭代器、工厂方法、命令、享元、解释器、单例、策略、适配器、外观、代理。

Команда (англ. Command) — поведенческий шаблон проектирования, используемый при объектно-ориентированном программировании, представляющий действие. Объект команды заключает в себе само действие и его параметры.

模式 用途 示例
Decorator 动态扩展功能(如Java I/O流)Функция динамического расширения BufferedReader包装FileReader
Singleton 全局唯一实例 Глобально уникальный экземпляр 数据库连接池
Factory Method 子类决定创建对象 Подклассы принимают решение о создании объектов Collections.unmodifiableList()
Adapter 接口转换 преобразование интерфейса Arrays.asList()
Proxy 控制对象访问(延迟加载/安全) Контроль доступа к объектам (отложенная загрузка/безопасность) Spring AOP代理

一些命令执行:

update id=1 //更新id
remove_any_by_price price=100 //删除价格为100的任何产品
remove_by_id id=1 //删除id为1的产品

实验逻辑:
客户端发送序列化数据
服务器接收数据并反序列化
Клиент отправляет сериализованные данные
Сервер получает данные и десериализует их
Сервер выполняет команду
Сервер возвращает результат выполнения команды
Клиент получает результат выполнения команды

sequenceDiagram
    participant Client
    participant Server
    Client->>Server: 发送 ClientAddCommand 对象(序列化)
    Server->>Server: 反序列化为 ClientAddCommand
    Server->>Server: 转换为 ServerAddCommand(需实现转换逻辑)
    Server->>Server: 执行 ServerAddCommand.execute()
    Server->>Client: 返回执行结果

本实验需要将现有的单用户应用程序转换为客户服务器架构。 主要内容包括:
Эта лаба требует преобразования существующего однопользовательского приложения(лаба 5) в клиент-серверную архитектуру. Основные аспекты включают:

  1. Разделение архитектуры: 结构分布
    • Клиент: Интерактивный ввод команд, валидация данных, сериализация объектов команд, отправка через UDP, обработка ответов.
  1. 服务端模块
    • ServerMain:主类,负责启动服务器、监听UDP端口。 Основной класс, отвечающий за запуск сервера и прослушивание UDP-портов.
    • CollectionManager:管理集合(读取/保存文件,Stream API操作)。 Управление коллекциями (чтение/сохранение файлов, операции Stream API).
    • ServerUdpListener封装NIO非阻塞网络通信逻辑。 Инкапсулирует логику неблокирующего сетевого взаимодействия NIO.
    • command: 解析命令并执行操作(执行命令逻辑)。 Разбор команд и выполнение операций.
    • ServerLogger: 日志记录(Java Util Logging) Ведение журналов (Java Util Logging)
  2. 客户端模块
    • ClientMain:主类,读取用户输入并发送命令给服务端。 Основной класс, который считывает пользовательский ввод и отправляет команды в сервер.
    • CommandParser:将用户输入解析为命令对象。 Разбирает вводимые пользователем данные на объекты команд.
    • ClientUdpSender:封装UDP通信逻辑(发送/接收数据包)。 Инкапсуляция логики взаимодействия UDP (отправка/получение пакетов).
    • ClientConsole:控制台交互 Взаимодействие с консолью
  3. 共享模块
    • model:数据模型。(产品对象,制造商等) Модели данных.(объекты продукции, производители и т. д.)
    • util:工具例如:SerializationUtils 序列化工具