bookjava | Unsorted

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

10986

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

Subscribe to a channel

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

❗️Отус приглашает 31 июля в 19:00 мск на бесплатный вебинар «Разработка монолитного приложения со Spring» онлайн-курса «Kotlin Backend Developer. Professional»!

— На занятии мы познакомимся со фреймворком Spring и его принципом работы.
— Рассмотрим особенности разработки Spring приложения на языке Kotlin.
— Разработаем монолитное приложение и напишем пару интеграционных тестов.
— Упакуем наше приложение в Docker, как готовое решение.

В результате вебинара вы:
— узнаем преимущества и недостатки монолитной архитектуры, фреймворка Spring, особенностей разработки со Spring в Kotlin;
— попрактикуемся в разработке работающего монолитного приложения и разместим его в Docker-контейнере.

➡️ Регистрация на вебинар: https://otus.pw/SGyv/

Нативная интеграция. Информация о продукте www.otus.ru

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

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

Создание REST API с использованием Spring WebFlux и Security

00:00:00 Введение
00:00:20 Создание проекта
00:11:36 Создание миграций БД
00:15:40 Создание базовых классов
00:23:20 Реализация логики генерации JWT токена
00:46:30 Реализация логики валидации JWT токена
00:53:05 Построения цепочки аутентификации
01:04:22 Финальная конфигурация с использованием SecurityWebFilterChain
01:12:11 Реализация REST контроллеров
01:23:15 Проверка REST API средствами Postman
01:24:21 Добавление и конфигурация обработчика ошибок
01:25:40 Заключение

Ссылка на Github репозиторий https://github.com/proselytear/webfluxsecurity

источник

👉@BookJava

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

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

На картинке приведён список контролируемых исключений (Checked Exceptions) в Java, определенных в java.lang.

👉@BookJava

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

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

❗️Хотите научиться эффективно работать с базами данных?

Наращивайте объем знаний и навыков на вебинарах, приуроченных к старту онлайн-курса «Базы данных» в OTUS.

✅ 1 августа — «Системные таблицы PostgreSQL»
Изучим основные системные таблицы и их устройство.

✅ 16 августа — «MySQL NDB cluster»
Рассмотрим шардинг и особенности архитектуры

🎁 На занятии 16 августа спикер Евгений Аристов, архитектор баз данных PostgreSQL, разыграет свою книгу «PostgreSQL 14. Оптимизация, Kubernetes, кластера, облака».

👉 РЕГИСТРАЦИЯ
https://otus.pw/5PHL/

Нативная интеграция. Информация о продукте www.otus.ru

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

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

Java

Что такое главный метод? Что такое public static void main? Что за PSVM?
Что такое статический модификатор? Как работает static поле, метод, класс?
Метод hashCode: что делает? Как переопределить? Чем отличается от equals?
Ключевые слова this и super: зачем нужны? Чем отличаются?
Какой порядок инициализации в Java?
Как работает кеширование в пуле чисел? 💾 Java Integer Pool
final переменные
Чем отличается final метод от обычного?
Зачем нужен final класс в Java?
Модификатор final: зачем нужен в Java? Как он меняет классы, методы и переменные?

источник

👉@BookJava

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

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

Java. Об Iterator и Iterable c примерами

В данном видео объясняется что такое паттерн Iterator и интерфейс Iterable в языке программирования Java. На примерах показывается для чего нужен Iterator и как его использовать. Рассматривается так же вопрос удаления и вставки элементов в LinkedList за константное время.

GitHub

источник

👉@BookJava

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

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

Как прочитать криптографический ключ?

Для чтения криптографического ключа необходимо использовать классы Java Cryptography Architecture (JCA). Пример кода для чтения криптографического ключа из файла вида PKCS#8 с помощью этих классов может выглядеть следующим образом:

// Загружаем публичный ключ из файла
FileInputStream fis = new FileInputStream("public.pem");
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
byte[] keyBytes = new byte[dis.available()];
dis.readFully(keyBytes);
dis.close();

// Преобразуем байты в объект PublicKey
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey publicKey = kf.generatePublic(spec);


// Используем ключ для выполнения криптографических операций

👉@BookJava

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

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

Создание аннотации в java [Java Annotations | Reflection api]

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

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

источник

👉@BookJava

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

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

Принцип инверсии зависимости - SOLID в деталях

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

В серии роликов «SOLID в деталях» я постараюсь подробно рассказать о принципах SOLID, а так же продемонстрировать их практическое применение.

источник

👉@BookJava

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

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

Java. Префиксное дерево. Основные операции, сохранение в файл, практическое применение.

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

00:00 - Вступление
00:26 - Применение в приложении
01:58 - Построение дерева и операции с ним
06:33 - Построение префиксного дерева на Java
11:22 - Операции с префиксным деревом на Java
16:31 - Сохранение дерева в файл
20:51 - Загрузка дерева из файла
25:32 - Экономия по сравнению со списком
27:12 - Замечание о Null-безопасности
28:26 - Заключение

источник

👉@BookJava

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

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

⁉️ Конструкторы и блоки инициализации в Java, что это и как с этим работать?

⚡️Узнаем 24 июля в 20:00 мск на открытом уроке онлайн курса «Углублённое изучение Java» от OTUS.

В рамках вебинара мы:
- Разберём конструктор на запчасти.
- Определим финалистов (финальные переменные).
- Наведём порядок (инициализации).

♨️ Усаживайтесь поудобнее, берите в руки карандаш. Мы будем решать задачи, подобные тем, что встречаются на собеседовании и точно встретятся на экзамене Oracle, и даже сложнее. С конструкторами в Java у вас больше никогда не возникнет сложностей.

🔵Это отличная возможность перенять опыт преподавателя и посмотреть на процесс обучения изнутри.
Оплата курса возможна любым удобным для вас способом.

➡️ Для участия в вебинаре зарегистрируйтесь:https://otus.pw/vq3T/

Нативная интеграция. Информация о продукте www.otus.ru

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

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

Техническое интервью Java Developer - Сергей Гонтаренко

00:00 Введение
02:38 Почему Сергей выбрал Java?
05:20 Кроссплатформенность Java
06:24 Типы данных
08:00 Wrapper Classes (Классы обертки)
09:45 Ссылочные типы данных
11:40 Инкапсуляция
18:50 Метод vs Конструктор
21:38 Интерфейс vs Абстрактный класс
31:20 Collections. HashSet vs TreeSet
38:46 JDK, JRE, JVM
40:15 Как хранить и обрабатывать пароль работая с Java
44:28 HashMap vs HashTable
45:24 Техническая задача на реализацию Immutable Class
50:15 Enum (перечисления)
52:20 Техническая задача на работу с Enum
01:03:10 Spring. Spring Scope
01:04:55 Техническая задача на знание аннотаций в Spring
01:21:55 Базы данных. Left, Right, Inner Join
01:24:05 Техническая задача на знание баз данных
01:41:28 Заключение

источник

👉@BookJava

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

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

Хотите усовершенствовать свои навыки Java с помощью Groovy?

Начните с открытого урока "Введение в функциональное программирование в Groovy" от OTUS. Вебинар пройдёт 24 июля в 20:00 и проведет его преподаватель Андрей Поляков, старший разработчик в Unlimint.

Урок приурочен к старту онлайн-курса "Groovy Developer"

🔥На уроке вы:
- познакомитесь с понятием функциональное программирование;
- узнаете в чем отличие функционального программирования от ООП;
- познакомитесь с Closures, контекстом исполнения, областями видимости;
- познакомитесь с использованием Closures как функций.

Кому будет полезен этот урок?
Разработчикам, QA, DevOps, которые хотят более глубоко понять, как работают инструменты тестирования
и CI/CD jenkins.

После вебинара полный курс можно приобрести в рассрочку.

⚡️Для участия зарегистрируйтесь: https://otus.pw/OYYH/

Реклама. Информация о рекламодателе на сайте www.otus.ru.

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

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

Миллиарды сообщений в минуту по протоколу TCP/IP

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

Обмен данными с низкой задержкой требует иного подхода, чем обычные форматы.

Библиотека Chronicle Wire с открытым исходным кодом обеспечивает высокоэффективные средства сериализации и десериализации данных для передачи в и из Chronicle Queue.

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

Использование Wire через TCP/IP открывает возможность облачно-ориентированного (cloud native) развертывания приложений на основе Chronicle.

https://www.infoq.com/articles/billions-messages-minute/

👉@BookJava

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

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

Apache Kafka - это распределённая платформа потоковой передачи данных с открытым исходным кодом.

Её используют LinkedIn, Netflix и тысячи других компаний для создания высокопроизводительных конвейеров данных, потоковой аналитики и критически важных приложений.

— Как эффективно использовать Apache Kafka в своих проектах?
— Как применять best practices от лидеров индустрии?
— Как избежать распространённых ошибок?

Читайте в канале Рецепты Kafka

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

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

Что такое livelock?

livelock – тип взаимной блокировки, при котором несколько потоков выполняют бесполезную работу, попадая в зацикленность при попытке получения каких-либо ресурсов. При этом их состояния постоянно изменяются в зависимости друг от друга. Фактической ошибки не возникает, но КПД системы падает до 0. Часто возникает в результате попыток предотвращения deadlock.

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

👉@BookJava

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

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

🔥 Международный уровень Java. Курс для работы в мировых IT-проектах и сертификация OCAJP

🚀 Стартует набор на онлайн курс «Углублённое изучение Java» от OTUS. Продолжительность обучения 5 месяцев.

Особенности курса:
- Интерактивный и практический подход
- Подготовка к собеседованиям
- Полное погружение в Java
- Подготовка к сертификации Oracle Java Programmer (OCAJP)

➡️ Оставляйте заявку и присоединяйтесь к группе: https://otus.pw/6TmP/

Нативная интеграция. Информация о продукте www.otus.ru

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

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

Сборка мусора в неисправных JVM, проактивный подход

Команда Netflix Cloud Data Engineering работает с различными приложениями для JVM, включая такие популярные хранилища данных, как Cassandra и Elasticsearch. Хотя большинство наших кластеров стабильно работают, обходясь выделенной им памятью, иногда «запрос смерти» или ошибка в самом хранилище данных приводят к перерасходу памяти, что может спровоцировать лишние циклы сборки мусора или даже привести к исчерпанию памяти в JVM.

https://netflixtechblog.medium.com/introducing-jvmquake-ec944c60ba70

👉@BookJava

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

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

Как на самом деле работает Java ClassLoader system? (с картинками)

Когда я впервые погрузился в мир загрузчиков классов Java, это было ответом на любопытный вопрос. Популярные источники (Wikipedia, Baeldung, DZone) содержат устаревшую, иногда противоречивую друг другу информацию, и это несоответствие послужило толчком для написания этой статьи — поиска ясности в лабиринте ClassLoader System.

Будучи разработчиком Java, вы наверняка сталкивались с ClassNotFoundException или NoClassDefFoundError — загадочными сообщениями, которые на мгновение останавливают наш процесс разработки. Класс не найден — понятно по названию, но не найден где? Кто и как его ищет, куда доставляет?

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

👉@BookJava

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

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

⁉️ Как реализовать упрощенный http сервер на Java Core?

📢📢 Узнаем 1 августа в 20:00 мск на открытом уроке онлайн-курса «Java Developer. Professional» в OTUS.

Любому веб-разработчику важно понимать, как внутри работает http-сервер. На вебинаре разберем как с помощью стандартной Java библиотеки разработать небольшой http сервер, что позволит вам лучше понять принципы работы application server'ов.

🟠Это отличная возможность перенять опыт преподавателя и посмотреть на процесс обучения изнутри.
Оплата курса возможна любым удобным для вас способом.

➡️ Для участия в вебинаре зарегистрируйтесь: https://otus.pw/oX34/

Нативная интеграция. Информация о продукте www.otus.ru

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

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

Локация следующего Tech talk by Sber — Новосибирск! 📍

Да-да, уже 27 июля IT-специалисты Новосибирска получат классную возможность узнать больше о том, как реализуются задачи в Сбере, пообщаться с топовыми экспертами и завести интересные знакомства.

В программе митапа — доклады только на актуальные темы:

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

✔️ Марат Юлдашев раскроет все секреты развертывания приложений на стенды с помощью ARGOCD.

✔️ А Владимир Медин поделится историей тернистого пути Jenkins в Enterprise и расскажет, как специалистам Сбера удалось найти решение даже при пиковой нагрузке.

В перерывах вас ждет неформальное общение и вкусный кейтеринг. Регистрируйтесь по ссылке — встречаемся 27 июля в 18:00 по адресу: Food Factory, ул. Коммунистическая, 14 👌

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

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

Тимлид в команду разработки на Java

Гибридный формат в городах РФ, Сербии, Казахстана, Армении, Беларуси.

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

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

Наш стек: Java 11, Spring Boot, Reactor, HTTP и gRPC API, Kotlin, PostgreSQL.

Мы ждем, что вы:
- разрабатывали на Java больше трех лет;
- пишете эффективный и понятный код;
- управляли командой разработки; нанимали людей и знаете, как правильно развивать разработчиков;
- можете вести за собой младших участников команды, делиться с ними знаниями и опытом;
- знаете, как устроены веб-сервисы;
- работали с реляционными и нереляционными базами данных и понимаете их устройство, *nix-подобными ОС.
- знаете популярные Java-библиотеки и фреймворки (Spring Boot, jUnit, Netty, Reactor);

Условия:
- сильная команда, с которой можно расти;
- зарплата на уровне рынка и выше;
- премии каждые полгода для всех, кто успешно прошёл ревью;
- расширенная программа ДМС: оплата 80% стоимости ДМС для супругов и детей;
- гибкий график работы.

Откликнуться: https://goo.su/5inhyN или в ТГ: @Karm_Anna

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

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

lfa Backend Stories Meetup #2 🔥

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

🔺 Александр Карташов, Senior Java Developer, расскажет про технологии межсервисного взаимодействия на примере проектов Альфа-Банка.

🔺 Василий Рыбин, Java Developer, познакомит с архитектурным паттерном API Gateway.

🔺 Павел Агалецкий, Lead Engineer в Авито, рассмотрит механики валидации контрактов внутренних API и протокол межсервисного взаимодействия в Авито.

🔺 Екатерина Попкова, Java/Kotlin Developer, расскажет, что такое Сага и как его можно реализовать на Camunda Platform 8.

✔️ Зарегистрироваться на митап и узнать больше о программе

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

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

🥷 Готов выбрать светлую сторону силы, юный джавист?

Эксперты OTUS приготовили для тебя полный сложной практики онлайн-курс «Java Developer. Professional», который расширит твои возможности использования Java.

🟠За 6 месяцев ты прокачаешь алгоритмы и сборщики мусора, байт-код и classloader, паттерны и тестирование, работу с окружением — логирование, jdbc и Hibernate, библиотеки и фреймворки, многопоточность и многое другое.

🦸🏼‍♂️Компании-партнеры ждут, когда ты овладеешь этим мастерством. Проходи вступительный тест и помни большая сила — большая ответственность.

👉 ПРОЙТИ ТЕСТ: https://otus.pw/VlGLx/

Нативная интеграция. Информация о продукте www.otus.ru

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

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

Top Core Java Interview Questions for Freshers and Experienced

https://www.edureka.co/blog/interview-questions/java-interview-questions/

👉@BookJava

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

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

Spring Boot Roadmap - How To Master Spring Boot

источник

👉@BookJava

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

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

Подборка Telegram каналов для программистов

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


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

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

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

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

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

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

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

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

GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
/channel/database_info Все про базы данных

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

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

Разработка игр 📌
/channel/game_devv Все о разработке игр

Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT

Чат программистов📌
/channel/developers_ru

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

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

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

QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика

Шутки программистов 📌
/channel/itumor Шутки программистов

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

Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров

Английский 📌
/channel/UchuEnglish Английский с нуля

Математика 📌
/channel/Pomatematike Канал по математике

Excel лайфхак📌
/channel/Excel_lifehack

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

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

Метод compareTo()

В Java метод compareTo() получает значение 0, если аргумент является строкой лексически равной данной строке; значение меньше 0, если аргумент является строкой лексически большей, чем сравниваемая строка; и значение больше 0, если аргумент является строкой лексически меньшей этой строки.

👉@BookJava

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

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

Еще один путь снизить боль при работе с Java проектами и их документированием

За время карьеры, чаще всего сталкивался с ситуацией — когда получаешь проект в котором непонятно, где «вход», где «выход» и один только вопрос — «куда ткнуть?!». Товарищи, давшие проект, говорят — «это делал Вася, но он уже уволился, а на звонки не отвечает и никто не знает что к чему». Знакомая ситуация? Так же, после перебросок между многочисленными проектами бывало — когда смотришь непонимающе на код, а в коммитах автором видишь своё имя, но уже не помнишь вообще что к чему и как писал. Знакомо? В какой‑то момент меня стала доставать такая ситуация и я сделал себе небольшую автоматизацию, что бы снизить количество проблем и ненужных нагрузок на мозг, это — карта проекта.

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

👉@BookJava

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

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

Как за полчаса написать простую читалку книг FB2 для десктопа на Java

Недавно мне для личных целей потребовалось написать читалку FB2. И сразу я столкнулась с тем, что информации по теме минимум. Палочка-выручалочка под названием ChatGPT выдал что-то невразумительное в ответ на довольно подробный запрос. К тому же, никаких готовых библиотек, чтобы по-быстренькому наваять ридер, я также не смогла обнаружить. Хотя искала долго и упорно, как Чубакка расческу.

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

👉@BookJava

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