Библиотека Java разработчика
10.8K subscribers
1.14K photos
563 videos
58 files
1.44K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
Настройка производительности Java

Основные методы повышения скорости работы и отзывчивости приложений

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

https://developnsolve.com/java-performance-tuning

👉@BookJava
👍3
☕️ Освоение бэкэнд-разработки с помощью Java Spring Boot: лучшие практики и профессиональные советы

Spring Boot - это широко используемый и очень популярный высокопроизводительный фреймворк корпоративного уровня. Здесь приведены некоторые лучшие практики и несколько советов, которые можно использовать для улучшения приложения Spring Boot и повышения его эффективности.

https://itznihal.medium.com/mastering-backend-development-with-java-spring-boot-best-practices-and-pro-tips-3fc0f501418e

👉@BookJava
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Присоединяйтесь к нашему каналу "Java | Фишки и трюки"! 🚀

🔥 Хотите узнать все секреты программирования на Java? Мы расскажем вам о самых крутых фишках и трюках, которые сделают вас настоящим гуру Java!

📚 У нас вы найдете:
Советы по оптимизации кода
Лучшие практики разработки на Java
Увлекательные задачи для тренировки навыков
И многое другое!

Прокачайте свои навыки программирования и станьте экспертом в мире Java! Присоединяйтесь к нам прямо сейчас!

👉 Java | Фишки и трюки 👈

#Java #Программирование
👍1
Media is too big
VIEW IN TELEGRAM
Запускаем WebSocket сервер на базе Jetty, без Spring

Иногда хочется не целый каравай, а просто хлеб с маслом.
Вот и мне понадобился простой java проект с socket-сервером, без необходимости тащить спринг.

00:00 Старт
00:05 Новый проект
01:04 Jetty dependency
01:54 App
02:14 Server
04:18 WebSocketContainer
04:58 @ WebSocket annotations
07:50 DO NOT COPY A CODE! ))
09:12 server.start()
09:56 @ OnWebSocketError ))
11:21 Done
12:04 Like & Subscribe

GitHub

Источник

👉@BookJava
👍8
Подборка Telegram каналов для программистов

Системное администрирование 📌
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux


https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)

https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика

https://t.me/itmozg Программисты, дизайнеры, новости из мира IT.
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике

https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста

1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus

Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах

GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
https://t.me/game_devv Все о разработке игр

Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT

Чат программистов📌
https://t.me/developers_ru

Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов

БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию

QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://t.me/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров

Английский 📌
https://t.me/UchuEnglish Английский с нуля

Математика 📌
https://t.me/Pomatematike Канал по математике

Excel лайфхак📌
https://t.me/Excel_lifehack
🤮1
☕️ Основные методы экономии памяти для программирования на Java

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

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

https://medium.com/javarevisited/basic-memory-saving-techniques-for-java-programming-6677a7237a69

👉@BookJava
👍1
Пример пузырьковой сортировки

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

Пузырьковая сортировка характеризуется очень низкой эффективностью и имеет временную сложность O(N²), так как в ней используются вложенные циклы. Внешний цикл выполняется N раз, а внутренний также N раз, что в итоге дает N*N, или N², итераций.

👉@BookJava
👍7
Как сканировать и проверять загружаемые изображения в Java

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

https://dzone.com/articles/how-to-scan-and-validate-image-uploads-in-java

👉@BookJava
👍3
Какая разница между абстрактным классом и интерфейсом?

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

Интерфейс:
• не имеет никакого конструктора и не может быть инициализирован;
• только абстрактные методы должны быть добавлены (не считая default methods);
• классы, реализующие интерфейс, должны реализовать все методы (не считая default methods);
• интерфейсы могут содержать только константы.

👉@BookJava
👍51
Инструментация байт-кода Java

В рамках текущей статьи будет рассказано о способах инструментации байт-кода java или, другим языком, внесения изменений в компилированные файлы java .class. Здесь будут приведены примеры работы с фреймворками Javaassist и ASM и базовое описание байт-кода.

https://habr.com/ru/articles/750028/

👉@BookJava
👍2
Что такое synchronized?

Можно применять как модификатор метода, и как самостоятельный оператор с блоком кода. Выполняет код при захваченном мониторе объекта. В виде оператора объект указывается явно. В виде модификатора нестатического метода используется this, статического – .class текущего класса.

Один из основных инструментов обеспечения потокобезопасности. Одновременно выполняется не более одного блока synchronized на одном и том же объекте. Такая блокировка называется intrinsic lock или monitor lock, подробно рассматривается в Java Concurrency in Practice 2.3.1.

Блок synchronized также необходим для использования методов wait, notify, notifyAll.

👉@BookJava
👍2
Расскажите про приведение типов. Что такое понижение и повышение типа?

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

В Java существуют несколько разновидностей приведения:

• Тождественное (identity). Преобразование выражения любого типа к точно такому же типу всегда допустимо и происходит автоматически.
• Расширение (повышение, upcasting) примитивного типа (widening primitive). Означает, что осуществляется переход от менее емкого типа к более ёмкому. Например, от типа byte (длина 1 байт) к типу int (длина 4 байта). Такие преобразование безопасны в том смысле, что новый тип всегда гарантировано вмещает в себя все данные, которые хранились в старом типе и таким образом не происходит потери данных. Этот тип приведения всегда допустим и происходит автоматически.
• Сужение (понижение, downcasting) примитивного типа (narrowing primitive). Означает, что переход осуществляется от более емкого типа к менее емкому. При таком преобразовании есть риск потерять данные. Например, если число типа int было больше 127, то при приведении его к byte значения битов старше восьмого будут потеряны. В Java такое преобразование должно совершаться явным образом, при этом все старшие биты, не умещающиеся в новом типе, просто отбрасываются - никакого округления или других действий для получения более корректного результата не производится.
• Расширение объектного типа (widening reference). Означает неявное восходящее приведение типов или переход от более конкретного типа к менее конкретному, т.е. переход от потомка к предку. Разрешено всегда и происходит автоматически.
• Сужение объектного типа (narrowing reference). Означает нисходящее приведение, то есть приведение от предка к потомку (подтипу). Возможно только если исходная переменная является подтипом приводимого типа. При несоответствии типов в момент выполнения выбрасывается исключение ClassCastException. Требует явного указания типа.
• Преобразование к строке (to String). Любой тип может быть приведен к строке, т.е. к экземпляру класса String.
• Запрещенные преобразования (forbidden). Не все приведения между произвольными типами допустимы. Например, к запрещенным преобразованиям относятся приведения от любого ссылочного типа к примитивному и наоборот (кроме преобразования к строке). Кроме того, невозможно привести друг к другу классы, находящиеся на разных ветвях дерева наследования и т.п.

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

Для проверки возможности приведения нужно воспользоваться оператором instanceof:

Parent parent = new Child();
if (parent instanceof Child) {
Child child = (Child) parent;
}

👉@BookJava
2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Пишем плагин для IntelliJ IDEA. Ускоряем написание тестов на DTO


В Java я недавно. Работаю Java-разработчиком около года при общем 10-летнем стаже в АльфаСтрахование. Этому году предшествовали годы разработки на ABAP и полгода обучения на Javarush.

https://habr.com/ru/company/alfastrah/blog/706314/

👉@BookJava
👍5
Дайте крудошлепа

Я устроился в небольшую компанию, которая сделал круд‑приложуху на 20 таблиц типа «заметки» и активно ее продавала госорганам за невменяемый бабос.

У нас был 3(три) Т‑Р-И статуса юзера. Anonym→Logined→Phone_Confirmed. Молодой талант до меня увидел в этом граф, и написал класс на 200+ строк, реализующий алгоритм Флойда‑Уоршелла, прикрутил стейт‑машину и не найдя интересных задач, c блеском прошел собес в Яндекс и свалил.

Меня наняли сеньором, и я каюсь ничерта не понял, алгоритм прекрасно работал на первой ступени, на второй давал сбои, тоскливо погуглил этот алгоритм, стер все к черту и написал: if(status==Logined & phone!=null){status=Phone_Confirmed}.

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

https://habr.com/ru/articles/733400/

👉@BookJava
🤣11👍31
Pro RESTful APIs with Micronaut: Build Java-Based Microservices with REST, JSON, and XML
Автор: Sanjay Patni (2023)

Откройте для себя технологии RESTful, включая REST, JSON, XML, веб-сервисы JAX-RS, SOAP и другие, для создания современных микросервисов на Java, приложений больших данных и приложений веб-сервисов с использованием фреймворка Micronaut.

Скачать

👉 @java_360
👍3
Media is too big
VIEW IN TELEGRAM
Вся правда о массивах | структуры данных

00:00 Введение
02:10 Массивы
05:10 Поиск в массиве
05:42 Вставка в массив
06:54 Удаление из массива
08:40 Связанные списки
09:44 Вставка в связанный список
11:10 Поиск + вставка в середину связанного списка
11:56 Удаление из связанного списка

источник

👉@BookJava
👍2
new vs valueOf

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

Все оболочки, кроме чисел с плавающей точкой, от Byte до Long, имеют кэш. По умолчанию этот кэш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кэша. Значение из кэша достается в 3.5 раза быстрее, чем при использовании конструктора, плюс идёт экономия памяти.

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

👉@BookJava
👍10
Как создавать отзывчивые веб-приложения с помощью Spring Boot и React: Пошаговое руководство

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

https://reflectoring.io/build-responsive-web-apps-with-springboot-and-react-tutorial/

👉@BookJava
👍5
Чем отличается Lambda от анонимного класса?

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

Разберем основные из них:

1. Синтаксис: Lambda-выражения имеют более краткий и лаконичный синтаксис по сравнению с анонимными классами.

2. Область применения: Lambda-выражения могут быть использованы только для функциональных интерфейсов, в то время как анонимные классы могут быть использованы для любых интерфейсов и абстрактных классов.

3. Ключевое слово this: В анонимных классах ключевое слово this ссылается на сам анонимный класс, в то время как в lambda-выражениях this ссылается на объемлющий.

4. Производительность: Lambda-выражения обычно имеют лучшую производительность по сравнению с анонимными классами, так как они компилируются в приватные методы и используют инструкцию invokedynamic.

👉@BookJava
👍8
Elasticsearch - пишем свой поисковик на Java

00:00 Знакомство с автором
00:37 План вебинара
1:28 Изучение Java разработки на ITVDN
1:47 Задачи полнотекстового поиска
4:05 Поисковой движок Elasticsearch
7:45 Структура приложения
10:20 Установка и запуск Elasticsearch
13:28 Настройка в Postman
15:50 Обзор проекта в Elasticsearch
17:37 Создание индексов, поиск по индексу, поиск по нескольким полям
33:13 Поиск в найденном
40:30 Агрегация результатов поиска, поиск запросов с опечатками
46:38 Ранжирование результатов
51:23 Настройка форматирования результатов
55:52 Пагинация
1:05:30 Асинхронные вызовы, продвинутые возможности
1:17:00 Заключение

https://www.youtube.com/watch?v=sxepRqPnqew

👉@BookJava
👍11😢1
Дженерики в Java и их реализация

В программировании на Java в J2SE 5 для работы с типобезопасными объектами были введены языковые дженерики. Они выявляют ошибки на этапе компиляции, благодаря чему код становится стабильным. До введения дженериков в коллекции можно было хранить объекты любого типа. Теперь, после введения дженериков в язык программирования Java, программисты вынуждены хранить определенные типы объектов.

https://dzone.com/articles/generics-in-java-and-their-implementation

👉@BookJava
👍3