Java Developer – Telegram
Java Developer
15.7K subscribers
1.87K photos
140 videos
2 files
2.09K links
Авторский канал действующего разработчика — интересные заметки, новые технологии, библиотеки и фреймворки

Сотрудничество: @bape_ads
Прайс: @bape_media

РКН: https://clck.ru/3GHfTK

Реклама на бирже: https://telega.in/c/java_tg
Download Telegram
👩‍💻 Сервлет

Сервлет — интерфейс, реализация которого расширяет функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ. Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов.

Большинство необходимых для создания сервлетов классов и интерфейсов содержатся в пакетах javax.servlet и javax.servlet.http.

Основные методы сервлета:

public void init(ServletConfig config) throws ServletException — запускается сразу после загрузки сервлета в память;

public ServletConfig getServletConfig() — возвращает ссылку на объект, который предоставляет доступ к информации о конфигурации сервлета;

public String getServletInfo() — возвращает строку, содержащую информацию о сервлете, например: автор и версия сервлета;

public void service(ServletRequest request, ServletResponse response) throws ServletException — java.io.IOException вызывается для обработки каждого запроса;

public void destroy() — выполняется перед выгрузкой сервлета из памяти.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Наследование

Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью.

Класс, от которого производится наследование, называется предком, базовым или родительским. Новый класс — потомком, наследником или производным классом.

Объяснение кода:

Общие свойства автомобилей выделяем в общий класс-родитель — Car. У любой машины есть год выпуска, название модели и максимальная скорость. Эти свойства выносим в поля model, maxSpeed, yearOfManufacture.

Что касается поведения, любая машина может газовать и тормозить. Это поведение мы определяем в методах gas() и brake().

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

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Контейнер сервлетов

Контейнер сервлетов — программа, представляющая собой сервер, который занимается системной поддержкой сервлетов и обеспечивает их жизненный цикл в соответствии с правилами, определёнными в спецификациях. Может работать как полноценный самостоятельный веб-сервер, быть поставщиком страниц для другого веб-сервера, или интегрироваться в Java EE сервер приложений.

Контейнер сервлетов обеспечивает обмен данными между сервлетом и клиентами, берёт на себя выполнение таких функций, как создание программной среды для функционирующего сервлета, идентификацию и авторизацию клиентов, организацию сессии для каждого из них.

Наиболее известные реализации контейнеров сервлетов:

Apache Tomcat

Jetty

JBoss

WildFly

GlassFish

IBM WebSphere

Oracle Weblogic

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Интерфейс ServletResponse

ServletResponse используется для отправки данных клиенту. Все методы данного инструмента служат именно этой цели:

String getCharacterEncoding() — возвращает MIME тип кодировки (к примеру - UTF8), в которой будет выдаваться информация;

void setLocale(Locale locale)/Locale getLocale() — указывают на язык используемый в документе;

ServletOutputStream getOutputStream()/PrintWriter getWriter() — возвращают потоки вывода данных;

void setContentLength(int len) — устанавливает значение поля HTTP заголовка Content-Length;

void setContentType(String type) — устанавливает значение поля HTTP заголовка Content-Type;

void reset() — позволяет сбросить HTTP заголовок к значениям по-умолчанию, если он ещё не был отправлен
и др.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Интерфейс ServletRequest

ServletRequest — интерфейс, который используется для получения параметров соединения, запроса, а также заголовков, входящего потока данных и т.д.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Модульное тестирование

Модульное тестирование (unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы. Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.

Модульные тесты можно условно поделить на две группы:

Тесты состояния (state based), проверяющие что вызываемый метод объекта отработал корректно, проверяя состояние тестируемого объекта после вызова метода.

Тесты взаимодействия (interaction tests), в которых тестируемый объект производит манипуляции с другими объектами. Применяются, когда требуется удостовериться, что тестируемый объект корректно взаимодействует с другими объектами.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос с собеседования

Что такое race condition?

Ответ: Состояние гонки (race condition) — ошибка проектирования многопоточной системы или приложения, при которой эта работа напрямую зависит от того, в каком порядке выполняются потоки. Состояние гонки возникает, когда поток, который должен исполнится в начале, проиграл гонку и первым исполняется другой поток: поведение кода изменяется, из-за чего возникают недетерменированные ошибки.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 LinkedHashSet

LinkedHashSet — структура данных, которая хранит элементы в порядке их добавления, а также не допускает дублирования элементов, как и HashSet.

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

Как видно из примера, элементы были добавлены в множество в порядке их добавления, а дубликат элемента "Java" добавлен не был.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос с собеседования

Что делает метод intern() в классе String?

Ответ: Метод intern() используется для сохранения строки в пуле строк или получения ссылки, если такая строка уже находится в пуле.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 JDBC

JDBC, Java DataBase Connectivity (соединение с базами данных на Java) — промышленный стандарт взаимодействия Java-приложений с различными СУБД. Реализован в виде пакета java.sql, входящего в состав Java SE.

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

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой из вариантов является строчным комментарием?
Anonymous Quiz
96%
// комментарий
0%
/* комментарий
2%
/* комментарий */
2%
/** комментарий */
👩‍💻 Блокирующий метод

Блокирующий метод — метод, который блокируется до тех пор, пока задание не выполнится.

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

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код сверху?
Anonymous Quiz
10%
5
44%
6
39%
7
8%
Ошибка компиляции
2
👩‍💻 Java Server Pages (JSP)

JSP (Java Server Pages) — платформонезависимая переносимая и легко расширяемая технология разработки веб-приложений, позволяющая создавать содержимое, которое имеет как статические, так и динамические компоненты.

Страница JSP содержит текст двух типов: статические исходные данные, которые могут быть оформлены в одном из текстовых форматов HTML, SVG, WML, или XML, и JSP-элементы, которые конструируют динамическое содержимое. Кроме этого могут использоваться библиотеки JSP-тегов, а также EL (Expression Language), для внедрения Java-кода в статичное содержимое JSP-страниц.

Код JSP-страницы транслируется в Java-код сервлета с помощью компилятора JSP-страниц Jasper, и затем компилируется в байт-код JVM.

JSP-страницы загружаются на сервере и управляются Java EE Web Application. Обычно такие страницы упакованы в файловые архивы .war и .ear.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
Какое из перечисленных имён является простым?
Anonymous Quiz
2%
MyClass.name.toString().hashCode()
11%
MyClass.name.toString()
54%
MyClass
12%
Ни один из перечисленных
😁11
👩‍💻 Queue

Queue
— это интерфейс в Java Collections Framework, который представляет собой коллекцию элементов, организованных в соответствии с принципом FIFO (First In, First Out). Это означает, что элементы добавляются в конец очереди и извлекаются из начала очереди.

Queue используется в ситуациях, когда необходимо управлять порядком обработки элементов.

В примере мы создаем очередь строк и добавляем в нее три элемента. Затем извлекаем элементы из очереди с помощью метода poll(), который возвращает и удаляет элемент из начала очереди. Элементы извлекаются в том же порядке, в каком и добавляются.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 FutureTask

FutureTask — отменяемое асинхронное вычисление в параллельном Java приложении. Этот класс предоставляет базовую реализацию Future, с методами для запуска и остановки вычисления, методами для запроса состояния вычисления и извлечения результатов. Результат может быть получен только когда вычисление завершено, метод получения будет заблокирован, если вычисление ещё не завершено.

Объекты FutureTask могут быть использованы для обёртки объектов Callable и Runnable. Так как FutureTask реализует Runnable, его можно передать в Executor на выполнение.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Узнаем разницу между датами

Для вычисления разницы между двумя датами, представленными в виде строк, можно использовать классы java.time.LocalDate и java.time.temporal.ChronoUnit из пакета java.time.

В этом примере мы используем метод LocalDate.parse() для преобразования строковых значений в объекты типа LocalDate. Затем мы используем метод ChronoUnit.between() для вычисления разницы между двумя датами в днях, месяцах и годах.

Обратите внимание, что вы должны использовать формат даты "yyyy-MM-dd" для парсинга строковых значений даты. Если ваши строки даты имеют другой формат, вам может потребоваться использовать другой метод для преобразования их в объекты LocalDate.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Dependency Injection в Spring Framework

Инверсия контроля (inversion of control, IoC) — принцип проектирования, по которому контроль над потоком управления передается фреймворку. Управляющий и прикладной код разделяются. При разработке модуля этот подход избавляет от необходимости знать о других модулях программы и деталях их взаимодействия. Такой код становится более переиспользуемым и модульным, уменьшает связность.

Внедрение зависимостей (Dependency Injection, DI) — одна из реализаций IoC. При взаимодействии с другими модулями, программа оперирует высокоуровневыми абстракциями, тогда как конкретная её реализация поставляется фреймворком.

Стандартная реализация DI — фреймворк инстанциирует все сервисы, и складывает их в IoC-контейнер. При этом специальная сущность, Service Locator, занимается поиском соответствия реализаций абстракциям и их внедрением.

Сущности бизнес-логики в Spring, как и в JavaEE называются beans. Бины объявляются различными способами, корни большинства из них лежат в понятии Configuration. В качестве контейнера бинов выступает ApplicationContext. Чтобы передать инициализацию зависимости контексту, она помечается аннотацией @Autowired.

➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM