В дополнение к статье про итератор записал видео для YouTube.
Интерфейсы Iterator и Iterable часто используются для работы с коллекциями в Java. Они позволяют эффективно и безопасно работать с коллекциями, обеспечивая контроль над процессом перебора элементов (итерации).
Iterator представляет собой одноимённый шаблон проектирования «Итератор».
Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции.
Интерфейсы Iterator и Iterable часто используются для работы с коллекциями в Java. Они позволяют эффективно и безопасно работать с коллекциями, обеспечивая контроль над процессом перебора элементов (итерации).
Iterator представляет собой одноимённый шаблон проектирования «Итератор».
Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции.
👍5
В повседневной работе никто из нас не компилирует исходники ☕️ Java вручную. За нас это делают такие инструменты как maven, gradle или среда разработки типа 💡 Idea.
Но для понимания процессов, которые происходят при каждом тестовом запуске вашего приложения, имеет смысл хотя бы один попробовать это сделать самостоятельно прямо из консоли.
Поэтому по мотивам 📗 статьи я подготовил 📺 видео, где привожу пример компиляции исходников Java из консоли вручную.
Но для понимания процессов, которые происходят при каждом тестовом запуске вашего приложения, имеет смысл хотя бы один попробовать это сделать самостоятельно прямо из консоли.
Поэтому по мотивам 📗 статьи я подготовил 📺 видео, где привожу пример компиляции исходников Java из консоли вручную.
👍10
Добавил на YouTube новое видео о том, как сохранять большие текстовые файлы на Java наиболее оптимальным образом. Текстовый вариант доступен на сайте.
Давайте сгенерируем строку из случайных символов на Java и затем сохраним её в текстовый файл. Строка должна быть очень большой (более 100 миллионов символов), чтобы мы могли легко заметить разницу во времени, которое требуется на сохранение файла.
Рассмотрим 3 варианта: обычный FileWriter, FileWriter с буферизацией и неблокирующее сохранение файла с помощью пакета java.nio. В конце подведём итоги.
Давайте сгенерируем строку из случайных символов на Java и затем сохраним её в текстовый файл. Строка должна быть очень большой (более 100 миллионов символов), чтобы мы могли легко заметить разницу во времени, которое требуется на сохранение файла.
Рассмотрим 3 варианта: обычный FileWriter, FileWriter с буферизацией и неблокирующее сохранение файла с помощью пакета java.nio. В конце подведём итоги.
👍4🔥1
Новое 📺 видео на YouTube канале!
Давайте научимся читать большой текстовый файл построчно. При этом каждую строку будем как-то обрабатывать. Например, будем искать наибольшую длину строки.
Поскольку размер файла больше 100 МБ, его чтение происходит с небольшой задержкой. Мы рассмотрим три варианта реализации такого чтения и выберем наиболее быстрый из них.
Также данный материал доступен в виде 📗 статьи.
Давайте научимся читать большой текстовый файл построчно. При этом каждую строку будем как-то обрабатывать. Например, будем искать наибольшую длину строки.
Поскольку размер файла больше 100 МБ, его чтение происходит с небольшой задержкой. Мы рассмотрим три варианта реализации такого чтения и выберем наиболее быстрый из них.
Также данный материал доступен в виде 📗 статьи.
👍4
Новое 📺 видео на YouTube-канале!
Во многих редакторах при работе с текстовым документом вы можете видеть, сколько всего строк содержится в этом файле. Строки между собой разделяются символом перевода строки, который в каждой операционной системе (Windows, Unix, Mac) свой.
Давайте разберёмся, как быстро подсчитать количество строк в текстовом файле независимо от той ОС, в котором выполняется наш код. Более того, текстовый файл может быть сколь угодно большим, поэтому мы будем использовать буферизацию потока, чтобы не израсходовать всю доступную оперативную память.
Во многих редакторах при работе с текстовым документом вы можете видеть, сколько всего строк содержится в этом файле. Строки между собой разделяются символом перевода строки, который в каждой операционной системе (Windows, Unix, Mac) свой.
Давайте разберёмся, как быстро подсчитать количество строк в текстовом файле независимо от той ОС, в котором выполняется наш код. Более того, текстовый файл может быть сколь угодно большим, поэтому мы будем использовать буферизацию потока, чтобы не израсходовать всю доступную оперативную память.
👍5
JetBrains анонсирует онлайн-конференцию IntelliJ IDEA Conf 2024, которая пройдёт в онлайн-формате 6 и 7 марта.
Вот некоторые темы, которые будут на ней обсуждаться:
🔹Улучшении производительности IntelliJ IDEA.
🔹Функции и классы стандартной библиотеки Kotlin.
🔹Основы безопасной разработки для защиты приложений.
🔹Изменения, грядущие в Java 22 и последующих версиях.
🔹Создание приложений с использованием ChatGPT API.
🔹Освоение Java-тестирования с использованием JUnit, Mockito и AssertJ в IntelliJ IDEA.
Участие бесплатное, требуется предварительная регистрация.
Вот некоторые темы, которые будут на ней обсуждаться:
🔹Улучшении производительности IntelliJ IDEA.
🔹Функции и классы стандартной библиотеки Kotlin.
🔹Основы безопасной разработки для защиты приложений.
🔹Изменения, грядущие в Java 22 и последующих версиях.
🔹Создание приложений с использованием ChatGPT API.
🔹Освоение Java-тестирования с использованием JUnit, Mockito и AssertJ в IntelliJ IDEA.
Участие бесплатное, требуется предварительная регистрация.
👍3
В продолжение предыдущей темы, канал YABED (мои хорошие знакомые) является информационным партнёром конференции и потому проводит розыгрыш лицензий JetBrains All Products Pack! Для участия в розыгрыше достаточно подписаться на их канал и нажать кнопку "Участвую".
👍3
Forwarded from YABED - Yet Another BackEnd Digest: Java/Kotlin
🚀 Всем привет! Как вы уже знаете, наш канал выступает информационным партнёром конференции IntelliJ IDEA Conf 2024. В программе много годноты – обязательно к просмотру. Регистрируйтесь по ссылке здесь.
🏆 А мы выполняем обещание и специально к конференции проводим розыгрыш ДВУХ кодов активации для полного набора инструментов для разработки JetBrains All Products Pack!
Что нужно сделать, чтобы принимать участие?
✅ быть подписанным на наш канал
✅ нажать кнопку "Участвую"
🎯 Итоги мы подведём 29 февраля с помощью рандомайзера. Всё честно и просто.
Вперёд, за призами и присоединяйтесь к IntelliJ IDEA Conf 2024! Удачи!
#IntelliJIDEAConf
🏆 А мы выполняем обещание и специально к конференции проводим розыгрыш ДВУХ кодов активации для полного набора инструментов для разработки JetBrains All Products Pack!
Что нужно сделать, чтобы принимать участие?
✅ быть подписанным на наш канал
✅ нажать кнопку "Участвую"
🎯 Итоги мы подведём 29 февраля с помощью рандомайзера. Всё честно и просто.
Вперёд, за призами и присоединяйтесь к IntelliJ IDEA Conf 2024! Удачи!
#IntelliJIDEAConf
👍3
На моём YouTube-канале в комментах под видео про итераторы пользователь karakurty попросил меня рассказать также про ConcurrentModificationException в контексте данной темы.
Поэтому в статью я добавил новый раздел о том, как менять ту же коллекцию, по которой производим перебор элементов.
P.S. Мне на самом деле очень приятно, когда аудитория моего канала предлагает различные улучшения и дополнения к тому материалу, который я публикую. В своё время так уже было с видео про поиск простых чисел, когда предложенный зрителем альтернативный алгоритм оказался гораздо более быстрым, чем рассмотренная мною реализация. И это в итоге привело даже к созданию отдельной статьи.
Поэтому в статью я добавил новый раздел о том, как менять ту же коллекцию, по которой производим перебор элементов.
P.S. Мне на самом деле очень приятно, когда аудитория моего канала предлагает различные улучшения и дополнения к тому материалу, который я публикую. В своё время так уже было с видео про поиск простых чисел, когда предложенный зрителем альтернативный алгоритм оказался гораздо более быстрым, чем рассмотренная мною реализация. И это в итоге привело даже к созданию отдельной статьи.
YouTube
Интерфейсы Iterator и Iterable в Java
#devmark #java #collections Интерфейсы Iterator и Iterable часто используются для работы с коллекциями в Java. Они позволяют эффективно и безопасно работать с коллекциями, обеспечивая контроль над процессом перебора элементов (итерации). Iterator представляет…
👍5
Хочу поделиться с вами небольшой статистикой. В прошедший уик-энд количество подписчиков в этой группе перевалило за 100!
Это не может не радовать, т.к. помимо основной аудитории на моём YouTube-канале, чуть меньшей аудитории на сайте, telegram - это третья площадка, которая медленно, но верно также развивается.
Спасибо вам за те комментарии, вопросы и предложения, которые вы пишете - это позволяет создавать более качественный контент!
Это не может не радовать, т.к. помимо основной аудитории на моём YouTube-канале, чуть меньшей аудитории на сайте, telegram - это третья площадка, которая медленно, но верно также развивается.
Спасибо вам за те комментарии, вопросы и предложения, которые вы пишете - это позволяет создавать более качественный контент!
👍11❤1🔥1👏1
Вчера, 19 марта 2024 года, состоялся релиз Java 22! Хоть это и не LTS-версия, но она содержит несколько интересных улучшений.
✅ Из статуса preview в статус постоянной языковой конструкции перешли неименованные переменные, которые обозначаются символом нижнего подчёркивания "_".
✅ Также появилась возможность запускать и компилировать на лету через команду
В статусе preview доступны следующие фичи:
➡️ Перед вызовом конструктора базового класса можно использовать инструкции, которые не ссылаются на конструируемый объект.
➡️ Упрощённая сигнатура метода main() без необходимости создания класса.
➡️ В Stream API добавлен новый интерфейс Gatherer, позволяющий создавать собственные промежуточные (отложенные) операции.
➡️ Строковые шаблоны аналогично Java 21.
Помимо изменений в самом языке и стандартной библиотеке, было произведено несколько улучшений в механизме многопоточности, сборки мусора и управления памятью.
✅ Из статуса preview в статус постоянной языковой конструкции перешли неименованные переменные, которые обозначаются символом нижнего подчёркивания "_".
✅ Также появилась возможность запускать и компилировать на лету через команду
java имя_класса.java не только 1 указанный файл, но и все связанные между собой файлы исходников.В статусе preview доступны следующие фичи:
➡️ Перед вызовом конструктора базового класса можно использовать инструкции, которые не ссылаются на конструируемый объект.
➡️ Упрощённая сигнатура метода main() без необходимости создания класса.
➡️ В Stream API добавлен новый интерфейс Gatherer, позволяющий создавать собственные промежуточные (отложенные) операции.
➡️ Строковые шаблоны аналогично Java 21.
Помимо изменений в самом языке и стандартной библиотеке, было произведено несколько улучшений в механизме многопоточности, сборки мусора и управления памятью.
👍3🔥2
Доработал статью про алгоритм вычисления чисел Фибоначчи в части реализации рекурсивного алгоритма.
Может показаться не очевидным, но вычисление каждого следующего элемента последовательности в рекурсивном варианте занимает в 2 раза больше времени, чем предыдущего. Хотя сам алгоритм основан на сложении двух целых чисел, уже где-то в районе 45-го элемента последовательности возникает заметная задержка в вычислении.
Это связано с тем, что на каждом уровне рекурсии мы заново вычисляем все предыдущие числа. Чтобы этого избежать, можно кешировать уже вычисленные значения, о чём я добавил соответствующий раздел.
P.S. Спасибо Диме Вдовину, который является автором канала @yabed_news, за коммент о вычислительной сложности рекурсивного алгоритма.
Может показаться не очевидным, но вычисление каждого следующего элемента последовательности в рекурсивном варианте занимает в 2 раза больше времени, чем предыдущего. Хотя сам алгоритм основан на сложении двух целых чисел, уже где-то в районе 45-го элемента последовательности возникает заметная задержка в вычислении.
Это связано с тем, что на каждом уровне рекурсии мы заново вычисляем все предыдущие числа. Чтобы этого избежать, можно кешировать уже вычисленные значения, о чём я добавил соответствующий раздел.
P.S. Спасибо Диме Вдовину, который является автором канала @yabed_news, за коммент о вычислительной сложности рекурсивного алгоритма.
👍3
Клиент-серверное взаимодействие через GraphQL довольно удобно, т.к. во-первых предоставляет единую точку входа, а во-вторых, позволяет грузить с сервера только те данные, которые реально нужны на клиенте.
Однако стандартный набор типов данных в GraphQL крайне мал: Int, Float, String, Boolean и ID. Но что делать, если мы хотим использовать такие типы как BigDecimal или LocalDate? В этом нам поможет библиотека graphql-java-extended-scalars.
Более подробно читайте в статье GraphQL в Spring Boot, которую я немного доработал и добавил в неё новый раздел про кастомные типы данных.
Также вы можете посмотреть пример проекта на github.
Однако стандартный набор типов данных в GraphQL крайне мал: Int, Float, String, Boolean и ID. Но что делать, если мы хотим использовать такие типы как BigDecimal или LocalDate? В этом нам поможет библиотека graphql-java-extended-scalars.
Более подробно читайте в статье GraphQL в Spring Boot, которую я немного доработал и добавил в неё новый раздел про кастомные типы данных.
Также вы можете посмотреть пример проекта на github.
👍4
Если вы только начинаете разрабатывать под Linux или MacOS, вам может пригодиться следующая шпаргалка по консольным командам:
Ещё больше команд вы сможете найти на моём сайте. А если чего-то не нашли - пишите в комментах.
pwd полный путь до текущей директории
ls список файлов в текущей директории
ls -la список скрытых файлов
cd или cd ~ перейти в домашний каталог
cd путь перейти в указанный каталог
history история выполненных команд
clear очистить консоль
exit закрыть консоль
Ещё больше команд вы сможете найти на моём сайте. А если чего-то не нашли - пишите в комментах.
👍6
Давайте сегодня поговорим о мутациях. Не волнуйтесь, мой канал не сменил тематику. Пусть картинка не вводит вас в заблуждение 😁
Мутациями в GraphQL называется изменение данных в противовес чтению данных, про которое я уже писал на прошлой неделе. Мутации - это всего лишь удобная graphql-обёртка над привычными нам методами для изменения данных.
Все методы мутаций должны быть определены в graphql-схеме в типе Mutation, а все входные параметры мутаций снабжаются ключевым словом input.
Мутациями в GraphQL называется изменение данных в противовес чтению данных, про которое я уже писал на прошлой неделе. Мутации - это всего лишь удобная graphql-обёртка над привычными нам методами для изменения данных.
Все методы мутаций должны быть определены в graphql-схеме в типе Mutation, а все входные параметры мутаций снабжаются ключевым словом input.
👍5
Почти через месяц, 17 мая, состоится МТС True Tech. Это IT-конференция, в которой примут участие 50 спикеров в 5 треках. Доклады будут идти весь день и закончатся вечеринкой!
Тематика докладов:
- разработка
- ИИ и машинное обучение
- облачные технологии
- наука
Возможно как онлайн-участие, так и оффлайн в Москве: МТС Live Холл (ш. Энтузиастов д. 5, стр. 2).
Регистрация на конференцию бесплатная!
Также можно принять участие в хакатоне. До 25 апреля нужно собрать команду, 26 апреля стартует хакатон. А финальный питчинг и награждение состоится на самой конференции.
Тематика докладов:
- разработка
- ИИ и машинное обучение
- облачные технологии
- наука
Возможно как онлайн-участие, так и оффлайн в Москве: МТС Live Холл (ш. Энтузиастов д. 5, стр. 2).
Регистрация на конференцию бесплатная!
Также можно принять участие в хакатоне. До 25 апреля нужно собрать команду, 26 апреля стартует хакатон. А финальный питчинг и награждение состоится на самой конференции.
👍3👎1
Сегодня, 17 апреля в 15:00 стартует онлайн-часть конференции для Java-разработчиков JPoint 2024! Также 24 и 25 апреля будет проходить офлайн-часть в Москве (Конгресс-центр «ЦМТ», Краснопресненская наб. 12). Доклады будут идти параллельно в 3 трека.
А если вы не успели купить билет, то сегодня онлайн-часть конфы можно посмотреть совершенно бесплатно в рамках Community Day.
А если вы не успели купить билет, то сегодня онлайн-часть конфы можно посмотреть совершенно бесплатно в рамках Community Day.
👍2
Уже довольно давно на моём сайте есть онлайн-утилита, которая позволяет форматировать любые данные в формате XML. Например, если все элементы исходного xml записаны подряд в одну строку, то после форматирования каждый из них будет начинаться с новой строки, а вложенность будет отражена с помощью отступов.
Теперь я добавил аналогичную утилиту для форматирования JSON. Поскольку в современных системах формат JSON используется даже чаще, чем XML, полагаю, что новый инструмент тоже может быть вам полезен.
Также в обеих утилитах можно настроить количество пробелов в отступах, чтобы на выходе вы получили наиболее подходящий формат.
Теперь я добавил аналогичную утилиту для форматирования JSON. Поскольку в современных системах формат JSON используется даже чаще, чем XML, полагаю, что новый инструмент тоже может быть вам полезен.
Также в обеих утилитах можно настроить количество пробелов в отступах, чтобы на выходе вы получили наиболее подходящий формат.
👍8
В продолжение темы про онлайн-утилиты, я расширил существующую утилиту для вычисления SHA-хешей (Secure Hash Algorithm).
Если раньше там был единственный представитель этого семейства - SHA-256, то теперь появилось 8 новых! Добавлена поддержка хешей SHA-384, SHA-512, SHA-512/224 и SHA-512/256 из версии 2. Также добавлены хеши версии 3: SHA3-224, SHA3-256, SHA3-384, SHA3-512.
Хеш-функции предназначены для создания «отпечатков» или «дайджестов» для сообщений произвольной длины. Применяются в различных приложениях или компонентах, связанных с защитой информации.
Если раньше там был единственный представитель этого семейства - SHA-256, то теперь появилось 8 новых! Добавлена поддержка хешей SHA-384, SHA-512, SHA-512/224 и SHA-512/256 из версии 2. Также добавлены хеши версии 3: SHA3-224, SHA3-256, SHA3-384, SHA3-512.
Хеш-функции предназначены для создания «отпечатков» или «дайджестов» для сообщений произвольной длины. Применяются в различных приложениях или компонентах, связанных с защитой информации.
👍5
Доработал утилиту для преобразования числа в текст, которая доступна на сайте. Эта утилита записывает число словами, правильно их склоняя с учётом правил русского языка вместе с единицами измерения.
Если ранее поддерживались только целые числа, то теперь ещё и дробные до двух знаков после запятой. Это позволяет использовать одновременно любые две кратные единицы измерения.
Например, если выбрать "рубли и копейки" и ввести число
А если вас интересует сам алгоритм преобразования числа в текст, вы можете посмотреть его в исходниках моей библиотеки, написанной на Kotlin.
Если ранее поддерживались только целые числа, то теперь ещё и дробные до двух знаков после запятой. Это позволяет использовать одновременно любые две кратные единицы измерения.
Например, если выбрать "рубли и копейки" и ввести число
1234.50, то на выходе получим текст одна тысяча двести тридцать четыре рубля 50 копеек. В настройках можно выбрать также евро, доллары, метры и даже гектары! И ещё можно настроить регистр букв.А если вас интересует сам алгоритм преобразования числа в текст, вы можете посмотреть его в исходниках моей библиотеки, написанной на Kotlin.
👍6❤1
Написал третью статью про GraphQL на Kotlin и Spring. На этот раз научимся обрабатывать исключения и менять стандартный формат ответа при ошибке.
Spring Boot Graphql предоставляет простой способ кастомизации ошибок, а наличие общего базового исключения для всех ошибок бизнес-логики позволяет избежать лишнего дублирования кода и при этом несёт дополнительную информацию.
Однако всегда надо помнить, что добавление деталей ошибки в ответ клиенту может нарушить безопасность приложения.
Spring Boot Graphql предоставляет простой способ кастомизации ошибок, а наличие общего базового исключения для всех ошибок бизнес-логики позволяет избежать лишнего дублирования кода и при этом несёт дополнительную информацию.
Однако всегда надо помнить, что добавление деталей ошибки в ответ клиенту может нарушить безопасность приложения.
👍4