Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Это увлекательная головоломка с большим количеством уникальных уровней.

Блок пазл. Новый уровень

Казуальные, Головоломки, Логическая

Играть

Топ прошлой недели

  • CharlotteLink CharlotteLink 1 пост
  • Syslikagronom Syslikagronom 7 постов
  • BydniKydrashki BydniKydrashki 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Java

С этим тегом используют

Программирование IT Программист IT юмор Обучение Android Python Все
973 поста сначала свежее
5
ZooMMaX
ZooMMaX
1 год назад
Лига программистов

Продолжение поста «JetBrains plugin - когда на маркетплейсе нет нужного»⁠⁠1

Обновление плагина до версии 1.2
Добавил сравнение методов API.

Продолжение поста «JetBrains plugin - когда на маркетплейсе нет нужного» Java, Jetbrains, Плагин, Криптовалюта, Cryptocurrency, YouTube, Ответ на пост
Продолжение поста «JetBrains plugin - когда на маркетплейсе нет нужного» Java, Jetbrains, Плагин, Криптовалюта, Cryptocurrency, YouTube, Ответ на пост

Серым помечены методы, которые есть в обоих версиях API. Зеленым помечены методы, которые есть в этой версии API и нет в другой, а красным - наоборот. Зеленые и серые методы кликабельны. При нажатии открывается подробное описание метода в соответствующей версии API.

Лойс, пи****ка, досвидония (© Doctor DIY)

Показать полностью 1
Java Jetbrains Плагин Криптовалюта Cryptocurrency YouTube Ответ на пост
0
6
f.lattys
f.lattys
1 год назад

Объектно-ориентированное программирование в Java⁠⁠

Объектно-ориентированное программирование в Java IT, Программирование, Java, Ооп, Книги, Обучение, Telegram (ссылка)

Автор: Гуськова Ольга

Год: 2018

Количество страниц: 241

Учебное пособие посвящено объектно-ориентированному программированию на языке Java. Рассматриваются основные принципы объектно-ориентированного программирования, средства работы со структурами данных – коллекции и дженерики, принципы объектно-ориентированного дизайна.

Скачать книгу

Показать полностью 1
IT Программирование Java Ооп Книги Обучение Telegram (ссылка)
0
2
f.lattys
f.lattys
1 год назад

Ловите отличную книгу - "Эффективный Java. Тюнинг кода на Java 8, 11 и дальше"⁠⁠

Ловите отличную книгу - "Эффективный Java. Тюнинг кода на Java 8, 11 и дальше" IT, Программирование, Java, Книги, Обучение, Telegram (ссылка)

Автор: Скотт Оукс

Год: 2021

Количество страниц: 496

Программирование и тестирование обычно принято относить к разным профессиональным сферам. Скотт Оукс — признанный эксперт по языку Java — уверен, что если вы хотите работать с этим языком, то обязаны понимать, как выполняется код в виртуальной машине Java, и знать, какие настройки влияют на производительность.

Вы сможете разобраться в производительности приложений Java в контексте как JVM, так и платформы Java, освоите средства, функции и процессы, которые могут повысить производительность в LTS-версиях Java, и познакомитесь с новыми возможностями (такими как предварительная компиляция и экспериментальные уборщики мусора).

В этой книге вы:

- Узнаете, как платформы и компиляторы Java влияют на производительность.

- Разберетесь c механизмом уборки мусора.

- Освоите четыре принципа получения наилучших результатов при тестировании производительности.

- Научитесь пользоваться JDK и другими инструментами оценки производительности.

- Узнаете как настройка и приемы программирования позволяют минимизировать последствия уборки мусора.

- Научитесь решать проблемы производительности средствами Java API.

- Поймете, как улучшить производительность приложений баз данных Java.

Скачать книгу

Показать полностью 1
IT Программирование Java Книги Обучение Telegram (ссылка)
1
Партнёрский материал Реклама
specials
specials

«Научиться гуглить важнее, чем кодить». Курс по Java глазами ментора⁠⁠

Давайте начистоту. Кто не задумывался о том, чтобы выйти на работу мечты в IT (и, конечно же, получать зарплату мечты)? Но мало кто представляет, как готовят спецов на курсах разработки: многие ждут того же, к чему привыкли в школе и вузе, хотя на самом деле процесс устроен совсем не так. Мы поговорили с ментором курса по Java Игорем Рыжаковым и попросили рассказать о своей работе, подходу к обучению, как избежать типичных ошибок и что делать, чтобы побыстрее освоить программирование.

«Научиться гуглить важнее, чем кодить». Курс по Java глазами ментора Профессия, Карьера, Курс, Java, Видео, YouTube, Длиннопост

В Kata Academy — школе программирования, где нужно оплачивать обучение после трудоустройства — не обещают, что учеба будет непростой. Но если вы решили изменить свою жизнь, вас проведут к цели наикратчайшим путем.

Как устроено обучение

Вы, возможно, знаете, как проходит обучение в обычных школах программирования: человек оплачивает курсы, начинает заниматься, сдает работы. У нас в Kata не совсем так. Есть две формы обучения: по предоплате и по постоплате. С предоплатой все просто: это и есть та самая привычная форма, при которой студент платит до начала занятий. Но еще есть постоплата. В этом случае студент учится, ничего не заплатив. И только когда он находит работу в IT, начинает перечислять школе процент от своей зарплаты.

Те, кто идет учиться с оплатой после трудоустройства, выполняют тестовое задание при поступлении, так что тут ребята приходят уже с определенными знаниями. Но даже если человек с нуля, мы даем небольшое FAQ, чтобы он смог справиться с тестовым.

Кстати, даже тем, кто идет по предоплате, я советую сначала что-то почитать и посмотреть ролики. Так будет проще понимать, о чем пойдет речь во время учебы, и это поможет быстрее влиться в процесс.

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

«Научиться гуглить важнее, чем кодить». Курс по Java глазами ментора Профессия, Карьера, Курс, Java, Видео, YouTube, Длиннопост

Подробнее о программе курса можно прочитать тут

Конечно, студенты не успевают сдавать все вовремя далеко не только из-за плохой самоорганизации. Многие совмещают учебу с работой, а иногда даже и не одной. Но я советую реалистично относиться к своим ресурсам. Если у вас напряженный график, а вы хотите учиться по постоплате, придется что-то менять, чтобы было больше времени.

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

Чему учат в Kata Academy

Большинство студентов допускают одну и ту же ошибку. У них в голове заложена такая форма обучения из школы и института: ты приходишь на лекцию, тебе что-то объясняют, ты в меру своих сил запоминаешь информацию, иногда делаешь задания, потом сдаешь экзамены и получаешь диплом. Курс Kata устроен по-другому: здесь мы даем студентам задания, а им нужно самостоятельно искать информацию. Ведь главный навык разработчика — это умение гуглить. В этой профессии нельзя все узнать раз и навсегда.

Да, ученики сами находят информацию, но программированию по-другому не научишься. Можно годами ходить на курсы и пытаться что-то запомнить, но в итоге на работе твои задачи будут постоянно меняться, усложняться, а ты не сможешь находить решения. Там нельзя сказать: «Мы этого не проходили». Такой сотрудник вместо того, чтобы попытаться разобраться самостоятельно, будет донимать вопросами тимлида. В общем, скорее всего, работа у него не будет идти легко. Так что научиться искать информацию может быть даже важнее, чем кодить. Код, наверное, занимает 40% работы, а поиск — 60%.

Новым студентам я советую прочитать условие задачи не менее десяти раз и точно понять, что от тебя требуется. Потом можно переходить к поиску информации. Самое простое — искать на русскоязычных ресурсах, но там есть далеко не все, так что придется покопаться на англоязычных. Помогают и те самые мемные видео индийцев на YouTube. И вот когда ты уже разобрался, что от тебя требуется, нашел нужную информацию, можно начинать писать код.

У нас на платформе для задач есть комментарии студентов, которые уже прошли эти задачи. Конкретного решения там, конечно, не будет, но можно найти ссылку на нужный ресурс или какие-то наводящие на решение мысли. Еще у нас есть чаты для студентов — и действующих, и уже отучившихся. Там можно задать вопрос, прислать часть своего кода, скриншот, ошибку — и как правило студенты отвечают и помогают. Но если все равно что-то не получается, то тут подключается ментор.

Кто-то может подумать, что мы хотим отделаться от студентов и сказать им: «Делайте все сами». Но на самом деле только так вырабатывается важный навык поиска информации, умение самостоятельно разбираться с проблемами. На работе никто не будет подсказывать каждый раз, когда придется столкнуться со сложностями.

Как подготовиться к учебе

Я всегда говорю, что важны дисциплина и время, которое придется выделить. Вряд ли что-то получится, если человек будет учиться по выходным, а в будние даже не притронется к задачам. Так студент будет проходить курс очень долго. А наш мозг устроен так, что со временем забывает информацию, если мы ей не пользуемся. Так что важно заниматься ежедневно. Пусть это будет хотя бы час в день, но регулярно. Естественно, отдыхать тоже нужно, потому я бы посоветовал сделать один выходной в неделю, это позволит держать мозг в тонусе. Для студентов с оплатой после трудоустройства есть требование при поступлении — готовность заниматься не менее пяти часов в день.

Конечно, надо готовиться к трудностям. Особенно сложно будет первое время, но со временем станет понятней и легче. Мне кажется, обучение программированию похоже на сборку пазла: сначала перед тобой просто куча разрозненных непонятных деталей, но со временем они начинают складываться в цельную картину. Конечно, будут возникать мысли: «Это слишком сложно». Но нужно проявить терпение, игнорировать их и двигаться дальше.

Как найти работу

После обучения со студентами работают уже не менторы, а сотрудники специального отдела Kata Academy. Но если кто-то хочет продолжить общение, я не возражаю. У меня есть два студента, с которыми мы поддерживаем связь. Опять же, есть чаты выпускников, где тоже можно обсуждать все насущные вопросы. Бывшие студенты активно друг другу что-то подсказывают, особенно если совета просит человек, который идет на свою первую работу в IT.

Если возникают сложности, то наши сотрудники стараются помочь — в Kata Academy есть специальный HR-отдел, который готовит выпускников к их первой работе в IT. Например, кто-то прошел множество собеседований, но офер так и не получил. Тогда его просят сделать запись собеседования, смотрят ее и разбирают ошибки. Может быть, есть проблемы с soft skills, и тогда сотрудник подскажет, как формулировать ответы и держаться увереннее.

Главная цель Kata Academy — трудоустроить студента. В наших же интересах, чтобы он скорее прошел собеседование и получил предложение по работе. Если вы поставили перед собой цель изменить профессию и жизнь, но столкнулись с трудностями, — не опускайте руки! Приходите в Kata Academy — наши выпускники получают работу, а не бумажку о том, что их пытались учить.

УЗНАТЬ БОЛЬШЕ О КУРСЕ JAVA

Реклама ИП Кузьмин Артем Вячеславович

Показать полностью 1 1
Профессия Карьера Курс Java Видео YouTube Длиннопост
7
mimokrokodilchik
mimokrokodilchik
1 год назад

Spring Reactive упрощенно⁠⁠

Реактивщина стала поддерживаться Спрингом с 2017 года. Но через 6 лет многие так и не осознали, где её применять и зачем она нужна. А ведь для Спринга это стало целой новой эпохой.

Spring Reactive упрощенно IT, Программист, Java, Telegram (ссылка), Длиннопост

Реактивнища это не изобретение Спринга.

Первое что нужно знать — реактивщина и реактивный подход не являются изобретением Спринга. Наоборот спринг как обычно поглотил очередную технологию, в данном случае Project Reactor

Реактивный дух времени.

Понятие реактивного подхода размыто но в общем подразумевает что приложение будет скорее событийно ориентировано. Давайте рассмотрим простой пример ниже, в котором сравним старый синхроный подход и рективный.

Синхронный блокирующий подход:

Предположим что на мнужно выполнить 3 задачи. В старом синхронном подходе мы получим код который будет запущенным одним потоком поочередно и блокирующе.

Spring Reactive упрощенно IT, Программист, Java, Telegram (ссылка), Длиннопост

синхронный подход

Реактивный подход

Теперь перепишем ту же задачу используя реактивщину, встроенную в JDK еще с Java 9:

Spring Reactive упрощенно IT, Программист, Java, Telegram (ссылка), Длиннопост

Создаем паблишер и отправляем ему 3 задачи.

Различия. Небольшая большая разница.

Как можно было понять что сам подход к написанию кода от «естественного» процедурного, где каждый этап движется сверху вниз теряется в реактивщине (хотя и в функциональности он тоже теряется). Реактивный код выглядит скорее как декларативный набор реакций на события и поэтому менее прозрачен и читаем. К сожалению, такой стиль написания кода усложняет процессы разработки, тестирования и поддержки кода.

Но почему реактивщина стала с каждым днем становится все более популярней?

Причин довольно много, но я упомяну лишь два наиболее важных (по моему мнению):

  1. Эффективное использование ресурсов (это утверждение истинно только если вы используете неблокирующий код).

  2. Отзывчивость системы (Responsive)

Реактивный + неблокирующий подходы = нефть, золото, греча и, конечно же, акции эппл.

Spring Reactive упрощенно IT, Программист, Java, Telegram (ссылка), Длиннопост

Отгадайте, кто сожрет все потоковые ресурсы?

Если проанализировать среднестатистический цикл жизни потока то можно заметить что большую часть времени (иногда по 99% времени)

находится либо:

  1. В состоянии ожидании доступа к локу те в состоянии ожидании монитора BLOCKED или WAITING

  2. В "логическом ожидании" какого то ресурса как то ответа базы, сервиса или просто базы.

И это очень очень плохо. В текущих реалиях даже среднестатистический процессор обладает огромными мощностями. Большинство операций занимают нано и микросекунд, но ожидания и блокировки руинят всю производительность.

Решением является совместное использования реактивщины и неблокировщины. Первая организует процесс в котором пул потоков ожидает задачи под выполнение а неблокирующий подход не заставляет ждать потока в рамках одной из задач.

Отзывчивость системы. (Responsiveness)

Один из весомых плюсов реактивщины - возможность получения данных по мере их появления. А как следствие любые решения поверх реактивщины отзывчивы для пользователя и не висят тысячами лет пока все данные не подгрузятся.

Давайте уже, что нибудь попишем.

Как я уже упомянул есть несколько реактивных решений, но в рамках статьи мы напишем Спринговые классические решения.

Перед тем как начать. Если выше на путь реактивнищы - пути обратно нет. Все слои внутри приложений надо стараться писать именно в этом стиле. И конечно не забывать про неблокируйщий подход. Если следовать блокирующему то потоки будут стопорится именно у такой блокируюей воронки.

Что это значит на практике?

А на практике это значит что старые библиотеки вроде rest template (общение по http), jdbc template (связь с базой) должны быть выпилены и заменены не реактивные и неблокирующие:

  1. Rest Template -> WebClient

  2. JdbcTemplate -> DatabaseClient (R2DBC)

  3. FileSystemResource (чтение файлов) -> ReadableResource

  4. И так далее для соответствующий библиотек.

Пишем классический Фронт Бэк База на Спринге.

Пример ниже не является самым сложным, но скорее показательным. Напишем простую локику:

  1. К нам приходит http запрос

  2. Мы перенаправляем запрос в базу

  3. Как база дает первый ответ мы кидаем данные на фронт

  4. Данные на фронте парсятся по мере появления (а не лишь когда все будут доступны)

Если говорить упрощенно то весь код по сути будет сводится к тому что мы будем прокладывать трубы в виде Flux или Mono объектов.

Стоит помнить что вся реактивная магия Спринга возможно лишь когда при его старте используется WebFlux'овый фреймворк. Старый вариант запуска Спринга с каким нибудь томкатом под капотом не сработает. Поэтому зависимости ниже обязательны:

Spring Reactive упрощенно IT, Программист, Java, Telegram (ссылка), Длиннопост

Начнем с базы, используем

Пробросим Flux используя DatabaseClient:

Spring Reactive упрощенно IT, Программист, Java, Telegram (ссылка), Длиннопост

Теперь полученный Flux выставим на сторону фронта:

Spring Reactive упрощенно IT, Программист, Java, Telegram (ссылка), Длиннопост

Наверно вы заметили что возвращаемый тип не application/json. Да тип x-ndjson. Если использовать стандартный application/json то данные которые будут улетать на фронт будут неполный и конвертировать их в целые объекты будет головной болью. Это недостаток потокового подхода (хотя по сути это 1 http запрос, просто растянутый). x-ndjson формат позволяет кидать на фронт кидать объекты

Читаем на фронте. Код неидеален, скорее служит в качестве простого примера.

Spring Reactive упрощенно IT, Программист, Java, Telegram (ссылка), Длиннопост

Код выше делает следующее:

  1. Делает http запрос

  2. Ожидает ответа

  3. Как только ответ прилетает начинает читать его по частям и писать в конcоль

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

Еще раз про эффективный расход процессорных ресурсов.

Я еще раз хочу упомянуть что реактивные, неблокирующие решение написанные прямыми руками позволяют выжать максимум из предоставленных ресурсов. Особенно это актуально во времена микросервисов. Все чаще на проектах под небольшой микросервис могут выделить не более чем 1/0.5/0.1 CPU и я в общем поддерживаю такой подход.

Виртуальные потоки VS Реактивщина.

Эта тема заслуживает отдельного поста. И он будет следующим если эта статья зайдет. Дайте знать в комментах если интересно.

Спасибо за внимание, больше бесплатных статей и стримов в моей группе про джаву и смежные технологии.

Показать полностью 7
[моё] IT Программист Java Telegram (ссылка) Длиннопост
0
12
mimokrokodilchik
mimokrokodilchik
1 год назад

GraphQL все еще неизвестный зверь в промышленной разработке⁠⁠

В данной статье мы разберем, что такое GraphQL, и построим приложение с использованием Java и Spring.

GraphQL все еще неизвестный зверь в промышленной разработке IT, Программист, Java, Telegram (ссылка), Длиннопост

Атмосферный логотип GraphQL

GraphQL стал опенсорсным в 2015 году, однако за десять лет так и не достиг такой же популярности, как REST-архитектура (на графике ниже видно, что нет явной тенденции к большему росту). Нельзя прямо сравнивать GraphQL с REST, поскольку первый представляет собой язык запросов, а второй – архитектурный стиль. Тем не менее, оба имеют реализации в промышленной разработке.

GraphQL все еще неизвестный зверь в промышленной разработке IT, Программист, Java, Telegram (ссылка), Длиннопост

GraphQL все еще остается аутсайдером.

GraphQL в двух словах это гибкий контракт.

GraphQL создает канал коммуникации, где клиент может указывать серверу, какие именно данные ему нужны. Благодаря такому подходу, имея всего лишь один гибкий канал, можно снизить нагрузку на потребление трафика и упростить процесс разработки.

Spring и GraphQL

Довольно ожидаемо что Spring поглотил стандарное решение GraphQL и, конечно же, добавил несколько новых аннотаций. Spring хлебом не корми - дай новых аннотаций наклепать. Давайте напишем своё первое - апи сотрудники.

Для работы со спрингом нужно добавить зависимости.

Для интеграции добавьте в зависимости org.springframework.boot:spring-boot-starter-graphql а также установите переменную в application.properties: spring.graphql.graphiql.enabled: true

Все начинается с GraphQL схемы.

При проектировке контракта, используемого внутри канала, нам необходимо предварительно задекларировать структуру данных. Наша схема будет выглядеть вот так:

GraphQL все еще неизвестный зверь в промышленной разработке IT, Программист, Java, Telegram (ссылка), Длиннопост

Пример так себе, но для нашего примера сгодится.

Суть апи которое мы сделаем - предоставлять сотрудников. У каждого сотрудника есть ссылка на департамент, который в свою очередь имеет ссылку на локацию и руководителей этого отдела. Основной посыл такой - скорее всего многим потребителям нашего апи понадобятся данные о сотрудниках и их отделах. Но также некоторым из них все же могут пригодится все данные.

Составляем схему.

Делаем схему, которая будет соответствовать нашим классам. Слева я расположил знакомые нам Java классы, а справа схему которая будет сохранена в schema.graphqls файле и затем использована для построения соединения.

GraphQL все еще неизвестный зверь в промышленной разработке IT, Программист, Java, Telegram (ссылка), Длиннопост

Язык graphql (справа) довольно интуитивен

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

Последний шаг - декларация запроса. В нашем случае allEmployees.

Создадим метод который будет возвращать данные - он должен быть помечен аннотацией @QueryMapping. Также зарегистрируем его в schema файле:

GraphQL все еще неизвестный зверь в промышленной разработке IT, Программист, Java, Telegram (ссылка), Длиннопост

Возвращаемый тип и название метода должны совпадать.

На этом все. Мы закончили разработку. Пишем первые запросы.

Довольно просто получилось интегрировать GraphQL, осталось научиться им пользоваться. Для этого мы воспользуемся встроенной веб интерфейсом который поставляется из коробки. После старта приложения откройте: http://localhost:8080/graphiql?path=/graphql

GraphQL все еще неизвестный зверь в промышленной разработке IT, Программист, Java, Telegram (ссылка), Длиннопост

Вот какую красоту мы увидим.

Что это такое? Более детально:

  • Слева у нас есть конструктор который помогает кликами создавать запрос

  • По центру мы готовим сам контракт для запроса - его можно править в ручную

  • Справа результат работы апи для выбранного контракта

В примере выше мы выбрали лишь два поля которые нужно вернуть для каждого сотрудника - имя и айдишник. Давайте добавим туда и департамент с локациями:

GraphQL все еще неизвестный зверь в промышленной разработке IT, Программист, Java, Telegram (ссылка), Длиннопост

Лишь измения в контракте дали нам новый результат. На бэкэнде мы не сделали изменений.

Как можно заметить, добавив необходимые поля, мы изменили контракт. Теперь данные о сотрудниках, департаментах и их локациях возвращаются с бэкенда.

Это не все возможности GraphQL.

Данная статья не включает все возможности GraphQL такие как:

  • Мутации - возможность делать гибкие запросы на изменение данных

  • Подписка - возможность подписываться на изменения

  • Более гибкие возможности работы с GraphQL - например возможность читать данные из контекста GraphQL

  • Генерация документации

  • DataLoaders - возможность борьбы с N+1 проблемой при работе с базой данных

Моё скромное мнение.

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

Надеюсь вам понравилась статья, кому интересно приглашаю в мой телеграм канал про разработку на Java и смежные технологии. Спасибо за внимание.

Показать полностью 7
[моё] IT Программист Java Telegram (ссылка) Длиннопост
0
15
mimokrokodilchik
mimokrokodilchik
1 год назад

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись⁠⁠

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись Java, Telegram (ссылка), IT, Программист, Длиннопост

Анализ работы JVM (Java Virtual Machine)

Среди множества способов и решений для анализа виртуальной машины Java есть одно хорошее решение — Flight Recorder. Благодаря этой утилите работающая Java-машина может записывать все происходящее внутри.

Достоинства Flight Recorder

Если сравнивать Flight Recorder с другими похожими решениями то можно отметить

  • Минимальную нагрузку на само приложение (пишут, что она составляет около 1% производительности).

  • Наличие большого количества метрик и возможность интегрировать свои кастомные метрики.

  • Простоту интеграции и поддержки.

  • Отсутствие необходимости перезагрузки приложения. Утилита работает с "горячей виртуальной машиной"

  • Возможность запускать аналитику на фиксированное количество секунд/минут.

Запуск Flight Recorder.

Предположим, вы уже создали свое приложение и готовы запустить его с помощью JAR. Если вы хотите при старте приложения запустить процесс записи Flight Recorder, то достаточно выполнить следующую команду

java -XX:+FlightRecorder -XX:StartFlightRecording=durati -jar myjar.jar

В данном случае, в течение 10 секунд после старта Flight Recorder будет записывать все происходящее в виртуальной машине.

Используем JCMD для динамического подключения записи.

Как альтернативу можно использовать утилиту входящую в jdk - JCMD которая позволит подключиться уже к рабочей JVM.

Чтобы узнать, какие виртуальные машины работают в данный момент, достаточно просто написать JCMD и получить что-то вроде:

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись Java, Telegram (ссылка), IT, Программист, Длиннопост

Слева находятся номера процессов которые можно использовать для подключения.

Как только мы определили, к какому процессу (42800) нужно подключиться, вводим команду для записи отчета на 30 секунд. Файл с записанной аналитикой будет назван myreport.fjr. Итоговая команда будет следующей:

JCMD 42800 JFR.start durati filename=myreport.jfr

Анализируем отчет

Самый просто способ прочитать myreport.jfr - установить программу JMC (Java Mission Control). Скачать её можно вот тут.

После запуска программы можно выбрать существущий myreport.jfr либо подключиться к рабочей виртуальной машине и создать его внутри программы.

Анализируем File I/O - работу с файловой системой.

На вкладке "OUTLINE" необходимо выбрать "File I/O", и тогда можно получить аналитику работы программы с файловой системой. Я намеренно написал код, который создавал файлы размером 20 МБ. Вот что получилось в итоге:

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись Java, Telegram (ссылка), IT, Программист, Длиннопост

Выглядит довольно точно. Где то 6 файлов было записано каждый по 20 мб.

Socket IO - работа с сетью.

Чтобы просмотреть работу и трафик, необходимо выбрать "Socket I/O". В моем случае, взаимодействия с сетью было крайне мало. Вот результат:

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись Java, Telegram (ссылка), IT, Программист, Длиннопост

Картина совпала - по сети передавались лишь байты данных. Это примерно ничего.

Аналитика памяти - Ключевая вещь для анализа работы виртуальной машины.

Чтобы оценить затраты памяти, необходимо выбрать "Memory" внутри вкладки "Outline":

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись Java, Telegram (ссылка), IT, Программист, Длиннопост

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

Аналитика Сборщикам Мусора.

Тут несколько вариантов. Есть Grabage Collectons, GC Configuration, GC Summary. Давайте рассмотрим первый и последний:

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись Java, Telegram (ссылка), IT, Программист, Длиннопост

Итак, на вкладке видна детализированная аналитика времени работы сборщика мусора. Также можно просмотреть общую статистику:

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись Java, Telegram (ссылка), IT, Программист, Длиннопост

Суммарное время сборщика сборщика мусора составило 56 мс, и при этом было сделано 13 остановок.

Аналитика потоков. Thread Dumps

Также важной частью отчета является информация о состоянии потоков. Благодаря этим данным можно выявить взаимные блокировки и подобные проблемы. Вкладка "Thread Dumps":

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись Java, Telegram (ссылка), IT, Программист, Длиннопост

Анализ событий.

Flight Recorder также позволяет записывать происходящие события внутри JVM (и даже создавать свои!). Затем все эти процессы можно удобно просмотреть в Event Browser:

Записываем состояние виртуальной машины Java с помощью Flight Recorder. Анализируем запись Java, Telegram (ссылка), IT, Программист, Длиннопост

В качестве заключения.

Flight Recorder очень удобная в использовании утилита для аналитики виртуальной машины, которая делает внутренние процессы даже сложных Java программ значительно более читаемыми. Меня лично радует сам факт разивития подобных утилит. Кому интересна Java а также мир разработки приглашаю в мой телеграм канал.

Спасибо за внимание, надеюсь вы узнали что то новое.

Показать полностью 8
[моё] Java Telegram (ссылка) IT Программист Длиннопост
1
16
ZooMMaX
ZooMMaX
1 год назад
Лига программистов

JetBrains plugin - когда на маркетплейсе нет нужного⁠⁠1

Ты садишься и делаешь свой.

JetBrains plugin - когда на маркетплейсе нет нужного Java, Jetbrains, Плагин, Криптовалюта, Cryptocurrency, Видео, YouTube, Длиннопост

По крайней мере мне так было проще.
А началось все с того, что документация для RPC API Bitcoin Core на официальном сайте отображается кривовато.

JetBrains plugin - когда на маркетплейсе нет нужного Java, Jetbrains, Плагин, Криптовалюта, Cryptocurrency, Видео, YouTube, Длиннопост

Тут мы видим псевдо json и описание полей. Длинное описание переходит на новую строку и ломает удобочитаемость и понимание вложений в объектах json... "Ну "штош". Давайте поправим, а заодно запихнем это дело в студию" - подумал я и приступил.

Ожидал, что с ходу ничего не выйдет, но нет. Сложность написания плагина зависит от целей. Для работы плагина прям в редакторе, а уж тем более с языковой разметкой - придется вникнуть в дебри SDK JB)
Мне же вполне хватило Tool Window, которое по факту представляет из себя приложение на Java Swing. Окно - это уже готовый JFrame, который вызывается студией (только в plugin.xml надо указать, какой класс дергать). В остальном можно писать обычное swing приложение. В наличии у SDK есть унаследованные элементы интерфейса с более простым конструктором. Например вместо JLabel можно использовать JBLabel. Для поддержки темной и светлой темы вообще ничего не надо. Делаем все для одной из тем, а остальное студия преобразит сама. Публикация в JB Market тоже проста до безобразия)

В прочем это пост о плагине BitcoinDocs, так что к нему и вернемся.
Чего-то подобного я не нашел.
Что делает плагин. Шастает на сайт https://bitcoincore.org/en/doc/, и парсит его с помощью Jsoup. Вытаскивает все версии для доков. Вытаскивает все API для конкретной версии. Вытаскивает все методы для конкретного API. Дергает доку и парсит ее, исправляя вид и повышая читабельность.
Проще посмотреть видео.

Знаю, знаю. Ничего особенного.
Ничего особенного ни в исходниках под лицензией MIT, ни в самом плагине, доступном в маркете JB (а значит доступна установка прямо из студии) и так же под лицензией MIT.

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

P.S.
Все. Похвастался. Ставим плюс и листаем дальше) Всем спасибо.

Показать полностью 1 1
[моё] Java Jetbrains Плагин Криптовалюта Cryptocurrency Видео YouTube Длиннопост
2
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии