Pull to refresh
0
Денис Зингер @MamontInnokentread⁠-⁠only

Студент

Send message

Как на самом деле работает Java ClassLoader system? (с картинками) — Часть 1/3, Загрузка

Level of difficultyMedium
Reading time7 min
Views17K

Так ли на самом деле работает процесс загрузки классов, как его описывает Wikipedia и Baeldung? ClassNotFoundException — это откуда и чье? Какие виды загрузчиков классов актуальны в Java 20?

Объясняем подпроцесс загрузки, из системы Java ClassLoader, на приятных Excalidraw диаграммах, со ссылками на оригинальные источники.

Читать далее
Total votes 21: ↑21 and ↓0+21
Comments12

О клиенте и сервере в микросервисной архитектуре

Reading time21 min
Views9.1K

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

В качестве прикладного дополнения к рассуждениям мы разработали несколько Proof of Concept, сопроводили их разработку краткими пояснениями и приложили исходный код PoC.

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments2

Микросервисы со Spring Boot. Часть 5. Использование сервера имен Eureka

Reading time4 min
Views20K
В этой заключительной части нашей серии архитектур микросервисов мы научимся включать сервер имен Eureka и позволять микросервисам взаимодействовать с ним.

Это статья входит в серию статей «Микросервисы со Spring Boot»:


В этой серии статей вы познакомитесь с концепцией микросервисов и узнаете, как создавать микросервисы с помощью Spring Boot и Spring Cloud.

Это руководство поможет вам изучить основы микросервисных архитектур. Мы также начнем рассматривать базовую реализацию микросервиса со Spring Boot.
Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments0

Таблетки от скуки — подборка для Java [и не только] разработчиков

Reading time10 min
Views6.6K

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


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



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

Читать дальше →
Total votes 10: ↑7 and ↓3+4
Comments8

Почему мне кажется, что студентов учат ООП неправильно

Reading time5 min
Views232K
Когда я учился в университете мне довольно тяжело было понять ООП (Объектно-ориентированное программирование), сейчас я понимаю, что просто нас учили ООП на не совсем ясных и правильных аналогиях и вообще, кажется, сами преподаватели не совсем понимали, в чем же суть ООП.

image

Вспомните, классические аналогии ООП, вот есть класс Домашние любимцы с методами «голос» и «есть», от него мы наследуем Кошку и Собаку и все хорошо.

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

Мы уже запутались, но Вовочка спрашивает: «а где в этом зоопарке статические методы, интерфейсы, абстрактные классы и чем отличается объект класса от самого класса?». Объяснить, несомненно, можно, но сложно. Понять, еще сложнее.

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

Теперь подумаем как объяснить ООП лучше?
Читать дальше →
Total votes 68: ↑53 and ↓15+38
Comments474

Шпаргалки Java программиста 10: Lombok

Reading time9 min
Views96K
image

Lombok — проект по добавлению дополнительной функциональности в Java c помощью изменения исходного кода перед Java компиляцией.

По сути, проект Lombok позволяет избавиться от многословности Java в большинстве случаев и перестать писать огромные простыни кода из гетеров, сеттеров, equals, hashcode и toString (да их обычно генерит IDE, но читать и менять все равно приходится программисту), в результате Java становиться почти такой же краткой как Kotlin, Scala или C#.

Что особенно радует, Lombok очень прост и легок в добавлении к вашему проекту. Если вам, как и мне, нравится принцип KISS, то советую посмотреть на Lombok.

Так же рекомендую, посмотреть на другие статьи цикла, например последную шпаргалку по Java SE8
Интересно?
Total votes 21: ↑18 and ↓3+15
Comments38

Шпаргалки Java программиста 9: Java SE — Шпаргалка для собеседований и повторений

Reading time32 min
Views135K
Данная статья в первую очередь предназначена для подготовки к собеседованиям на позицию Java разработчика (на самом деле, это шпаргалка, которую я писал для себя в течении многих лет, и повторяю при каждом новом поиске работы).

Предполагается. что вы знакомы с многими функциями из Java SE, поэтому в основном информация дается кратко. Конечно, можно использовать эту статью и просто для обучения основам Java SE платформы (но в этом случае, после чтения статьи вам скорее всего придется обратиться к другим источникам).

image

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

Внимание: я не буду касаться вопросов по самому языку Java (вроде для чего нужно слово final или чем overriding отличается от overloading), это потребует отдельной статьи, это вопросы именно по Java SE (6-9) платформе.
Читать дальше →
Total votes 30: ↑28 and ↓2+26
Comments10

Шпаргалка Java программиста 2: Триста пятьдесят самых популярных не мобильных Java opensource проектов на github

Reading time39 min
Views167K
Что это и зачем оно надо: Как известно, главное преимущество Java мира в том в нем существует огромное количество open-source проектов на на все случаи жизни, однако найти нужный на github'e не так просто, так как описание проекта часто мало информативно, зачастую сложно даже понять этот проект для Android'a или нет. В этой статье я автоматически и полуавтоматически собрал Java проекты, убрал старые и проекты только для Android'a, выбрал 350 набравших больше всего звезд, разделил по категориям и перевел описания.

Если вы хотите убедиться что базы данных пишут не только на C, найти проекты для работы с большими данными или нейронными сетями, пишите свой язык программирования для JVM и хотите посмотреть как это уже сделано или же просто хотите узнать какие новые возможности можно найти в Java мире open-source то это статья вам, думаю, может пригодится.

В чем смысл серии статей 'Шпаргалки Java программиста'
За время работы Java программистом я заметил, что как правило программисты постоянно и планомерно используют от силы 10-20% от возможностей той или иной технологии, при этом остальные возможности быстро забываются и при появлении новых требований, переходе на новую работу или подготовке к техническому интервью приходится перечитывать все документации и спецификации с нуля. Зато наличие краткого конспекта особенностей тех или иных технологий (шпаргалок) позволяет быстро освежить в памяти особенности той или иной технологии.


Другие статьи серии: часть 1. JPA и Hibernate в вопросах и ответах

Update: Внимание, актуальная версия со много большим количеством ссылок, находиться теперь в моем github'e проекте useful-java-links, по этой ссылке.


Читать дальше →
Total votes 51: ↑43 and ↓8+35
Comments49

Как оптимизировал работу с MongoDB с помощью устаревшего api или о чем молчит её спецификация…

Reading time4 min
Views19K
image

Однажды столкнулся с задачей: mongoDb использовался как кэш/буфер между backend на Java и frontend на node.js. Все было хорошо, пока не появилось бизнес требование перебрасывать большие объемы за короткое время через mongoDb (до 200 тыс. записей не более чем за пару минут). Для чего не так важно, важна что задача такая появилась. И вот тут уж пришлось разбираться во внутренностях монги…

Начинаем разбираться по шагам...
Total votes 41: ↑30 and ↓11+19
Comments14

GSON. Добавим ему немного строгости и решаем проблему переполнения памяти при обработки больших JSON файлов

Reading time8 min
Views13K
Вероятно многие сталкивались с библиотекой GSON от Google, которая легко превращает JSON файлы в Java объекты и обратно.

Для тех, кто с ней не сталкивался, я подготовил краткое описание под спойлером. А так же описал решения на GSON двух проблем, с которыми реально сталкивался в своей работе (решения не обязательно оптимальные или лучшие, но, возможно, кому-то они могут пригодится):

1) Проверки что мы не потеряли ни одного поля из JSON'a файла, а также проверки того что все обязательные поля в Java классе были заполнены (делаем GSON более строгим);
2) Ручной парсинг с помощью GSON, когда приходится обрабатывать очень большой JSON файл, чтобы избежать ошибки out of memory.
Читать дальше →
Total votes 6: ↑5 and ↓1+4
Comments2

Spring Boot приложение с использованием Kafka Streams

Reading time6 min
Views13K
Привет, Хабр! В этой статье мы рассмотрим, как в МегаФоне производят потоковую обработку данных, и разработаем простое Spring Boot приложение с использованием Kafka Streams.

Читать дальше →
Total votes 3: ↑3 and ↓0+3
Comments5

Apache Kafka + Spring Boot: Hello, microservices

Reading time12 min
Views125K
Привет, Хабр! В этом посте мы напишем приложение на Spring Boot 2 с использованием Apache Kafka под Linux, от установки JRE до работающего микросервисного приложения.

Коллеги из отдела фронтэнд-разработки, увидевшие статью, сетуют на то, что я не объясняю, что такое Apache Kafka и Spring Boot. Я полагаю, что всякий, кому понадобится собрать готовый проект с использованием вышеперечисленных технологий, знают, что это и зачем они им нужны. Если для читателя вопрос не праздный, вот отличные статьи на Хабре, что такое Apache Kafka и Spring Boot.

Мы же обойдёмся без пространных объяснений, что такое Kafka, Spring Boot и Linux, а вместо этого запустим Kafka-сервер с нуля на Linux-машине, напишем два микросервиса и сделаем так, чтобы одно из них посылало сообщения на другое — в общем, настроим полноценную микросервисную архитектуру.



Пост будет состоять из двух разделов. В первом мы настроим и запустим Apache Kafka на Linux-машине, во втором — напишем два микросервиса на Java.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments3

Определяем подходящий размер для кластера Kafka в Kubernetes

Reading time12 min
Views14K
Прим. перев.: В этой статье компания Banzai Cloud делится примером использования её специальных утилит для облегчения эксплуатации Kafka в рамках Kubernetes. Приводимые инструкции иллюстрируют, как можно определить оптимальный размер инфраструктуры и настроить саму Kafka для достижения требуемой пропускной способности.



Apache Kafka — распределённая стриминговая платформа для создания надёжных, масштабируемых и высокопроизводительных потоковых систем реального времени. Её впечатляющие возможности можно расширить с помощью Kubernetes. Для этого мы разработали Open Source-оператор Kafka и инструмент под названием Supertubes. Они позволяют запускать Kafka в Kubernetes и использовать её различные функции, такие как тонкая настройка конфигурации брокера, масштабирование на основе метрик с ребалансировкой, rack awareness (осведомлённость об аппаратных ресурсах), «мягкое» (graceful) выкатывание обновлений и т.д.
Читать дальше →
Total votes 39: ↑39 and ↓0+39
Comments3

Наследование в Hibernate: выбор стратегии

Reading time22 min
Views96K
Наследование является одним из основных принципов ООП. В то же время, значительное количество корпоративных приложений имеют в своей основе реляционные базы данных

Главное противоречие между объектно-ориентированной и реляционной моделями заключается в том, объектная модель поддерживает два вида отношений («is a» — “является”, и «has a» — “имеет”), а модели, основанные на SQL, поддерживают только отношения «has a».

Иными словами, SQL не понимает наследование типов и не поддерживает его.

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

Всего таких стратегий 4:

1) Использовать одну таблицу для каждого класса и полиморфное поведение по умолчанию.

2) Одна таблица для каждого конкретного класса, с полным исключением полиморфизма и отношений наследования из схемы SQL (для полиморфного поведения во время выполнения будут использоваться UNION-запросы)

3) Единая таблица для всей иерархии классов. Возможна только за счет денормализации схемы SQL. Определять суперкласс и подклассы будет возможно посредством различия строк.

4) Одна таблица для каждого подкласса, где отношение “is a” представлено в виде «has a», т.е. – связь по внешнему ключу с использованием JOIN.

Можно выделить 3 главных фактора, на которые повлияет выбранная вами стратегия:

1) Производительность (мы используем “hibernate_show_sql”, чтобы увидеть и оценить все выполняемые к БД запросы)

2) Нормализация схемы и гарантия целостности данных (не каждая стратегия гарантирует выполнение ограничения NOT NULL)

3) Возможность эволюции вашей схемы

Под катом каждая из этих стратегий будет рассмотрена подробно, с указанием преимуществ и недостатков, а также будут даны рекомендации по выбору стратегии в конкретных случаях.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments12

Шпаргалка Java программиста 1: JPA и Hibernate в вопросах и ответах

Reading time36 min
Views569K
image

Знаете ли вы JPA? А Hibernate? А если проверить?

В чем смысл серии статей 'Шпаргалки Java программиста'
За время работы Java программистом я заметил, что как правило программисты постоянно и планомерно используют от силы 10-20% от возможностей той или иной технологии, при этом остальные возможности быстро забываются и при появлении новых требований, переходе на новую работу или подготовке к техническому интервью приходится перечитывать все документации и спецификации с нуля. Зато наличие краткого конспекта особенностей тех или иных технологий (шпаргалок) позволяет быстро освежить в памяти особенности той или иной технологии.




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

Поехали...
Total votes 37: ↑32 and ↓5+27
Comments16

Сколько нужно рома, чтобы получить новую кольцевую подпись?

Reading time14 min
Views3.8K

Цифровая подпись является “виртуальной скрепой” практически любого блокчейн-проекта. В подавляющем большинстве проектов используется подпись, практически не отличающаяся от подписи, используемой в сети Bitcoin(а именно ECDSA на кривой secp256k1). Однако, создание цифровой подписи для проектов, в которых “приватность” пользователей играет существенную роль, часто превращается в сложный акробатический номер, базирующийся на передовых достижениях в области дискретной математики и криптографии. 

Читать про новую кольцевую подпись
Total votes 15: ↑15 and ↓0+15
Comments4

Оценка событий JDK Flight Recorder с помощью JfrUnit

Reading time5 min
Views1.3K

Гуннар Морлинг, разработчик программного обеспечения с открытым исходным кодом в Red Hat, представил JfrUnit, новую утилиту тестирования, которую можно использовать для обнаружения снижения производительности с JUnit или Spock Framework. Интерпретация результатов тестирования производительности, таких как время отклика, может быть затруднена, поскольку могут быть регрессии, вызванные другими факторами, такими как другие процессы или сеть, а не самим приложением. JfrUnit может использоваться для тестирования производительности приложения путем измерения распределения памяти, операций ввода-вывода, запросов к базе данных или других элементов, зависящих от приложения.

JDK Flight Recorder (JFR) собирает события из запущенного приложения, которые могут использоваться для диагностики или профилирования приложения. Эти события могут быть практически любыми, от выделения памяти до сборки мусора. 

Инструмент можно использовать непосредственно из командной строки, но он часто используется вместе с JDK Mission Control, предоставляющим графический интерфейс и различные плагины, которые можно использовать вместе с JFR. JfrUnit позволяет создавать утверждения, проверяющие события JFR из приложения.

Читать далее
Total votes 1: ↑1 and ↓0+1
Comments0

Ускорение Maven сборки в Docker

Reading time5 min
Views8K

Ранее я описал различные методы ускорения ваших Maven сборок. 

Сегодня я хотел бы расширить их область применения и сделать то же самое для сборок Maven внутри Docker.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments3

Hazelcast + Kibana: лучшие друзья для исследования и визуализации данных

Reading time28 min
Views2.1K

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

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

Читать далее
Rating0
Comments1

8 советов по отладке для пользователей IntelliJ IDEA, о существовании которых вы возможно не знали

Reading time5 min
Views15K

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

Но давайте будем честными. Обычно мы используем только опцию точки останова. При большом желании мы можем использовать условную точку останова.

Но знаете что, отладчик IntelliJ IDEA имеет множество мощных и передовых функций, которые полезны для более эффективной и простой отладки. 

Чтобы помочь вам, мы составили список советов и приемов от наших разработчиков в Lightrun. Мы надеемся, что эти советы помогут вам быстрее находить и устранять ошибки.

Читать далее
Total votes 7: ↑5 and ↓2+3
Comments6

Information

Rating
Does not participate
Location
Казань, Татарстан, Россия
Date of birth
Registered
Activity