⚡️ В сети начали массово сливать курсы и книги известных онлайн школ
Вот отсортированная база с тонной материала(постепенно пополняется):
БАЗА (4687 видео/книг):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(107 видео, 43 книги) — СисАналз
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — UI/UX
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — Ruby
Скачивать ничего не нужно — все выложили в Telegram
➡️ Использование библиотеки Agrona для высокопроизводительных структур данных в Java
Agrona — это библиотека, предоставляющая эффективные структуры данных и примитивы для высокопроизводительных приложений. Она включает очереди, кольцевые буферы, а также инструменты для работы с памятью и сетевыми операциями.•
Agrona оптимизирует использование памяти и ускоряет обработку данных.•
Идеальна для приложений с высокими требованиями к производительности.
🔗 Ссылочка на доку
Обработка изображений
Думаем, каждый согласится, что подавать информацию в виде изображения лучше всего для восприятия. Однако сначала нужно сгенерировать такое изображение, и на этот случай в Java есть множество инструментов.
К примеру, класс java.awt.BufferedImage который позволяет обрабатывать изображения каким угодно способом, хоть попиксельно.
Чтобы загрузить изображение из файла используют ImageIO::read, для записи — ImageIO::write.
#для_продвинутых
Интерфейс SortedMapSortedMap
— это интерфейс в Java, который представляет собой отсортированную коллекцию ключей и связанных с ними значений. Он расширяет интерфейс Map
и предоставляет методы для управления данными в упорядоченном виде.
Важно отметить, что SortedMap
не дублирует элементы и обеспечивает их упорядоченное хранение на основе натурального порядка ключей или с использованием заданного компаратора. Это означает, что элементы в SortedMap
автоматически упорядочиваются по ключам.
Методы, объявленные SortedMap
, можно посмотреть здесь.
#для_продвинутых
#вопросы_с_собеседований
Можете ли вы объяснить, как работает механизм 'Double Brace Initialization' в Java и в каких случаях его использование может быть неэффективным?
Механизм "Double Brace Initialization" в Java - это способ инициализации объектов, основанный на анонимных внутренних классах, где первые фигурные скобки создают анонимный подкласс, а вторые - блок инициализации. Этот подход может быть неэффективным из-за создания дополнительного класса для каждого использования, что увеличивает использование памяти и может затруднить чтение кода.
Конвертируем массив в списокArrays.asList()
— это статический метод класса Arrays
, который позволяет конвертировать обычный массив в список List
.
— Принимает массив в качестве аргумента и возвращает объект типа List
с элементами этого массива.
— Возвращаемый список имеет фиксированный размер, равный длине исходного массива. Добавлять/удалять элементы в него нельзя.
— Изменения в возвращаемом списке будут вноситься в исходный массив, т. к. список работает как "представление" массива. Метод работает для массивов примитивных и ссылочных типов.Arrays.asList
хорош для чтения элементов массива, но не для записи из-за неизменяемого размера.
#это_база
👩💻 Пройди тест по Java
Spring от А до Я: как быстро доставлять продукт в продакшн и радовать пользователей? 👩💻
Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене.
👉 ПРОЙТИ ТЕСТ: https://otus.pw/YZF3/
🎫 Начни обучение со скидкой, подробности у менеджеров.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
#вопросы_с_собеседований
Реализуйте в Java собственную реализацию синглтона (singleton). Напишите код и объясните, как работает ваша реализация, а также какие проблемы могут возникнуть при использовании синглтона и как вы можете их решить.
Объяснение:
Синглтон — это паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. Реализация синглтона должна предотвращать создание нескольких экземпляров и предоставлять способ доступа к единственному экземпляру.
— Приватный конструктор: Конструктор класса сделан приватным, чтобы избежать создания экземпляров снаружи класса.
— Статический метод getInstance
: Метод getInstance
является статическим, чтобы можно было вызывать его без создания экземпляра класса. Внутри метода используется ленивая инициализация, то есть экземпляр создается только при первом вызове метода getInstance
.
— Синхронизация: В рассмотренной реализации используется ключевое слово synchronized
для обеспечения потокобезопасности при первом создании экземпляра. Однако это может сказаться на производительности. Существуют и другие подходы к обеспечению потокобезопасности, такие как использование volatile
или двойной проверки.
Проблемы синглтона и их решения:
— Ленивая инициализация: В данной реализации используется ленивая инициализация, что может вызвать проблемы в многопоточной среде.
Решение: использование volatile
или двойной проверки на null
для обеспечения безопасной ленивой инициализации.
— Сериализация: При сериализации и десериализации синглтона могут возникнуть проблемы, поскольку каждая десериализация создаст новый объект.
Решение: переопределить методы readResolve
и writeReplace
для управления процессом сериализации и десериализации.
— Тестирование: Трудно провести тестирование, так как синглтон предоставляет глобальную точку доступа.
Решение: использование dependency injection (внедрение зависимостей) для более гибкого тестирования.
Garbage Collection и JVM
JVM работает как хорошо отлаженный механизм, автоматически распределяя и освобождая память. Это и есть суть Garbage Collection. Это процесс, который автоматически находит и удаляет объекты, которые больше не используются вашим приложением. Благодаря этому, разработчики могут сосредоточиться на логике приложения, не беспокоясь о ручном управлении памятью.
Смотреть статью
Jansi
Jansi — это библиотека Java, которая позволяет форматировать текстовый вывод в консоли. Она предоставляет широкий спектр функций для управления цветами, шрифтами и другими аспектами отображения текста.
#для_продвинутых
#вопросы_с_собеседований
Что будет, если в Map положить два значения с одинаковым ключом?
Если в Map положить два значения с одинаковым ключом, то произойдет следующее:
— При добавлении второго значения с уже существующим ключом, первое значение, связанное с этим ключом, будет перезаписано.
— Map может содержать только уникальные ключи. При попытке добавить дублирующийся ключ, старое связанное значение будет заменено новым.
— Конкретная реализация Map (например, HashMap) может бросить исключение, если попытаться добавить дублирующийся ключ.
Таким образом, поведение в такой ситуации зависит от конкретной реализации интерфейса Map, но в целом дублирующиеся ключи в Map запрещены.
#вопросы_с_собеседований
Что такое ReentrantLock
в Java, какие преимущества он имеет перед ключевым словом synchronized, и как его правильно использовать?
Ответ ⬇️
ReentrantLock — это класс из пакета java.util.concurrent.locks, предоставляющий более гибкий механизм блокировки, чем synchronized. Он поддерживает методы для явного управления блокировками, такие как tryLock() (попытка захвата без ожидания) и lockInterruptibly() (захват с возможностью прерывания). В отличие от synchronized, он позволяет справляться с блокировками вручную и поддерживает более точное управление потоками. Однако неправильное использование может привести к deadlock.
Пример использования ⚙️
import java.util.concurrent.locks.ReentrantLock;Читать полностью…
public class Main {
private static final ReentrantLock lock = new ReentrantLock();
public static void main(String[] args) {
Thread thread1 = new Thread(Main::criticalSection, "Thread-1");
Thread thread2 = new Thread(Main::criticalSection, "Thread-2");
thread1.start();
thread2.start();
}
private static void criticalSection() {
if (lock.tryLock()) { // Пытаемся захватить блокировку
try {
System.out.println(Thread.currentThread().getName() + " выполняет критическую секцию");
Thread.sleep(1000); // Эмуляция работы
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
lock.unlock(); // Обязательно освобождаем блокировку
System.out.println(Thread.currentThread().getName() + " завершил работу");
}
} else {
System.out.println(Thread.currentThread().getName() + " не смог захватить блокировку");
}
}
}
⚙️ Arrays.fill()
В Java метод Arrays.fill()
позволяет заполнить массив одним значением или диапазон массива заданным значением. Это удобный способ инициализировать или обновлять данные массива.
⚡️Хотите стать экспертом в разработке на Spring Framework?
Обучение «Разработчик на Spring Framework» от OTUS — это практический подход к освоению самого востребованного фреймворка для Java-разработчиков. Узнайте, как создавать веб-приложения на микросервисной архитектуре, автоматизировать задачи с Spring Boot и реализовывать высокоуровневые решения!
В конце курса у вас будет портфолио из готовых приложений и глубокое понимание работы со Spring. Пройдите вебинар-собеседование, чтобы быть готовым к реальным интервью.
👉Запишитесь на курс сейчас и перейдите на новый профессиональный уровень с дипломом, признанным крупными компаниями: https://otus.pw/aynT/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
➡️ Использование библиотеки Fastutil для оптимизации работы с коллекциями в Java
Fastutil — это библиотека, предоставляющая эффективные реализации коллекций для примитивных типов данных в Java. Она позволяет существенно сократить использование памяти и улучшить производительность по сравнению со стандартными коллекциями.•
Fastutil поддерживает списки, множества, карты и другие структуры для примитивов.•
Повышает эффективность работы с большими объемами данных.
🔗 Ссылочка на доку
В 2025 не трать время на бесполезные и неактуальные навыки ❌
Получить заветный оффер сможет только тот, кто владеет самыми востребованными инструментами и быстро адаптируется к требованиям рынка. Собрали для вас 10 мануалов, которые действительно прокачают ваши скиллы:
– Пошаговая road map по Java
– Redis - 5 улучшений для твоего пет-проекта
– Пошаговая RoadMap по Java
– Мануал по Docker. Основные команды и концепции
– Микросервисы. Вопросы с собеседований
– Шпаргалка с горячими клавишами JetBrains IDE. Ускоришь работу в 10 раз
– Шпаргалка по Kafka
– Инструкция по работе с Git
– Подробный гайд, как найти работу в IT без опыта
– Подборка платформ с вакансиями для java-разработчиков
Ребята из FAANG School собрали бесплатную библиотеку Java Junior с материалами, которые помогут освоить сложные темы, упростить и ускорить работу, а также получить приглашение от IT-гигантов.
Свежее пополнение - то, без чего не обойтись ни одному джуну - шпаргалка по основным командам SQL!
Доступ открыт всего на сутки - успевай
System.arraycopySystem.arraycopy
используется для копирования элементов из одного массива в другой. Этот метод предоставляет эффективный способ копирования данных между массивами. Синтаксис System.arraycopy
:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
Параметры метода включают:src
: Исходный массив, из которого вы хотите скопировать элементы.srcPos
: Начальная позиция в исходном массиве, с которой начнется копирование.dest
: Целевой массив, в который вы хотите скопировать элементы.destPos
: Начальная позиция в целевом массиве, куда будут скопированы элементы.length
: Количество элементов, которое вы хотите скопировать.
#для_продвинутых
Apache Commons CLI
Apache Commons CLI (Commons Command Line Interface) — это библиотека для обработки аргументов командной строки в Java. Она предоставляет удобный способ определения и обработки аргументов командной строки для ваших Java-приложений. Библиотека Apache Commons CLI упрощает работу с аргументами командной строки, включая разбор аргументов, создание справки и обработку различных опций командной строки.
#для_продвинутых
Аргументы командной строки
Аргументы командной строки передается методу main в виде массива строк (String[] args). Когда вы запускаете программу Java из командной строки, вы можете передать дополнительные параметры после имени класса. Эти параметры будут доступны в виде элементов массива args.
#для_продвинутых
Micronaut
Micronaut — это современный фреймворк для создания микросервисных приложений на языке Java, Kotlin и Groovy. Он разрабатывался с учетом требований эффективности, производительности и легковесности.
— Легковесность: Micronaut предлагает низкоресурсное потребление благодаря тому, что многие операции выполняются во время компиляции, а не во время выполнения. Это позволяет создавать быстрые и эффективные приложения.
— Инъекция зависимостей во время компиляции: В отличие от многих других фреймворков, которые используют внедрение зависимостей во время выполнения, Micronaut выполняет внедрение зависимостей во время компиляции, что повышает производительность.
— Встроенная поддержка для микросервисной архитектуры: Micronaut предоставляет инструменты и функциональность для создания микросервисов, включая обработку HTTP-запросов, масштабирование и управление конфигурацией.
— Поддержка различных протоколов: Micronaut поддерживает различные протоколы взаимодействия, такие как HTTP, WebSocket, gRPC, RMI и многие другие.
— Встроенная поддержка тестирования: Фреймворк обеспечивает инструменты для написания и запуска тестов, что упрощает разработку надежных приложений.
Для подробной информации о Micronaut и примеров использования рекомендуется обратиться к официальной документации Micronaut.
#для_продвинутых
Вложенные классы
Вложенные классы (nested classes) представляют собой классы, объявленные внутри других классов. Вложенные классы могут быть статическими или нестатическими, и они могут использоваться для логической организации кода, повышения инкапсуляции и улучшения читаемости.
Статические вложенные классы (Static Nested Classes):
— Статический вложенный класс объявляется с использованием ключевого слова static.
— Он имеет доступ только к статическим членам внешнего класса и не имеет доступа к нестатическим членам.
— Статические вложенные классы используются, когда внутренний класс не зависит от экземпляра внешнего класса.
Внутренние классы (Inner Classes):
— Внутренние классы не объявляются с использованием ключевого слова static.
— Они имеют доступ ко всем членам внешнего класса, включая нестатические поля и методы.
— Внутренние классы могут быть обычными (обычные вложенные классы), анонимными или локальными.
#для_начинающих
RecursiveTask<V> RecursiveTask<V>
является частью фреймворка Fork/Join
в Java, введенного в Java 7. Этот фреймворк предоставляет удобный способ распараллеливания выполнения задач.RecursiveTask<V>
является подклассом ForkJoinTask<V>
. Он предназначен для использования вместе с пулом Fork/Join
(ForkJoinPool
) и предоставляет специальные методы для разделения задачи на подзадачи и объединения результатов.
#для_продвинутых
Приглашаем вас на открытый вебинар: «Основы многопоточности в Java»
⏰Дата: 25 декабря в 20:00 мск
Спикер: Борис Кириллов
📚Программа урока:
- Введение в многопоточность: что это и зачем это нужно.
- Изучение базовых классов для работы с потоками.
- Разбор типовых проблем многопоточности и подходов к их решению.
🔥Урок будет полезен тем, кто хочет:
- Разобраться в основах многопоточности в Java.
- Понять, как писать многопоточные программы.
- Узнать, какие классы используются для работы с потоками в Java.
🚀В результате урока вы:
- Поймете подходы к многопоточности в Java.
- Изучите базовые классы и синтаксис многопоточной обработки.
- Сможете применять полученные знания для создания более эффективных Java-приложений.
Участники всех открытых уроков получат скидку🎁 на большое обучение
👉Регистрируйтесь на открытый вебинар по ссылке: https://otus.pw/KDb4/Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Хватит разворачивать приложения наугад! Docker — must-have инструмент для современных Java-разработчиков.
🔍 На открытом уроке разберем, как контейнеризация упрощает разработку и развертывание приложений. Узнаете всё: от создания Docker-контейнеров до профилирования.
👉 Запускайте Java-приложения в облаке, тестируйте их под нагрузкой, отлаживайте с точностью хирурга. Начните путь к новой профессиональной высоте!
🗓 Запишитесь на урок «Контейнеризация Java-приложений с Docker» 27 декабря в 20:00 уже сейчас! Участникам — скидки на курс «Java Developer. Advanced»: https://otus.pw/X9YU/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Облако — это конструктор!
The Art of Programming — подкаст об инструментах, технике и разработке ПО. По следам конференции HighLoad 2024 записали новый выпуск, в котором обсуждаем индустрию публичных облаков.
Вместе с Данилой Дюгуровым, CTO MTC Web Services, говорим о новостях индустрии, создании новых облачных платформ, потенциале рынка и принципах формирования топовых команд разработки.
🎧Слушайте The Art of Programming на всех популярных подкаст-площадках.
⚙️ String.format()
В Java метод String.format()
позволяет форматировать строки с использованием плейсхолдеров и спецификаторов. Это удобно для создания строк с динамическими данными.
⚙️ String.matches()
В Java метод String.matches()
проверяет, соответствует ли строка заданному регулярному выражению. Это удобно для проверки формата строк, таких как email, номера телефонов и т.д.
⚙️ Math.random()
В Java метод Math.random()
генерирует случайное число с плавающей точкой от 0.0 (включительно) до 1.0 (исключительно). Это базовый способ генерации случайных чисел.
👩💻 Задача по Java: Подсчёт частоты слов в строке
Напишите метод, который принимает строку и возвращает Map
, где ключи — это слова из строки, а значения — количество их вхождений. Игнорируйте регистр и удаляйте знаки препинания.
Пример:
public class Main {
public static void main(String[] args) {
String text = "Hello, world! Hello Java.";
Map<String, Integer> result = countWordFrequency(text);
System.out.println(result);
// Ожидаемый результат:
// {hello=2, world=1, java=1}
}
}