Изучаем Java. По вопросам сотрудничества: @seniorvladislav
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 и полезен, когда нужно конвертировать символ в строку для вывода или конкатенации.
#это_база
#вопросы_с_собеседований
Расскажите о различиях вложенных классов: простых и статических?
Простые вложенные классы используются для тесной связи с внешним классом, а статические - когда нужно логически сгруппировать некоторый функционал.
Основные различия:
- Простой вложенный класс имеет доступ к членам внешнего класса, статический - нет.
- Для создания экземпляра простого вложенного класса нужен экземпляр внешнего класса, для статического - нет.
- Простой вложенный класс зависит от экземпляра внешнего класса, статический - нет.
📣 Собираем энтузиастов технологической отрасли на регату!
Первое сообщество IT-экспертов в Сочи — IT-Club by Сбер выходит в море.
Мы ищем тех, кто горит идеями, жаждет ими делиться, реализовывать проекты, обмениваться энергиями, получать знания от экспертов индустрии. Возможно, мы ищем тебя!
Ты можешь работать в Сбере, а можешь — нет. Ты можешь жить в Сочи, а можешь приехать только на 12 августа. Нам важно лишь твоё соучастие в нашей идее.
Мы хотим 12 августа собрать единомышленников и с пользой погонять уютной айтишечкой на регатах.
Будет полезно, вкусно, незабываемо и.. бесплатно!
❗️Но есть нюанс. Потребуется предварительная регистрация по ссылке и опыт работы по специализации от 2 лет.
~ ~ ~ Будь на одной волне с нами!
🤖 Сертификация Oracle Java Programmer (OCAJP), как готовиться к экзамену
🔵Узнаем 10 августа в 20:00 мск на открытом уроке онлайн курса «Углублённое изучение Java» от OTUS.
В рамках вебинара мы рассмотрим:
- Прошлое и настоящее сертификации Java
- Что где и как можно и нужно сдавать
- Форма и содержание экзамена
Разберёмся, почему наш курс — лучшая и самая удобная возможность подготовиться к сдаче экзамена, если вы не собираетесь готовиться самостоятельно.
🟠Это отличная возможность перенять опыт преподавателя и посмотреть на процесс обучения изнутри.
Оплата курса возможна любым удобным для вас способом.
➡️ Для участия в вебинаре зарегистрируйтесь: https://otus.pw/IMHR/ Нативная интеграция. Информация о продукте www.otus.ru
#вопросы_с_собеседований
Чем отличается переопределение от перегрузки?
- Перегрузка происходит в пределах одного класса, переопределение - в рамках иерархии классов.
- Перегруженные методы должны отличаться сигнатурой, переопределенные - иметь одинаковую.
- Перегрузка не нарушает инкапсуляцию, при переопределении может нарушаться.
- Перегруженные методы не связаны с полиморфизмом, переопределенные позволяют реализовать полиморфное поведение.
В целом, перегрузка связана с компиляцией, а переопределение - с выполнением кода.
Встроенные исключения
Исключения позволяют обрабатывать различные ошибочные ситуации в программе и предотвращать аварийное завершение программы.
Основные встроенные исключения:
- NullPointerException
- ArithmeticException
- ArrayIndexOutOfBoundsException
- ClassCastException
- IllegalArgumentException
- IOException
В данном примере при попытке обратиться к несуществующему индексу массива будет выброшено исключение ArrayIndexOutOfBoundsException, которое будет перехвачено в блоке catch и выведено сообщение об ошибке.
#это_база
🔥 Увлекательный тест по highload архитектуре (не для новичков) 🔥
Ответьте на 30 вопросов, чтобы понять готовы ли вы стать архитектором, которые работают с высокими нагрузками и попасть на курс — «Highload Architect» от OTUS.
На полном курсе вы научитесь:
- Правильно использовать шаблоны: кеширование, реплицирование, шардирование, а также инструменты, такие как индексы, ClickHouse, Tarantool, RabbitMQ и Kafka, redis;
- Обеспечивать отказоустойчивость веб-приложений даже при падении серверов;
- Уметь создавать веб-приложения, которые легко масштабировать.
Время прохождения теста ограниченно 30 минут
👉🏻 Пройти тест — https://otus.pw/1WRc/
💣 После прохождения у вас будет возможность записаться на курс по спец. цене и оформить рассрочку. А также вы получите доступ к записям 20 открытых уроков курса.
Реклама. Информация о рекламодателе на сайте www.otus.ru.
Что такое mutable?
Mutable объекты - это объекты, состояние которых можно изменить после создания. Например:
- Массивы (array)
- Списки (ArrayList, LinkedList)
- HashMap и другие коллекции
Immutable объекты после создания не могут быть изменены. Например, строки String в Java являются immutable.
#это_база
Маркер remote
Маркер remote используется для определения удаленных интерфейсов при разработке распределенных приложений по технологии RMI (Remote Method Invocation).
Интерфейс, помеченный как remote, содержит методы, которые могут вызываться удаленно. Класс, реализующий удаленный интерфейс, должен расширять класс UnicastRemoteObject. Экземпляры удаленного класса создаются на сервере.
Клиент может вызывать методы удаленного объекта по ссылке на интерфейс.
Данный код демонстрирует основные принципы работы с удаленными объектами через RMI. Клиентская часть получает доступ к удаленному объекту на сервере по сети и может вызывать его методы. Вся работа по обработке запросов и serialization/deserialization объектов происходит автоматически.
Прежде чем запускать код, сначала нужно запустить RMI реестр и сервер со стороны удаленного объекта.
#вопросы_с_собеседований
Для чего используется оператор assert?
Оператор assert используется для проверки условий во время выполнения программы.
Он позволяет проверить истинность некоторого логического выражения и выбросить исключение AssertionError, если выражение ложно.
Основные применения assert:
- Проверка предусловий и постусловий в методах.
- Проверка инвариантов в критических секциях кода.
- Отладка при разработке, чтобы проверить ожидаемое состояние программы в определенных точках.
- Проверка условий в потенциально опасных ситуациях, например при работе с массивами.
assert лучше использовать для отладки и проверки инвариантов, а для критически важных проверок предусловий лучше применять явную проверку условий и выброс исключений.
Статические поля
Статические поля - это инструмент, который удобно использовать для хранения данных, общих для всех объектов класса.
Статические поля объявляются с модификатором static и принадлежат классу, а не отдельным объектам.
Доступ к ним осуществляется через имя класса.
Изменение статического поля в одном объекте отражается на всех объектах.
⚡️Программист, расширь свои возможности на бесплатном вебинаре онлайн-курса «Архитектура и шаблоны проектирования» в Отус — «Понятие «Декоратор» в программировании»: регистрация
На бесплатном занятии мы:
— рассмотрим устройство, примеры применения, а также основной принцип паттерна «декоратор» — добавление функциональности к существующему объекту.
— рассмотрим устройство и примеры применения паттерна «посетитель», а также подход с методами расширения.
— поговорим о понятиях «декоратор», «адаптер» и «прокси», сходства и различия.
🔥Продолжить обучение после вебинара по спеццене можно на полном курсе, доступном также в рассрочку.
Нативная интеграция. Информация о продукте 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 разработке - /channel/+naRBtttdUPw3MDUy. В нем я делюсь знаниями, опытом и полезными материалами.
Основной формат - теория с практикой, уже сейчас доступны примеры по Java, Spring, Apache Kafka. Вы можете прочитать статью, выкачать пример из github и проверить теорию на практике.
Буду рад если материалы будут полезны, а также вашей подписке по ссылке - /channel/+naRBtttdUPw3MDUy
#вопросы_с_собеседований
Если equals() переопределен, есть ли какие-либо другие методы, которые следует переопределить?
Равные объекты должны возвращать одинаковые хэш коды. При переопределении equals()
нужно обязательно переопределять и метод hashCode()
.
Phaser
Phaser используется для синхронизации потоков.
Он позволяет группе потоков дожидаться друг друга в определенной точке выполнения программы перед тем, как продолжить работу.
В этом примере создаётся объект Phaser и инициализируется значением 1 (основной поток). Далее создаются два потока Worker, которые регистрируются в phaser при создании.
Каждый поток имитирует некоторую работу, а по завершении вызывает метод arriveAndAwaitAdvance() - это сообщает phaser о том, что поток закончил работу и останавливает его до тех пор, пока не завершатся все зарегистрированные потоки.
После завершения обоих потоков управление возвращается в основной поток, который также вызывает arriveAndAwaitAdvance(). Этот вызов разблокирует Worker-потоки и программа завершается, выведя "All threads finished".
Frame
Frame - это класс, представляющий окно приложения без каких-либо элементов управления.
Фрейм используется для создания простых GUI приложений.
При запуске этого кода отобразится пустое окно приложения с заголовком "My Frame" размером 300x200 пикселей, расположенное по центру экрана. При закрытии окна приложение завершит работу.
⚡️Скорость разработки ПО падает по мере роста размера проекта. Инструменты разработки не могут изменить тенденции, а лишь замедлить и отсрочить неизбежное. SOLID является одной из практик, которая гарантирует неизменность скорости разработки.
Узнайте больше про SOLID-принципы ЗАВТРА, 03.08 в 20:00 мск на бесплатном вебинаре онлайн-курса «Архитектура и шаблоны проектирования» в Отус — «SOLID как условие постоянной скорости разработки»: регистрация
На бесплатном занятии мы:
— разберем, почему SOLID принципы являются достаточным условием сохранения скорости разработки;
— рассмотрим простой и понятный механизм их применения для получения повторно используемого кода.
🔥Экспертизой поделится Евгений Тюменцев — опытный директор компании по разработке программного обеспечения.
— После вебинара оплатить курс по спеццене можно также в рассрочку.
Нативная интеграция. Информация о продукте www.otus.ru
#вопросы_с_собеседований
Чем отличается абстрактный класс от интерфейса?
Ниже представлены основные отличия:
- Абстрактный класс может содержать как абстрактные, так и неабстрактные методы. Интерфейс содержит только сигнатуры методов, которые по умолчанию абстрактные.
- Абстрактный класс может содержать поля и реализованный код. В интерфейсе может быть только объявление констант.
- Класс может расширять только один класс (абстрактный или нет) и реализовывать множество интерфейсов.
- Объект абстрактного класса не может быть создан, тогда как интерфейс не является классом и его экземпляры создавать нельзя в принципе.
- Абстрактные классы используются для общих частично реализованных решений, интерфейсы - для определения зависимостей.
LongAccumulator
LongAccumulator - это класс, который используется для постепенного накопления длинных целых чисел из нескольких источников.
Он полезен, когда нужно эффективно подсчитать сумму или другое агрегированное значение из большого количества long значений.
Например, LongAccumulator можно использовать:
- Для подсчета общего размера файлов в директории
- Суммирования данных из нескольких потоков
- Агрегации статистики от множества клиентов
Один бот вместо тысячи каналов
Зачем подписываться на десятки каналов, если есть новостной бот AI Open News?
Он собирает актуальные посты из ваших любимых пабликов в персонализированную подборку. Можно читать ее, и не тратить время на лазанье по каналам.
И бот не заспамит вас уведомлениями — он высылает подборки только в установленное время. Чтобы читать перед сном или по пути на работу.
А еще он умеет составлять дайджесты из актуальных постов на любую тематику.
AI Open News удобнее каналов. Попробуйте 👉 @AiOpenNewsbot
#вопросы_с_собеседований
Всегда ли исполняется блок finally?
Блок finally всегда выполняется, независимо от того, было ли выброшено исключение или нет.
Это происходит по следующим причинам:
- Блок finally гарантирует, что критически важный код будет выполнен, даже если в try или catch блоках произошла ошибка.
- Если в try блоке вызвана инструкция return, блок finally отработает перед возвратом из метода.
- Если в try или catch блоке вызван метод System.exit() для завершения приложения, блок finally отработает перед завершением.
Единственный случай, когда блок finally не выполняется - это когда JVM аварийно завершается из-за ошибки.
Метод valueOf()
Метод valueOf() используется для преобразования различных типов данных в объекты класса String.
Он определен во многих встроенных классах обертках примитивных типов, таких как Integer, Double, Boolean и других.
Основные преимущества использования valueOf():
- Преобразование примитивных типов в объекты обертки для использования в Collections.
- Удобное преобразование числовых типов в строки.
- Получение объектного представления примитивного значения.
В примере создается целочисленная переменная i со значением 10. Далее метод Integer.valueOf(i) преобразует int в объект Integer. После чего вызывается метод toString() у объекта Integer, который возвращает строковое представление числа.
#это_база
Пустая коллекция вместо Null
Возврат пустой коллекции позволяет избежать NullPointerException, а также он соответствует принципу "Fail early" (быстрый отказ). Если результат - пустая коллекция, то сразу видно, что что-то пошло не так.
Пустая коллекция позволяет сохранить тип возвращаемого значения, в то время как null может возвращаться вместо объектов любого типа.
#это_база