bookjava | Unsorted

Telegram-канал bookjava - Библиотека Java разработчика

10986

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Subscribe to a channel

Библиотека Java разработчика

Разбираемся в «базовых» алгоритмах для проекта

Меня зовут Александр Певненко, я Java developer в СберТехе. Вместе с командой развиваю Platform V DataSpace — BaaS-продукт, обеспечивающий базовые сервисы для работы с данными.

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

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

Поэтому здесь я приведу несколько «базовых» алгоритмов, знание которых помогает мне работать с прицелом на эффективность кода, и дополню примерами на Python и Java.

https://habr.com/ru/companies/sberbank/articles/756894/

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Java и современный процессор, Часть 1: Память и иерархия кэша

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

Давайте представим, что у нас есть массив, содержащий 67 000 целочисленных элементов. Над этим массивом выполняются два цикла, как показано в Листинге 1. Оба эти цикла просто умножают элементы массива на три. Однако если первый цикл изменяет каждый элемент, то второй цикл изменяет только каждый 16-й элемент. Насколько быстрее будет работать второй цикл по сравнению с первым? Попробуйте угадать: в 16 раз быстрее?

Листинг 1. Какой цикл отработает быстрее?

private static final int ARRAY_SIZE = 64 * 1024 * 1024;
public int[] array = new int[ARRAY_SIZE];
for (int i = 0, n = array.length; i < n; i++) {
array[i] *= 3;
}
for (int i = 0, n = array.length; i < n; i+=16) {
array[i] *= 3;
}

Rus https://habr.com/ru/companies/otus/articles/756450/

Eng https://blogs.oracle.com/javamagazine/post/java-and-the-modern-cpu-part-1-memory-and-the-cache-hierarchy

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Могут ли потоки заменить циклы в Java?

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

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

https://betterprogramming.pub/can-streams-replace-loops-in-java-f56d4461743a

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Привет! На связи организатор IT-конференций по разным направлениям разработки Podlodka Crew

♨️ Приглашаем посетить третий сезон Podlodka Java Crew. Окунёмся в масштабную и важную для каждого Java-разработчика тему «Работа с базой данных» и рассмотрим её со всех возможных сторон. Ведь какой бэкенд без SQL?

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

🔸 Поговорим про паттерны обработки данных - стриминг, батчи, cdc;
🔸 Узнаем, как не наступить на грабли сочетая Debezium с Postgres;
🔸 Разберёмся в тонкостях CRUD-сервисов: Spring, Jooq, PostgreSQL, Liquibase, Testcontainers
🔸 Сравним использование NoSQL и SQL баз данных на конкретных примерах.

🤓 А ещё в программе — традиционный бар на тему «Интеграция через базу — не антипаттерн» — обсудим и поделимся опытом.

🤑 Для ранних пташек — низкие цены! Посмотреть программу и купить билет со скидкой можно на сайте: https://podlodka.io/javacrew

Читать полностью…

Библиотека Java разработчика

Опишите синтаксис javadoc-комментария

Javadoc-комментарии к классам и их членам заключаются между /** и */. С точки зрения синтаксиса Java это обычные многострочные комментарии, но вторая * позволяет различным инструментам воспринимать их как документацию API. Изначально для этого использовалась стандартная утилита javadoc, которая генерировала HTML-документацию, сейчас джавадок активно используется прямо в IDE.

До Java 1.4 каждая строка комментария обязана была начинаться со *. Сейчас это требование необязательное, но следовать ему всё ещё принято.

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

В javadoc разрешено использовать HTML-теги. Фрагменты кода рекомендуется обрамлять тегом <code>, для списка с буллетами применяется <ul>, параграфы отделяются <p>. В документации библиотеки Reactor активно используются <img> с диаграммами.
Комментарий состоит из двух частей: описание и блок тегов. Первый блок содержит всю информацию в свободной форме. Во втором находятся теги. Каждый тег начинается с новой строки, через пробел за ним следует значение.

Один тег можно использовать в блоке описания – @link. Он не обязан быть на новой строке, обрамляется фигурными скобками, и при рендеринге превращается в <a> со ссылкой на другую страницу документации.

Среди всех тегов обязательными считаются только @param для каждого параметра метода, и @return для не-void методов. Они применимы только для методов. А теги @author и @version наоборот, используются только в документации классов. Остальные блочные теги можно использовать везде:

@deprecated
@exception (то же что @throws)
@see
@since
@serial (то же что @serialField или @serialData)

Теги @author, @param, @throws и @see могут входить в один комментарий в нескольких экземплярах.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Как работает инъекция прототипа в синглтон?

Допустим ситуацию, когда в singleton-компонент внедряется зависимость со скоупом prototype – когда будет создан её объект?

Если просто добавить к определению бина аннотацию @Scope(SCOPE_PROTOTYPE), и использовать этот бин в синглтоне через аннотацию @Autowired – будет создан только один объект. Потому что синглтон создается только однажды, и обращение к прототипу случится тоже однажды при его создании (при внедрении зависимости).

Примитивный способ получать новый объект при каждом обращении – отказаться от @Autowired, и доставать его из контекста вручную. Для этого нужно вызывать context.getBean(MyPrototype.class).

Воспользоваться автоматическим внедрением зависимостей можно через внедрение метода (паттерн «Команда»). Автовайрится не сам объект, а производящий его метод.

Более красивый декларативный способ – правильно настроить определение бина. В аннотации @Scope кроме самого scopeName доступен второй параметр – proxyMode. По умолчанию его значение NO – прокси не создается. Но если указать INTERFACES или TARGET_CLASS, то под @Autowired будет внедряться не сам объект, а сгенерированный фреймворком прокси. И когда проксируемый бин имеет скоуп prototype, то объект внутри прокси будет пересоздаваться при каждом обращении.

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

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Что такое JDBC-драйвер? Какие бывают типы?

JDBC – Java DataBase Connectivity – соединение с базами данных на Java. Это стандарт взаимодействия с БД. Его интерфейс поставляется в стандартной JDK в виде пакета java.sql. Какой бы библиотекой для работы с базой данных вы ни пользовались, в ее основе почти всегда лежит низкоуровневый JDBC.

JDBC-драйвер – реализация JDBC для определенной базы данных. В приложении может быть зарегистрировано несколько разных драйверов. При соединении к базе, нужный выбирается исходя из URL соединения. Драйверы делятся на 4 типа:

Тип 1 – JDBC-ODBC мост. Делегирует работу с базой установленному в системе ODBC-драйверу. Платформозависимый. Не поддерживается с Java 8.

Тип 2 – Native API. Делегирует работу с базой библиотеке, установленной в системе. Платформозависимый. Библиотеки в отличие от ODBC специфичны для конкретной базы, поэтому такой драйвер обычно работает быстрее.

Тип 3 – драйвер сетевого протокола. Работает с промежуточным слоем (JavaEE сервером приложений), который транслирует запросы в сетевой протокол, с которым работает конкретная БД. Такой драйвер полностью реализован на Java.

Тип 4 – драйвер протокола БД/тонкий драйвер. Полная реализация протокола взаимодействия с базой данных. Отличается от типа 3 тем, что здесь логика протокола находится не на внешнем промежуточном слое, а прямо в самом драйвере.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

📌 Java Collections

👉@BookJava

Читать полностью…

Библиотека Java разработчика

SOLID -- Это Просто! Принципы ООП (Объектно Ориентированного Программирования)

https://habr.com/ru/companies/productivity_inside/articles/505430/

источник

👉@BookJava

Читать полностью…

Библиотека Java разработчика

🚀 Как решать проблемы масштабирования приложений?

⚡️ Обсудим на бесплатном открытом уроке «Проблема вертикального масштабирования и синхронизация», который пройдёт в рамках курса «Архитектура и шаблоны проектирования» от OTUS.

На эфире мы сосредоточимся на следующих аспектах:
- Предпосылки возникновения проблемы масштабирования
- Проблемы многопоточности, нежелательные состояния и синхронизация
- Обзор модели вычислений, обходящей ограничения «традиционной», и вариантов её реализации
- Обзор подходов к архитектуре приложений, преобладавших в разное время, их особенности, плюсы и недостатки

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

Встречаемся 10 октября в 20:00 мск.

👉 Регистрируйтесь бесплатно прямо сейчас и ставьте событие в календарь

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Библиотека Java разработчика

Разница между загрузкой и инициализацией классов в Java на любопытном примере

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

Поводом для написания статьи стал вопрос на StackOverflow. Откройте, но не торопитесь читать ответ ;)

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

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Эфир на день рождения аяза Аяза. Участие бесплатно!

Что будет на эфире:

- Много эмоций, призов, бонусов и хорошего настроения
- Разберемся, какие ниши прибыльны в 2023 году и стрельнут в 2024
- Расскажу все фишки бизнеса, которые сработали в 2023 году
- Пошаговый проверенный план по выходу на первые 100 т.р. в своем бизнесе
- Как правильно выбрать нишу и стартануть бизнес с 0
- Как найти стартовый капитал или начать без него
- Как начать зарабатывать на своих знаниях

Интересно? Регистрируйся по ссылке ниже. Участие бесплатно!


Зарегистрироваться

#реклама
likecentre.ru

О рекламодателе

Читать полностью…

Библиотека Java разработчика

Если equals() переопределен, есть ли какие-либо другие методы, которые следует переопределить?

Равные объекты должны возвращать одинаковые хэш коды. При переопределении equals() нужно обязательно переопределять и метод hashCode().

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Learn Java Basics

- Introduction | Java Tutorial for Beginners, Learn to Code
- Hello World | Learn to code, Java Course, Java Tutorial
- Variables, Fields and Methods |Java Course,Java Tutorial
- Arguments, Conditional statements & Arrays | Java Course
- Loops | Learn to code, Java Course, Java Tutorial
- Create a WORDLE Game | Learn to code, Java Course
- IO & Exceptions in WORDLE | Learn to code, Java Course
- Saving and Loading State | Learn to code, Java Course
- Maven, Objects, Encapsulation & Records | Learn to code
- Parsing and Saving JSON with Moshi | Learn to code

источник

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Курс «DevOps для эксплуатации и разработки» от Яндекса

За 6 месяцев обучения освоите принципы DevOps и автоматизацию процесса разработки.

Зарегистрироваться

#реклама 16+
practicum.yandex.ru

О рекламодателе

Читать полностью…

Библиотека Java разработчика

Следующая локация IT Talk by Sber для Java и QA-специалистов — Омск! 💻

Митап состоится уже 26 октября. На нём топовые спикеры расскажут о том, как реализуются задачи по разработке и тестировании в Сбере:

✔️ Егор Курилов раскроет все секреты нагрузочного тестирования Java-приложений.

✔️ Евгений Ляшенко объяснит, что же такое — релизный поезд веб-приложений.

✔️ А Дмитрий Лысаченко и Максим Нелин подискутируют о развитии больших языковых моделей от GPT до GigaChat.
Помимо интересных докладов, всех участников будет ждать игра «Интуиция», фуршет и очень много классного общения.

Встречаемся 26 октября в ресторации «Рига-Москва» по адресу: ул. Маяковского, 74. Регистрируйтесь по ссылке! 💚

Читать полностью…

Библиотека Java разработчика

Лишает ли var строгой типизации?

Ключевое слово var появилось в Java 10. Указание var вместо типа локальной переменной применяет к ней механизм вывода типов (type inference). Тип будет вычислен на этапе компиляции из того, чем переменная инициализируется.

Отсюда несколько выводов. Во-первых, нельзя использовать var в полях класса, параметрах метода, и где-либо еще кроме локальных переменных. Во-вторых, обязана быть инициализация с понятным типом – варианты var x; или var x = null; не скомпилируются.

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

Ответ: нет, выводимый тип – строгий. Более того, типизация остается статической.

Главное упущение – в инициализации разрешено использовать diamond operator. В обычных обстоятельствах в нём выведется правильный generic-тип, но в случае var информации недостаточно, и типом-параметром будет Object.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Когда стоит выбрать char[] вместо String?

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

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

Вторая, менее очевидная причина – безопасность. Строки в Java иммутабельны. Это значит, что когда вы сохраняете пароль в объекте типа String, физически уничтожить его из памяти может только сборщик мусора.

Существует способ алгоритмической атаки на систему, когда хакер своими действиями вызывает переполнение памяти, и конфиденциальная информация попадает в heap dump.

Если пароль хранится в массиве, программист может самостоятельно «занулить» значение после использования.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Прожарка java.lang.String

Давайте абьюзить баг в java.lang.String, который позволит делать очень странные строки. Мы сделаем "Hello World", который не начинается с "Hello" и покажем, что не все пустые строки равны между собой. Научимся прожаривать строки в чужих классах.

Rus https://habr.com/ru/companies/bar/articles/747528/

Eng https://wouter.coekaerts.be/2023/breaking-string

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Под каким типом хранить период времени?

В стандартной библиотеке современных версий Java для этих целей есть два класса:

Period – календарный период. Количество дней, месяцев и лет. Одним днем здесь считается день в терминах ZonedDateTime.

Duration – длительность времени. Количество наносекунд, секунд, минут, часов, и тоже дней. Здесь один день – ровно 24 часа.

Оба класса реализуют общий интерфейс TemporalAmount – период времени вообще. Оба иммутабельны, и как следствие, потокобезопасны. Любая модифицирующая операция вроде plusX() возвращает новый экземпляр с измененным значением.

Экземпляры обоих классов могут быть созданы из значений отдельных компонентов, из двух моментов времени методом between, или из строки. Строковое представление Duration: "P2DT3H4M", Period: "P1Y2M3D".

До Java 8 основным способом хранения периода были числовые примитивы. В этом подходе есть много недостатков, среди которых в первую очередь неограниченность значений и ненаглядность. Чтобы в Java 8+ получить период числом, используется метод between() нужного элемента енама ChronoUnit.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

👋Бэкендер, пора расти!

👉Узнайте как на бесплатном вебинаре онлайн-курса «Clojure Developer» — «Особенности Clojure: сфера разработки, основные фишки языка»: регистрация

На бесплатном вебинаре мы:
— рассмотрим, с какими задачами сталкиваются разработчики Clojure и какие основные особенности отличают его от других бэкендовых языков.
— обсудим преимущества, которые предлагает Clojure по сравнению с другими языками.
— изучим, какие возможности и перспективы он предлагает для разработчиков.

Экспертизой поделится руководитель программы и практик Сергей Ткаченко (Clojure Software developer / Team Lead).

🔥После вебинара вы сможете продолжить обучение на курсе по спеццене, в том числе, в рассрочку.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Библиотека Java разработчика

Java Collections Framework. Вопросы для собеседования

https://github.com/enhorse/java-interview/blob/master/jcf.md

👉@BookJava

Читать полностью…

Библиотека Java разработчика

150 вопросов и ответов на собеседовании по Java

В следующих разделах мы рассмотрим вопросы Java-собеседования, касающиеся объектно-ориентированного программирования и его особенностей, общие вопросы по Java и ее функциональности, коллекций в Java, сборщиков мусора, обработки исключений, Java-апплетов, Swing, JDBC, Remote Method Invocation (RMI), сервлетов и JSP.

https://www.javacodegeeks.com/java-interview-questions.html

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Checkstyle

Это средство разработки, помогающее программистам писать Java-код, соответствующий стандартам программирования. По умолчанию он поддерживает Google Java Style Guide и Sun Code Conventions, но является очень настраиваемым. Он может быть вызван с помощью задачи ANT и программы командной строки

https://github.com/checkstyle/checkstyle

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Java. Многопоточность. Как устроить Deadlock

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

источник

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Learn Java Basics

- Hello Spring Boot | Learn to code,java tutorial,rest API
- Spring Boot Wordle REST Service | Learn to code
- Spring MVC, Web UI with Thymeleaf | Learn to code
- Refactoring, IoC, DRY, Layered Arch & Spring Stereotypes
- Wordle Web App with Thymeleaf & Spring MVC | Spring Boot
- Understanding Spring Session Scope | Spring Boot
- Spring Boot JavaScript Introduction with Thymeleaf
- Spring Boot Single Page Application (SPA) | Learn Java
- Databases and Unit Tests | Learn Java, Java course
- User Id Cookie and Database | Java Spring Tutorial

источник

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Все, что плохо в Java, хорошо для вас

https://dev.to/codenameone/everything-bad-in-java-is-good-for-you-3fhd

👉@BookJava

Читать полностью…

Библиотека Java разработчика

🤖 Пройди тест по Java

👩‍💻 Проверь свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Java Developer. Professional" от OTUS по специальной цене.

За 6 месяцев обучения:
- Научишься создавать современные java-приложения
- Поймешь основы функционирования JVM (сборка мусора, byteCode)
- Освоишь приемы применения многопоточности
- Напишите выпускной проект на любую тему под наставничеством преподавателя

🎫Курс можно приобрести в рассрочку

👉 ПРОЙТИ ТЕСТ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Библиотека Java разработчика

Адаптер (Adapter) — объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс.
Мост (Bridge) — структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.
Компоновщик (Composite) — объект, который объединяет в себе объекты, подобные ему самому.
Декоратор (Decorator) — класс, расширяющий функциональность другого класса без использования наследования.
Фасад (Facade) — объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое.
Приспособленец (Flyweight) — это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым.
Заместитель (Proxy) — объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него.

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Что такое абстрактные классы и методы в Java

Абстрагирование – это процесс, в ходе которого от пользователя скрываются многие детали реализации, а предоставляются только те детали, которые действительно важны. Так удаётся сфокусироваться на том, что делает объект, а не как он это делает.

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

Если вы новичок в Java или хотите освежить знания о том, чем отличаются абстрактные классы или интерфейсы, то можете почитать руководство и на эту тему: Difference Between Interface and Abstract class in Java.

Rus https://habr.com/ru/companies/piter/articles/738508/

Eng https://www.appsdeveloperblog.com/17-abstract-classes-and-methods-in-java/

👉@BookJava

Читать полностью…
Subscribe to a channel