Предположим, есть метод, который может выбросить IOException и FileNotFoundException. В какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок catch(Exception ex) {}, иначе все дальнейшие блоки catch() уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex).
Таким образом, исходя из факта, что FileNotFoundException extends IOException сначала нужно обработать FileNotFoundException, а затем уже IOException:
void method() {
try {
//...
} catch (FileNotFoundException ex) {
//...
} catch (IOException ex) {
//...
}
}
#вопросы_с_собеседований
Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок catch(Exception ex) {}, иначе все дальнейшие блоки catch() уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex).
Таким образом, исходя из факта, что FileNotFoundException extends IOException сначала нужно обработать FileNotFoundException, а затем уже IOException:
void method() {
try {
//...
} catch (FileNotFoundException ex) {
//...
} catch (IOException ex) {
//...
}
}
#вопросы_с_собеседований
unchecked exception
unchecked exception (непроверяемое исключение) относится к исключениям, которые не требуется обязательно обрабатывать или объявлять в секции throws метода. Эти исключения наследуются от класса RuntimeException или его подклассов. Они обычно свидетельствуют о ситуациях, которые могут возникнуть в ходе выполнения программы, но которые, как правило, связаны с ошибками программирования или непредвиденными ситуациями.
#код
unchecked exception (непроверяемое исключение) относится к исключениям, которые не требуется обязательно обрабатывать или объявлять в секции throws метода. Эти исключения наследуются от класса RuntimeException или его подклассов. Они обычно свидетельствуют о ситуациях, которые могут возникнуть в ходе выполнения программы, но которые, как правило, связаны с ошибками программирования или непредвиденными ситуациями.
#код
Как скомпилировать Spring Boot приложение в native image с помощью GraalVm и развернуть его с помощью Docker
Эта статья — туториал, как подружить между собой Spring Boot, GraalVm, Liquibase и Docker, какие могут возникнуть подводные камни и как их можно обойти.
Читать статью
Кстати, у нас есть канал с вопросами с собеседований по Java. Подписывайтесь!
Эта статья — туториал, как подружить между собой Spring Boot, GraalVm, Liquibase и Docker, какие могут возникнуть подводные камни и как их можно обойти.
Читать статью
Кстати, у нас есть канал с вопросами с собеседований по Java. Подписывайтесь!
❗Ищем копирайтера
Нам нужен человек, который:
— Любит IT и русский язык.
— Понимает разницу между бэкендом и фронтендом, OWASP и MISRA, функциональным программированием и ООП, микроконтроллером и миникомпьютером, UX и UI.
— Имеет опыт работы от 1 года.
— Будет плюсом, если вы программируете на каком-нибудь языке на уровне стажера/джуна.
Что нужно делать:
— Готовить подборки, ТОПы книг, ютуб- и телеграм-каналов по языкам программирования.
— Делать расшифровки топовых Ютуб-роликов по теме программирования и оформлять их в виде статей.
— Готовить новостные заметки.
— Актуализировать старые статьи.
— Брать интервью у экспертов. Мы поможем с поиском экспертов.
— Иногда писать небольшие рекламные посты в телеграм.
— Писать статьи с кодом, переводить статьи (по желанию, оплачивается отдельно).
Можно использовать нейронки?
— Да, главное, чтобы материал получился интересный.
Условия:
— Белая зарплата: 50 000 руб.
— Возможность работать удаленно.
👉Присылайте свои резюме: [email protected]
Нам нужен человек, который:
— Любит IT и русский язык.
— Понимает разницу между бэкендом и фронтендом, OWASP и MISRA, функциональным программированием и ООП, микроконтроллером и миникомпьютером, UX и UI.
— Имеет опыт работы от 1 года.
— Будет плюсом, если вы программируете на каком-нибудь языке на уровне стажера/джуна.
Что нужно делать:
— Готовить подборки, ТОПы книг, ютуб- и телеграм-каналов по языкам программирования.
— Делать расшифровки топовых Ютуб-роликов по теме программирования и оформлять их в виде статей.
— Готовить новостные заметки.
— Актуализировать старые статьи.
— Брать интервью у экспертов. Мы поможем с поиском экспертов.
— Иногда писать небольшие рекламные посты в телеграм.
— Писать статьи с кодом, переводить статьи (по желанию, оплачивается отдельно).
Можно использовать нейронки?
— Да, главное, чтобы материал получился интересный.
Условия:
— Белая зарплата: 50 000 руб.
— Возможность работать удаленно.
👉Присылайте свои резюме: [email protected]
🗝 Просто про SOLID
SOLID — самые популярные и самые лучшие подходы к разработке программного обеспечения в языка с ООП.
Автор рассказывает про все части SOLID, показывает принципы на картинках и пишет код на Java для примеров.
Смотреть видео
SOLID — самые популярные и самые лучшие подходы к разработке программного обеспечения в языка с ООП.
Автор рассказывает про все части SOLID, показывает принципы на картинках и пишет код на Java для примеров.
Смотреть видео
Считаете ли вы, что в вашей компании уделяется слишком много времени на ненужные созвоны и мало времени на разработку?
#интерактив
#интерактив
serialVersionUID
serialVersionUID является статическим полем, которое используется для контроля версий сериализуемых классов. Оно используется для определения уникальной идентификации класса при сериализации и десериализации объектов. serialVersionUID помогает обеспечить совместимость между классами при изменении их структуры.
Когда класс сериализуется, serialVersionUID записывается в поток данных вместе с объектом. При десериализации объекта Java сравнивает serialVersionUID, прочитанный из потока данных, со значением текущего serialVersionUID в классе:
☕️ если они совпадают, то класс считается совместимым и процесс десериализации может продолжаться.
☕️ если значения serialVersionUID отличаются, будет сгенерировано исключение InvalidClassException, указывающее на несовместимость версий класса.
#код
serialVersionUID является статическим полем, которое используется для контроля версий сериализуемых классов. Оно используется для определения уникальной идентификации класса при сериализации и десериализации объектов. serialVersionUID помогает обеспечить совместимость между классами при изменении их структуры.
Когда класс сериализуется, serialVersionUID записывается в поток данных вместе с объектом. При десериализации объекта Java сравнивает serialVersionUID, прочитанный из потока данных, со значением текущего serialVersionUID в классе:
☕️ если они совпадают, то класс считается совместимым и процесс десериализации может продолжаться.
☕️ если значения serialVersionUID отличаются, будет сгенерировано исключение InvalidClassException, указывающее на несовместимость версий класса.
#код
Что означает CAP-теорема?
CAP-теорема, также известная как теорема Брюэра, является концептуальной основой для понимания распределенных систем.
Она была предложена в 2000 году Эриком Брюэром и формулирует три фундаментальных свойства, которые невозможно обеспечить одновременно в распределенной системе данных:
☕️ Согласованность (Consistency);
☕️ Доступность (Availability);
☕️ Устойчивость к разделению (Partition tolerance).
Согласно CAP-теореме, в распределенной системе данных можно гарантировать только два из трех свойств:
☕️ Согласованность и доступность (CA);
☕️ Согласованность и устойчивость к разделению (CP);
☕️ Доступность и устойчивость к разделению (AP).
Выбор между этими свойствами зависит от требований и характеристик конкретной системы и ее целей.
#вопросы_с_собеседований
CAP-теорема, также известная как теорема Брюэра, является концептуальной основой для понимания распределенных систем.
Она была предложена в 2000 году Эриком Брюэром и формулирует три фундаментальных свойства, которые невозможно обеспечить одновременно в распределенной системе данных:
☕️ Согласованность (Consistency);
☕️ Доступность (Availability);
☕️ Устойчивость к разделению (Partition tolerance).
Согласно CAP-теореме, в распределенной системе данных можно гарантировать только два из трех свойств:
☕️ Согласованность и доступность (CA);
☕️ Согласованность и устойчивость к разделению (CP);
☕️ Доступность и устойчивость к разделению (AP).
Выбор между этими свойствами зависит от требований и характеристик конкретной системы и ее целей.
#вопросы_с_собеседований
🔍Насколько легко «войти в айти»?
IT — перспективная отрасль с высокими зарплатами и огромной конкуренцией. Собираем ваши истории: расскажите, как вам удалось сменить профессию (или сразу найти себя), какие шаги вы для этого предприняли и с какими сложностями пришлось столкнуться.
👉Пройдите наш 10-минутный опрос по ссылке.
IT — перспективная отрасль с высокими зарплатами и огромной конкуренцией. Собираем ваши истории: расскажите, как вам удалось сменить профессию (или сразу найти себя), какие шаги вы для этого предприняли и с какими сложностями пришлось столкнуться.
👉Пройдите наш 10-минутный опрос по ссылке.
💰 Обзор зарплат: сколько сейчас зарабатывают айтишники
В этой статье обсуждаем самую животрепещущую тему — зарплату. Присоединяйтесь :)
🔗 Читать статью
🔗 Зеркало
В этой статье обсуждаем самую животрепещущую тему — зарплату. Присоединяйтесь :)
🔗 Читать статью
🔗 Зеркало
Комбинирование хеш-таблиц
Комбинирование двух хеш-таблиц вручную через цикл очень неэффективно. Вот альтернативное решение этой проблемы, которое вам возможно понравится.
#код
Комбинирование двух хеш-таблиц вручную через цикл очень неэффективно. Вот альтернативное решение этой проблемы, которое вам возможно понравится.
#код
Приходилось ли вам переходить на более младшую позицию в другую компанию? Например, с Senior на Middle при релокации.
#интерактив
#интерактив
Метод Character.isWhitespace()
Метод Character.isWhitespace() используется для проверки, является ли символ пробельным.
Метод принимает символ и возвращает булево значение.
Считается, что символ является пробельным, если он соответствует одному из следующих значений: пробел (' '), табуляция (\t), перевод строки (\n), перевод страницы (\f), возврат каретки (\r). Метод удобно использовать для проверок вводимых данных, парсинга строк.
#код
Метод Character.isWhitespace() используется для проверки, является ли символ пробельным.
Метод принимает символ и возвращает булево значение.
Считается, что символ является пробельным, если он соответствует одному из следующих значений: пробел (' '), табуляция (\t), перевод строки (\n), перевод страницы (\f), возврат каретки (\r). Метод удобно использовать для проверок вводимых данных, парсинга строк.
#код
Очередной #дайджест по Java:
☕️ Преобразование закрытого ключа КриптоПро CSP по ГОСТ 2012 в контейнер p12, который понимает java
Интересная техническая статья.
☕️ Как легко перейти с Java на Rust: Особенности и советы
Автор делится опытом из своей рабочей практики.
☕️ Распространённые паттерны опечаток при программировании
Есть бесконечное количество способов ошибиться при написании кода. Однако иногда можно заметить явные интересные закономерности, как и где ошибаются программисты.
☕️ Всё, что вам нужно знать о таймаутах
Как установить оптимальное значение таймаутов в микросервисной архитектуре, чтобы достичь максимальной производительности и отказоустойчивости.
☕️ Java и современный процессор, Часть 1: Память и иерархия кэша
Разобравшись в том, как процессоры, память и кэш влияют на выполнение программ, вы сможете лучше понять производительность приложений и оптимизировать свой подход к их написанию.
☕️ Преобразование закрытого ключа КриптоПро CSP по ГОСТ 2012 в контейнер p12, который понимает java
Интересная техническая статья.
☕️ Как легко перейти с Java на Rust: Особенности и советы
Автор делится опытом из своей рабочей практики.
☕️ Распространённые паттерны опечаток при программировании
Есть бесконечное количество способов ошибиться при написании кода. Однако иногда можно заметить явные интересные закономерности, как и где ошибаются программисты.
☕️ Всё, что вам нужно знать о таймаутах
Как установить оптимальное значение таймаутов в микросервисной архитектуре, чтобы достичь максимальной производительности и отказоустойчивости.
☕️ Java и современный процессор, Часть 1: Память и иерархия кэша
Разобравшись в том, как процессоры, память и кэш влияют на выполнение программ, вы сможете лучше понять производительность приложений и оптимизировать свой подход к их написанию.
🤖 Generative AI: как ускорить разработку с помощью Github Copilot и Databricks English SDK
Давайте разберемся, что же могут помощники и SDK, а чего от них ожидать еще рано. Рассмотрим наиболее популярные решения от Github и Databricks: варианты использования и их ограничения. Также поговорим о перспективах профессии AI-инженера.
🔗 Читать статью
🔗 Зеркало
Давайте разберемся, что же могут помощники и SDK, а чего от них ожидать еще рано. Рассмотрим наиболее популярные решения от Github и Databricks: варианты использования и их ограничения. Также поговорим о перспективах профессии AI-инженера.
🔗 Читать статью
🔗 Зеркало
Метод regionMatches()
Используется для сравнения подстроки одной строки с подстрокой другой строки, то есть сравниваются части строк и возвращается результат этого сравнения — true (если части строк совпали) или false (не совпали).
Параметры
ignoreCase — логическая переменная со значением true — игнорировать регистр, со значением false — не игнорировать регистр.
toffset — позиция, с которой начнем отсчет.
other — другая строка, часть которой мы будем сравнивать.
ooffset — позиция, с которой начнем отсчет в строке other
len — количество символов для сравнения.
#код
Используется для сравнения подстроки одной строки с подстрокой другой строки, то есть сравниваются части строк и возвращается результат этого сравнения — true (если части строк совпали) или false (не совпали).
Параметры
ignoreCase — логическая переменная со значением true — игнорировать регистр, со значением false — не игнорировать регистр.
toffset — позиция, с которой начнем отсчет.
other — другая строка, часть которой мы будем сравнивать.
ooffset — позиция, с которой начнем отсчет в строке other
len — количество символов для сравнения.
#код
fail-fast поведение
Fail-fast поведение (fail-fast behavior) — это принцип в программировании, который подразумевает, что программа должна обнаруживать ошибки и некорректные условия как можно раньше и немедленно генерировать исключения или останавливать выполнение, чтобы предотвратить дальнейшие некорректные операции и минимизировать возможные повреждения данных или неправильное поведение программы.
В Java fail-fast поведение реализуется с использованием механизмов. Если в процессе выполнения программы обнаруживается какое-либо нарушение, например, попытка доступа за пределы массива или передача недопустимого аргумента в метод, генерируется исключение, и выполнение программы прерывается.
#код
Fail-fast поведение (fail-fast behavior) — это принцип в программировании, который подразумевает, что программа должна обнаруживать ошибки и некорректные условия как можно раньше и немедленно генерировать исключения или останавливать выполнение, чтобы предотвратить дальнейшие некорректные операции и минимизировать возможные повреждения данных или неправильное поведение программы.
В Java fail-fast поведение реализуется с использованием механизмов. Если в процессе выполнения программы обнаруживается какое-либо нарушение, например, попытка доступа за пределы массива или передача недопустимого аргумента в метод, генерируется исключение, и выполнение программы прерывается.
#код
Какие подклассы класса Writer вы знаете, для чего они предназначены?
• Writer — абстрактный класс, описывающий символьный вывод;
• BufferedWriter — буферизованный выходной символьный поток;
• CharArrayWriter — выходной поток, который пишет в символьный массив;
• FileWriter — выходной поток, пишущий в файл;
• FilterWriter — абстрактный класс, предоставляющий интерфейс для классов-надстроек;
• OutputStreamWriter — выходной поток, транслирующий байты в символы;
• PipedWriter — выходной канал;
• PrintWriter — выходной поток символов, включающий методы print() и println();
• StringWriter — выходной поток, пишущий в строку;
#вопросы_с_собеседований
• Writer — абстрактный класс, описывающий символьный вывод;
• BufferedWriter — буферизованный выходной символьный поток;
• CharArrayWriter — выходной поток, который пишет в символьный массив;
• FileWriter — выходной поток, пишущий в файл;
• FilterWriter — абстрактный класс, предоставляющий интерфейс для классов-надстроек;
• OutputStreamWriter — выходной поток, транслирующий байты в символы;
• PipedWriter — выходной канал;
• PrintWriter — выходной поток символов, включающий методы print() и println();
• StringWriter — выходной поток, пишущий в строку;
#вопросы_с_собеседований
ScheduledExecutorService
ScheduledExecutorService — это интерфейс в Java из пакета java.util.concurrent, который предоставляет возможность планирования и выполнения задач с задержкой или периодически.
Основные реализации ScheduledExecutorService:
ScheduledThreadPoolExecutor — это конкретная реализация ScheduledExecutorService, предоставляемая в стандартной библиотеке Java. Она является потокобезопасной реализацией и использует пул потоков для выполнения задач.
SingleThreadScheduledExecutor — это реализация ScheduledExecutorService, которая использует только один поток для выполнения задач. Она может быть полезной, если вы хотите, чтобы задачи выполнялись последовательно в заданном порядке.
#код
ScheduledExecutorService — это интерфейс в Java из пакета java.util.concurrent, который предоставляет возможность планирования и выполнения задач с задержкой или периодически.
Основные реализации ScheduledExecutorService:
ScheduledThreadPoolExecutor — это конкретная реализация ScheduledExecutorService, предоставляемая в стандартной библиотеке Java. Она является потокобезопасной реализацией и использует пул потоков для выполнения задач.
SingleThreadScheduledExecutor — это реализация ScheduledExecutorService, которая использует только один поток для выполнения задач. Она может быть полезной, если вы хотите, чтобы задачи выполнялись последовательно в заданном порядке.
#код
BitSail — это распределенный высокопроизводительный механизм интеграции данных, который поддерживает пакетные, потоковые и инкрементальные сценарии.
💥Stars: 1393
📝Forks: 271
Открыть репозиторий
💥Stars: 1393
📝Forks: 271
Открыть репозиторий
Удачное и неудачное использование Optional
Optional — это контейнер для объекта, который может содержать или не содержать значение null.
Удачным примером использования Optional является метод orElseGet(), который позволяет вернуть значение по умолчанию, если значение Optional равно null. (изображение 1)
Неудачным примером использования Optional является метод get(), который вызывает исключение NoSuchElementException, если значение Optional равно null. (изображение 2)
#код
Optional — это контейнер для объекта, который может содержать или не содержать значение null.
Удачным примером использования Optional является метод orElseGet(), который позволяет вернуть значение по умолчанию, если значение Optional равно null. (изображение 1)
Неудачным примером использования Optional является метод get(), который вызывает исключение NoSuchElementException, если значение Optional равно null. (изображение 2)
#код