Метод service()
Метод service() используется в Servlet классах в Java и вызывается контейнером сервлетов (например Tomcat) для обработки запроса клиента.
Он является центральной точкой входа для обработки запроса и генерации ответа. Реализация метода service() обычно содержит логику получения параметров запроса, вызова бизнес-логики приложения и формирования ответа клиенту.
По умолчанию service() вызывает методы doGet, doPost, doPut etc. в зависимости от типа HTTP запроса.
Но можно переопределить его, чтобы реализовать свою собственную логику обработки запросов.
В этом примере мы переопределяем метод service() в классе MyServlet, который расширяет HttpServlet.
В методе мы получаем параметр "name" из HTTP запроса с помощью метода getParameter().
Затем формируем ответ, используя PrintWriter, в который записываем приветствие с именем пользователя.
#это_база
IllegalStateException()
IllegalStateException — это тип checked исключения, которое генерируется при попытке выполнить операцию, которая не разрешена в текущем состоянии объекта.
Исключение IllegalStateException сигнализирует, что операция не может быть выполнена из-за некорректного состояния объекта.
Обработка этого исключения позволяет избежать неопределенного поведения программы и привести объект в правильное состояние перед вызовом операции.
ИТ + научпоп + музыка = большой ИТ-пикник в Москве 💛
2 сентября Тинькофф, CodeFest и Мельница собирают большой благотворительный ИТ-фестиваль. Встречаемся в Коломенском на максимально летнем вайбе.
В программе: ИТ- и научпоп-лектории, выступления топовых спикеров, воркшопы, интерактивные зоны и вишенка на торте — музыкальные перформансы от Антохи MC, Zoloto, Therr Maitz, The Hatters, «Сироткина», а также секретного хедлайнера. Как думаете, кто им может быть?
Для участия нужно выбрать благотворительный фонд из списка и сделать донат от 1000 рублей. Подробности и регистрация — тут.
Реклама. АО "Тинькофф Банк"
#вопросы_с_собеседований
Какова иерархия коллекций?
В Java есть два основных интерфейса для коллекций - Collection и Map.
Interface Collection находится на верху иерархии и определяет общие методы для работы с коллекциями, такие как add(), remove(), size() и другие. От него наследуются конкретные реализации коллекций.
Наиболее часто используемые реализации Collection - это List, Set и Queue.
Map интерфейс реализует отдельную структуру данных. Он представляет отображение ключ-значение. Основные реализации - HashMap и TreeMap.
LinkedList
LinkedList - это реализация связного списка на основе двусвязных элементов.
LinkedList оптимизирован для операций вставки/удаления элементов и часто используется там, где требуется динамически изменяемый список без ограничения размера.
В примере демонстрируются основные операции с LinkedList.
#вопросы_с_собеседований
Что такое анонимные классы и где они применяются?
Анонимные классы - это классы без имени, которые используются для создания объекта определенного класса или интерфейса "на лету".
Анонимные классы удобны, когда нужно создать простой класс "одноразового использования" для какой-то конкретной задачи. Они позволяют избежать громоздких именованных классов в таких случаях.
Чаще всего они применяются для:
- создания обработчика событий в GUI-приложениях.
- создания компаратора или другого функционального интерфейса для сортировки или фильтрации коллекций.
- расширения класса путем создания подкласса без имени.
Библиотека Processing
Processing - это open source библиотека и среда программирования для Java, предназначенная для создания визуальных и графических приложений.
Processing широко используется для:
- Визуализации данных.
- Генеративного искусства.
- Интерактивных инсталляций.
- Образовательных целей на курсах программирования.
- Прототипирования приложений с графическим интерфейсом.
Также на базе Processing создана библиотека Processing.js для создания браузерной графики и визуализаций на JavaScript.
BeanPostProcessor
BeanPostProcessor - это интерфейс, который позволяет выполнять дополнительную обработку бинов после их создания Spring'ом.
Чтобы использовать BeanPostProcessor, нужно создать класс, который реализует этот интерфейс, и зарегистрировать его как бин в контексте Spring.
Код на первом изображении реализует интерфейс BeanPostProcessor и переопределяет два его метода:
postProcessBeforeInitialization и
postProcessAfterInitialization.
Чтобы зарегистрировать этот post-processor, нужно добавить его в конфигурацию Spring. (изображение 2)
При запуске приложения для каждого создаваемого бина будет выведена информация в лог.
Scala и Java-разработчикам с опытом от двух лет.
Тинькофф запускает Scala & Java Weekend Offer. Это когда вы проходите собеседование за выходные и можете сразу получить оффер.
Сравните скиллы с требованиями и оставьте заявку до 23 августа: https://o.tinkoff.ru/one-day-offer.java-scala
Видим цель, не видим препятствий: зовем на курс по архитектуре приложений 👨💻
Работа в проектах, где в коде не разобраться, похожа на путешествие по горной тропе без карты.
Возможно, этот островок кода выглядит не очень надежно и его можно удалить? Бам! — и всё, что могло упасть, упало.
Ситуация гипотетическая, сравнения взяты из реальной жизни — а мы хотели подвести к важности грамотного, выстроенного кода. Учим, как делать такую красоту, на курсе по архитектуре приложений, поток стартует 18 сентября.
Узнать программу вы можете на нашем сайте ✨
Что мы даем:
❓Понимание, что такое мышление архитектора.
📊Навыки создания чистого, управляемого проекта.
🔥Опыт и возможность совершить абсолютно все ошибки архитектора приложений в учебной среде.
Мы предусмотрели два варианта прохождения курса — Standart и Premium 🛍
Оба тарифа дают возможность присутствовать на встречах со спикерами, но в Premium вы попадете в закрытое сообщество студентов с преподавателями и получите подробное ревью вашего выполненного задания от ведущих. Старт — 18 сентября.
Выбрать свой тариф и присоединиться к группе вы можете по ссылке⚡️
⚡ Отус, приглашает 14 августа в 19:00 по мск, на бесплатный вебинар “Применимость Kotlin в различных направлениях разработки: Multimedia, ML, 3D/VR, Frontend, IoT/Robotics, Blockchain”, онлайн-курса «Kotlin Backend Developer. Professional».
✅ На вебинаре мы рассмотрим, как экосистема Kotlin может быть использована для создания программных продуктов в разных направлениях IT. Среди них: разработка фронтенда, работа с мультимедиа, машинное обучение, программирование роботов и создание 3D приложений.
➡️ Записаться на вебинар: https://otus.pw/ByTz/
Вебинар будет интересен всем, кто заинтересован в изучении Kotlin или хочет узнать больше об этой экосистеме. Если вы уже являетесь разработчиком на Kotlin, то сможете узнать новые инструменты и технологии для решения задач в других областях.
Нативная интеграция. Информация о продукте www.otus.ru
⚡️Программист, расширь свои возможности на бесплатном вебинаре онлайн-курса «Архитектура и шаблоны проектирования» в Отус — «Понятие «Декоратор» в программировании»: регистрация
На бесплатном занятии мы:
— рассмотрим устройство, примеры применения, а также основной принцип паттерна «декоратор» — добавление функциональности к существующему объекту.
— рассмотрим устройство и примеры применения паттерна «посетитель», а также подход с методами расширения.
— поговорим о понятиях «декоратор», «адаптер» и «прокси», сходства и различия.
🔥Продолжить обучение после вебинара по спеццене можно на полном курсе, доступном также в рассрочку.
Нативная интеграция. Информация о продукте www.otus.ru
Разрабатывать высоконагруженные сервисы, работать только на современном стеке и за один день стать частью классной команды из амбициозных специалистов! Звучит как мечта, но это реальность One Day Offer для Java-разработчиков от Сбера 💻
Уже 12 августа Сбер приглашает Java-разработчиков уровня Middle/Senior/Lead познакомиться, пройти все этапы отбора, получите оффер и присоединиться к Java-сообществу крупнейшего банка страны.
Чем именно предстоит заниматься на должности Java-разработчика 👇
✔️ Участвовать в выводе продуктов с нуля в промышленную эксплуатацию.
✔️ Создавать высоконагруженные сервисы в направлениях digital и phygital.
✔️ Внедрять и автоматизировать новые процессы.
✔️ Создавать и развивать IT-продукты для сотрудников банка и миллионов клиентов.
Готовы к таким интересным задачам? Переходите по ссылке, регистрируйтесь на One Day Offer и участвуйте в интервью!
В современных масштабируемых архитектурах системы могут быть составлены из множества сервисов, которые взаимодействуют друг с другом. При этом возникает сложная задача поддержания согласованности данных и обработки ошибок в случае сбоев.
Чтобы научиться обеспечивать надежность приложений, распределять транзакции и получить опыт работы с высоконагруженными проектами приходите 🗓 16 августа в 20:00 на открытый урок «Распределенные транзакции в System Design» онлайн курса «Highload Architect» от OTUS. Занятие проведет преподаватель 👨💻 Антон Цитульский — ведущий backend-разработчик в Тинькофф, спикер на конференции Codefest 2023.
На открытом уроке обсудим:
- Распределенные транзакции в System Design;
- Поддержание согласованности данных и обработки ошибок в случае сбоев;
- Паттерн Saga, чтобы управлять последовательностью транзакций, обеспечивая их атомарность и надежность.
Этот вебинар будет полезен разработчикам, архитекторам и техническим специалистам, заинтересованным в создании надежных и масштабируемых распределенных систем.
👉 Регистрируйтесь на занятие — https://otus.pw/G9r3/
Открытый урок приурочен к старту онлайн-курса «Highload Architect» в OTUS. После урока полный курс вы сможете приобрести удобным для вас способом.
Нативная интеграция. Информация на сайте www.otus.ru.
Локальный класс (Local inner class)
Локальный класс - это класс, объявленный внутри метода или блока кода. Он доступен только в пределах этого метода или блока.
Локальные классы часто используются для упрощения кода, когда нужен вспомогательный класс, не требующийся за пределами метода.
Здесь внутри метода main() объявлен локальный класс LocalClass. В нем определен метод printMessage().
Далее создается экземпляр LocalClass и вызывается его метод.
Нашли лучшие курсы по Java-разработке!
Tutortop — образовательный маркетплейс №1, где представлено свыше 5000 курсов от более чем 300 школ и все их можно сравнить по рейтингу, цене и отзывам, а еще купить дешевле, чем напрямую 🔥
Подборка из топовых курсов для обучения Java-разработчиков от tutortop:
— Профессия: Java-разработчик с гарантией трудоустройства от Product Star. Рейтинг 4.8 из 5.
Скидка 10% по промокоду TUTORTOP до 18.08🎁
— Курс: Frontend-разработчик с нуля до middle от Нетологии. Рейтинг 4.8 из 5.
Скидка 50% по промокоду TUTORTOP50 до 18.08🎁
— Профессия: Fullstack-разработчик на JavaScript от Mathshub. Рейтинг 4.7 из 5.
Скидка 10% по промокоду TUTORTOP до 18.08🎁
Чтобы подробнее узнать про обучение или купить его, введите промокод TUTORTOP по ссылке на онлайн-курс по Java-разработке, который вам интересен.
⚡️Учиться выгоднее с tutortop!
Класс Java.io.OutputStream
Java.io.OutputStream - это абстрактный класс, который представляет поток вывода байтов.
Он является базовым классом для всех классов, которые представляют вывод информации в различные места назначения, такие как файл, сетевое соединение и т.д.
Основные подклассы OutputStream:
FileOutputStream, ByteArrayOutputStream, FilterOutputStream и др.
В результате работы кода из примера в файл file.txt будет записано:
Hello World!
#это_база
Double.compare
()
Метод Double.compare()
используется для сравнения двух значений типа double.
Он принимает два значения double и возвращает:
- отрицательное число, если первое значение меньше второго.
- ноль, если значения равны.
- положительное число, если первое значение больше второго.
В этом примере мы передаем Double.compare()
как компаратор в метод sort() из класса Arrays.
Это позволяет корректно отсортировать массив с плавающей точкой по возрастанию.
ArrayList
ArrayList - это реализация динамического массива на основе обычного массива.
ArrayList хранит элементы в виде обычного массива объектов, его размер может динамически изменяться в процессе работы, а при добавлении элементов автоматически выделяется новый больший массив и копируются элементы.
Однако, ArrayList менее эффективен при вставке/удалении элементов из середины.
Код из примера демонстрирует основные операции с ArrayList.
Верстаешь?
С 15 по 21 августа проводим бесплатный онлайн-интенсив по Frontend-разработке, где будем учить, как разрабатывать сайты и веб-приложения.
Что будет:
1️⃣ Создание полноценного веб-сайта на HTML и CSS
Мы научим тебя создавать стильные и функциональные веб-страницы с использованием самых современных технологий.
2️⃣ Оживление страницы с помощью JavaScript
Узнаешь, как добавить интерактивность и динамичность в свои проекты.
3️⃣ Использование фронтенд-фреймворка Angular
Узнаешь, как использовать этот мощный инструмент для создания масштабируемых и эффективных веб-приложений.
4️⃣ Подключение Backend и загрузка сайта на хостинг
Мы научим тебя основам работы с Backend'ом и покажем, как развернуть свой проект на хостинге.
5️⃣ Советы по доработке проекта
Получишь ценные советы от опытных разработчиков, чтобы улучшить свой проект и достичь более высокого уровня качества.
👉 Участвуй бесплатно 🚀
Метод retainAll()
Метод retainAll() используется для сохранения в коллекции только тех элементов, которые содержатся в указанной коллекции.
В качестве аргумента метод принимает другую коллекцию, затем проходит по текущей коллекции и удаляет из нее все элементы, которых нет в переданной коллекции.
Не гарантирует порядок оставшихся элементов.
#это_база
Умение выбирать тип связи между микросервисами (синхронную или асинхронную) позволяет разработчику оптимизировать производительность и отзывчивость системы, учитывая специфические требования и нагрузку на каждый сервис. Это также важно для обеспечения надежности и избегания блокировок при обмене данными между микросервисами.
Чтобы узнать еще больше деталей при работе с микросервисами и о работе над крупными проектам приходите 🗓 14 августа в 20:00 МСК на открытый урок «Выбираем способ связи между микросервисами: Sync vs Async» онлайн курса «Microservice Architecture» от OTUS.
Спикером выступит 👨💻 Евгений Непомнящий, опытный разработчик в IT-Sense, специализирующийся на C++ и Java.
На открытом уроке:
- рассмотрим основные типы межсервисного взаимодействия: синхронное и асинхронное API;
- рассмотрим плюсы и минусы каждого типа;
- обсудим версионирование API;
- объясним, почему у хорошей архитектуры должен быть баланс между оркестрацией и хореографией;
- разберёмся, чем отличаются Anemic API и Rich API;
- затронем темы IDL, API design first.
👉 Регистрируйтесь на занятие — https://otus.pw/6AVs/
Открытый урок приурочен к старту онлайн-курса «Microservice Architecture» в OTUS. После урока полный курс вы сможете приобрести удобным для вас способом.
Нативная интеграция. Информация о продукте www.otus.ru
Метод startsWith()
Метод startsWith() используется для проверки, начинается ли строка с указанной подстроки.
startsWith() принимает в качестве аргумента строку, с которой нужно проверить, начинается ли исходная строка и возвращает:
true - если исходная строка начинается с заданной подстроки;
false - если исходная строка не начинается с заданной подстроки.
#это_база
#вопросы_с_собеседований
Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
- Метод должен удовлетворять условиям транзитивности, рефлексивности и симметричности.
- Метод должен быть согласованным - многократные вызовы с неизменными объектами должны возвращать один и тот же результат.
- Если x.equals(y) вернёт true, то x.hashCode() должен быть равен y.hashCode().
- Метод не должен выбрасывать исключения при сравнении допустимых значений.
Нестатические блоки инициализации
Нестатические блоки инициализации - это блоки кода, которые исполняются при создании объекта класса перед вызовом конструктора.
Они используются для инициализации членов класса.
В примере определен нестатический блок инициализации, который устанавливает значения для переменных x и y.
При создании объекта Main срабатывает следующая последовательность:
- Вызывается нестатический блок инициализации, x и y получают значения 5 и 10.
- Вызывается конструктор, который выводит значения x и y.
Double-brace инициализация
Двойные фигурные скобки используются для инициализации объектов, например коллекций. Это позволяет создавать объект и инициализировать его в одной строке кода.
Здесь мы создаем новый объект HashMap и сразу же добавляем в него пары ключ-значение используя блок инициализации в двойных фигурных скобках в первом случае, и обычную инициализацию во втором.
«Входить в IT неспеша» или как стать Middle Java Backend разработчиком минуя ступень Junior
Статья о том, как шаг за шагом при дефиците свободного времени обучиться и устроиться на работу сразу Middle Java разработчиком перескочив через Junior ступеньку, основанная на личном опыте, и о том, как мне это помогло, когда сразу после трудоустройства пришлось тянуть проект практически в solo.
Смотреть статью
#вопросы_с_собеседований
Почему нельзя объявить метод интерфейса с модификатором final или static?
Причина, по которой в интерфейсах нельзя объявлять методы с модификаторами final или static заключается в следующем:
Final методы предназначены для того, чтобы классы-наследники не могли их переопределить. Но если метод интерфейса объявить финальным, это нарушит саму суть интерфейсов - предоставить общий набор методов для реализации в других классах.
Static методы принадлежат классу, а не отдельным объектам этого класса. Описывая метод в интерфейсе мы имеем в виду, что он должен быть реализован в классах и вызываться у объектов этих классов. Статические же методы не предназначены для реализации и вызова на экземплярах класса, поэтому static методы в интерфейсах тоже не имеют смысла.
Метод Character.isWhitespace()
Метод Character.isWhitespace() используется для проверки, является ли символ пробельным.
Метод принимает символ и возвращает булево значение.
Считается, что символ является пробельным если он соответствует одному из следующих значений: пробел (' '), табуляция (\t), перевод строки (\n), перевод страницы (\f), возврат каретки (\r).
Метод удобно использовать для проверок вводимых данных, разбора строк и т.д.
#это_база
Метод Character.toString()
Метод Character.toString() используется для преобразования символа (char) в строку (String).
Метод принадлежит классу Character и полезен, когда нужно конвертировать символ в строку для вывода или конкатенации.
#это_база