Бэкенд-разработчик Java (Начальный уровень)

Стань бэкенд-разработчиком с нуля! Научишься создавать серверные приложения на Java, работать с базами данных и API. Курс подходит для школьников и студентов — практика с первого урока, реальные проекты, понятное объяснение. Получи востребованную профессию уже через несколько месяцев обучения!

Описание программы:
Курс разработан для школьников и студентов, желающих освоить профессию бэкенд-разработчика с нуля. Программа сочетает теорию и практику, фокусируясь на реальных задачах и проектах.

 

Что предстоит пройти на курсе:

  • Введение в программирование и язык Java
  • Основы синтаксиса: переменные, типы данных, операторы, циклы, условия
  • Работа с методами и классами, основы ООП
  • Исключения, работа с файлами
  • Основы работы с базами данных и JDBC
  • Создание простых веб-приложений с использованием Servlets и JSP
  • Введение в HTTP, REST API
  • Использование Maven и Git
  • Финальный проект: разработка собственного серверного приложения
 

Ожидаемые результаты после прохождения:
Должен знать:
— Основы программирования и синтаксис Java
— Принципы объектно-ориентированного программирования
— Основы работы с базами данных и веб-технологиями

 

Должен уметь:
— Писать простые программы на Java
— Работать с базами данных через JDBC
— Создавать простые веб-сервисы
— Использовать систему контроля версий Git
— Решать базовые алгоритмические задачи

 

Требования к слушателям:
— Базовое представление о работе компьютера
— Желание учиться и развиваться в IT
— Наличие ПК с доступом в интернет

1. Что такое Java и почему её часто используют для бэкенд-разработки?
Java — это объектно-ориентированный язык программирования, известный своей кроссплатформенностью благодаря JVM (Java Virtual Machine). Она активно используется в бэкенд-разработке благодаря стабильности, масштабируемости, широкому сообществу и богатой экосистеме.

 

2. Какие основные компоненты входят в JDK?
JDK (Java Development Kit) включает:
— Компилятор (javac)
— Виртуальную машину Java (JVM)
— Библиотеки классов (Java API)
— Утилиты разработчика (например, javadoc, jar)

 

3. Чем отличаются JRE и JDK?
JRE (Java Runtime Environment) содержит всё необходимое для запуска Java-приложений (включая JVM и базовые библиотеки), а JDK — полный набор инструментов для разработки, включая JRE.

 

4. Что такое переменная и какие типы данных существуют в Java?
Переменная — это именованное хранилище данных. Типы данных в Java делятся на примитивные (int, double, boolean и др.) и ссылочные (классы, массивы, интерфейсы).

 

5. Что такое циклы и какие виды циклов есть в Java?
Циклы позволяют выполнять блок кода несколько раз. В Java есть:
— for
— while
— do...while

 

6. Как работают условные конструкции if-else и switch-case?
if-else позволяет выполнять код по условию. switch-case используется для выбора одного из множества вариантов, основываясь на значении переменной.

 

7. Что такое метод в Java и зачем он нужен?
Метод — это блок кода, который выполняет определённую задачу и может быть вызван по имени. Он помогает организовать код, повторно использовать логику и упрощать чтение программы.

 

8. Что такое ООП и какие его основные принципы?
ООП — объектно-ориентированное программирование. Основные принципы:
— Инкапсуляция
— Наследование
— Полиморфизм
— Абстракция

 

9. Что такое класс и объект в Java?
Класс — это шаблон или чертёж, описывающий свойства и поведение объекта. Объект — это экземпляр класса с конкретными значениями полей.

 

10. Как реализуется наследование в Java?
Наследование реализуется с помощью ключевого слова extends. Подкласс наследует поля и методы родительского класса.

 

11. Что такое интерфейс и как его использовать?
Интерфейс — это абстрактный тип, который определяет набор методов без реализации. Класс реализует интерфейс с помощью ключевого слова implements.

 

12. Что такое исключения в Java и как их обрабатывать?
Исключения — это ошибки, возникающие во время выполнения программы. Их можно обрабатывать с помощью try-catch-finally или пробрасывать через throws.

 

13. Как работать с файлами в Java?
Для работы с файлами используются классы File, FileReader, FileWriter, BufferedReader, BufferedWriter, а также NIO-классы Files и Paths.

 

14. Что такое JDBC и как подключиться к базе данных?
JDBC (Java Database Connectivity) — стандартный API для взаимодействия Java с СУБД. Для подключения используется DriverManager и строка подключения.

 

15. Какие основные команды Git используются при работе с проектом?
Основные команды: git init, git clone, git add, git commit, git status, git push, git pull, git branch, git checkout.

 

16. Что такое Maven и зачем он нужен?
Maven — это система управления зависимостями и сборки проекта. Он автоматически загружает библиотеки и управляет структурой проекта.

 

17. Что такое HTTP и какие основные методы запросов существуют?
HTTP — протокол передачи данных в сети. Основные методы: GET, POST, PUT, DELETE, PATCH.

 

18. Что такое REST API и как его создать на Java?
REST API — это стиль построения веб-сервисов. На Java можно использовать Servlets, Spring Boot или JAX-RS для создания REST-сервисов.

 

19. Как работает серверный код в Java (на примере Servlet)?
Servlet — это Java-класс, который обрабатывает HTTP-запросы и генерирует ответ. Он запускается внутри веб-контейнера, например, Tomcat.

 

20. Что такое потоки (Threads) и как их использовать?
Поток — это отдельная последовательность выполнения внутри программы. Потоки создаются через класс Thread или интерфейс Runnable.

 

21. Как работает коллекция ArrayList в Java?
ArrayList — это динамический массив, который автоматически расширяется при добавлении элементов. Он поддерживает индексацию и быстрый доступ к элементам.

 

22. Что такое Map и какие его реализации существуют?
Map — это коллекция пар "ключ-значение". Реализации: HashMap, TreeMap, LinkedHashMap.

 

23. Какие основные алгоритмы должен знать начинающий разработчик?
Линейный поиск, бинарный поиск, сортировка пузырьком, сортировка выбором, сортировка вставками, рекурсия.

 

24. Что такое многопоточность и зачем она нужна?
Многопоточность позволяет одновременно выполнять несколько задач. Это улучшает производительность и отзывчивость приложений.

 

25. Что такое финальный проект курса и что в него входит?
Финальный проект — самостоятельная разработка простого веб-приложения с использованием Java, Servlets, JDBC и базы данных. Включает реализацию CRUD-операций, работу с HTTP и сохранение данных.

 

26. Что такое JDK и зачем он нужен при разработке на Java?
JDK (Java Development Kit) — это набор инструментов для разработки Java-приложений. Он включает компилятор, интерпретатор, библиотеки и утилиты, необходимые для написания, компиляции и запуска программ.

 

27. Какие IDE подходят для разработки на Java?
Популярные IDE: IntelliJ IDEA (профессиональный выбор), Eclipse, NetBeans. Они помогают писать код эффективнее благодаря автодополнению, отладке и интеграции с Git и Maven.

 

28. Что такое примитивные типы данных в Java?
Примитивные типы — это базовые типы, встроенные в язык: byte, short, int, long, float, double, char, boolean. Они не являются объектами и используются для хранения простых значений.

 

29. Чем отличаются операторы while и do-while?
Цикл while проверяет условие до выполнения тела, а do-while — после. Это означает, что тело do-while выполнится хотя бы один раз, даже если условие ложно.

 

30. Что такое тернарный оператор и как его использовать?
Тернарный оператор — это сокращённая форма условного выражения: условие ? значение_если_истина : значение_если_ложь. Используется для присвоения значения в зависимости от условия.

 

31. Что такое перегрузка методов и как она работает?
Перегрузка методов позволяет создавать несколько методов с одинаковым именем, но разными параметрами (разное количество или типы аргументов). Компилятор выбирает нужный метод автоматически.

 

32. Что такое конструктор и чем он отличается от обычного метода?
Конструктор вызывается при создании объекта и отвечает за его инициализацию. В отличие от метода, он не имеет возвращаемого типа и имя совпадает с именем класса.

 

33. Что такое модификаторы доступа в Java?
Модификаторы доступа определяют, где можно использовать поля, методы или классы. Основные: private (внутри класса), default (внутри пакета), protected (внутри пакета и подклассов), public (везде).

 

34. Что такое статические методы и переменные?
Статические методы и переменные принадлежат классу, а не экземпляру. Они вызываются через имя класса и доступны без создания объекта.

 

35. Что такое абстрактный класс и когда его использовать?
Абстрактный класс — это класс, который не может быть создан напрямую и может содержать абстрактные методы (без реализации). Используется как базовый класс для наследования.

 

36. Что такое обобщения (Generics) и зачем они нужны?
Generics позволяют создавать классы, интерфейсы и методы, которые работают с различными типами данных, сохраняя типобезопасность на этапе компиляции.

 

37. Как обрабатывать ошибки ввода-вывода в Java?
Для работы с IO в Java используется пакет java.io. Ошибки ввода-вывода обрабатываются через IOException, который нужно перехватывать с помощью try-catch или пробрасывать дальше.

 

38. Что такое PreparedStatement и почему он предпочтительнее Statement?
PreparedStatement позволяет использовать параметризованные SQL-запросы, что защищает от SQL-инъекций и улучшает производительность за счёт кэширования запросов.

 

39. Как работает система контроля версий Git?
Git — это распределённая система контроля версий, которая позволяет отслеживать изменения в коде, возвращаться к предыдущим версиям, работать в команде и объединять изменения из разных источников.

 

40. Что такое репозиторий в Git?
Репозиторий — это хранилище проекта с историей изменений. Локальный репозиторий находится на компьютере разработчика, а удалённый — на сервере (например, GitHub).

 

41. Что такое HTTP-сервлеты и как они работают?
Servlet — это Java-класс, который обрабатывает HTTP-запросы и формирует ответ. Работает на стороне сервера и запускается внутри контейнера, например Apache Tomcat.

 

42. Что такое жизненный цикл сервлета?
Жизненный цикл включает три основных этапа: init() — инициализация, service() — обработка запроса, destroy() — завершение работы.

 

43. Что такое многопоточность в Java и как её реализовать?
Многопоточность позволяет выполнять несколько задач одновременно. Реализуется через класс Thread или интерфейс Runnable.

 

44. Что такое синхронизация потоков и зачем она нужна?
Синхронизация потоков предотвращает конфликты при обращении нескольких потоков к общим ресурсам. Реализуется с помощью ключевого слова synchronized или ReentrantLock.

 

45. Что такое коллекции в Java и какие основные типы вы знаете?
Коллекции — это структуры данных для хранения и обработки множеств элементов. Основные типы: List, Set, Queue, Map.

 

46. Чем отличаются ArrayList и LinkedList?
ArrayList — это динамический массив, обеспечивающий быстрый доступ по индексу. LinkedList — связный список, более эффективный при вставке и удалении элементов.

 

47. Что такое алгоритмы сортировки и какие вы изучили?
На начальном уровне рассматриваются пузырьковая, выборочная и вставками сортировки, а также бинарный поиск.

 

48. Что такое рекурсия и когда её использовать?
Рекурсия — это вызов методом самого себя. Используется для решения задач, которые можно разделить на подзадачи, например, работа с деревьями или математическими последовательностями.

 

49. Какие навыки вы получите к окончанию курса?
Вы научитесь писать программы на Java, работать с базами данных, создавать веб-приложения, использовать Git и Maven, решать алгоритмические задачи и работать в команде.

 

50. Какой финальный проект вы будете реализовывать и какие технологии использовать?
Финальный проект — веб-приложение с использованием Servlets, JDBC, HTML/CSS и базы данных. Будут реализованы CRUD-операции, регистрация/авторизация пользователей и вывод данных.

 

51. Что такое JVM и как она работает?
JVM (Java Virtual Machine) — это виртуальная машина, которая выполняет Java-байткод. Она загружает классы, управляет памятью, обеспечивает безопасность и позволяет запускать Java-приложения на любой платформе.

 

52. Какие существуют способы установки Java на компьютер?
Java устанавливается через JDK от Oracle, OpenJDK или дистрибутивы, такие как Adoptium (ранее AdoptOpenJDK). Также можно использовать SDKMAN для управления версиями на Linux/macOS.

 

53. Что такое типизация и какая типизация у Java?
Типизация — это характеристика языка программирования, определяющая, как взаимодействуют данные и операции над ними. Java — строго типизированный язык: тип переменной должен быть объявлен и не может меняться произвольно.

 

54. Что такое логические операторы в Java и где они применяются?
Логические операторы: && (И), || (ИЛИ), ! (НЕ). Они используются для составления сложных условий в if, циклах и других конструкциях.

 

55. Что такое массивы и как с ними работать в Java?
Массив — это структура данных, хранящая элементы одного типа. Объявляется как int[] arr = new int[5]; или с инициализацией: int[] arr = {1, 2, 3}; Можно обращаться к элементам по индексу.

 

56. Что такое перегрузка конструкторов и зачем она нужна?
Перегрузка конструкторов позволяет создавать объекты разными способами. Например, можно создать объект без параметров, с одним или несколькими аргументами.

 

57. Что такое композиция классов и чем она отличается от наследования?
Композиция — это когда один класс содержит объект другого класса как поле. В отличие от наследования, она используется для построения сложных объектов без иерархии.

 

58. Что такое интерфейсы с дефолтными методами и зачем они нужны?
С Java 8 в интерфейсах появились default-методы — реализация по умолчанию. Это позволяет добавлять новые методы в интерфейсы без нарушения совместимости со старым кодом.

 

59. Что такое обработка исключений try-with-resources?
Это конструкция, позволяющая автоматически закрывать ресурсы (например, файлы или подключения к БД) после использования, избавляя от необходимости писать finally.

 

60. Как сериализовать и десериализовать объект в Java?
Для сериализации объект должен реализовать интерфейс Serializable. Используются ObjectOutputStream и ObjectInputStream для записи и чтения объектов в/из файла.

 

61. Что такое JDBC-драйвер и какие типы драйверов бывают?
JDBC-драйвер — это реализация API для конкретной СУБД. Типы:
— Тип 1 — мост JDBC-ODBC
— Тип 2 — нативный API
— Тип 3 — протокол сети Java
— Тип 4 — прямое подключение к БД (наиболее распространён)

 

62. Что такое ORM и почему она удобнее JDBC?
ORM (Object-Relational Mapping) — это технология, которая связывает объекты Java с таблицами базы данных. Удобнее, так как скрывает SQL-запросы и позволяет работать с объектами.

 

63. Что такое Maven-зависимости и как их добавить в проект?
Maven-зависимости — это внешние библиотеки, которые подключаются в проект через файл pom.xml. Добавляются с помощью тега <dependency> с указанием groupId, artifactId и version.

 

64. Что такое HTTP-статус-коды и какие основные вы знаете?
HTTP-статус-коды информируют о результате запроса. Основные:
— 200 OK
— 201 Created
— 400 Bad Request
— 401 Unauthorized
— 403 Forbidden
— 404 Not Found
— 500 Internal Server Error

 

65. Что такое JSON и как он используется в REST API?
JSON (JavaScript Object Notation) — формат обмена данными. В REST API используется для передачи данных между клиентом и сервером. Java поддерживает работу с JSON через библиотеки, например Gson или Jackson.

 

66. Что такое жизненный цикл HTTP-запроса?
Запрос начинается с отправки HTTP-сообщения от клиента к серверу (GET, POST и др.), сервер обрабатывает его и возвращает ответ с данными или ошибкой.

 

67. Что такое потокобезопасность и как её достичь в Java?
Потокобезопасность означает корректную работу при многопоточности. Достигается через synchronized, volatile, ReentrantLock, потокобезопасные коллекции из java.util.concurrent.

 

68. Что такое ConcurrentHashMap и когда его использовать?
ConcurrentHashMap — это потокобезопасная реализация Map. Используется в многопоточных приложениях, когда нужно одновременно читать и записывать данные из разных потоков.

 

69. Что такое регулярные выражения и как их использовать в Java?
Регулярные выражения — это шаблоны для поиска и замены текста. В Java используются через классы Pattern и Matcher или методы String.matches().

 

70. Что такое рекурсивные структуры данных и как их реализовать?
Рекурсивная структура данных — это структура, содержащая ссылку на саму себя. Пример: связный список или дерево. Реализуется через поля, ссылающиеся на экземпляры того же класса.

 

71. Что такое пулы потоков и как ими управлять в Java?
Пул потоков — это набор заранее созданных потоков для выполнения задач. Управление осуществляется через ExecutorService и класс Executors.

 

72. Что такое лямбда-выражения и как их использовать?
Лямбда-выражения — это короткий способ записи анонимных функций. Используются с функциональными интерфейсами. Пример: (a, b) -> a + b.

 

73. Что такое Stream API и зачем он нужен?
Stream API — это инструмент для работы с коллекциями. Позволяет фильтровать, преобразовывать и агрегировать данные с помощью методов, таких как filter(), map(), collect().

 

74. Что такое Unit-тестирование и как его реализовать в Java?
Unit-тестирование — проверка отдельных частей программы. В Java используется библиотека JUnit, аннотации @Test, @Before, @After для создания тестовых сценариев.

 

75. Как подготовиться к собеседованию на позицию Junior Java Developer?
Нужно знать основы Java, ООП, работу с Git, понимать HTTP, JDBC, алгоритмы и структуры данных. Также важно уметь решать простые задачи на Codewars/LeetCode и объяснить свой финальный проект.

1. Какой из перечисленных типов данных является примитивным в Java?
A) String
B) Integer
C) double
D) Object
Правильный ответ: C) double

 

2. Какой метод вызывается при создании объекта класса?
A) finalize()
B) toString()
C) constructor()
D) clone()
Правильный ответ: C) constructor()

 

3. Что означает аббревиатура JVM?
A) Java Virtual Machine
B) Java Variable Method
C) Java Version Manager
D) Java Virtual Method
Правильный ответ: A) Java Virtual Machine

 

4. Какой ключевое слово используется для наследования класса?
A) implements
B) extends
C) inherits
D) super
Правильный ответ: B) extends

 

5. Какой цикл гарантированно выполнится хотя бы один раз?
A) for
B) while
C) do-while
D) foreach
Правильный ответ: C) do-while

 

6. Каким ключевым словом обозначается константа в Java?
A) const
B) final
C) static
D) volatile
Правильный ответ: B) final

 

7. Какой класс используется для работы с динамическим массивом в Java?
A) Array
B) ArrayList
C) ListArray
D) Vector
Правильный ответ: B) ArrayList

 

8. Что возвращает метод isEmpty() у ArrayList, если список пуст?
A) null
B) 0
C) true
D) false
Правильный ответ: C) true

 

9. Какой интерфейс позволяет хранить только уникальные элементы?
A) List
B) Set
C) Map
D) Queue
Правильный ответ: B) Set

 

10. Для чего используется ключевое слово synchronized?
A) Для оптимизации кода
B) Для многопоточной синхронизации
C) Для создания новых потоков
D) Для обработки исключений
Правильный ответ: B) Для многопоточной синхронизации

 

11. Какой из следующих классов потокобезопасен?
A) StringBuilder
B) String
C) StringBuffer
D) StringPool
Правильный ответ: C) StringBuffer

 

12. Что делает оператор break в цикле?
A) Продолжает выполнение цикла
B) Выходит из текущей итерации
C) Завершает выполнение цикла
D) Перезапускает цикл
Правильный ответ: C) Завершает выполнение цикла

 

13. Какой из следующих методов не является частью жизненного цикла сервлета?
A) init()
B) service()
C) run()
D) destroy()
Правильный ответ: C) run()

 

14. Что такое HTTP-метод GET?
A) Отправляет данные на сервер
B) Запрашивает данные с сервера
C) Удаляет ресурс
D) Обновляет ресурс
Правильный ответ: B) Запрашивает данные с сервера

 

15. Какой из следующих фреймворков используется для работы с базами данных в Java?
A) Maven
B) Spring Boot
C) Hibernate
D) Git
Правильный ответ: C) Hibernate

 

16. Что означает аббревиатура CRUD?
A) Create Request Update Delete
B) Create Read Upload Destroy
C) Create Read Update Delete
D) Connect Retrieve Use Delete
Правильный ответ: C) Create Read Update Delete

 

17. Какую команду Git используют для создания копии удалённого репозитория?
A) git init
B) git push
C) git clone
D) git add
Правильный ответ: C) git clone

 

18. Какой интерфейс Java Collections Framework поддерживает хранение пар "ключ-значение"?
A) List
B) Set
C) Map
D) Collection
Правильный ответ: C) Map

 

19. Какой из следующих классов реализует упорядоченное хранение элементов?
A) HashSet
B) TreeSet
C) LinkedHashSet
D) HashMap
Правильный ответ: C) LinkedHashSet

 

20. Какой тип исключения проверяется компилятором?
A) RuntimeException
B) Error
C) Checked Exception
D) AssertionError
Правильный ответ: C) Checked Exception

 

21. Что выведет System.out.println(10 / 4);?
A) 2.5
B) 2
C) 3
D) Ошибка времени выполнения
Правильный ответ: B) 2

 

22. Как объявить статическую переменную в Java?
A) public var x;
B) static int x;
C) final String name;
D) volatile boolean flag;
Правильный ответ: B) static int x;

 

23. Какой из следующих методов выводит текст на консоль?
A) System.in.read()
B) System.out.println()
C) System.err.write()
D) System.exit()
Правильный ответ: B) System.out.println()

 

24. Что означает ключевое слово this в Java?
A) Ссылка на родительский класс
B) Ссылка на текущий объект
C) Ссылка на статический метод
D) Ссылка на интерфейс
Правильный ответ: B) Ссылка на текущий объект

 

25. Какой тип связи устанавливается между классами при использовании наследования?
A) "может быть"
B) "должен быть"
C) "является"
D) "использует"
Правильный ответ: C) "является"

 

26. Какой из следующих операторов используется для выхода из текущей итерации цикла?
A) break
B) continue
C) return
D) exit
Правильный ответ: B) continue

 

27. Что выведет следующий код: System.out.println(5 > 3 ? "Да" : "Нет");
A) Ошибка компиляции
B) Нет
C) Да
D) null
Правильный ответ: C) Да

 

28. Какое ключевое слово используется для создания нового объекта в Java?
A) new
B) create
C) instance
D) object
Правильный ответ: A) new

 

29. Какой метод вызывается для завершения работы потока?
A) stop()
B) destroy()
C) interrupt()
D) finish()
Правильный ответ: C) interrupt()

 

30. Что такое интерфейс в Java?
A) Класс, содержащий реализацию
B) Абстрактный класс с частичной реализацией
C) Специальный тип, который содержит только объявления методов
D) Обычный класс с полями и методами
Правильный ответ: C) Специальный тип, который содержит только объявления методов

 

31. Какой из перечисленных методов открывает файл для чтения в Java?
A) FileReader.read()
B) FileWriter.write()
C) FileInputStream.start()
D) BufferedReader.close()
Правильный ответ: A) FileReader.read()

 

32. Что означает аббревиатура JDBC?
A) Java Database Connection
B) Java Data Control
C) Java Development Base Connector
D) Java Dynamic Binding Class
Правильный ответ: A) Java Database Connection

 

33. Какая команда Git добавляет все изменения в индекс перед коммитом?
A) git add .
B) git commit -m
C) git push origin
D) git status
Правильный ответ: A) git add .

 

34. Какой из следующих классов является потокобезопасным?
A) ArrayList
B) HashMap
C) Vector
D) HashSet
Правильный ответ: C) Vector

 

35. Какой из следующих HTTP-методов отправляет данные на сервер?
A) GET
B) PUT
C) POST
D) DELETE
Правильный ответ: C) POST

 

36. Что делает метод toString() в Java?
A) Преобразует число в строку
B) Возвращает строковое представление объекта
C) Удаляет пробелы в строке
D) Проверяет длину строки
Правильный ответ: B) Возвращает строковое представление объекта

 

37. Какой пакет используется для работы с коллекциями в Java?
A) java.io
B) java.net
C) java.util
D) java.lang
Правильный ответ: C) java.util

 

38. Что означает ключевое слово volatile в Java?
A) Переменная не может быть изменена
B) Переменная будет храниться в кэше процессора
C) Переменная видна всем потокам
D) Переменная автоматически синхронизируется
Правильный ответ: C) Переменная видна всем потокам

 

39. Какой из следующих классов позволяет читать текст из файла построчно?
A) FileReader
B) BufferedReader
C) InputStream
D) FileWriter
Правильный ответ: B) BufferedReader

 

40. Какой из следующих принципов ООП обеспечивает скрытие деталей реализации?
A) Полиморфизм
B) Инкапсуляция
C) Наследование
D) Абстракция
Правильный ответ: B) Инкапсуляция

 

41. Какой из следующих методов у String возвращает подстроку?
A) substring()
B) replace()
C) split()
D) trim()
Правильный ответ: A) substring()

 

42. Что такое финальная переменная (final variable)?
A) Может менять значение
B) Не может быть изменена после инициализации
C) Доступна только в статических методах
D) Является частью интерфейса
Правильный ответ: B) Не может быть изменена после инициализации

 

43. Какой из следующих классов используется для работы с датами в новых версиях Java?
A) Date
B) Calendar
C) LocalDate
D) Time
Правильный ответ: C) LocalDate

 

44. Какой из следующих элементов используется для организации проекта в Maven?
A) pom.xml
B) build.gradle
C) settings.json
D) package.json
Правильный ответ: A) pom.xml

 

45. Что такое REST API?
A) Архитектурный стиль обмена данными через HTTP
B) База данных
C) Язык программирования
D) Тип браузера
Правильный ответ: A) Архитектурный стиль обмена данными через HTTP

 

46. Какой из следующих методов вызывается при завершении работы сервлета?
A) init()
B) service()
C) destroy()
D) doGet()
Правильный ответ: C) destroy()

 

47. Что делает метод Collections.sort() в Java?
A) Сортирует массив
B) Сортирует список
C) Сортирует Map
D) Сортирует Set
Правильный ответ: B) Сортирует список

 

48. Какой из следующих методов запускает новый поток?
A) run()
B) start()
C) execute()
D) begin()
Правильный ответ: B) start()

 

49. Какой из следующих типов данных используется для хранения целых чисел?
A) double
B) boolean
C) int
D) char
Правильный ответ: C) int

 

50. Какой из следующих операторов используется для выбора одного из нескольких вариантов?
A) if
B) else
C) switch
D) for
Правильный ответ: C) switch

 

51. Что выведет следующий код: System.out.println(“Hello” + 2 + 3);?
A) Hello23
B) Hello5
C) Ошибка компиляции
D) 5Hello
Правильный ответ: A) Hello23

 

52. Какой из следующих методов используется для сравнения строк в Java с учетом регистра?
A) equals()
B) ==
C) compareTo()
D) matches()
Правильный ответ: A) equals()

 

53. Что означает ключевое слово super в Java?
A) Ссылка на текущий объект
B) Ссылка на родительский класс
C) Ссылка на статический метод
D) Ссылка на интерфейс
Правильный ответ: B) Ссылка на родительский класс

 

54. Какой тип данных используется для хранения символов в Java?
A) int
B) char
C) String
D) boolean
Правильный ответ: B) char

 

55. Что делает метод close() при работе с файлами?
A) Открывает файл
B) Сохраняет изменения
C) Завершает работу с ресурсом
D) Удаляет файл
Правильный ответ: C) Завершает работу с ресурсом

 

56. Какой из следующих классов позволяет выполнять параметризованные SQL-запросы?
A) Statement
B) Connection
C) PreparedStatement
D) ResultSet
Правильный ответ: C) PreparedStatement

 

57. Какую команду Git используют для просмотра состояния рабочей директории?
A) git status
B) git log
C) git diff
D) git show
Правильный ответ: A) git status

 

58. Что такое Maven-проект и как он описывается?
A) С помощью build.gradle
B) С помощью pom.xml
C) С помощью package.json
D) С помощью settings.xml
Правильный ответ: B) С помощью pom.xml

 

59. Какой из следующих HTTP-статусов означает "Создано"?
A) 200
B) 201
C) 404
D) 500
Правильный ответ: B) 201

 

60. Что означает аннотация @Override в Java?
A) Метод устарел
B) Метод должен быть переопределен
C) Метод скрыт
D) Метод является абстрактным
Правильный ответ: B) Метод должен быть переопределен

 

61. Какой из следующих методов добавляет элемент в конец ArrayList?
A) add()
B) insert()
C) set()
D) push()
Правильный ответ: A) add()

 

62. Что такое рекурсия в программировании?
A) Вызов метода из другого класса
B) Вызов метода самого себя
C) Вызов статического метода
D) Вызов метода через интерфейс
Правильный ответ: B) Вызов метода самого себя

 

63. Какой из следующих классов реализует FIFO (первым пришёл — первым ушёл)?
A) Stack
B) ArrayList
C) LinkedList
D) PriorityQueue
Правильный ответ: D) PriorityQueue

 

64. Что делает метод Thread.sleep() в Java?
A) Останавливает поток навсегда
B) Приостанавливает выполнение потока на определённое время
C) Запускает новый поток
D) Прерывает поток
Правильный ответ: B) Приостанавливает выполнение потока на определённое время

 

65. Какой из следующих пакетов содержит основные классы Java?
A) java.util
B) java.io
C) java.lang
D) java.net
Правильный ответ: C) java.lang

 

66. Что означает ключевое слово transient в Java?
A) Поле не сериализуется
B) Поле видно всем потокам
C) Поле постоянно
D) Поле статическое
Правильный ответ: A) Поле не сериализуется

 

67. Какой из следующих классов используется для работы с регулярными выражениями в Java?
A) Pattern
B) Matcher
C) Regex
D) Both A и B
Правильный ответ: D) Both A и B

 

68. Что означает аннотация @FunctionalInterface в Java?
A) Интерфейс может содержать несколько методов
B) Интерфейс содержит только один абстрактный метод
C) Интерфейс является абстрактным
D) Интерфейс нельзя реализовывать
Правильный ответ: B) Интерфейс содержит только один абстрактный метод

 

69. Какой из следующих методов Stream API применяет функцию к каждому элементу?
A) filter()
B) map()
C) collect()
D) forEach()
Правильный ответ: B) map()

 

70. Что означает ключевое слово enum в Java?
A) Класс
B) Интерфейс
C) Перечисление
D) Пакет
Правильный ответ: C) Перечисление

 

71. Какой из следующих методов проверяет, существует ли файл?
A) exists()
B) isFile()
C) createNewFile()
D) delete()
Правильный ответ: A) exists()

 

72. Что такое ORM в контексте баз данных?
A) Объектно-реляционная манипуляция
B) Объектно-реляционное отображение
C) Объектно-реляционная модель
D) Объектно-реляционная метрика
Правильный ответ: B) Объектно-реляционное отображение

 

73. Какой из следующих фреймворков используется для тестирования Java-приложений?
A) JUnit
B) Spring
C) Hibernate
D) Maven
Правильный ответ: A) JUnit

 

74. Какой из следующих методов вызывается автоматически при сборке мусора?
A) finalize()
B) toString()
C) clone()
D) notify()
Правильный ответ: A) finalize()

 

75. Что означает ключевое слово assert в Java?
A) Выводит сообщение
B) Создаёт новую переменную
C) Проверяет условие во время выполнения
D) Завершает программу
Правильный ответ: C) Проверяет условие во время выполнения

Экзаменационный билет №1

Теоретическая часть

      1. Опишите принципы ООП и приведите примеры их реализации в Java.
      2. Что такое JDBC и как с его помощью подключиться к базе данных?

Ответы на теоретическую часть:

1. Принципы ООП:

  • Инкапсуляция — сокрытие деталей реализации, доступ через методы (например, private поля и public геттеры/сеттеры).
  • Наследование — дочерний класс наследует свойства родительского (extends).
  • Полиморфизм — разное поведение одного метода у разных объектов (например, переопределение метода).
  • Абстракция — выделение ключевых характеристик, игнорирование сложных деталей.

Пример:

class Animal {
    void speak() {
        System.out.println("Звук");
    }
}

class Dog extends Animal {
    void speak() {
        System.out.println("Гав!");
    }
}

2. JDBC (Java Database Connectivity) — это API для взаимодействия Java с СУБД.
Чтобы подключиться:

  • Загрузить драйвер Class.forName("com.mysql.cj.jdbc.Driver");
  • Установить соединение Connection conn = DriverManager.getConnection(url, user, password);
  • Выполнить SQL-запрос через Statement или PreparedStatement

Практическая часть

Напишите программу на Java, которая выводит на экран числа от 1 до 50. Для чисел, кратных 3, выведите "Fizz", для кратных 5 — "Buzz", а для кратных и 3, и 5 — "FizzBuzz".

public class FizzBuzz {
    public static void main(String[] args) {
        for (int i = 1; i <= 50; i++) {
            if (i % 3 == 0 && i % 5 == 0) {
                System.out.println("FizzBuzz");
            } else if (i % 3 == 0) {
                System.out.println("Fizz");
            } else if (i % 5 == 0) {
                System.out.println("Buzz");
            } else {
                System.out.println(i);
            }
        }
    }
}

 

Экзаменационный билет №2

Теоретическая часть

      1. Объясните разницу между интерфейсом и абстрактным классом в Java.
      2. Как работают циклы в Java? Перечислите типы циклов и опишите их работу.

Ответы на теоретическую часть:

1. Интерфейс vs Абстрактный класс:

  • Интерфейс : содержит только объявления методов (до Java 8), может иметь default и static методы, позволяет множественному наследованию.
  • Абстрактный класс : может содержать реализацию, поля, конструкторы, не может быть создан напрямую, один класс может наследовать только один абстрактный класс.

2. Циклы в Java:

  • for — используется, когда известно количество итераций.
  • while — выполняется пока условие истинно.
  • do-while — аналогичен while, но проверка условия происходит после выполнения тела (выполняется хотя бы один раз).
  • foreach — удобен при работе с коллекциями и массивами.

Практическая часть

Напишите программу, которая считает сумму всех элементов в массиве целых чисел. Массив должен быть инициализирован значениями {5, 10, 15, 20}.

public class SumArray {
    public static void main(String[] args) {
        int[] numbers = {5, 10, 15, 20};
        int sum = 0;
        for (int num : numbers) {
            sum += num;
        }
        System.out.println("Сумма элементов: " + sum);
    }
}

 

Экзаменационный билет №3

Теоретическая часть

      1. Что такое статические методы и переменные в Java? Приведите пример использования.
      2. Охарактеризуйте жизненный цикл сервлета.

Ответы на теоретическую часть:

1. Статические методы и переменные:

  • Принадлежат классу, а не экземпляру.
  • Доступны без создания объекта.
  • Вызываются через имя класса.
  • Не могут обращаться к нестатическим членам напрямую.

Пример:

class MathUtils {
    static int add(int a, int b) {
        return a + b;
    }
}
// Использование: MathUtils.add(2, 3);

 

2. Жизненный цикл сервлета:

  • init() — вызывается один раз при инициализации сервлета.
  • service() — обрабатывает запросы клиентов.
  • destroy() — вызывается перед удалением сервлета из памяти.

Практическая часть

Напишите программу, которая принимает строку от пользователя и выводит её длину. Если пользователь вводит пустую строку, программа должна выбросить исключение и сообщить об этом.

import java.util.Scanner;

public class StringLengthChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите строку: ");
        String input = scanner.nextLine();

        try {
            if (input.isEmpty()) {
                throw new Exception("Введена пустая строка!");
            }
            System.out.println("Длина строки: " + input.length());
        } catch (Exception e) {
            System.out.println("Ошибка: " + e.getMessage());
        }
    }
}

 

Экзаменационный билет №4

Теоретическая часть

      1. Объясните, что такое многопоточность в Java и как она реализуется.
      2. Как работают HTTP-методы GET и POST? В чём их отличие?

Ответы на теоретическую часть:

1. Многопоточность в Java:

  • Позволяет выполнять несколько задач одновременно.
  • Реализуется через:
    • Класс Thread
    • Интерфейс Runnable
    • ExecutorService для управления пулом потоков
class MyThread extends Thread {
    public void run() {
        System.out.println("Поток запущен");
    }
}
MyThread t = new MyThread();
t.start();

 

2. HTTP-методы GET и POST:

  • GET — запрашивает данные с сервера, данные передаются в URL (query params), имеет ограничения по длине.
  • POST — отправляет данные на сервер, данные передаются в теле запроса, более безопасный и не ограничен по длине.

Практическая часть

Напишите Java-программу, которая создаёт простой ArrayList, добавляет в него 5 строк, а затем выводит все элементы на экран.

import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Первый");
        list.add("Второй");
        list.add("Третий");
        list.add("Четвёртый");
        list.add("Пятый");

        for (String item : list) {
            System.out.println(item);
        }
    }
}

 

Экзаменационный билет №5

Теоретическая часть

      1. Что такое Git и какие основные команды используются при работе с ним?
      2. Охарактеризуйте работу с файлами в Java: чтение и запись текстовых файлов.

Ответы на теоретическую часть:

1. Git — система контроля версий. Основные команды:

  • git initсоздание нового репозитория.
  • git cloneклонирование существующего.
  • git addдобавление изменений в индекс.
  • git commitсохранение изменений с комментарием.
  • git pushзагрузка изменений на удалённый репозиторий.
  • git pullполучение изменений с удалённого репозитория.

2. Работа с файлами:

  • Чтение: BufferedReaderFileReader
  • Запись: BufferedWriterFileWriter
  • NIO: Files.readAllLines()Files.write()

Пример чтения файла:

import java.io.*;

public class FileReadExample {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        reader.close();
    }
}

 

Практическая часть

Напишите программу, которая принимает два числа от пользователя и делит их. Программа должна корректно обработать деление на ноль и вывести соответствующее сообщение.

import java.util.Scanner;

public class SafeDivision {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Введите первое число: ");
        double a = scanner.nextDouble();

        System.out.print("Введите второе число: ");
        double b = scanner.nextDouble();

        try {
            if (b == 0) {
                throw new ArithmeticException("Деление на ноль недопустимо!");
            }
            System.out.println("Результат: " + (a / b));
        } catch (ArithmeticException e) {
            System.out.println("Ошибка: " + e.getMessage());
        }
    }
}

 

Экзаменационный билет №6

Теоретическая часть

      1. Что такое исключения в Java и как они обрабатываются? Приведите пример использования try-catch-finally.
      2. Охарактеризуйте работу с коллекциями в Java. Перечислите основные интерфейсы и их реализации.

Ответы на теоретическую часть:

1. Исключения — это ошибки, возникающие во время выполнения программы. В Java они бывают проверяемыми (checked) и непроверяемыми (unchecked). Исключения обрабатываются через блоки:trycatchfinally

Пример:

try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("Деление на ноль!");
} finally {
    System.out.println("Блок finally всегда выполняется");
}

 

2. Коллекции — это структуры данных для хранения и обработки множества элементов. Основные интерфейсы:

  • List — упорядоченная коллекция с доступом по индексу реализации: ArrayListLinkedList
  • Set — коллекция без дубликатов HashSetTreeSet
  • Map — хранение пар ключ-значениеHashMapTreeMap
  • Queue — очередьPriorityQueue

Практическая часть

Напишите программу, которая считывает строку с клавиатуры и выводит количество слов в ней. Слова разделяются пробелами.

import java.util.Scanner;

public class WordCounter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите строку: ");
        String input = scanner.nextLine();

        String[] words = input.trim().split("\\s+");
        if (input.trim().isEmpty()) {
            System.out.println("Слов нет.");
        } else {
            System.out.println("Количество слов: " + words.length);
        }
    }
}

 

Экзаменационный билет №7

Теоретическая часть

      1. Что такое лямбда-выражения в Java? Приведите пример их использования.
      2. Какие HTTP-методы вы знаете и в чём их назначение?

Ответы на теоретическую часть:

1. Лямбда-выражения — это анонимные функции, которые позволяют писать более короткий и читаемый код. Используются с функциональными интерфейсами.

Пример:

@FunctionalInterface
interface MathOperation {
    int operate(int a, int b);
}

public class LambdaExample {
    public static void main(String[] args) {
        MathOperation sum = (a, b) -> a + b;
        System.out.println(sum.operate(5, 3)); // Вывод: 8
    }
}

 

2. Основные HTTP-методы:

  • GET — получает данные от сервера.
  • POST — отправляет данные на сервер для создания ресурса.
  • PUT — обновляет существующий ресурс.
  • DELETE — удаляет ресурс.
  • PATCH — частично изменяет ресурс.

Практическая часть

Напишите программу, которая создаёт массив из 10 случайных чисел от 1 до 100 и выводит максимальное значение.

import java.util.Random;

public class MaxRandomNumber {
    public static void main(String[] args) {
        int[] numbers = new int[10];
        Random rand = new Random();
        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = rand.nextInt(100) + 1;
            System.out.print(numbers[i] + " ");
        }

        int max = numbers[0];
        for (int num : numbers) {
            if (num > max) {
                max = num;
            }
        }

        System.out.println("\nМаксимальное число: " + max);
    }
}

 

Экзаменационный билет №8

Теоретическая часть

      1. Что такое сериализация и десериализация объектов в Java? Приведите пример.
      2. Объясните, что такое потокобезопасность и как её достичь в Java.

1. Сериализация — это процесс преобразования объекта в последовательность байтов для передачи или сохранения. Десериализация — обратный процесс. Объект должен реализовать:Serializable

Пример:

import java.io.*;

class Person implements Serializable {
    String name;
    int age;
}

public class SerializationExample {
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        person.name = "Иван";
        person.age = 25;

        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"));
        out.writeObject(person);
        out.close();

        ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.ser"));
        Person loadedPerson = (Person) in.readObject();
        in.close();
    }
}

 

2. Потокобезопасность — корректная работа приложения при многопоточности. Способы достижения:

  • Ключевое слово synchronized
  • Класс ReentrantLock
  • Использование потокобезопасных коллекций из java.util.concurrent

Практическая часть

Напишите программу, которая принимает от пользователя строку и определяет, является ли она палиндромом.

import java.util.Scanner;

public class PalindromeChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите строку: ");
        String input = scanner.nextLine().toLowerCase().replaceAll("\\s+", "");

        boolean isPalindrome = true;
        int left = 0;
        int right = input.length() - 1;

        while (left < right) {
            if (input.charAt(left) != input.charAt(right)) {
                isPalindrome = false;
                break;
            }
            left++;
            right--;
        }

        System.out.println(isPalindrome ? "Это палиндром." : "Это не палиндром.");
    }
}

 

Экзаменационный билет №9

Теоретическая часть

      1. Что такое Maven и как он помогает в управлении проектами? Приведите пример подключения зависимости.
      2. Что такое Stream API и зачем он нужен в Java?

Ответы на теоретическую часть:

1. Maven — это система управления зависимостями и сборки проекта. Он автоматически загружает библиотеки и управляет жизненным циклом проекта. Зависимости указываются в файле pom.xml

Пример подключения зависимости:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.9</version>
</dependency>

 

2. Stream API — это набор методов для работы с коллекциями. Он позволяет фильтровать, преобразовывать и агрегировать данные.

 

Пример:

List<String> names = Arrays.asList("Алекс", "Иван", "Петр");
List<String> filtered = names.stream()
                              .filter(n -> n.startsWith("А"))
                              .toList();
System.out.println(filtered); // [Алекс]

 

Практическая часть

Напишите программу, которая запрашивает у пользователя имя и возраст, а затем выводит приветственное сообщение.

import java.util.Scanner;

public class UserInfo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Введите ваше имя: ");
        String name = scanner.nextLine();

        System.out.print("Введите ваш возраст: ");
        int age = scanner.nextInt();

        System.out.println("Привет, " + name + "! Тебе " + age + " лет.");
    }
}

 

Экзаменационный билет №10

Теоретическая часть

      1. Что такое Unit-тестирование и как оно реализуется в Java? Приведите пример теста с использованием JUnit.
      2. Охарактеризуйте работу с регулярными выражениями в Java.

Ответы на теоретическую часть:

1. Unit-тестирование — это проверка отдельных частей программы. В Java используется библиотека JUnit.

Пример теста:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class CalculatorTest {
    @Test
    void testAddition() {
        assertEquals(5, 2 + 3);
    }
}

 

2. Регулярные выражения — это шаблоны для поиска и замены текста. Используются классы PatternMatcher

Пример:

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("Java");
        Matcher matcher = pattern.matcher("Я учу Java!");

        if (matcher.find()) {
            System.out.println("Найдено!");
        }
    }
}

 

Практическая часть

Напишите программу, которая принимает целое число и выводит его факториал.

import java.util.Scanner;

public class FactorialCalculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите число: ");
        int number = scanner.nextInt();

        long factorial = 1;
        for (int i = 1; i <= number; i++) {
            factorial *= i;
        }

        System.out.println("Факториал: " + factorial);
    }
}

 

Экзаменационный билет №11

Теоретическая часть

      1. Что такое статические и нестатические методы в Java? Чем они отличаются? Приведите пример использования.
      2. Охарактеризуйте работу с массивами в Java. Как их объявлять, инициализировать и обрабатывать?

Ответы на теоретическую часть:

1. Статические методы принадлежат классу, а не экземпляру. Они вызываются через имя класса и не имеют доступа к нестатическим полям и методам. Нестатические методы вызываются только у объекта класса.

class MathUtils {
    static int add(int a, int b) {
        return a + b;
    }
}

// Вызов:
MathUtils.add(2, 3);

 

2. Массив — это структура данных, хранящая элементы одного типа. Объявление, инициализация и использование:

int[] arr = new int[5]; // Объявление и инициализация
arr[0] = 1;

int[] arr2 = {1, 2, 3}; // Инициализация с данными

for (int i : arr2) {
    System.out.println(i);
}

 

Практическая часть

Напишите программу, которая принимает от пользователя строку и выводит количество гласных букв в ней. Гласные: A, E, I, O, U (без учёта регистра).

import java.util.Scanner;

public class VowelCounter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите строку: ");
        String input = scanner.nextLine().toLowerCase();

        int count = 0;
        for (char c : input.toCharArray()) {
            if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
                count++;
            }
        }

        System.out.println("Количество гласных: " + count);
    }
}

 

Экзаменационный билет №12

Теоретическая часть

      1. Что такое интерфейсы в Java? Какие виды интерфейсов вы знаете и как работать с default-методами?
      2. Что такое многопоточность и какие способы её реализации вы знаете? Приведите пример.

Ответы на теоретическую часть:

1. Интерфейс — это абстрактный тип, который содержит объявления методов. С Java 8 поддерживают default-методы и static-методы.

interface Animal {
    void speak();
    
    default void move() {
        System.out.println("Животное двигается");
    }
}

 

2. Многопоточность — это выполнение нескольких задач параллельно. Реализуется через:

  • Thread
  • Runnable
  • ExecutorService

Пример:

class MyTask implements Runnable {
    public void run() {
        System.out.println("Задача запущена");
    }
}

new Thread(new MyTask()).start();

 

Практическая часть

Напишите программу, которая считывает три числа и определяет, можно ли из них составить треугольник (сумма любых двух сторон должна быть больше третьей).

import java.util.Scanner;

public class TriangleChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Введите первую сторону: ");
        double a = scanner.nextDouble();

        System.out.print("Введите вторую сторону: ");
        double b = scanner.nextDouble();

        System.out.print("Введите третью сторону: ");
        double c = scanner.nextDouble();

        if (a + b > c && a + c > b && b + c > a) {
            System.out.println("Можно построить треугольник.");
        } else {
            System.out.println("Невозможно построить треугольник.");
        }
    }
}

 

Экзаменационный билет №13

Теоретическая часть

      1. Что такое ORM и зачем она нужна? Какие фреймворки для работы с ORM вы знаете?
      2. Что такое JSON и как он используется в REST API? Приведите пример сериализации/десериализации.

Ответы на теоретическую часть:

1. ORM (Object-Relational Mapping) — технология, связывающая объекты Java с таблицами базы данных. Удобнее, чем JDBC. Фреймворки: Hibernate, JPA, MyBatis.

2. JSON (JavaScript Object Notation) — формат обмена данными. В REST API используется для передачи данных между клиентом и сервером.

Пример с Gson:

Gson gson = new Gson();
Person person = new Person("Иван", 25);
String json = gson.toJson(person); // Сериализация

Person p = gson.fromJson(json, Person.class); // Десериализация

 

Практическая часть

Напишите программу, которая принимает от пользователя число и выводит его представление в двоичной системе счисления.

import java.util.Scanner;

public class DecimalToBinary {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите число: ");
        int number = scanner.nextInt();

        System.out.println("Двоичное представление: " + Integer.toBinaryString(number));
    }
}

 

Экзаменационный билет №14

Теоретическая часть

      1. Что такое аннотации в Java? Приведите примеры стандартных и пользовательских аннотаций.
      2. Что такое пулы потоков и как ими управлять в Java?

Ответы на теоретическую часть:

1. Аннотации — это метаданные, добавляемые к классам, методам, полям. Примеры: @Override@DeprecatedПользовательские аннотации создаются через @interface.

@interface Info {
    String author();
    int version();
}

 

2. Пул потоков — набор заранее созданных потоков для выполнения задач. Управление через ExecutorService.

ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> System.out.println("Задача выполнена"));
executor.shutdown();

 

Практическая часть

Напишите программу, которая находит все простые числа в диапазоне от 1 до N, где N задаётся пользователем.

import java.util.Scanner;

public class PrimeNumbers {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите верхнюю границу: ");
        int n = scanner.nextInt();

        System.out.println("Простые числа:");
        for (int i = 2; i <= n; i++) {
            boolean isPrime = true;
            for (int j = 2; j * j <= i; j++) {
                if (i % j == 0) {
                    isPrime = false;
                    break;
                }
            }
            if (isPrime) {
                System.out.print(i + " ");
            }
        }
    }
}

 

Экзаменационный билет №15

Теоретическая часть

      1. Что такое рекурсия и когда её использовать? Приведите пример вычисления факториала с помощью рекурсии.
      2. Что такое регулярные выражения и как они используются в Java? Приведите пример проверки email.

Ответы на теоретическую часть:

1. Рекурсия — это вызов методом самого себя. Используется при решении задач, которые можно разделить на подзадачи.

int factorial(int n) {
    if (n == 0) return 1;
    return n * factorial(n - 1);
}

 

2. Регулярные выражения — шаблоны для поиска и замены текста. Используются через Pattern и Matcher или String.matches().

String email = "test@example.com";
boolean isValid = email.matches("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}");
System.out.println(isValid ? "Email корректен" : "Email некорректен");

 

Практическая часть

Напишите программу, которая принимает строку и меняет местами первый и последний символы. Если длина строки меньше 2, программа должна сообщить об этом.

import java.util.Scanner;

public class SwapFirstLast {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите строку: ");
        String input = scanner.nextLine();

        if (input.length() < 2) {
            System.out.println("Строка слишком короткая для перестановки.");
        } else {
            char first = input.charAt(0);
            char last = input.charAt(input.length() - 1);
            String middle = input.substring(1, input.length() - 1);
            System.out.println(last + middle + first);
        }
    }
}

 

(1) Кейс: "Ошибка в системе регистрации пользователей"

Описание кейса

Вы — начинающий бэкенд-разработчик, обучающийся по программе «Бэкенд-разработчик Java (Начальный уровень)». Вам поручено разобраться с ошибкой в учебном проекте — простой системе регистрации и авторизации пользователей.

Проект написан на Java, использует:

  • Сервлеты для обработки HTTP-запросов
  • JDBC для работы с базой данных MySQL
  • HTML/Bootstrap для фронтенда
  • Maven как систему сборки

Пользователи жалуются, что при регистрации возникают следующие проблемы:

  1. Иногда данные пользователя не сохраняются в базе.
  2. При попытке зарегистрировать существующего пользователя система не выдаёт предупреждения.
  3. Пароль сохраняется в открытом виде.

Вам нужно изучить предоставленный код и найти скрытые проблемы, а затем предложить способы их устранения.

Фрагменты исходного кода:

1.RegisterServlet.java :

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    Connection connection = DBUtil.getConnection();
    try {
        Statement stmt = connection.createStatement();
        stmt.executeUpdate("INSERT INTO users (username, password) VALUES ('" + username + "', '" + password + "')");
        response.sendRedirect("login.jsp");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

 

2. DBUtil.java :

public class DBUtil {
    public static Connection getConnection() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
        } catch (Exception e) {
            throw new RuntimeException("Ошибка подключения к БД", e);
        }
    }
}

 

3. Структура таблицы users :

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE,
    password VARCHAR(255)
);

 

Анализ ситуации и выявление проблем

 

Проблема №1: SQL-инъекции

  • Используется конкатенация строк в SQL-запросах.
  • Это позволяет злоумышленнику внедрять вредоносные команды через поля формы.

Решение:

1. Использование PreparedStatement :

String sql = "INSERT INTO users (username, password) VALUES (?, ?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, hashPassword(password));

 

Проблема №2: Отсутствие проверки уникальности логина

  • Нет обработки ошибки дубликата для поля usernameПриводит к повторной регистрации одинаковых пользователей.

Решение:

2. Добавление проверки на существование пользователя:

ResultSet rs = pstmt.executeQuery("SELECT * FROM users WHERE username = '" + username + "'");
if (rs.next()) {
    request.setAttribute("error", "Пользователь уже существует");
    request.getRequestDispatcher("register.jsp").forward(request, response);
}

 

Проблема №3: Сохранение пароля в открытом виде

  • Пароль хранится в БД без хэширования — это серьёзная угроза безопасности.

Решение:

3. Хэширование паролей:

String hashed = BCrypt.hashpw(password, BCrypt.gensalt());

 

Проблема №4: Не закрывается соединение с БД

  • В коде нет явного закрытия ресурсов StatementConnectionМожет вызвать утечки памяти.

Решение:

4. Использование конструкции try-with-resources:

try (Connection conn = DBUtil.getConnection();
     PreparedStatement pstmt = conn.prepareStatement(sql)) {
    // выполнение запроса
} catch (SQLException e) {
    // обработка ошибок
}

 

(2) Кейс: "Ошибка в системе заказов — дублирование и некорректная обработка"

Описание ситуации

Вы продолжаете обучение по программе «Бэкенд-разработчик Java (Начальный уровень)». На данном этапе вы работаете над учебным проектом — простой системой управления заказами интернет-магазина.

Проект написан на:

  • Java Servlets
  • JDBC
  • HTML / JSP
  • Maven
  • MySQL

Пользователь, представляющий бизнес, сообщает о следующих проблемах:

  1. При оформлении заказа иногда создаются дубликаты .
  2. Если товар закончился, система всё равно принимает заказ , хотя должна отказать.
  3. После успешного оформления заказа пользователь не получает подтверждение или номер заказа.
  4. Иногда данные заказа теряются при перезагрузке сервера.

Вам нужно изучить предоставленный код, выявить скрытые проблемы и предложить решения, чтобы устранить ошибки и повысить стабильность и безопасность системы.

Фрагменты исходного кода:

1. OrderServlet.java :

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String productId = request.getParameter("product_id");
    String quantity = request.getParameter("quantity");

    Connection connection = DBUtil.getConnection();
    try {
        Statement stmt = connection.createStatement();
        stmt.executeUpdate("INSERT INTO orders (product_id, quantity, status) VALUES (" + productId + ", " + quantity + ", 'pending')");
    } catch (SQLException e) {
        e.printStackTrace();
    }

    response.sendRedirect("confirmation.jsp");
}

 

2. ProductDAO.java
(для проверки наличия товара):

public boolean isProductAvailable(int productId, int quantityNeeded) {
    Connection connection = DBUtil.getConnection();
    try {
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT stock FROM products WHERE id = " + productId);
        if (rs.next()) {
            return rs.getInt("stock") >= quantityNeeded;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return false;
}

 

3. Структура таблицы orders :

CREATE TABLE orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    product_id INT,
    quantity INT,
    status VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

 

4. Структура таблицы products :

CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    price DECIMAL(10,2),
    stock INT
);

 

Анализ ситуации и выявление проблем

 

Проблема 1: Отсутствие проверки наличия товара перед созданием заказа
  • Приводит к принятию заказов на товары, которых нет на складе

Решение:

  1. Добавить проверку наличия товара до создания заказа:
if (!productDAO.isProductAvailable(productId, quantity)) {
    request.setAttribute("error", "Товара нет в наличии");
    request.getRequestDispatcher("order.jsp").forward(request, response);
    return;
}

 

Проблема 2: SQL-инъекции
  • Конкатенация параметров в SQL-запросах позволяет внедрять вредоносный код.

Решение:

     2. Использовать PreparedStatement :

PreparedStatement pstmt = connection.prepareStatement("INSERT INTO orders ...");
pstmt.setInt(1, productId);
pstmt.setInt(2, quantity);
Проблема 3: Дублирование заказов
  • Нет защиты от повторной отправки формы (F5 после POST).

Решение:

    3. Реализовать защиту от повторных запросов (Post/Redirect/Get):

response.sendRedirect("confirmation.jsp?order_id=" + generatedOrderId);
Проблема 4: Нестабильное сохранение данных
  • Нестабильное сохранение данных

Решение:

    4. Использовать транзакции:

connection.setAutoCommit(false);
// выполнить все операции
connection.commit();
Проблема 5: Отсутствие подтверждения заказа
  • Пользователь не знает, успешно ли оформлен заказ.

Решение:

    5. Создать механизм генерации ID заказа и вывода информации пользователю:

    • Использовать getGeneratedKeys() для получения нового order_id
    • Передавать его через URL в confirmation.jsp
Проблема 6: Не закрываются ресурсы БД
  • Возможны утечки памяти и исчерпание пула соединений.

Решение:

    6. Использовать try-with-resources:ь конструкцию: 

try (Connection conn = DBUtil.getConnection();
     PreparedStatement pstmt = conn.prepareStatement(...)) {
    // ...
}

 

 

Ролевая игра №1: "Стартап Java-разработки"

Цель игры

Создать минимально жизнеспособный (MVP) веб-сервис на Java для учебного стартапа, имитируя реальную командную разработку.
Игра направлена на закрепление знаний по бэкенд-разработке, работе в команде и применению практических навыков.

Формат

  • Тип: Обучающая ролевая симуляция
  • Участники: 3–5 человек в команде
  • Длительность: 2–4 академических часа (можно растянуть на несколько занятий)
  • Платформа: В аудитории или онлайн (Zoom/MS Teams + Miro / Google Docs)
  • Необходимые материалы:
    • Доска для задач (Trello, Notion, Miro)
    • Техническое задание (выдается)
    • Базовые инструменты: IDE, JDK, MySQL, Git

Сеттинг

Вы — команда молодых джуниоров, которые устроились в стартап под названием "MyShop" , занимающийся цифровыми решениями для малого бизнеса. Компания только начинает развиваться и нуждается в первом продукте — REST API для управления заказами .
Вам предстоит спроектировать, реализовать и протестировать этот сервис за ограниченное время, чтобы презентовать его потенциальным инвесторам.

Роли в команде

Роль Ответственность
Team Lead / Scrum Master
Организация процесса, распределение задач, контроль сроков
Backend Developer 1 Разработка контроллеров, маршрутов, обработка HTTP-запросов
Backend Developer 2 Работа с базой данных, модели, DAO
QA / Tester Проверка работоспособности, поиск багов, написание тест-кейсов
DevOps / Git Master Управление репозиторием, слияние веток, настройка окружения

 

Этапы игры

Этап 1.

Знакомство с задачей 

  • Команда получает техническое задание:

    «Разработать REST API для управления заказами интернет-магазина. Клиент должен иметь возможность создавать, просматривать и удалять заказы».

  • Демонстрация примера запросов/ответов (JSON).
  • Обсуждение требований к БД.

 

Этап 2.

Планирование 

  • Команда создаёт план задач:
    • Создание таблиц в БД
    • Настройка проекта (Maven, JDBC)
    • Реализация моделей и DAO
    • Сервлеты / контроллеры
    • Тестирование
  • Распределение ролей и задач.

 

Этап 3.

Реализация 

  • Разработка MVP сервиса.
  • Использование Git: отдельные ветки на каждую функцию, pull request'ы.
  • Code review между участниками.

 

Этап 4.

Тестирование и исправления 

  • QA проверяет работу через Postman / curl.
  • Выявляет ошибки:
    • Некорректные ответы
    • SQL-инъекции
    • Логические ошибки
  • Исправление найденных проблем.

 

Этап 5.

Презентация 

  • Команда демонстрирует рабочее API:
    • POST /orders — создание заказа
    • GET /orders — список всех заказов
    • GET /orders/{id} — детали заказа
    • DELETE /orders/{id} — удаление

 

Обучающие эффекты

  • Практическая реализация REST API
  • Работа с JDBC и MySQL
  • Использование Maven и Git
  • Командная работа и коммуникация
  • Понимание жизненного цикла разработки
  • Применение принципов SOLID и MVC (на начальном уровне)

 

Возможные проблемы и вызовы во время игры

Возможная проблема Как решить
Конфликты в Git при слиянии Провести короткий мастер-класс по Git
SQL-ошибки Использовать PreparedStatement
Неправильная обработка исключений Добавить try-catch и логирование
Не успевают уложиться в срок Сделать тайм-менеджмент частью игры
Непонимание API-запросов Подготовить чек-лист с примерами
Недопонимание ролей
Провести короткий брифинг перед началом

 

Дополнительно

  • Добавить авторизацию (например, по имени пользователя)
  • Сохранять историю изменений заказов
  • Внедрить простую документацию (например, Markdown файл)
  • Добавить систему логирования (java.util.logging)

Ролевая игра №2: "Сломанный сервер: расследование бага"

Цель игры

Обнаружить, диагностировать и устранить критическую ошибку в работающем Java-приложении.
Игра направлена на развитие навыков отладки, анализа логов, работы с чужим кодом и командного взаимодействия.

Формат

  • Тип: Обучающая ролевая симуляция / дефект-расследование
  • Участники: 3–5 человек в команде
  • Длительность: 1–2 академических часа
  • Платформа: В аудитории или онлайн (Zoom/MS Teams + IDE)
  • Необходимые материалы:
    • Исполняемый JAR-файл с «сломанной» версией приложения
    • Логи с ошибками
    • Документация (частично)
    • Базовые инструменты: IDE, JDK, MySQL, Postman

Сеттинг

Вы — команда стажёров-разработчиков в компании "CodeSafe" , специализирующейся на поддержке корпоративных Java-приложений.

Сегодня вам поручили помочь с экстренной задачей: клиент сообщил, что его система управления заявками (Ticket Management System ) перестала работать после обновления.

Ваша задача — выяснить причину сбоя , предложить исправление и подготовить отчет для руководителя проекта .

Роли в команде

Роль Ответственность
Lead Developer Анализ кода, поиск основной проблемы
QA Analyst Тестирование, воспроизведение ошибки, составление списка symptoms
DevOps Engineer Запуск сервиса, анализ логов, проверка окружения
Database Specialist Проверка доступности и целостности БД
Reporter / Technical Writer Сбор информации, оформление отчёта и презентации решений

 

Этапы игры

Этап 1:

Брифинг и получение задачи 

  • Команда получает:
    • Ссылку на "сломанный" JAR-файл
    • Фрагменты логов с ошибками
    • Краткое описание системы
  • Уточняются цели и формат отчета.

 

Этап 2:

Анализ и диагностика 

  • Запуск приложения
  • Изучение логов
  • Диагностика проблем:
    • Ошибки подключения к БД
    • NullPointerException
    • SQL-инъекции
    • Неправильная обработка исключений
    • Проблемы с маршрутизацией
  • Поиск места в коде, где возникает ошибка.

 

Этап 3:

Исправление (по возможности) 

  • Если доступны исходники — команда может предложить правки.
  • Если только JAR — предлагается теоретическое решение.

 

Этап 4:

Презентация и отчет 

  • Команда представляет:
    • Что пошло не так?
    • Какие ошибки были найдены?
    • Как можно это исправить?
    • Какие меры профилактики вы бы предложили?

Обучающие эффекты

  • Чтение и анализ логов
  • Поиск и исправление распространённых ошибок
  • Работа с чужим кодом
  • Диагностика проблем в реальном времени
  • Развитие soft skills: тимворк, презентация, документирование

Примеры возможных ошибок

Ошибка Описание
NullPointerException Метод обращается к объекту без проверки null
Неверный URL в JDBC Приложение не может подключиться к БД
Отсутствие обработки исключений Сервер падает при некорректном запросе
Неправильный SQL-запрос Вызов метода, который генерирует невалидный SQL
Неверные HTTP-маршруты Запросы не доходят до нужного контроллера

 

Дополнительно

  • Добавить Docker-окружение
  • Подключить CI/CD pipeline
  • Предложить несколько «багов» одновременно
  • Ввести ограничения по времени (например, "система должна быть восстановлена за 30 минут")
  • Использовать Spring Boot вместо сервлетов
  • Добавить тестовое покрытие (JUnit)

 

Ролевая игра №3: "Java-хакатон: Разработка MVP за 2 часа"

Цель игры

Создать минимально жизнеспособный продукт (MVP) бэкенд-приложения на Java за ограниченное время, имитируя реальные условия хакатона.
Игра направлена на развитие навыков быстрой разработки, тайм-менеджмента, командной работы и применения практических знаний.

Формат

  • Тип: Обучающий хакатон / ролевая симуляция
  • Участники: Команды по 3–5 человек
  • Длительность: 2 академических часа (120 минут)
  • Платформа: В аудитории или онлайн (Zoom/MS Teams + Miro / Trello / Notion)
  • Необходимые материалы:
    • JDK, IDE (IntelliJ IDEA / Eclipse)
    • MySQL / H2 / SQLite
    • Maven
    • Git / GitHub
    • Postman / curl

Сеттинг

Вы — участники внутреннего корпоративного хакатона в IT-стартапе “CodeHack” .
Компания проводит ежеквартальный хакатон для выявления новых идей и решения актуальных задач.

Вам предстоит:

  • За 2 часа создать рабочее Java-приложение
  • Презентовать его перед жюри
  • Получить обратную связь от ментора

Роли в команде

Роль Ответственность
Team Lead Организация процесса, распределение задач, контроль сроков
Backend Developer 1 Создание моделей, DAO, работа с базой данных
Backend Developer 2 Реализация контроллеров, маршрутов, обработка HTTP-запросов
QA Engineer Проверка работоспособности, тестирование API
Git Master
Управление репозиторием, слияние веток, настройка CI 

 

Этапы игры

Этап 1:

Брифинг и получение задания 

  • Команда получает случайное ТЗ из пула возможных:

    «Создайте REST API для управления списком дел»
    «Создайте систему голосования с поддержкой нескольких вариантов»
    «Создайте сервис прогноза погоды, который принимает город и возвращает данные»

  • Быстрое обсуждение технического подхода.

 

Этап 2:

Планирование и структура проекта 

  • Выбор архитектуры (например, MVC)
  • Создание структуры проекта (Maven + Servlets / Spring Boot)
  • Настройка Git-репозитория
  • Распределение задач

 

Этап 3:

Разработка MVP 

  • Реализация модели, DAO, контроллера
  • Подключение к БД
  • Обработка запросов
  • Тестирование через Postman

 

Этап 4:

Презентация и демонстрация 

  • Каждая команда показывает свою реализацию:
    • Какие эндпоинты доступны?
    • Как работает логика приложения?
    • Какие технологии использованы?
  • Ментор/преподаватель даёт обратную связь

 

Этап 5:

Подведение итогов 

  • Награждение лучшей команды (по критериям: скорость, качество кода, оригинальность)
  • Обсуждение ошибок и уроков

 

Обучающие эффекты

  • Быстрая разработка MVP
  • Работа в условиях ограниченного времени
  • Применение Java, JDBC, Servlets / Spring Boot
  • Использование Git в команде
  • Тестирование API
  • Презентация решений
  • Коммуникация и тайм-менеджмент

Возможные проблемы и вызовы во время игры

Возможная проблема Как решить
Конфликты в Git при слиянии Провести короткий мастер-класс по Git
Неправильная обработка исключений Добавить try-catch и логирование
Не успевают уложиться в срок Сделать тайм-менеджмент частью игры
Ошибки в SQL-запросах Использовать PreparedStatement
Непонимание REST API Подготовить чек-лист с примерами

 

Дополнительно

  • Добавить фронтенд (HTML / JS / React)
  • Внедрить авторизацию (JWT)
  • Использовать Spring Security
  • Интеграция с внешними API
  • Автоматическое тестирование (JUnit / Mockito)
  • Добавить Docker и CI/CD pipeline

 

Ролевая игра №4:

Цель игры

Обнаружить и устранить критические уязвимости в системе авторизации, имитируя реальные сценарии атаки и защиты.
Игра направлена на развитие навыков безопасной разработки, понимания уязвимостей и применения мер защиты в Java-приложениях.

Формат

  • Тип: Обучающая ролевая симуляция / этический хакинг
  • Участники: Команды по 3–5 человек (можно разделить на «атакующих» и «защитников»)
  • Длительность: 1.5–2 академических часа
  • Платформа: В аудитории или онлайн (Zoom/MS Teams + IDE + Postman)
  • Необходимые материалы:
    • Исходный код "уязвимого" приложения
    • Доступ к базе данных
    • Postman / curl
    • Знание основ безопасности (SQLi, XSS, Insecure Auth)

Сеттинг

Вы — часть команды разработчиков стартапа "SafeLogin" , занимающегося созданием платформы для безопасного входа пользователей.

Однако недавно система была взломана: неизвестные получили доступ к учетным записям пользователей.
Ваша задача — провести внутреннее расследование , найти уязвимости, воспроизвести атаки и предложить решения.

Роли в команде

Роль Ответственность
Security Analyst Анализ логов, выявление подозрительных действий
Penetration Tester (Red Team) Попытка воспроизвести атаку
Security Developer (Blue Team) Поиск уязвимостей в коде и их исправление
Database Security Specialist Проверка целостности данных, хранения паролей
Reporter / Technical Writer Сбор информации, оформление отчёта и рекомендаций

 

Этапы игры

Этап 1:

Брифинг и получение задания 

  • Представляется "сломанная" версия системы авторизации
  • Описание инцидента:

    "Некоторые пользователи сообщают о несанкционированном входе. Были обнаружены запросы с SQL-инъекциями и попытки подбора паролей"

 
Этап 2:

Анализ системы и диагностика 

  • Изучение исходного кода
  • Тестирование API через Postman
  • Поиск возможных уязвимостей:
    • SQL Injection
    • Незащищенное хранение паролей
    • Отсутствие ограничений на попытки входа
    • XSS-уязвимости (если есть фронт)

 

Этап 3:

Воспроизведение атаки 

  • Команда пытается:
    • Войти с помощью SQL-инъекции
    • Получить доступ к чужому аккаунту
    • Узнать, как хранятся пароли

 

Этап 4:

Исправление и защита 

  • Исправление найденных уязвимостей:
    • Хэширование паролей (BCrypt)
    • Использование PreparedStatement
    • Лимит на попытки входа
    • Логирование неудачных попыток

 

Этап 5:

Презентация и отчет 

  • Команда представляет:
    • Какие уязвимости были найдены?
    • Как они были воспроизведены?
    • Какие меры защиты были внедрены?
    • Что можно улучшить?

Обучающие эффекты

  • Понимание распространённых уязвимостей (OWASP Top 10)
  • Применение безопасного кодирования
  • Работа с SQL-инъекциями, хэшированием, безопасной авторизацией
  • Диагностика и анализ чужого кода
  • Практика этического хакинга
  • Развитие soft skills: командная работа, презентация, документирование

Примеры возможных уязвимостей

Уязвимость  Описание
SQL Injection Конкатенация строки в SQL-запросах
Открытый вход Возможность войти без пароля ' OR '1'='1
Хранение паролей в открытом виде Пароли сохраняются как plain text
Отсутствие проверки прав Возможность получить данные другого пользователя
XSS Ввод HTML/JS в поля формы

 

Дополнительно

  • Добавить двухфакторную аутентификацию
  • Интеграция с OAuth / JWT
  • Логирование и мониторинг активности
  • Использование Spring Security
  • Защита от DDoS и брутфорса
  • Аудит и отчет по ISO 27001

 

 

Интеллект-карта 1: "Путь новичка — от нуля до первого Java-приложения"

Центральный узел: Java для начинающих

Ветки:

  • Установка и настройка

    • JDK / JRE
    • IDE (IntelliJ IDEA, Eclipse)
    • Сцены и префабы
    • Настройка среды разработки
  • Основы программирования

    • Переменные и типы данных
    • Операторы и выражения
    • Условные конструкции (if-else, switch)
    • Циклы (for, while, do-while)
  • Методы и классы

    • Создание методов
    • Понятие класса и объекта
    • Конструкторы
  • ООП: основы

    • Инкапсуляция
    • Наследование
    • Полиморфизм
    • Абстракция
  • Работа с массивами и строками

    • Одномерные и многомерные массивы
    • Работа со строками (String, StringBuilder)
  • Первое приложение

    • Простой калькулятор
    • Вывод информации в консоль
    • Использование пользовательского ввода

Интеллект-карта 2: "Работа с базами данных и JDBC"

Центральный узел: Работа с базами данных

Ветки:

  • Основы SQL

    • SELECT, INSERT, UPDATE, DELETE
    • WHERE, ORDER BY, GROUP BY
    • OIN (INNER, LEFT)
  • Установка и настройка СУБД

    •  MySQL / PostgreSQL / H2
    • Подключение через клиент
  • JDBC

    • DriverManager и Connection
    • Statement и PreparedStatement
    • ResultSet
    • Обработка исключений
  • Практика

    • CRUD-операции с таблицей пользователей
    • Добавление/удаление записей
    • Логика взаимодействия с БД
  • Безопасность

    • Защита от SQL-инъекций
    • Хэширование паролей (SHA-256, BCrypt)

 

Интеллект-карта 3: "Создание веб-приложений на Java"

Центральный узел: Веб-разработка на Java

Ветки:

  • Основы HTTP

    • GET / POST / PUT / DELETEr
    • HTTP-статусы
    • Заголовки и тело запроса
  • Servlets и JSP

    • Жизненный цикл сервлета (init(), service(), destroy())
    • Создание простого сервлета
    • Введение в JSP (динамический HTML)
  • Maven

    • pom.xml
    • Зависимости (например, javax.servlet-api)
    • Сборка проекта
  • Git

    • Работа с репозиторием
    • Ветки и слияние
    • GitHub / GitLab
  • Развертывание

    • Tomcat / Jetty
    • Запуск и тестирование приложения

 

Интеллект-карта 4: "Алгоритмы и структуры данных"

Центральный узел: Алгоритмы и структуры данных

  • Основы алгоритмов

    • Что такое алгоритм
    • Сложность O(n)
    • Рекурсия
  • Поиск

    • Линейный поиск
    • Бинарный поиск
  • Сортировка

    • Пузырьковая
    • Сортировка выбором
    • Сортировка вставками
  • Структуры данных

    • Массивы
    • ArrayList vs LinkedList
    • Stack и Queue
    • HashMap, HashSet
  • Коллекции в Java

    • List, Set, Map
    • Iterator и foreach
  • Практика

    • Решение задач на Codewars / LeetCode
    • Реализация собственной структуры данных

 

Интеллект-карта 4:  "Профессиональный рост бэкенд-разработчика"

Центральный узел: Профессиональный путь

  • Самостоятельная работа

    • Чтение документации
    • Работа с книгами и статьями
    • Портфолио и GitHub
  • Командная работа

    • Git и командная разработка
    • Code review
    • Работа в Agile-команде
  • Тестирование

    • Unit-тестирование (JUnit)
    • Mocking (Mockito)
  • CI/CD

    • Автоматизация сборки
    • Jenkins / GitHub Actions
    • Docker
  • Архитектура и масштабируемость

    • MVC
    • Spring Boot
    • RESTful API Best Practices
  • Карьерный рост

    • Junior → Middle
    • Изучение фреймворков (Spring, Hibernate)
    • Сертификации и участие в open-source

 

Как использовать эти ментальные карты:

  • Как шаблон для графической ментальной карты
  • Как чек-лист прогресса обучения
  • Как основа для презентаций и обсуждений
  • Как ориентир для преподавателя или ментора

 

 

1. "Java. Полный справочник" — Герберт Шилдт

  • Уровень: Начальный – средний
  • Тип ресурса: Учебник
  • Краткое описание:
    Один из самых популярных учебников по Java. Охватывает все основы языка: синтаксис, ООП, исключения, работу с файлами. Подходит как базовый учебник для начинающих.
  • Почему стоит использовать:
    Структурированное изложение, примеры кода, понятен школьникам и новичкам.
 

2. "Head First Java" — Кэти Сьерра, Берт Бейтс

  • Уровень: Начальный
  • Тип ресурса: Учебное пособие
  • Краткое описание:
    Необычный подход к обучению: визуальные методы, головоломки, интерактивные упражнения. Отлично подходит для тех, кто только начинает путь бэкенд-разработчика.
  • Почему стоит использовать:
    Сделает обучение интересным и запоминающимся, особенно для школьников и подростков.
 

3. "Основы программирования на Java" — Иван Александреску

  • Уровень: Начальный
  • Тип ресурса: Хрестоматия / учебное пособие
  • Краткое описание:
    Русскоязычное авторское пособие, написанное с акцентом на практические навыки. Включает задачи, тесты и проекты, подходящие для курса "бэкенд-разработчик".
  • Почему стоит использовать:
    Подходит для обучения на русском языке, содержит задания для самостоятельной работы.
 

4. "Задачник по Java для начинающих" — коллекция Codewars / LeetCode + методические указания

  • Уровень: Начальный
  • Тип ресурса: Задачник + методические рекомендации
  • Краткое описание:
    Компиляция простых задач по Java с решениями и объяснением логики. Платформы Codewars, LeetCode и HackerRank содержат множество алгоритмических задач для закрепления знаний.
  • Почему стоит использовать:
    Формирует привычку решать реальные задачи, развивает мышление и готовит к собеседованиям.
 

5. Методические рекомендации по преподаванию курса "Бэкенд-разработчик Java (начальный уровень)"

  • Уровень: Методическое пособие для преподавателей
  • Тип ресурса: Методическое пособие
  • Краткое описание:
    План занятий, разбивка тем по неделям, примеры заданий, критерии оценки, список практических работ и проектов. Может быть использовано как руководство для организации курса.
  • Почему стоит использовать:
    Поможет структурировать обучение, организовать финальный экзамен, провести ролевые игры и кейсы.
  1. Java с нуля до первого сервера

    • Научись создавать бэкенд-приложения на Java с нуля. Практика с первого урока: от переменных до простого REST API.
  2. Бэкенд-разработчик за 3 месяца: Java для школьников

    • Программа разработана специально для школьников. Учись писать код, работать с базами данных и создавать свои веб-сервисы.
  3. Java Junior: путь от новичка к первому проекту

    • Стартуй с основ Java и закончи собственным веб-приложением. Подходит для тех, кто хочет стать junior-разработчиком.
  4. Программируем на Java: от консоли к интернету

    • От простых программ к полноценным веб-приложениям. Изучи синтаксис, ООП, работу с HTTP и базами данных.
  5. Создай свой первый серверный сервис на Java

    • Освой создание веб-сервисов с помощью сервлетов, JDBC и Tomcat. Реализуй CRUD-операции и напиши своё API.
 

Обучающие программы с игровыми и практико-ориентированными элементами

 

  1. Java-лаборатория: играю, учусь, программирую

    • Обучение через игровые задачи: пиши код, решай головоломки и создавай мини-проекты на Java.
  2. Кодим на Java как настоящие разработчики

    • Обучение в формате реальных задач. Работай как часть команды, пиши приложения, тесты и читай чужой код.
  3. Java для школьников: от алгоритмов к веб-сервисам

    • Современный курс для старшеклассников: от логики и алгоритмов до создания своего первого сайта на Java.
  4. Бэкенд-разработчик. Молодая кровь

    • Начни карьеру в IT с нуля. Практический курс по Java для школьников и студентов с проектной работой.
  5. Твой старт в бэкенд: Java для подростков

  • Лёгкий и интересный старт в мир серверного программирования. Без сложных терминов — только практика.
 

Онлайн-курсы и программы повышения квалификации

 

  1. Онлайн-курс «Java Junior Developer»
  • Обучение дистанционно: видеоуроки, домашние задания, чат с преподавателем. Завершение — портфолио из 3 проектов.
 
  1. Java. Базовый уровень для будущих разработчиков
  • Теория + практика. Подготовка к собеседованиям и дальнейшему обучению на профессиональных курсах.
 
  1. Java-старт: начальный курс для школьников и студентов
  • Доступное обучение в удобном темпе. Подходит даже без опыта программирования.
 
  1. Изучаем Java вместе: курс для начинающих
  • Интерактивные уроки, живые вебинары, групповая работа. Идеально для школьников и студентов.
 
  1. Java. Начальный уровень: от теории к практике
  • Системный подход: сначала синтаксис, потом ООП, далее работа с БД и веб-запросами.
 

Академические и образовательные программы

 

  1. Учебная программа «Основы бэкенд-разработки на Java»
  • Для средних специальных и высших учебных заведений. Включает лекции, лабораторные работы и финальный проект.
 
  1. Курс повышения квалификации: «Бэкенд-разработка на Java для новичков»
  • Подходит для педагогов и студентов. Формат — интенсив с практикой и сертификатом.
 
  1. Образовательный модуль: «Введение в Java-программирование»
  • Часть общей программы по информационным технологиям. Фокус на развитие логики и навыков решения задач.
 
  1. Java. Базовый курс для начинающих программистов
  • Подготовительный этап перед углублённым изучением Spring, Hibernate и DevOps. Включает алгоритмы, SQL и HTTP.
 
  1. Фундамент Java: от обучения к профессии
  • Полный путь от установки JDK до первого рабочего проекта. Подходит для самостоятельного освоения.
 

Тематические курсы и тренинги

 

  1. Java для начинающих: пишем серверную логику
  • Только бэкенд: сервлеты, JDBC, HTTP-запросы, работа с базами данных. Подходит для тех, кто не хочет фронтенд.
 
  1. Мини-курс: «Первые шаги в бэкенд-разработке»
  • 2 недели обучения: от "Hello World" до простого веб-приложения. Подходит для экспресс-обучения.
 
  1. Java. От новичка к первым строкам кода
  • Курс для тех, кто боится программировать. Лёгкий старт: от понимания языка до первых приложений.
 
  1. Java. Первые проекты: практика для новичков
  • Серия практических занятий: калькулятор, блог, система заказов. Учись, делая реальные вещи.
 
  1. Java. Шаг за шагом к своей профессии
  • Пошаговое руководство: что учить, как развиваться, какие технологии осваивать после Java SE.
Заявка ученика, студента, слушателя
Заявка преподавателя, репетитора админу сети.
12:38
27
Посещая этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.