Изучаем Java. По вопросам сотрудничества: @seniorvladislav
➡️ Использование Pattern.compile().flags()
для получения флагов регулярного выражения
В Java 9 был добавлен метод flags()
в класс Pattern, который позволяет получить флаги, используемые при компиляции регулярного выражения.•
Это может быть полезно для анализа и отладки регулярных выражений, особенно в сложных системах, где нужно понимать, с какими опциями было создано регулярное выражение.•
В этом примере создаётся регулярное выражение с несколькими флагами, и затем с помощью метода flags()
мы можем получить информацию о них
💸 Вакансии для IT'шников
Выбери своё направление ⤵
1. Frontend
2. Python
3. Java
4. Тестировщик QA
5. Data Science
6. DevOps
7. C#
8. C/C++
9. Golang
10. PHP
11. Kotlin
12. Swift
Как работают методы wait() и notify()(notifyAll())?
Эти методы определены у класса Object
и предназначены для взаимодействия потоков между собой при межпоточной синхронизации.
• wait()
: освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify()/notifyAll()
;
• notify()
: продолжает работу потока, у которого ранее был вызван метод wait()
;
• notifyAll()
: возобновляет работу всех потоков, у которых ранее был вызван метод wait()
.
Когда вызван метод wait()
, поток освобождает блокировку на объекте и переходит из состояния Работающий (Running
) в состояние Ожидания (Waiting
). Метод notify()
подаёт сигнал одному из потоков, ожидающих на объекте, чтобы перейти в состояние Работоспособный (Runnable
). При этом невозможно определить, какой из ожидающих потоков должен стать работоспособным. Метод notifyAll()
заставляет все ожидающие потоки для объекта вернуться в состояние Работоспособный (Runnable
). Если ни один поток не находится в ожидании на методе wait()
, то при вызове notify()
или notifyAll()
ничего не происходит.
Поток может вызвать методы wait()
или notify()
для определённого объекта, только если он в данный момент имеет блокировку на этот объект. wait()
, notify()
и notifyAll()
должны вызываться только из синхронизированного кода.
Что такое перегрузка методов?
Перегрузка методов — это свойство полиморфизма, в котором при помощи изменения сигнатуры метода можно создать различные реализации методов для одной и той же операции:
- одинаковое имя метода;
- различные аргументы;
- различный порядок аргументов;
Например, один и тот же add() из List может быть перегружен следующим образом и будет выполнять добавление разным способом, в зависимости от аргументов метода:
- add(Object o) — просто добавляет объект;
- add(int index, Object o) — добавляет объект в определенный индекс;
- add(Collection<Object> c) — добавляет список объектов;
- add(int index, Collection<Object> c) — добавляет список объектов, начиная с определенного индекса.
#вопросы_с_собеседований
Можем ли мы перегрузить методы по возвращаемому типу?
Мы не можем перегружать по возвращаемому типу. Это поведение аналогично C++.
Приглашаем опытных Java-разработчиков на конференцию Joker 2024
📆 9 октября онлайн и 15–16 октября в Санкт-Петербурге
🗣 45 докладов и дискуссий в программе
Спикеры расскажут про библиотеки и фреймворки, инструменты и инфраструктуру, Spring, JVM, API, хранение и обработку данных, перформанс, архитектуру, асинхронное программирование, фичи языка — новые и уже известные.
Также в программе — 4 кейноута:
— доклад про обратную совместимость в Java;
— история китайского хостинга репозиториев Gitee от его создателя;
— введение в проект LLVM для Java-разработчиков;
— обзор возможностей ИИ на примере современного искусства.
Вас ждет большая встреча Java-сообщества и целых три дня общения с опытными разработчиками.
Билет на Joker 2024 можно купить за счет компании — читайте в статье на VC, почему это выгодно не только вам, но и вашему работодателю.
При покупке билета за свой счет («Для частных лиц») используйте промокод для скидки 15% — SENIORJAVIST
Реклама. ООО «Джуг Ру Груп». ИНН 7801341446
🏓 Знакомимся с Java на примере пинг-понга
Хотите узнать, как создавать программы на Java, даже если никогда не программировали?
Ждем вас на открытом вебинаре 26 сентября в 20:00 мск,
где мы разберем:
➡️ что такое программирование и язык Java;
➡️ как создать игру пинг-понг с нуля на Java;
➡️ как работать с двумерной графикой в Java.
Урок полезен для тех, кто хочет начать изучать Java с нуля и увидеть на практике, как создаются приложения.
🎙 Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук.
Встречаемся в преддверии старта курса «Специализация Java-разработчик».
Все участники вебинара получат специальную цену на обучение!
➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cBpdaEРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
#вопросы_с_собеседований
Как не допустить сериализацию?
Чтобы не допустить автоматическую сериализацию, можно переопределить private методы для создания исключительной ситуации NotSerializableException.
Любая попытка записать или прочитать этот объект теперь приведет к возникновению исключения.
#вопросы_с_собеседований
Какие конечные методы работы со стримами вы знаете?
findFirst() возвращает первый элемент;
findAny() возвращает любой подходящий элемент;
collect() представление результатов в виде коллекций и других структур данных;
count() возвращает количество элементов;
anyMatch() возвращает true, если условие выполняется хотя бы для одного элемента;
noneMatch() возвращает true, если условие не выполняется ни для одного элемента;
allMatch() возвращает true, если условие выполняется для всех элементов;
min() возвращает минимальный элемент, используя в качестве условия Comparator;
max() возвращает максимальный элемент, используя в качестве условия Comparator;
forEach() применяет функцию к каждому объекту (порядок при параллельном выполнении не гарантируется);
forEachOrdered() применяет функцию к каждому объекту с сохранением порядка элементов;
toArray() возвращает массив значений;
reduce() позволяет выполнять агрегатные функции и возвращать один результат.
Для числовых стримов дополнительно доступны:
sum() возвращает сумму всех чисел;
average() возвращает среднее арифметическое всех чисел.
Задача
Пользователь вводит три слова, программа сортирует их в алфавитном порядке
Пример:
Пользователь вводит слова:
папа
сын
мама
Программа выводит:
мама
папа
сын.
#вопросы_с_собеседований
Укажите различия между конструктором и методами в Java
Ответ на картинке.
Тестовое собеседование на Middle Java-разработчика завтра
Уже завтра, 25 сентября в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
1. Мария Ядерцова ведущий Java-разработчик в МТС Диджитал и ex. Сбербанк-Технологии будет задавать реальные вопросы и задачи разработчику-добровольцу
2. Мария будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Марии
Что узнаешь на прямом эфире от ШОРТКАТ:
· Чего ждут от кандидатов на Middle позиции в Java-разработке
· Какие вопросы задают на интервью и зачем
· Как подготовиться к собесу, чтобы получить оффер
Это бесплатно? Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqvBftJ4
«Хочешь сделать хорошо? Сделай сам!» (с)
Распространённый подход и, одновременно, стратегическая ошибка многих руководителей.
Да, даже опытные менеджеры испытывают сложности с делегированием.
Однако передача функций – это развитие команды, экономия времени, снижение фактора автобуса и куча других преимуществ, которыми надо пользоваться.
Как правильно делегировать задачи – вы узнаете на открытом вебинаре
«Делегирование и управление временем: как балансировать между кодом и командой?»
Спикер – Илья Прахт, опытный менеджер в IT, тренер, консультант и ментор
Вы сможете:
- Делегировать задачи, но сохранять контроль над ними
- Уделять больше времени себе и команде
- Добиваться больших результатов вместе с командой
Ну и чаще ходить в отпуск, конечно же!
26 сентября, 19:00 МСК
Участие бесплатное
Записаться на вебинар: https://vk.cc/cB0z4N
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Где можно использовать префиксные деревья?
При реализации множеств и ассоциативных массивов.
А где можно посмотреть, как выполняется алгоритм ассоциативного массива на основе префиксного дерева?
На нашем открытом онлайн-уроке!
Мы выполним визуальное тестирование загрузкой 2000 слов в массив англо-русского словаря.
Вебинар «Префиксное дерево» проведёт Евгений Волосатов, программист БД с 25-летним опытом.
👨💻🛠👨🏻💻 Будет интересно: junior-разработчикам на любых языках программирования
🗓 7 октября, 20:00 МСК
Бесплатно в рамках старта курса «Алгоритмы и структуры данных»
➡️ Записаться на открытый урок: https://vk.cc/cBeAlGРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
LWJGL (Lightweight Java Game Library) — кроссплатформенная игровая библиотека с доступом к возможностям OpenGL, OpenAL и OpenCL. Библиотека позволяет управлять графикой, звуком, игровыми контроллерами разного типа.
Целью создания LWJGL был выход «за флажки» Java-платформы — работа с ресурсами, обычно недоступными джавистам. Библиотека используется в игровых Java-движках и фреймворках, таких как jPCT 3D для Android, LibGDX, Ardor3D.
https://www.lwjgl.org/
Создаем графическое окно и меняем цвет фона при клике мышью с помощью Java
Программа создает окно размером 400x400 пикселей, где при клике мышью меняется цвет фона на случайный. Здесь используются следующие компоненты:
1) JFrame - основное окно программы.
2) JPanel - панель внутри окна, цвет фона которой меняется.
3) MouseAdapter - класс для обработки событий мыши. В данном случае мы переопределяем метод mouseClicked, чтобы изменить цвет фона панели при клике мыши.
➡️ Zt-Exec — простая и удобная работа с процессами в Java
Zt-Exec — это легковесная библиотека для выполнения и управления внешними процессами в Java-приложениях. Она предоставляет удобный API для запуска командных процессов, чтения их вывода и обработки ошибок, предлагая более гибкие возможности по сравнению со стандартным ProcessBuilder.
🗣 Zt-Exec — отличный выбор, если нужно просто и эффективно запускать внешние команды или управлять процессами прямо из Java-кода.
🔗 Ссылочка на доку
Разбираем как решать задачи на LeetCode
✅ Примеры решений
✅ Пояснения
Выбери своё направление:
1. Python
2. JavaScript
3. Java
4. C#
5. Golang
6. C/C++
7. PHP
8. Kotlin
9. Swift
Обучайся ИТ и строй карьеру уже во время учебы
Это возможно в «Школе 21» — школе цифровых технологий, проекте Сбера
Вот лишь несколько особенностей:
— обучение в школе бесплатное, от тебя нужна только мотивация
— 100% выпускников работают в крутых ИТ-компаниях
— стажировка входит в образовательный трек
— во время обучения соберешь портфолио и получишь реальный опыт
Кампусы школы открыты уже в 13 городах России и работают 24/7.
Узнавай больше и подавай заявку на сайте «Школы 21» уже сейчас!
Реклама. Заказчик АНО "Школа 21" ИНН 7736316133
#вопросы_с_собеседований
Из за чего может возникать NoClassDefFoundError, NoSuchMethodError?
🔸 NoClassDefFoundError может возникнуть, если нужной библиотеки с этим классом нет в classpath
🔸 NoSuchMethodError может возникнуть из-за несовместимости ваших библиотек, если зависимая библиотека A вызывает метод из старой версии библиотеки B, но в classpath есть более новая версия библиотеки B, c другой сигнатурой этого метода
Метод Collections.shuffle
Метод shuffle() случайным образом перемешивает все элементы переданного списка.
Что такое ReadWriteLock?ReadWriteLock
— это интерфейс, расширяющий базовый интерфейс Lock
. Используется для улучшения производительности в многопоточном процессе и оперирует парой связанных блокировок (одна - для операций чтения, другая - для записи). Блокировка чтения может удерживаться одновременно несколькими читающими потоками, до тех пор, пока не появится записывающий. Блокировка записи является эксклюзивной.
Существует реализующий интерфейс ReadWriteLock
класс ReentrantReadWriteLock
, который поддерживает до 65535 блокировок записи и до стольки же блокировок чтения.
Присоединяйся к всероссийскому чемпионату по программированию МТС True Tech Champ 2024 с призовым фондом в 10 250 000 ₽. Решай алгоритмические задачи или программируй роботов.
Какие задания и этапы ждут участников, расскажут на вводном вебинаре создатели треков 26 сентября в 17:00. Регистрируйся по ссылке.
В чемпионате найдутся задачи для начинающих ИТ-специалистов и опытных разработчиков.
✔️ В алгоритмическом треке участники будут работать со структурами данных, покажут математические навыки и умение решать алгоритмические задачи.
✔️ В треке по программированию роботов нужно будет соревноваться на скорость прохождения лабиринта робомышью.
Подробнее о чемпионате — по ссылке.
Регистрация участников: до 12 октября
Старт онлайн-этапов: с 1 октября
Финал в офлайне: 8 ноября
🔥Тесты для подготовки к собеседованию🔥
Выбери своё направление:
1. Frontend
2. Python
3. Java
4. Тестировщик QA
5. Data Science
6. DevOps
7. C#
8. C/C++
9. Golang
10. PHP
11. Kotlin
12. Swift
👩💻 Пройди тест по Java
Проверь насколько хорошо ты знаешь Java и готов освоить 👩💻 Spring!
Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cBkfFYРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Как остановить поток?
На данный момент в Java
принят уведомительный порядок остановки потока (хотя JDK 1.0
и имеет несколько управляющих выполнением потока методов, например stop()
, suspend()
и resume()
- в следующих версиях JDK
все они были помечены как deprecated
из-за потенциальных угроз взаимной блокировки).
Для корректной остановки потока можно использовать метод класса Thread - interrupt()
. Этот метод выставляет некоторый внутренний флаг-статус прерывания. В дальнейшем состояние этого флага можно проверить с помощью метода isInterrupted()
или Thread.interrupted()
(для текущего потока). Метод interrupt()
также способен вывести поток из состояния ожидания или спячки. Т.е. если у потока были вызваны методы sleep()
или wait()
– текущее состояние прервется и будет выброшено исключение InterruptedException
. Флаг в этом случае не выставляется.
Схема действия при этом получается следующей:
• Реализовать поток.
• В потоке периодически проводить проверку статуса прерывания через вызов isInterrupted()
.
• Если состояние флага изменилось или было выброшено исключение во время ожидания/спячки, следовательно поток пытаются остановить извне.
• Принять решение – продолжить работу (если по каким-то причинам остановиться невозможно) или освободить заблокированные потоком ресурсы и закончить выполнение.
Возможная проблема, которая присутствует в этом подходе – блокировки на потоковом вводе-выводе. Если поток заблокирован на чтении данных - вызов interrupt()
из этого состояния его не выведет. Решения тут различаются в зависимости от типа источника данных. Если чтение идет из файла – долговременная блокировка крайне маловероятна и тогда можно просто дождаться выхода из метода read(). Если же чтение каким-то образом связано с сетью – стоит использовать неблокирующий ввод-вывод из Java NIO
.
Второй вариант реализации метода остановки (а также и приостановки) – сделать собственный аналог interrupt()
. Т.е. объявить в классе потока флаги – на остановку и/или приостановку и выставлять их путем вызова заранее определённых методов извне. Методика действия при этом остаётся прежней – проверять установку флагов и принимать решения при их изменении. Недостатки такого подхода. Во-первых, потоки в состоянии ожидания таким способом не «оживить». Во-вторых, выставление флага одним потоком совсем не означает, что второй поток тут же его увидит. Для увеличения производительности виртуальная машина использует кеш данных потока, в результате чего обновление переменной у второго потока может произойти через неопределенный промежуток времени (хотя допустимым решением будет объявить переменную-флаг как volatile
).
#вопросы_с_собеседований
Сколько создается новых объектов, когда вы добавляете новый элемент в HashMap?
Создается один новый объект статического вложенного класса Entry<K,V>
.
JUnit
JUnit — свободный Java-фреймворк для создания модульных тестов (они же — юнит-тесты). Эта библиотека — одна из самых популярных, её используют почти все. Рекомендуем вам разобраться с ней как можно быстрее, поскольку очень часто начинающих Java-разработчиков и Java Trainee заставляют «покрывать код тестами». И, надо сказать, это далеко не самое плохое начало карьеры.
Больше информации о Junit можно найти здесь.
Java для начинающих: решаем задачу умножения матриц
Смотреть статью
🔥 Самые нужные каналы для Java разработчика, чтобы расти в доходе 💸
• Java | Вопросы собесов
• Java | LeetCode
• Java | Тесты
• Java | Удалёнка
Подпишись, чтобы не потерять ☝️