This media is not supported in your browser
VIEW IN TELEGRAM
Java spring exception handling | обработка исключений за 5 минут
В этом видео речь пойдет об обработке исключений на уровне контроллера на языке Java. Покажу, какие инструменты есть у Spring.
00:23 - try catch, ResponseEntity
00:47 - наследование ResponseStatusException
01:10 - настройки отображения сообщения, названия ошибки и стек трейс в ответе
01:47 - бросаем ResponseStatusException
02:04 - аннотация @ ExceptionHandler
03:05 - аннотация @ RestControllerAdvice
03:40 - кастомный объект вместо ResponseEntity
04:02 - аннотация @ ResponseStatus
Код можно посмотреть тут: https://github.com/dispikerton/exceptionHandling
источник
👉👆
В этом видео речь пойдет об обработке исключений на уровне контроллера на языке Java. Покажу, какие инструменты есть у Spring.
00:23 - try catch, ResponseEntity
00:47 - наследование ResponseStatusException
01:10 - настройки отображения сообщения, названия ошибки и стек трейс в ответе
01:47 - бросаем ResponseStatusException
02:04 - аннотация @ ExceptionHandler
03:05 - аннотация @ RestControllerAdvice
03:40 - кастомный объект вместо ResponseEntity
04:02 - аннотация @ ResponseStatus
Код можно посмотреть тут: https://github.com/dispikerton/exceptionHandling
источник
👉👆
Приведите пример, когда какая-либо коллекция выбрасывает UnsupportedOperationException.
public static void main(String[] args) {
List<Integer> list = Collections.emptyList();
list.add(0);
}
#вопросы_с_собеседований
List<Integer> list = Collections.emptyList();
list.add(0);
}
Что такое литералы?
Литералы — это явно заданные значения в коде программы — константы определенного типа, которые находятся в коде в момент запуска.
В этом классе “Hello world!” — литерал.
Переменная a - тоже литерал.
Литералы бывают разных типов, которые определяются их назначением и способом написания.
👉👆
Литералы — это явно заданные значения в коде программы — константы определенного типа, которые находятся в коде в момент запуска.
class Test {
int a = 0b1101010110;
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
В этом классе “Hello world!” — литерал.
Переменная a - тоже литерал.
Литералы бывают разных типов, которые определяются их назначением и способом написания.
👉👆
Java Challenges: 100+ Proven Tasks that Will Prepare You for Anything
Автор: Michael Inden (2021)
Автор Майкл Инден описывает альтернативные решения и анализирует возможные подводные камни и типичные ошибки при проектировании систем. Примеры рассматриваются с использованием JShell, JUnit 5 для модульного тестирования и проверки решений. Также, подробно описывается O-нотация для оценки производительности алгоритмов.
Скачать
👉 @java_360
Автор: Michael Inden (2021)
Автор Майкл Инден описывает альтернативные решения и анализирует возможные подводные камни и типичные ошибки при проектировании систем. Примеры рассматриваются с использованием JShell, JUnit 5 для модульного тестирования и проверки решений. Также, подробно описывается O-нотация для оценки производительности алгоритмов.
Скачать
👉 @java_360
Академия Яндекса продолжает набор в Летние школы сразу в трех странах — в РФ, Сербии и Казахстане. Предусмотрено обучение для специалистов с опытом работы по следующим направлениям:
— фронтенд
— бэкенд-разработка (Python, Java, C++, Go)
— мобильная разработка (iOS, Android, Flutter)
— школа менеджеров (управление проектами и продуктами, продуктовая аналитика)
Программа начнется с теории и небольших заданий в онлайне, а затем студенты школ будут практиковаться на реальных проектах в фулстэк-группах с опытными наставниками в офисах Яндекса в Москве, Белграде и Алматы. Всем иногородним студентам, успешно прошедшим отбор и онлайн-этап, Яндекс оплатит билеты и проживание на период оффлайн-обучения.
Для участия необходимо отправить заявку и выполнить тестовое задание, которое размещено на страницах Школ. Дедлайны вступительных испытаний: до 13 апреля (Школа для менеджеров), до 27 апреля (Школы для разработчиков). В общем, go rockstars 🦾
— фронтенд
— бэкенд-разработка (Python, Java, C++, Go)
— мобильная разработка (iOS, Android, Flutter)
— школа менеджеров (управление проектами и продуктами, продуктовая аналитика)
Программа начнется с теории и небольших заданий в онлайне, а затем студенты школ будут практиковаться на реальных проектах в фулстэк-группах с опытными наставниками в офисах Яндекса в Москве, Белграде и Алматы. Всем иногородним студентам, успешно прошедшим отбор и онлайн-этап, Яндекс оплатит билеты и проживание на период оффлайн-обучения.
Для участия необходимо отправить заявку и выполнить тестовое задание, которое размещено на страницах Школ. Дедлайны вступительных испытаний: до 13 апреля (Школа для менеджеров), до 27 апреля (Школы для разработчиков). В общем, go rockstars 🦾
Летние школы Яндекса
Ежегодная образовательная программа Яндекса, больше половины выпускников которой становятся стажёрами и сотрудниками компании
Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресации и на основе метода цепочек. Как реализована HashMap? Почему, по вашему мнению, была выбрана именно эта реализация? В чем плюсы и минусы каждого подхода?
HashMap реализован с использованием метода цепочек, т.е. каждой ячейке массива (корзине) соответствует свой связный список и при возникновении коллизии осуществляется добавление нового элемента в этот список.
Для метода цепочек коэффициент заполнения может быть больше 1 и с увеличением числа элементов производительность убывает линейно. Такие таблицы удобно использовать, если заранее неизвестно количество хранимых элементов, либо их может быть достаточно много, что приводит к большим значениям коэффициента заполнения.
Среди методов открытой реализации различают:
• линейное пробирование;
• квадратичное пробирование;
• двойное хэширование.
Недостатки структур с методом открытой адресации:
• Количество элементов в хэш-таблице не может превышать размера массива. По мере увеличения числа элементов и повышения коэффициента заполнения производительность структуры резко падает, поэтому необходимо проводить перехэширование.
• Сложно организовать удаление элемента.
• Первые два метода открытой адресации приводят к проблеме первичной и вторичной группировок.
Преимущества хэш-таблицы с открытой адресацией:
• отсутствие затрат на создание и хранение объектов списка;
• простота организации сериализации/десериализации
👉👆
HashMap реализован с использованием метода цепочек, т.е. каждой ячейке массива (корзине) соответствует свой связный список и при возникновении коллизии осуществляется добавление нового элемента в этот список.
Для метода цепочек коэффициент заполнения может быть больше 1 и с увеличением числа элементов производительность убывает линейно. Такие таблицы удобно использовать, если заранее неизвестно количество хранимых элементов, либо их может быть достаточно много, что приводит к большим значениям коэффициента заполнения.
Среди методов открытой реализации различают:
• линейное пробирование;
• квадратичное пробирование;
• двойное хэширование.
Недостатки структур с методом открытой адресации:
• Количество элементов в хэш-таблице не может превышать размера массива. По мере увеличения числа элементов и повышения коэффициента заполнения производительность структуры резко падает, поэтому необходимо проводить перехэширование.
• Сложно организовать удаление элемента.
• Первые два метода открытой адресации приводят к проблеме первичной и вторичной группировок.
Преимущества хэш-таблицы с открытой адресацией:
• отсутствие затрат на создание и хранение объектов списка;
• простота организации сериализации/десериализации
👉👆
Прокачай свои знания в архитектуре современных распределенных систем
Стремишься занять позицию сеньора или даже архитектора? Этот курс для тебя!
✅Разберешься в event-driven системах
✅Обретешь уверенность на system design интервью в российских и зарубежных компаниях
✅Поймешь как устроен подход event sourcing, паттерн CQRS
✅Твердо поймешь основы Domain-driven design, как его применять
✅Создашь распределенную event-sourcing based систему и сможешь заимплементить распределенную транзакцию
Авторский курс от преподавателя Санкт-Петербургского университета ИТМО и разработчика высоконагруженных систем Андрея Суховицкого.
Твоими менторами станут ребята из Amazon, Revolut, JetBrains, Yandex или Ozon.
❗️Старт курса - 3 апреля, лекции и задания доступны уже сейчас!❗️
Переходи по ссылке и подавай заявку!
Стремишься занять позицию сеньора или даже архитектора? Этот курс для тебя!
✅Разберешься в event-driven системах
✅Обретешь уверенность на system design интервью в российских и зарубежных компаниях
✅Поймешь как устроен подход event sourcing, паттерн CQRS
✅Твердо поймешь основы Domain-driven design, как его применять
✅Создашь распределенную event-sourcing based систему и сможешь заимплементить распределенную транзакцию
Авторский курс от преподавателя Санкт-Петербургского университета ИТМО и разработчика высоконагруженных систем Андрея Суховицкого.
Твоими менторами станут ребята из Amazon, Revolut, JetBrains, Yandex или Ozon.
❗️Старт курса - 3 апреля, лекции и задания доступны уже сейчас!❗️
Переходи по ссылке и подавай заявку!
Инкапсуляции в Java
Инкапсуляция - это фундаментальная концепция объектно-ориентированного программирования (ООП), которая позволяет разработчикам создавать классы, скрывающие свои внутренние детали и защищающие их состояние и поведение от доступа или изменения извне класса.
В этой статье по программированию мы обсудим инкапсуляцию, ее преимущества и то, как она может быть реализована в Java.
Прежде чем прочитать эту стаью, вы можете прочитать наше руководство "Как работать с классами и объектами в Java", если у вас нет твердого понимания концепций объектно-ориентированного программирования или вам необходимо освежить знания.
https://www.developer.com/java/java-encapsulation/
👉👆
Инкапсуляция - это фундаментальная концепция объектно-ориентированного программирования (ООП), которая позволяет разработчикам создавать классы, скрывающие свои внутренние детали и защищающие их состояние и поведение от доступа или изменения извне класса.
В этой статье по программированию мы обсудим инкапсуляцию, ее преимущества и то, как она может быть реализована в Java.
Прежде чем прочитать эту стаью, вы можете прочитать наше руководство "Как работать с классами и объектами в Java", если у вас нет твердого понимания концепций объектно-ориентированного программирования или вам необходимо освежить знания.
https://www.developer.com/java/java-encapsulation/
👉👆
Бесплатные Летние школы Академии Яндекса в России, Сербии и Казахстане — summer-dev event с возможностью получить оплачиваемую стажировку или даже оффер в штат компании 💻
Специалисты с опытом разработки могут попробовать себя в следующих направлениях:
🔸разработка интерфейсов;
🔸мобильная разработка (iOS, Android, Flutter);
🔸бэкенд-разработка (Python, Java, C++, Go);
🔸школа менеджеров.
Сначала онлайн-этап с лекциями, а потом — практика в офисах Яндекса в Москве, Белграде или Алматы. При успешном прохождении онлайн-этапа оплату билетов и проживания компания берет на себя.
Чтобы принять участие в программе, нужно подать заявку на сайте Академии и выполнить вступительное задание — до 13 апреля для Школы менеджеров, до 27 апреля для Школы разработчиков.
Всем удачи)
Специалисты с опытом разработки могут попробовать себя в следующих направлениях:
🔸разработка интерфейсов;
🔸мобильная разработка (iOS, Android, Flutter);
🔸бэкенд-разработка (Python, Java, C++, Go);
🔸школа менеджеров.
Сначала онлайн-этап с лекциями, а потом — практика в офисах Яндекса в Москве, Белграде или Алматы. При успешном прохождении онлайн-этапа оплату билетов и проживания компания берет на себя.
Чтобы принять участие в программе, нужно подать заявку на сайте Академии и выполнить вступительное задание — до 13 апреля для Школы менеджеров, до 27 апреля для Школы разработчиков.
Всем удачи)
Какой из этих методов используется для сравнения конкретной части одной строки с конкретной частью другой строки?
Anonymous Quiz
0%
regionMatch()
0%
match()
0%
RegionMatches()
0%
regionMatches()
100%
Посмотреть ответ
Не самые очевидные советы по написанию DTO на Java
Чтобы воспользоваться данными из внешней службы, мы обычно преобразуем полезную нагрузку JSON в объект передачи данных (Data Transfer Object, DTO). Код, обрабатывающий DTO, быстро усложняется, но с этим могут помочь несколько советов. Вполне возможно писать DTO, с которыми легче взаимодействовать и которые облегчают написание и чтение кода. Если объединить их вместе — можно упростить себе работу.
https://medium.com/javarevisited/not-so-obvious-tips-to-write-better-dtos-in-java-c6116895b180
👉👆
Чтобы воспользоваться данными из внешней службы, мы обычно преобразуем полезную нагрузку JSON в объект передачи данных (Data Transfer Object, DTO). Код, обрабатывающий DTO, быстро усложняется, но с этим могут помочь несколько советов. Вполне возможно писать DTO, с которыми легче взаимодействовать и которые облегчают написание и чтение кода. Если объединить их вместе — можно упростить себе работу.
https://medium.com/javarevisited/not-so-obvious-tips-to-write-better-dtos-in-java-c6116895b180
👉👆
Intern Meetup Week в Яндексе 🎉
С 17 по 20 апреля в Яндексе пройдёт неделя митапов для начинающих разработчиков. Будет доступен офлайн и онлайн формат.
17 апреля состоится митап для направления Backend: C++, Go, Java
Регистрация по ссылке: https://clck.ru/33qW3U
В программе лекции экспертов о технологиях, общение с руководителями команд и рекрутерами, нетворкинг и подарки.
При отборе на митапы у вас есть шанс получить приглашение на пробное собеседование на стажировку в Яндекс 🔥
📆Когда: 17 апреля 17:00 - 21:30, сбор гостей с 16:30
🌐Где: офис Яндекса, ул. Льва Толстого, 16, м.Парк Культуры и трансляция онлайн
Все подробности и регистрация по ссылке: https://clck.ru/33qW3U
А чтобы быть в курсе всех новостей Young&&Yandex, подписывайтесь на чат-бот.
С 17 по 20 апреля в Яндексе пройдёт неделя митапов для начинающих разработчиков. Будет доступен офлайн и онлайн формат.
17 апреля состоится митап для направления Backend: C++, Go, Java
Регистрация по ссылке: https://clck.ru/33qW3U
В программе лекции экспертов о технологиях, общение с руководителями команд и рекрутерами, нетворкинг и подарки.
При отборе на митапы у вас есть шанс получить приглашение на пробное собеседование на стажировку в Яндекс 🔥
📆Когда: 17 апреля 17:00 - 21:30, сбор гостей с 16:30
🌐Где: офис Яндекса, ул. Льва Толстого, 16, м.Парк Культуры и трансляция онлайн
Все подробности и регистрация по ссылке: https://clck.ru/33qW3U
А чтобы быть в курсе всех новостей Young&&Yandex, подписывайтесь на чат-бот.
Академия Яндекса продолжает набор в Летние школы для джунов и других спецов с опытом работы. Они пройдут в 3 странах — Россия, Сербия и Казахстан.
— Школа фронтенда;
— Школа мобильной разработки (iOS, Android, Flutter);
— Школа бэкенд-разработки (Python, Java, C++, Go)
— Школа менеджеров (управление проектами и продуктами, маркетинг, продуктовая аналитика)
Сначала пройдут лекции в онлайне, а затем практика в офисах Яндекса в Москве, Белграде и Алматы. Участники будут работать над реальными проектами в фулстек-группах с опытным экспертом-наставником. Лучшие студенты смогут получить оффер в штат или приглашение на стажировку – по внутренней статистике Яндекса, 50% выпускников с каждого потока становятся стажерами или сотрудниками.
Если вы из другого города, но успешно закончите онлайн-этап, Яндекс оплатит билеты и проживание на период практики.
Чтобы попасть в интересующую вас Школу, нужно отправить заявку и пройти конкурсный отбор на основе тестового задания, опубликованного на странице Школ.
— Школа фронтенда;
— Школа мобильной разработки (iOS, Android, Flutter);
— Школа бэкенд-разработки (Python, Java, C++, Go)
— Школа менеджеров (управление проектами и продуктами, маркетинг, продуктовая аналитика)
Сначала пройдут лекции в онлайне, а затем практика в офисах Яндекса в Москве, Белграде и Алматы. Участники будут работать над реальными проектами в фулстек-группах с опытным экспертом-наставником. Лучшие студенты смогут получить оффер в штат или приглашение на стажировку – по внутренней статистике Яндекса, 50% выпускников с каждого потока становятся стажерами или сотрудниками.
Если вы из другого города, но успешно закончите онлайн-этап, Яндекс оплатит билеты и проживание на период практики.
Чтобы попасть в интересующую вас Школу, нужно отправить заявку и пройти конкурсный отбор на основе тестового задания, опубликованного на странице Школ.
Оптимизация запросов
В этом посте хочу рассказать основы оптимизации запросов в БД. Буду говорить на примере Postgre, но в других БД процесс похож.
Шаг 0. Вспоминаем основы
При выполнении запроса участвуют два процесса:
▪️ Планировщик — составляет план выполнения запроса. Какие таблицы обойти, что проверить и в какой последовательности
▪️ Исполнитель — извлекает данные по заданному плану
Разработчик может создать дополнительные структуры данных — индексы. Индексы помогают быстрее выполнять запросы, но занимают много места. Если данные в таблице занимают 1 ГБ, то индекс с id займёт 250 МБ.
Шаг 1. Ищем, что оптимизировать
Смотрим таблицу
Ищем запросы, которые выполняются часто или долго.
Шаг 2. Работаем с конкретным запросом
Для экспериментов берём тестовую базу с большим количеством данных. Минимум миллион записей, иначе эффект оптимизаций не будет заметен.
Прогоняем запрос через EXPLAIN ANALYZE:
▪️ planning time — время планирования запроса
▪️ execution time — время выполнения запроса. Работаем с этим значением
Можно поиграть с условиями, порядком соединения таблиц и разными функциями. Обратите внимание на способ обхода таблицы:
🔸 поиск по условию (where name = …)
🔸 проверка уникальности поля
🔸 проверка внешнего ключа (foreign key)
Решение здесь простое — добавить индекс по проблемному полю. Базовый вариант выглядит так:
▫️ Запустить
▫️ Порадоваться снижению execution time
Для оптимизаций популярных и тяжёлых запросов добавление индекса оправдано. Разумеется, не нужно добавлять индексы для всех запросов и всех условий. Индексы занимают много места и замедляют запись в базу.
В оптимизации запросов огромное количество нюансов, но большинство проблем решается кэшем и добавлением индекса. Более сложные случаи лучше обсуждать с коллегами DBA😌
В этом посте хочу рассказать основы оптимизации запросов в БД. Буду говорить на примере Postgre, но в других БД процесс похож.
Шаг 0. Вспоминаем основы
При выполнении запроса участвуют два процесса:
▪️ Планировщик — составляет план выполнения запроса. Какие таблицы обойти, что проверить и в какой последовательности
▪️ Исполнитель — извлекает данные по заданному плану
Разработчик может создать дополнительные структуры данных — индексы. Индексы помогают быстрее выполнять запросы, но занимают много места. Если данные в таблице занимают 1 ГБ, то индекс с id займёт 250 МБ.
Шаг 1. Ищем, что оптимизировать
Смотрим таблицу
pg_stat_statements
— там собирается статистика по запросам. Чтобы получить достоверные данные, берём статистику с продакшн базы.Ищем запросы, которые выполняются часто или долго.
Шаг 2. Работаем с конкретным запросом
Для экспериментов берём тестовую базу с большим количеством данных. Минимум миллион записей, иначе эффект оптимизаций не будет заметен.
Прогоняем запрос через EXPLAIN ANALYZE:
EXPLAIN ANALYZE SELECT * FROM users where name = ’K’;EXPLAIN пишет только план выполнения запроса. EXPLAIN ANALYZE выполняет запрос и показывает
▪️ planning time — время планирования запроса
▪️ execution time — время выполнения запроса. Работаем с этим значением
Можно поиграть с условиями, порядком соединения таблиц и разными функциями. Обратите внимание на способ обхода таблицы:
Index Scan using name_index on
— при выполнении запроса используется индекс, и это отличноSeq Scan on
означает, что происходит долгий последовательный обход таблицы. Причиной может быть🔸 поиск по условию (where name = …)
🔸 проверка уникальности поля
🔸 проверка внешнего ключа (foreign key)
Решение здесь простое — добавить индекс по проблемному полю. Базовый вариант выглядит так:
CREATE INDEX index_name ON users(name);Дальше всё просто:
▫️ Запустить
EXPLAIN ANALYZE
▫️ Увидеть в плане выполнения новый индекс▫️ Порадоваться снижению execution time
Для оптимизаций популярных и тяжёлых запросов добавление индекса оправдано. Разумеется, не нужно добавлять индексы для всех запросов и всех условий. Индексы занимают много места и замедляют запись в базу.
В оптимизации запросов огромное количество нюансов, но большинство проблем решается кэшем и добавлением индекса. Более сложные случаи лучше обсуждать с коллегами DBA😌