ConcurrentHashMapConcurrentHashMap
— это класс из пакета java.util.concurrent
, который представляет собой реализацию хэш-таблицы, спроектированную для поддержки параллельных операций чтения и записи без необходимости блокировки всей структуры данных.
#для_начинающих
Что такое «thread-safe»?
«Thread-safe» (безопасность в многопоточной среде) означает, что определенный код или объект может корректно и безопасно использоваться в многопоточной среде, где несколько потоков одновременно могут обращаться к этому коду или объекту.
Основная проблема, с которой сталкиваются в многопоточной среде, — это состояние гонки (race condition), когда несколько потоков могут изменять общие данные и конфликтовать между собой, что может привести к непредсказуемому и некорректному поведению программы.
#для_продвинутых
ReentrantLock ReentrantLock
- это класс в Java, который предоставляет механизм блокировки с возможностью повторного входа.
Это означает, что один поток может несколько раз захватывать и освобождать блокировку, что может быть полезно в сложных сценариях синхронизации.
#для_начинающих
CyclicBarrierCyclicBarrier
(циклический барьер) — это один из механизмов синхронизации в языке программирования Java, предоставляемый пакетом java.util.concurrent
. Он позволяет группе потоков синхронизироваться на определенной точке выполнения, после чего они могут продолжить выполнение параллельно.CyclicBarrier
представляет собой барьер, который блокирует выполнение всех потоков до тех пор, пока все потоки не достигнут этой точки. Как только все потоки достигли барьера, он разблокируется, и все потоки выполняют свою работу.
#для_продвинутых
В Java как реализуется принцип "fail-fast" в контексте коллекций и как это отличается от подхода "fail-safe"?
В Java "fail-fast" система немедленно выдает ConcurrentModificationException, если обнаруживает, что коллекция была изменена во время итерации, кроме изменений через сам итератор. Напротив, "fail-safe" коллекции используют механизмы, такие как копирование коллекции или блокировки, чтобы обеспечить безопасное поведение во время итераций, даже если коллекция изменяется, предотвращая ConcurrentModificationException.
DelayQueueDelayQueue
— это очередь, которая хранит элементы в порядке их задержки. Элементы в очереди извлекаются только после истечения их задержки.DelayQueue
реализует интерфейс BlockingQueue
, поэтому элементы могут извлекаться из нее только блокирующими методами take()
или poll(long timeout, TimeUnit unit)
.
Элементы DelayQueue
должны реализовывать интерфейс Delayed
. Интерфейс Delayed
определяет два метода:getDelay()
: возвращает оставшуюся задержку элемента в миллисекундах.isExpired()
: возвращает true, если задержка элемента истекла.
#для_продвинутых
Что такое BufferedInputStream?BufferedInputStream
— это класс ввода-вывода Java, который добавляет буферизацию к базовому потоку ввода. Это означает, что он хранит данные из базового потока в памяти, чтобы их можно было читать большими порциями. Это может повысить производительность ввода-вывода, особенно при чтении из больших файлов.
Как работает BufferedInputStream?
Когда создается BufferedInputStream
, он создает внутренний буфер, размер которого можно указать при создании. Затем он читает данные из базового потока в буфер. Когда приложение запрашивает чтение данных из BufferedInputStream
, он сначала читает их из буфера. Если буфер пуст, BufferedInputStream
читает данные из базового потока и сохраняет их в буфере.
#для_продвинутых
Всё, что будет на митапе, останется на митапе 💥
24 апреля в 19:00 встречаемся на Alfa Backend Stories #3 в Москве и онлайн.
Обсудим ИИ и другие инструменты, которые помогают в написании кода:
Андрей Свиридов, ведущий разработчик, поделиться советами о том, как повысить качество кода в приложениях
Дмитрий Сошников, технический руководитель лаборатории генеративного ИИ Школы дизайна НИУ ВШЭ и консультант Yandex Cloud, расскажет о современном искусственном интеллекте в облаке и покажет, как YandexGPT может использоваться разработчиками для решения прикладных задач
Антон Гращенков, в режиме реального времени покажет, как локально установить и настроить ИИ, а также как с его помощью писать код
Обещаем не стирать вам память, если вы придёте в костюме, в образе агентов фильма «Люди в чёрном»
Регистрация
Еще больше полезного в комьюнити: @alfabackend
erid: LjN8KawpU
Реклама. АО «Альфа-Банк». ИНН 7728168971.
🚀 Участвуй в True Tech Hack от МТС и поборись за общий призовой фонд в 1 500 000 рублей. Регистрируйся.
Приглашаем разработчиков, специалистов по Data Science, менеджеров по продукту, дизайнеров. Соревноваться предстоит в одном из двух треков, чтобы улучшить жизнь людей с особыми потребностями.
🏠 Трек 1. Улучшение клиентского опыта витрины МТС Live для пользователей с особыми потребностями
⭐ Трек 2. Разработка голосового управления для МТС Финтех на основе искусственного интеллекта для людей с ограниченными возможностями
Как пройдет True Tech Hack:
🔸 26 апреля – открытие хакатона и Q&A-сессия
🔸 27 апреля–12 мая – чекпоинты с экспертами
🔸 12 мая – окончание приема проектов
🔸 14 мая – полуфинал, защита лучших решений и объявление финалистов
🔸 17 мая – финал в Москве
True Tech Hack – твой шанс получить новый опыт, выиграть приз и сделать наш мир доступней и удобней для всех. Регистрируйся на хакатон до 25 апреля по ссылке.
#вопросы_с_собеседований
Чем отличается переопределение от перегрузки?
Переопределение — это возможность наследника предоставить свою реализацию метода, который уже предоставлен в родительском классе. При переопределении сигнатура метода (имя и параметры) в суперклассе и дочернем классе должны совпадать.
Перегрузка — это возможность определить несколько методов с одинаковым именем, но разными параметрами. При перегрузке сигнатура методов должна различаться по количеству, типу или порядку параметров.
Разбираемся с MavenGate, новой атакой на цепочку поставок для Java и Android-приложений
Смотреть статью
therapi-runtime-javadoc - небольшая библиотека, позволяющая читать Javadoc из Java-кода во время выполнения.
https://github.com/dnault/therapi-runtime-javadoc
Больше, чем просто разработчик: начните думать как архитектор ПО на курсе от Слёрм 🤔
Архитектор приложений — это не просто человек с мощным техническим бэкграундом. Это специалист, который думает о бизнес-процессах и понимает, как грамотно масштабировать систему.
Пиши, как разработчик, думай, как архитектор — этому учит Слёрм на своём курсе «Архитектура приложений».
🧐 Чему вы научитесь?
🟠Писать чистый и понятный код
🟠Проектировать разработку ПО
🟠Улучшать качество кода с помощью алгоритмов и структур данных
В конце курса вы сможете защитить итоговый проект и получить сертификат.
🔮 Кто будет наставником?
Спикеры курса: Александр Вагнер, Senior Software Engineer в Bidease
Более 10 лет в IT, построил с нуля компанию и платформу Torrow.
Вячеслав Гагарин, Старший разработчик ПО в Retail Rocket,
более 7 лет опыта в IT.
☕️Как проходит обучение?
Курс длится 3 месяца, все материалы к нему будут открываться постепенно. Наставники будут поддерживать вас на протяжении всего обучения: отвечать на вопросы в чате студентов и проводить онлайн-встречи.
Старт 29 апреля. Присоединяйтесь!
Реклама ООО «Слёрм» ИНН 3652901451
Из джуна в мидла вместе с Холдингом Т1🚀 Приглашаем java-разработчиков в Открытые школы Т1!
🎓 Открытые школы Т1 — это новая карьерная программа для IТ-специалистов, объединяющая обучение без отрыва от работы и offer weeks.
👨💻 Для участия необходим опыт работы java-разработчиком от 1 года, а также желание присоединиться к команде Т1.
Т1 занимает 2 место среди крупнейших ИКТ-компаний по версии RAEX 2023 и является партнёром ключевых производителей и разработчиков в сфере ИТ.
В программу входит: spring framework; docker; синхронное и асинхронное взаимодействие, брокеры сообщений; паттерны, SOLID
⏰ Длительность 1 месяц.
💻 Формат: онлайн по вечерам (от 8 часов в неделю на вебинары и практику).
Лучшим назначим интервью и направим оффер!
📌 Подробнее о программе — в карточках внутри поста.
Принимаем заявки до 22 апреля! 🚀
Реклама. ООО "Т1". ИНН 7720484492.
Сортировка расческой
Сортировка расческой (Comb sort) — алгоритм сортировки, являющийся улучшенной версией сортировки пузырьком. Он работает быстрее, чем сортировка пузырьком, но медленнее, чем более продвинутые алгоритмы, такие как быстрая сортировка.
1. Начинаем с шага, равного длине массива.
2. Сравниваем элементы массива, находящиеся на расстоянии шаг друг от друга.
3. Если элемент слева больше, чем элемент справа, то мы их переставляем.
4. Уменьшаем шаг, деля его на 1.3 (или другую константу).
5. Повторяем шаги 2-4, пока шаг не станет меньше 1.
#для_продвинутых
ThreadPool
ThreadPool (пул потоков) представляет собой механизм, который позволяет эффективно управлять и переиспользовать потоки для выполнения задач в многозадачных приложениях. Он позволяет создавать и управлять пулом потоков, избегая накладных расходов на создание и уничтожение потоков при выполнении задач.
#для_начинающих
Что нового в GitVerse
На онлайн-презентации «GitVerse: открой вселенную кода» СберТех рассказал об обновлениях платформы. Cреди них – CI/CD-инструменты, которые позволят ускорить и упростить разработку. Делимся подробностями:
▪️ Инструменты помогут автоматизировать сборку кода и процессы поставки. Можно воспользоваться уже написанными скриптами сборки и перенести свои проекты с Git-репозиториев в один клик.
▪️ Технология оповещения о новых событиях на сервере (вебхуки) позволит реализовать еще больше сценариев автоматизации.
▪️ Появилась возможность вызывать сторонние сервисы через API по событиям в GitVerse. Например, при определенных событиях в репозитории можно запустить сторонний сборочный конвейер или отправить уведомление в мессенджер.
Регистрируйтесь на GitVerse и протестируйте сами 😉
❓Хотите прокачать скиллы в автоматизации тестирования на Java?
👉 Ждем вас на бесплатном практическом уроке «Модульное и интеграционное тестирование при помощи Spring Boot» от OTUS.
На вебинаре разберем:
- модульное тестировании при помощи Spring Boot;
- интеграционное тестирование при помощи Spring Boot;
- написание тестов на отдельные фрагменты SUT.
👉 Для участия зарегистрируйтесь https://otus.pw/MpW0/?erid=LjN8K732H
⏰ Встречаемся 24 апреля в 20:00 мск в рамках курса «Java QA Engineer. Professional».
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Получить атомное время из интернет-часов
Для получения атомного времени из интернет-часов в Java вы можете воспользоваться классом java.net.URL
для выполнения HTTP-запроса к одному из сервисов времени, таким как «time.google.com». Затем вы можете обработать полученный ответ и извлечь атомное время.
Обратите внимание, что формат ответа от сервиса времени может различаться, и вам может потребоваться настроить метод parseAtomicTime
для вашего конкретного сервиса. Подобные сервисы могут предоставлять атомное время в разных форматах, таких как ISO 8601 или Unix Timestamp.
#для_начинающих
💻Хочешь стать платформенным инженером в IT-компании?
🚀Тогда онлайн-курс «Инфраструктурная платформа на основе Kubernetes» от OTUS именно для тебя!
Изучи функционал K8s, освой технологию разработки инфраструктурных платформ и сделай свое резюме сильнее.
🎓Учись у экспертов, погружайся в мир технологий будущего и строй свою успешную карьеру в IT.
👨🎓 Здесь ты получишь практические навыки, которые сможешь применить в работе. А практикующие эксперты-преподаватели ответят на твои вопросы в режиме реального времени на вебинарах.
📅Старт нового набора уже 25 апреля. Программа актуализирована, есть рассрочка для оплаты курса.
🔥Пройди короткое вступительное тестирование прямо сейчас, чтобы не только проверить свои знания, но еще получить специальную цену на обучение и персональную консультацию от менеджера в OTUS: https://vk.cc/cwjVCN?erid=LjN8Ju1GC
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Кастинг
Кастинг (приведение типов) — это операция, которая позволяет присвоить значение переменной одного типа переменной другого типа.
Существует два типа кастинга:
Расширение типа (widening casting) — это преобразование типа данных меньшей разрядности в тип данных большей разрядности. Например, преобразование типа byte
в тип int
, short
в тип long
или char
в тип int
.
Сужение типа (narrowing casting) — это преобразование типа данных большей разрядности в тип данных меньшей разрядности. Например, преобразование типа int
в тип byte
, long
в тип short
или double
в тип float
.
#для_продвинутых
Ключевое слово new
Ключевое слово new используется для создания нового объекта. Оно всегда используется в сочетании с именем класса, к которому принадлежит создаваемый объект. Например, чтобы создать новый объект класса String, мы можем написать код, как на картинке.
В этом примере переменная str будет ссылаться на новый объект класса String. По умолчанию, новый объект будет инициализирован значениями по умолчанию для своего типа. Например, объект класса String будет содержать пустую строку.
#для_начинающих
Интерфейс Function
Функциональный интерфейс Function
представляет собой интерфейс, который используется для представления функции, принимающей один аргумент и возвращающей результат. Он является частью пакета java.util.function и был введен в Java 8 для поддержки функционального программирования.
#для_продвинутых
Что такое цепочка конструкторов?
Цепочка конструкторов – это процесс вызова одного конструктора из другого по отношению к текущему объекту. Цепочка конструкторов возможна только в устаревших версиях, когда конструктор подкласса отвечает за вызов конструктора суперкласса первым. В цепочке конструкторов может быть любое количество классов. Цепочка конструкторов может быть достигнута двумя способами:
1) В том же классе, используя this().
2) Из базового класса с использованием super().
17 мая собираем всех на IT-конференцию МТС True Tech Day.
Наша работа строится на коде, который мы создали из синтеза науки и технологий. Это надёжная и универсальная платформа для разработки продуктов и сервисов.
Каждый участник конференции поучаствует в сессиях от лидеров индустрии, испытает технологии в true labs и получит новые впечатления и эмоции.
Что будет:
→ 5 тематических треков: Main, Development, AI/ML, Cloud, Science
→ 50 спикеров с докладами про архитектуру, облачные платформы, NLP4Code, вероятностное программирование, безопасность контейнеров и другое
→ 10 часов нетворкинга
→ цифровые зоны и digital-интеграции
→ а ещё вечеринка со звездой
Все спикеры и темы уже на сайте. Регистрируйся на True Tech Day. Участие бесплатное
База IT с Романом Сакутиным
Получите всё, что нужно для старта в IT от программиста с 10 летним опытом. Роман превратил легендарный Гарвардский курс в двухдневный трениг для гуманитариев и адаптировал под актуальные технологии.
Трансляции будут в эти выходные, для всех участников доступные записи, подборки книг и бесплатного материала для самообразования.
Записывайтесь бесплатно - https://ijunior.ru/free-base-it?utm_source=telegain&utm_medium=17042024&erid=LjN8KEWBZ
JMapper
JMapper — это библиотека Java для преобразования объектов, которая позволяет легко и эффективно переносить данные между объектами разных классов. Она обладает следующими преимуществами:
Простота использования: JMapper имеет простой и понятный API, основанный на аннотациях.
Эффективность: JMapper оптимизирован для производительности и может выполнять преобразования объектов очень быстро.
Гибкость: JMapper поддерживает различные типы преобразований.
#для_продвинутых
Ehcache
Ehcache — это популярная библиотека кеширования в Java, известная своей надежностью, функциональностью и простотой использования. Она используется для кэширования объектов в памяти, на диске, а также в кластерных конфигурациях.
#для_продвинутых
Infinispan
Infinispan — это масштабируемая, высокодоступная платформа для хранения данных типа ключ-значение, написанная на Java и распространяемая под свободной лицензией (Apache License 2.0). Основная область применения Infinispan — распределенный кэш, но также её применяют как KV-хранилище в базах данных типа NoSQL.
Платформа поддерживает два способа запуска: развертывание в качестве отдельно-стоящего сервера / кластера серверов и использование в виде встроенной библиотеки для расширения функций основного приложения.
#для_продвинутых
Считаешь себя экспертом в IT? Участвуй в «Цифровом марафоне» от Сбера и «Школы 21» и будь на код впереди! Миллион рублей уже ждёт тебя.
В этом масштабном конкурсе ты будешь соревноваться со специалистами по всей России. Тройка лучших поделит в финале в Москве призовой фонд в 1,8 миллионов рублей.
Но сначала нужно пройти онлайн-игру, тестирование и цифровой диктант. Начнёшь с «разминки» и покажешь свои аналитические и мягкие навыки. Далее — ответь на вопросы теста согласно своему уровню подготовки. Прослушай на диктанте техническое задание и напиши код решения.
Поспеши: 20 апреля — твой последний шанс нажать на кнопку «Хочу участвовать». Переходи на сайт и регистрируйся прямо сейчас!