№ 4931127152 Изучаем Java. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorjavist
SynchronousQueueSynchronousQueue
— это блокирующая очередь, в которой каждая операция вставки должна ждать соответствующей операции удаления другим потоком и наоборот.
В этом примере создается SynchronousQueue
. Затем запускаются два потока: производитель и потребитель. Производитель пытается добавить значение в очередь с помощью метода put()
. Этот метод заблокирует выполнение, пока другой поток не вызовет метод take()
. Когда потребитель вызывает метод take()
, он получает значение из очереди, и выполнение производителя продолжается.
#вопросы_с_собеседований
Имеет ли смысл объявлять метод private final?
Объявление метода с модификаторами private и final имеет смысл, когда вы хотите:
— Скрыть детали реализации метода от других классов.
— Зафиксировать определенное поведение метода и не дать его переопределить.
— Сделать метод доступным только для использования внутри данного класса.
NavigableSet
NavigableSet — это интерфейс, который расширяет интерфейс SortedSet и добавляет навигационные методы для поиска элементов в отсортированном множестве.
NavigableSet поддерживает следующие дополнительные операции:
— Поиск ближайшего элемента к заданному.
— Поиск элементов в заданном диапазоне.
— Получение подмножества элементов сначала или конца набора.
Основное применение NavigableSet — это реализация структур данных, где важен упорядоченный доступ к элементам, таких как:
— Деревья (Red-Black, AVL и др.).
— Приоритетные очереди.
— Сортированные словари.
Основные реализации в Java — TreeSet и ConcurrentSkipListSet.
NavigableSet
NavigableSet — это интерфейс, который расширяет интерфейс SortedSet и добавляет навигационные методы для поиска элементов в отсортированном множестве.
NavigableSet поддерживает следующие дополнительные операции:
— Поиск ближайшего элемента к заданному.
— Поиск элементов в заданном диапазоне.
— Получение подмножества элементов сначала или конца набора.
Основное применение NavigableSet — это реализация структур данных, где важен упорядоченный доступ к элементам, таких как:
— Деревья (Red-Black, AVL и др.).
— Приоритетные очереди.
— Сортированные словари.
Основные реализации в Java — TreeSet и ConcurrentSkipListSet.
Класс FileReader
FileReader — это класс, который позволяет считывать символьные данные из файла. Читает файл посимвольно в виде кодов UTF-16, а для работы принимает объект File или путь к файлу в конструктор.
Использует потоковый доступ для чтения данных.
Должен использоваться в try-with-resources блоке, чтобы корректно закрывать поток. Часто используется совместно с BufferedReader для удобства чтения по строкам.
Здесь мы открываем поток FileReader для чтения файла data.txt.
В цикле посимвольно считываем данные методом read() пока не достигнут конец файла.
#это_база
ArrayUtils
ArrayUtils — это вспомогательный класс для работы с массивами из библиотеки Apache Commons Lang. Он содержит различные статические методы для манипуляций с массивами.
ArrayUtils широко используется в коде для упрощения работы с массивами, избавляя от рутинного написания циклов. Удобен при работе с параметрами и результатами методов в виде массивов.
Также может применяться для оптимизации кода, используя более эффективные реализации стандартных операций с массивами. Позволяет писать более чистый и читабельный код.
В этом примере мы импортируем класс ArrayUtils и создаем целочисленный массив. Затем используем метод indexOf() из ArrayUtils для поиска индекса элемента со значением 3.
Метод возвращает индекс найденного элемента в массиве или -1 если элемент не найден.
#вопросы_с_собеседований
В чем разница между Iterator и ListIterator?
— Iterator может итерироваться только вперед, а ListIterator может и вперед и назад.
— ListIterator имеет дополнительные методы previous(), hasPrevious(), add(), set().
— ListIterator позволяет получить индекс текущего элемента.
— ListIterator может начать итерацию с произвольного индекса списка, а Iterator только с начала.
— ListIterator можно получить только из объектов, реализующих List, а Iterator из любой коллекции.
— ListIterator является более функциональным и позволяет вносить изменения в список во время итерации, Iterator - только читать.
— Итераторы безопасны для использования в многопоточных приложениях, а ListIterator - нет.
Метод Collections.shuffle
Метод shuffle() из класса Collections используется для перемешивания элементов коллекции в случайном порядке.
Он принимает в качестве аргумента список, элементы которого нужно перемешать и возвращает переданный список, но уже с измененным случайным порядком элементов. Сам список при этом не создается заново.
Использует алгоритм Фишера—Йетса для генерации случайной перестановки элементов, а также сам по себе является thread-safe - можно безопасно вызывать из разных потоков без синхронизации.
shuffle() не гарантирует уникальность создаваемых перестановок при многократном вызове. Работает за линейное время O(n).
#это_база
🤝 Если код работает, это еще не значит, что он работает эффективно. Хотите разобраться, как ускорить приложения, найти утечки памяти и правильно деплоить их в облака?
🦾 На повышении квалификации «Java Developer. Advanced» вы изучите JVM на глубоком уровне, научитесь профилировать приложения, оптимизировать их под высокие нагрузки и выстраивать продвинутый мониторинг.
✔️ Глубокое погружение в устройство JVM
✔️ Практика с профилированием и трассировкой
✔️ Работа с Kubernetes, Prometheus и Grafana
✔️ Настройка метрик и логирования
Осталось несколько дней до закрытия набора.
➡️ Пройдите короткое тестирование для проверки своих навыков и присоединяйтесь к группе: https://otus.pw/oyX3a/
🎁 Начните обучение со скидкой, подробности у менеджеров. ПРОМОКОД: JAVA_03
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Стать бэкендером в Яндексе за несколько дней
12–17 апреля устраиваем Week Offer Backend: за несколько дней можно пройти технические секции и попасть в Яндекс. Для этого нужно зарегистрироваться и решить несколько задач в Контесте.
Ищем классных бэкенд-разработчиков с опытом работы от 3 лет на C++, Python, Java/Kotlin или Go, готовых работать в офисном или гибридном режиме в России.
Вы сможете выбрать одну из команд: Яндекс Пэй, Яндекс ID, Яндекс Плюс, Яндекс Сплит, Яндекс Сейвы, Яндекс 360. Можно пообщаться с нанимающими менеджерами и выбрать самый интересный проект. Если всё пройдёт хорошо, сразу же получите офер.
Узнать подробности и зарегистрироваться можно здесь.
Реклама. ООО "Яндекс". ИНН 7736207543
Класс AbstractSet
Класс AbstractSet
в Java является частью Java Collection Framework , которая реализует интерфейс Collection и расширяет класс AbstractCollection
. Он обеспечивает скелетную реализацию интерфейса Set. Этот класс не переопределяет какие-либо реализации из класса AbstractCollection
, а просто добавляет реализации для методов equals() и hashCode().
Подробнее можно почитать здесь.
#вопросы_с_собеседований
Скомпилируется ли код с картинки?
Да, код будет скомпилирован, потому что он следует спецификации функционального интерфейса, определяющей только один абстрактный метод. Второй метод, count, является методом по умолчанию, который не увеличивает количество абстрактных методов.
⭐️🚀 Смарт-контракты управляют миллионами транзакций в мире блокчейна. Хотите научиться их разрабатывать?
Solidity — ключевой язык программирования для создания децентрализованных приложений. Разбираем, как написать, задеплоить и протестировать смарт-контракт.
После открытого вебинара вы сможете создать свой первый контракт, поймёте принципы работы Solidity и подготовитесь к профессиональному росту в Web3-разработке.
⏰ Встречаемся 19 марта в 20:00 мск! Участники получат скидку на большое обучение «Solidity Developer».
👉 Для участия зарегистрируйтесь https://otus.pw/SmOM/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👩💻 Создание приложения Блокнот на Java 👩💻
🗓 24 марта в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java-разработчик».
На вебинаре мы разработаем полноценное приложение «Блокнот» с графическим пользовательским интерфейсом, демонстрирующее базовые принципы создания текстового редактора на Java.
В процессе занятия мы реализуем такие функциональные возможности, как:
- создание нового текстового файла, его сохранение,
- загрузка уже существующего файла,
- редактирование текста, подсчет статистических данных и другие операции, характерные для текстовых редакторов.
Особое внимание будет уделено работе с файловой системой, потоками ввода/вывода и обработке событий, что позволит создать удобное и интуитивно понятное приложение.
Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук.
🔗 Ссылка на регистрацию: https://otus.pw/xXUb/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
#вопросы_с_собеседований
Какие подклассы класса Reader вы знаете, для чего они предназначены?
• Reader
- абстрактный класс, описывающий символьный ввод;
• BufferedReader
- буферизованный входной символьный поток;
• CharArrayReader
- входной поток, который читает из символьного массива;
• FileReader
- входной поток, читающий файл;
• FilterReader
- абстрактный класс, предоставляющий интерфейс для классов-надстроек;
• InputStreamReader
- входной поток, транслирующий байты в символы;
• LineNumberReader
- входной поток, подсчитывающий строки;
• PipedReader
- входной канал;
• PushbackReader
- входной поток, позволяющий возвращать символы обратно в поток;
• StringReader
- входной поток, читающий из строки.
IT-инженеры — объединяйтесь! 🤝
Мы собрали огромную базу прикладной информации для IT-инженеров.
Выбирайте, что вам интересно:
— Полупроводники
— Высоконагруженные системы
— Связь и космос
— Промышленный дизайн
— Нейроморфные технологии
— Индустрия 4.0
— Печатные платы
— Технологии мира музыки
📌 Статьи, лекции, подкасты, кейсы из инженерной практики и тематические гайды в одном месте @ultimate_engineer
Когда специалист становится профи? Когда студенты зовут его «Наставник!»
Делитесь экспертизой — станьте экспертом Яндекс Практикума.
Яндекс Практикум — сервис современного онлайн-образования, где обучают актуальным цифровым профессиям. Сейчас есть возможность присоединиться к команде и стать наставником для студентов курса Middle Java-разработчик.
Позиция наставника подойдёт тем, кто больше хочет общаться лично, а именно проводить вебинары, разбирать кейсы и отвечать на 1000 и 1 вопрос; нагрузка 1-3 часа в день.
Почему это интересно:
▪︎ удалёнка и дополнительный доход,
▪︎ благодарная аудитория, возможность самореализации,
▪︎ энергичное комьюнити и коллеги, с которыми не скучно.
Если вы в знаете технологии Java 8 и выше — добро пожаловать!
Посмотрите, что ожидают от кандидата, и откликайтесь, если интересно.
Интенсив по очередям: Kafka & NATS
Асинхронное взаимодействие и очереди — невероятно широкая тема, и абсолютно обязательная к изучению всем, кто интересуется архитектурой. Разработчику важно понимать архитектурные особенности, сильные и слабые стороны компонент, на базе которых строится архитектура.
🌐 В программе курса:
▪️Асинхронное взаимодействие с помощью очередей: подходы, свойства, гарантии
▪️Какие бывают очереди, основные системы очередей, на какие свойства и требования смотреть при выборе
▪️Как конфигурировать и управлять системами очередей
▪️Архитектура Apache Kafka, streams, topics, конфигурации от минимального single instance до production grade кластера с отказоустойчивостью
▪️Архитектуры NATS, pub/sub, req/res, streaming, кластер, суперкластер, федерация, edge.
Всё в формате «живых» онлайн-сессий (лекции, брейнштормы, демо).
🥸 Кто мы: R&D-центр Devhands.io, наш канал (/channel/rybakalexey). Автор курса — Владимир Перепелица, эксперт по большим проектам, очередям и Tarantool, Solution Architect в Exness, создатель S3 в VK Cloud, регулярный спикер и член ПК конференций Highload.
🗓 Старт курса 8 апреля, 5 недель обучения. Изучить программу и записаться можно здесь.
Ждём вас!
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqxRxeAL
BeanFactory
BeanFactory — это интерфейс, который предоставляет механизм для управления объектами bean в контейнере Inversion of Control (IoC).
BeanFactory является основой фреймворка Spring, где используется для создания приложений по принципу IoC и Dependency Injection. Он позволяет создавать гибкие, легко тестируемые приложения с инверсией управления и внедрением зависимостей.
#вопросы_с_собеседований
Что будет, если единственный конструктор класса объявлен как final?
— Этот конструктор нельзя будет переопределить в подклассах.
— Невозможно создать наследников от данного класса, так как нельзя переопределить единственный конструктор.
— Попытка создания подкласса приведет к ошибке компиляции, так как компилятор не сможет сгенерировать конструктор по умолчанию для подкласса.
— Единственный способ наследоваться от такого класса - использовать агрегацию, композицию или делегирование вместо наследования.
Это полезный прием для предотвращения наследования, когда оно не требуется или нежелательно по архитектурным соображениям.
👩💻 Rate-limiter. Bucket4j
Приглашаем на открытый урок.
🗓 24 марта в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional».
Продолжаем изучать библиотеки обеспечения устойчивости приложений. На примере Bucket4j посмотрим устройство распределенного Rate-limiter-а.
О чём поговорим:
✔️ Познакомимся с библиотекой Bucket4j.
✔️ Узнаем основные принципы действия и сценарии применения.
Кому будет интересно:
Вебинар будет полезен Java-разработчикам, архитекторам ПО и инженерам по устойчивости систем, заинтересованным в эффективном управлении потоками запросов и защите приложений от перегрузок.
🔗 Ссылка на регистрацию: https://otus.pw/iTmCg/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
⚡️ Айтишник из «VISION» скупил курсы айти школ и выложил гигабайты материалов к себе
Каждый найдет что-то по душе:
1202 ГБ — Python
1811 ГБ — Frontend
1100 ГБ — C / C++ / C#
804 ГБ — Java
411 ГБ — SQL & БД
309 ГБ — DevOps
998 ГБ — ИБ & Хакинг
773 ГБ — Kotlin / Swift
189 ГБ — PHP
201 ГБ — GoLang
170 ГБ — Rust
167 ГБ — QA / Тестирование
310 ГБ — 1C + Лицензии
495 ГБ — Машинное обучение
704 ГБ — Аналитика Данных
991 ГБ — Дизайн
Материалы в закрепе, постоянно пополняются👆🏻
Метод equalsIgnoreCase()
Метод equalsIgnoreCase() используется для сравнения двух строк без учета регистра (заглавных и строчных букв).
Принимает в качестве аргумента вторую строку для сравнения, сравнивает две строки посимвольно после приведения их к одному регистру и возвращает boolean значение - true или false.
Работает намного быстрее, чем сравнение через toUpperCase/toLowerCase.
Полезен при сравнении пользовательских строк и лучше использовать его вместо ручного сравнения через equals.
#это_база
Priority Queue
PriorityQueue - это коллекция, которая хранит элементы в соответствии с их приоритетом.
Реализует очередь на базе кучи (heap) и используется в ситуациях, когда необходимо обрабатывать или получать элементы в определенном порядке.
Элементы в очереди упорядочены по их естественному порядку (если элементы компарируемые) или согласно компаратору, переданному при создании очереди.
Первым всегда будет элемент с наивысшим приоритетом и извлечь можно только его.
PriorityQueue не поддерживает изменение приоритета элемента после добавления.
ConcurrentSkipListSet
ConcurrentSkipListSet - это thread-safe реализация отсортированного множества на основе skip list.
Элементы в нем хранятся в сбалансированной иерархии, похожей на связный список и дубликаты не допускаются, также поддерживает unicity элементов.
Автоматически сортирует элементы по естественному порядку или компаратору. Все основные методы потокобезопасны из коробки.
Подходит для частого добавления/удаления/поиска элементов из разных потоков. Масштабируется лучше чем synchronized Set при увеличении количества потоков.
ConcurrentSkipListSet используется в многопоточных приложениях для хранения уникальных элементов в отсортированном порядке, выполнения быстрых операций поиска, добавления, удаления за время O(log n), избежания проблем синхронизации.
👩💻 Открытый урок «DAO на Spring JDBC»
🗓 26 марта в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework»
Использование нативного SQL с Spring JDBC позволяет создать безопасное, поддерживаемое и тестируемое DAO для эффективного доступа к данным.
О чём поговорим:
- Преимущества нативного SQL при разработке DAO.
- Основные возможности Spring JDBC для работы с запросами.
- Подходы к обеспечению безопасности и тестируемости DAO.
🔗 Ссылка на регистрацию: https://otus.pw/23KE/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Напишите программу на Java для вставки данного элемента в очередь с приоритетами
Ответ на картинке.
Извлекаем имя из адреса электронной почты
Метод extractNameFromEmail
принимает строку с адресом электронной почты и возвращает подстроку до символа "@" (если символ "@" присутствует в строке) в качестве имени.
Object[] vs custom Class
Код с Object абсолютно не читабельный, когда приходится работать с возвращаемым значением в другом месте.То есть, чтобы понять что же хранит в себе возвращаемое значение — нужно вернуться в класс вызова и читать комментарии к методу, если же, конечно, они есть, а если нет, вникать в код, что не очень эффективно. Собственно, я сам этим иногда грешу, когда очень спешу. С этим можно смириться, если это очень редко, но, все же, в таких ситуациях лучше создавать новый класс. Облегчите жизнь тем, кто придет после вас.
🔴 20 марта состоится ключевая конференция по трафику и продажам в Telegram!
Будет полезно тем, кто:
— Уже работает с Telegram Ads или посевами и стремится кратно улучшать CTR, CPC, CPL, CPO, ROI и другие показатели.
— Использует Telegram для продажи услуг и инфопродуктов и хочет вывести свой бизнес на новый уровень.
— Планирует начать зарабатывать в Telegram и ищет проверенные инструменты и стратегии.
🔥Состав спикеров сильнейший:
• Ирина Хакамада — номинант Нобелевской премии Мира и одна из 10 лучших бизнес-спикеров России.
• Георгий Лобушкин — бывший пресс-секретарь Павла Дурова.
• Феликс Зинатуллин — Основатель Церебро.
• Дмитрий Форман — digital-директор «Самолёт».
• Марат Шайхетдинов — Основатель TgConf и Clickise.
• Алексей Соловьев — Лидер TON Society СНГ.
• Иван Боричев — крупнейший канал о Петербурге, первый телеграм-бар. Продажи рекламы > 15 млн. в месяц
• Дарья Фарберова — ведущий специалист по таргетированной рекламе в Контуре.
• Кирилл Сибиряк — выручка 2 млрд рублей за 2 года. Вывел 4 онлайн-школы с 0 до 100 млн+ месяц с помощью моделей продаж в Telegram.
• Павел Калюканов — продукт-менеджер TgStat, без которого статистика не была бы такой прозрачной.
И более 25 других спикеров!
Хедлайнер выступления на Afterparty конференции — группа «Город 312»! 🔥 Оторвемся под известные хиты, сделаем фото с кумирами молодости, зарядимся их энергией, и погрузимся в атмосферу праздника.
TgConf - уже зарекомендовали себя, как конференция высокого уровня с отличной организацией и действительно интересной и эффективной информацией.
— Инсайты о рекламе и Telegram, которые не найдете в открытом доступе.
— Возможность задать вопросы лидерам отрасли и получить ответы из первых уст.
— Нетворкинг, который расширит границы вашего бизнеса и даже поможет получить выгодные контракты на сотрудничество
— Закрытая Afterparty с VIP-участниками и музыкальной группой.
🗓 Когда: 20 марта
📍 Где: Main Stage, Москва
🎤 Ведущие конференции: Ярослав Бабушкин, журналист Forbes Russia и Наиль Байков — организатор аффилиат-мероприятий, ведущий телепередач и бизнес-тренер.
🎟 Приобретайте билеты на сайте.
Совсем скоро будет повышение цен!