Получи случайную криптовалюту за регистрацию!

DMdev talks

Логотип телеграм канала @dmdev_talks — DMdev talks D
Логотип телеграм канала @dmdev_talks — DMdev talks
Адрес канала: @dmdev_talks
Категории: Курсы и гайды
Язык: Русский
Количество подписчиков: 2.24K
Описание канала:

Авторский канал Дениса Матвеенко, создателя курсов DMdev - обучение по Java программированию
То, что все ищут по Java:
https://taplink.cc/denis.dmdev
P.S. Когда не программирую - я бегаю:
https://t.me/dmdev_pro_run

Рейтинги и Отзывы

4.00

3 отзыва

Оценить канал dmdev_talks и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

3

3 звезд

0

2 звезд

0

1 звезд

0


Последние сообщения

2022-10-02 11:44:59 Static imports

Часто замечаю некорректное или даже неуместное использование статического импорта методов и констант в классах.
Либо, наоборот, когда его не используют вовсе.

Хотя на самом деле, правильное применение его:
Убирает ненужный контекст (less verbose)
Уменьшает количество boilerplate кода
Улучшает читабильность кода

Но сложность в использовании или не использовании статического импорта мне понятна:
потому что нет и вряд ли могут быть четкие правила для этого.

: Когда же использовать статический импорт, чтобы получать все эти плюсы?
: Когда его применение ясно и без дополнительного контекста, т.е. того класса, в котором находятся статические методы и константы.

Обычно это общеизвестные классы, но лучше сразу на примерах!

Уместное использование:
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static java.util.stream.Collectors.toList;
import static java.util.Arrays.asList;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
import static java.util.function.Predicate.not;
import static java.time.ZoneOffset.UTC;
import static java.nio.charset.StandardCharsets.UTF_8;


Неуместное использование:
import static java.util.Optional.of;
import static org.junit.jupiter.params.provider.Arguments.of;
import static com.dmdev.spring.entity.User.builder;
import static com.dmdev.spring.converter.DateConverter.convert;

PS. В любом случае статический импорт остается на совести разработчика
706 views08:44
Открыть/Комментировать
2022-09-25 20:47:32
Личная победа
И мои выводов после первого забега на 10.000 метров

1. Любое новое начинание первое время приносит мало приятного. В основном только боль и разочарование. Нужно это просто принять.

2. Если 2 месяца с нуля заниматься каким-то делом, но постоянно - то точно можно добиться уже хороших результатов.

3. Даже в течение небольшого промежутка времени (2 месяца) могут случаться форс-мажоры. Главное - восстанавливаться и продолжать идти к своей цели (в моем случае заболел ковидом и выпал на 2 недели).

4. Очень круто совмещать теорию с практикой. Одно без другого - может привести к плохим последствиям (например, в случае бега - это травмы).

5. С опытным ментором можно ускорить процесс роста в разы!

6. Очень здорово иметь единомышленников: они вдохновляют и мотивируют не останавливаться!

7. Празднуй свои большие и маленькие успехи. Поощряй себя за труд, который ты действительно проделал!
1.3K views17:47
Открыть/Комментировать
2022-09-13 19:11:15
Программисты, настоящие и будущие, всех с праздником

В 256 день этого года желаю легкого изучения актуальных библиотек и фреймворков, в глаза не видеть легаси кода, находить баги до деплоя в продакшен и безграничного вдохновения и интереса для написания гибкого и чистого кода!

Делитесь в комментах, как отмечаете и какие плюшки приготовила для вас компания?

P.S. Я начну первым комментом, как я провожу этот день)
2.1K views16:11
Открыть/Комментировать
2022-09-11 08:41:37
Недавно мне задали вопрос:
«Как я подхожу к изучению любой библиотеки или фреймворка, чтобы хорошо и глубоко их понимать?"

И ключевой момент в этом вопросе - это слово "понимать", потому что информации о программировании сейчас невероятно много.
Просто невозможно все помнить, учитывая еще не очень хорошую память

И конечно путь только один: вместо запоминания информации нужно сделать все, чтобы ее понять.
Ведь чем больше и лучше ты поймешь, тем меньше придется зубрить.

Это как инвестиции: сначала ты тратишь больше времени, чтобы лучше изучить инструмент, но на более длительный период выигрыш просто увеличивается по экспоненте!

А отвечая на вопрос: простого ответа здесь нет, но есть как минимум 3 вещи, которые действительно работают для меня и эффективно справляются с этой задачей.

Debug
Это как остановить время (или быть в моменте), когда ты видишь состояние потока и всех объектов лишь в одной точке выполнения!
Более того, ты еще и управляешь им, заглядывая в прошлое и будущее!
Именно Debug дал первый толчок для меня в понимании программирования в принципе.

Чтение исходного кода изучаемых инструментов
Только исходный код всегда говорит правду, и только он является single source of truth.

Преподавание
Эту простую истину уже открыли задолго до меня: если хочешь что-то понять - попробуй рассказать другому.
Пожалуй, этот пункт повлиял на меня сильнее всего почти 5 лет назад, когда я решил заняться преподаванием.

Ну и конечно же опыт никто не отменял. Чем больше ты изучаешь различных фреймворков, библиотек и подходов, тем проще тебе дается изучение новых. Ибо основные концепции одинаковы!

PS. Кстати, заняться преподаванием меня сподвигло прочтение книги "7 навыков высокоэффективных людей"
2.1K views05:41
Открыть/Комментировать
2022-09-08 21:51:04
Зачем инициализировать Prometheus Counter явно?

На практике при работе с метриками часто забывается, что только counters без labels инициализируются сразу же при их объявлении (по сути выставляются в 0).
Если же counter содержит хотя бы одну label, он будет проинициализирован только при первом инкременте c этой label.

И все бы ничего, но в таком случае написание alerts такого вида становятся некорректными:
sum(rate(validated_tokens_total[15m])) < 0.01

Потому что в случае отсутствия траффика на наш сервис (о чем собственно мы и хотим узнать, написав данный alert), мы получим no data, но никак не число, которое Prometheus потом сможет сравнить.

В таком случае, мы можем упустить инцидент: пользователям не отвечает наше приложение, а мы об этом даже не знаем!

Решений здесь 2:
1. Обязательно добавлять второе условие c absent в подобные alerts: OR absent(rate(validated_tokens_total[15m]))
2. Просто инициализировать все возможные labels сразу же (как на картинке в static block)

Лично я предпочитаю второй вариант, потому что не могу надеяться, что все разработчики знают и помнят такие нюансы при написании alerts

PS. Более подробно можно почитать здесь
1.7K views18:51
Открыть/Комментировать
2022-09-03 17:56:16
Ребят, кто пропустил информацию, то сейчас идет набор группы на менторство 1 ступени.
Старт: 19 сентября
Продолжительность: ~3,5 месяца
Свободно: 6 мест мест нет

Вся подробная информация о менторстве DMdev и запись тут:
http://dmdev.tilda.ws/first-level

PS. Вопросы можно также задавать здесь в комментариях
PPS. Пример финального проекта по окончании менторства есть на YouTube
2.0K viewsedited  14:56
Открыть/Комментировать
2022-09-02 22:31:55
Ставишь final над параметрами и локальными переменными?

Многие разработчики предпочитают помечать параметры методов и локальные переменные ключевым словом final где это только возможно.
Лично я не поощряю такую практику за исключением единичных случаев.

В свою очередь я использую другой подход: по умолчанию нужно воспринимать ВСЕ параметры и локальные переменные как effectively-final (как в замыканиях).

Благодаря такой практике, вместо нагромождения кода ненужными ключевыми словами (которые отбирают драгоценное внимание программиста во время его прочтения), ты будешь:
- стараться делать методы более лаконичным и чистыми
- избегать изменения параметров (immutable)
- комбинировать или даже заменять императивный подход на функциональный (где не указываются вовсе final и даже типы данных).
1.8K viewsedited  19:31
Открыть/Комментировать
2022-09-01 10:24:55
Когда спрятал свой баг глубоко в код, и он прошел все тесты

Наверное, это тот самый момент, когда можно сказать: "Это не баг, а фича!".

PS. Что-то все никак не могу успокоиться от этого видоса
1.9K views07:24
Открыть/Комментировать
2022-08-28 18:16:37
Как и обещал, выложил вчерашний уже третий выпуск live code review, где были разобраны 2 проекта, написанные на стандартном стэке технологий: Apache Maven, JUnit 5, Hibernate, Spring.

Также использовалось множество различных дополнительных библиотек:
- lombok для генерации boilerplate кода
- quierydsl для более удобного написания sql запросов с фильтрацией
- testcontainers для поднятия PostgreSQL в docker контейнере в интеграционных тестах
- liquibase для миграции баз данных
И многие другие, что были разобраны и объяснены на курсах dmdev.

Так что кто не смог участвовать, но очень хотел посмотреть - вот ссылка
2.0K views15:16
Открыть/Комментировать
2022-08-26 21:24:55
В который раз убеждаюсь, что как только ты пытаешься объяснить совершенно любую тему другому человеку, то намного глубже начинаешь понимать ее. Я бы даже сказал, что порой приходит какое-то озарение и складывается пазл в единую картину.

Как и сейчас при подготовке очередного видео по курсу Bash я пытался схематично показать разницу между soft и hard links в Unix operating systems, и сам понял, как это работает на самом деле

Как же я люблю визуализировать!

А ты знал про inode number, который дополнительно хранится с именем любого файла, и для чего он нужен?
1.8K viewsedited  18:24
Открыть/Комментировать