seniorjavist | Unsorted

Telegram-канал seniorjavist - Senior Java Developer

-

Изучаем Java. По вопросам сотрудничества: @seniorvladislav

Subscribe to a channel

Senior Java Developer

#вопросы_с_собеседований
Что такое JDBC?

JDBC, Java DataBase Connectivity (соединение с базами данных на Java)
— промышленный стандарт взаимодействия Java-приложений с различными СУБД. Реализован в виде пакета java.sql, входящего в состав Java SE.

JDBC основан на концепции драйверов, которые позволяют получать соединение с базой данных по специально описанному URL. При загрузке драйвер регистрирует себя в системе и в дальнейшем автоматически вызывается, когда программа требует URL, содержащий протокол, за который этот драйвер отвечает.

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

Senior Java Developer

Встроенные исключения

Java определяет несколько классов исключений внутри стандартного пакета java.lang.

Наиболее общие из этих исключений являются подклассами стандартного типа RuntimeException. Поскольку java.lang неявно импортируется во все java-программы, то большинство исключений, полученных из RuntimeException, автоматические.

Java определяет несколько других типов исключений, которые относятся к его различным библиотекам класса. Ниже приведен список неконтролируемых исключений на этапе выполнения (Unchecked RuntimeException).

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

Senior Java Developer

➡️ Picocli — мощный инструмент для создания CLI-приложений в Java

Picocli — это простая и гибкая библиотека для создания командных интерфейсов (CLI) в Java. Она поддерживает аннотации для автоматической генерации документации по командам, обработку аргументов, подкоманд, автодополнение и много других возможностей, которые упрощают создание сложных CLI-приложений.

🗣 Picocli — это отличный выбор для разработчиков, которым нужно быстро и просто создать CLI-приложение с минимальным количеством кода и мощными функциями.

🔗 Ссылочка на доку

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

Senior Java Developer

➡️ Использование Pattern.compile().flags() для получения флагов регулярного выражения

В Java 9 был добавлен метод flags() в класс Pattern, который позволяет получить флаги, используемые при компиляции регулярного выражения.

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

В этом примере создаётся регулярное выражение с несколькими флагами, и затем с помощью метода flags() мы можем получить информацию о них

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

Senior Java Developer

💸 Вакансии для 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

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

Senior Java Developer

Как работают методы 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() должны вызываться только из синхронизированного кода.

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

Senior Java Developer

Что такое перегрузка методов?

Перегрузка методов — это свойство полиморфизма, в котором при помощи изменения сигнатуры метода можно создать различные реализации методов для одной и той же операции:
- одинаковое имя метода;
- различные аргументы;
- различный порядок аргументов;

Например, один и тот же add() из List может быть перегружен следующим образом и будет выполнять добавление разным способом, в зависимости от аргументов метода:
- add(Object o) — просто добавляет объект;
- add(int index, Object o) — добавляет объект в определенный индекс;
- add(Collection<Object> c) — добавляет список объектов;
- add(int index, Collection<Object> c) — добавляет список объектов, начиная с определенного индекса.

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

Senior Java Developer

#вопросы_с_собеседований
Можем ли мы перегрузить методы по возвращаемому типу?

Мы не можем перегружать по возвращаемому типу. Это поведение аналогично C++.

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

Senior Java Developer

Приглашаем опытных Java-разработчиков на конференцию Joker 2024

📆 9 октября онлайн и 15–16 октября в Санкт-Петербурге
🗣 45 докладов и дискуссий в программе

Спикеры расскажут про библиотеки и фреймворки, инструменты и инфраструктуру, Spring, JVM, API, хранение и обработку данных, перформанс, архитектуру, асинхронное программирование, фичи языка — новые и уже известные.

Также в программе — 4 кейноута:
— доклад про обратную совместимость в Java;
— история китайского хостинга репозиториев Gitee от его создателя;
— введение в проект LLVM для Java-разработчиков;
— обзор возможностей ИИ на примере современного искусства.

Вас ждет большая встреча Java-сообщества и целых три дня общения с опытными разработчиками.

Билет на Joker 2024 можно купить за счет компании — читайте в статье на VC, почему это выгодно не только вам, но и вашему работодателю.

При покупке билета за свой счет («Для частных лиц») используйте промокод для скидки 15% — SENIORJAVIST

Реклама. ООО «Джуг Ру Груп». ИНН 7801341446

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

Senior Java Developer

🏓 Знакомимся с Java на примере пинг-понга

Хотите узнать, как создавать программы на Java, даже если никогда не программировали?

Ждем вас на открытом вебинаре 26 сентября в 20:00 мск,

где мы разберем:

➡️ что такое программирование и язык Java;
➡️ как создать игру пинг-понг с нуля на Java;
➡️ как работать с двумерной графикой в Java.

Урок полезен для тех, кто хочет начать изучать Java с нуля и увидеть на практике, как создаются приложения.

🎙 Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук.

Встречаемся в преддверии старта курса «Специализация Java-разработчик».
Все участники вебинара получат специальную цену на обучение!

➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cBpdaE

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

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

Senior Java Developer

#вопросы_с_собеседований
Как не допустить сериализацию?

Чтобы не допустить автоматическую сериализацию, можно переопределить private методы для создания исключительной ситуации NotSerializableException.

Любая попытка записать или прочитать этот объект теперь приведет к возникновению исключения.

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

Senior Java Developer

#вопросы_с_собеседований
Какие конечные методы работы со стримами вы знаете?

findFirst()
возвращает первый элемент;
findAny() возвращает любой подходящий элемент;
collect() представление результатов в виде коллекций и других структур данных;
count() возвращает количество элементов;
anyMatch() возвращает true, если условие выполняется хотя бы для одного элемента;
noneMatch() возвращает true, если условие не выполняется ни для одного элемента;
allMatch() возвращает true, если условие выполняется для всех элементов;
min() возвращает минимальный элемент, используя в качестве условия Comparator;
max() возвращает максимальный элемент, используя в качестве условия Comparator;
forEach() применяет функцию к каждому объекту (порядок при параллельном выполнении не гарантируется);
forEachOrdered() применяет функцию к каждому объекту с сохранением порядка элементов;
toArray() возвращает массив значений;
reduce() позволяет выполнять агрегатные функции и возвращать один результат.

Для числовых стримов дополнительно доступны:
sum() возвращает сумму всех чисел;
average() возвращает среднее арифметическое всех чисел.

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

Senior Java Developer

Задача

Пользователь вводит три слова, программа сортирует их в алфавитном порядке

Пример:
Пользователь вводит слова:
папа
сын
мама

Программа выводит:
мама
папа
сын.

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

Senior Java Developer

#вопросы_с_собеседований
Укажите различия между конструктором и методами в Java

Ответ на картинке.

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

Senior Java Developer

Тестовое собеседование на Middle Java-разработчика завтра

Уже завтра, 25 сентября в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
1. Мария Ядерцова ведущий Java-разработчик в МТС Диджитал и ex. Сбербанк-Технологии будет задавать реальные вопросы и задачи разработчику-добровольцу
2. Мария будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Марии

Что узнаешь на прямом эфире от ШОРТКАТ:

· Чего ждут от кандидатов на Middle позиции в Java-разработке
· Какие вопросы задают на интервью и зачем
· Как подготовиться к собесу, чтобы получить оффер

Это бесплатно? Бесплатно

Переходи в нашего бота, чтобы получить ссылку на эфир@shortcut_sh_bot

Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqvBftJ4

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

Senior Java Developer

🌍Откройте мир Clojure: сфера разработки, основные фишки и преимущества языка.

Изучите, чем Clojure выделяется среди других бэкендовых языков и какие преимущества он предлагает. Узнайте, как Clojure может улучшить вашу разработку и открыть новые карьерные возможности.

Мероприятие для опытных разработчиков.

📅Открытый вебинар 3 октября в 20:00 мск пройдет в рамках большого курса. После занятия вы сможете продолжить обучение по специальной цене и даже в рассрочку!

Регистрация: https://vk.cc/cBwbDC

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

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

Senior Java Developer

➡️ HikariCP — высокопроизводительный пул соединений для баз данных

HikariCP — это лёгкий и быстрый пул соединений для баз данных, который считается одним из самых производительных в экосистеме Java.

Он минимизирует задержки при подключении к базам данных, обеспечивая быстрый доступ к ресурсам и высокую масштабируемость. Благодаря простоте настройки и высокой производительности, HikariCP является отличным выбором для проектов, где требуется эффективное управление соединениями с базой данных.

🗣 HikariCP — отличный выбор для высоконагруженных приложений, где важна производительность и стабильность соединений с базой данных.

🔗 Ссылочка на доку

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

Senior Java Developer

➡️ Использование метода String::indent для удобной работы с отступами строк

Начиная с Java 12, был добавлен метод String.indent(), который позволяет легко добавлять или удалять отступы у каждой строки в многострочном тексте.

Это полезно для форматирования строк, когда нужно управлять отступами, особенно при создании сложных текстовых структур.

Метод String.indent() делает управление отступами более удобным и чистым, особенно при работе с форматированными текстами в Java.

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

Senior Java Developer

Создаем графическое окно и меняем цвет фона при клике мышью с помощью Java

Программа создает окно размером 400x400 пикселей, где при клике мышью меняется цвет фона на случайный. Здесь используются следующие компоненты:
1) JFrame - основное окно программы.
2) JPanel - панель внутри окна, цвет фона которой меняется.
3) MouseAdapter - класс для обработки событий мыши. В данном случае мы переопределяем метод mouseClicked, чтобы изменить цвет фона панели при клике мыши.

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

Senior Java Developer

➡️ Zt-Exec — простая и удобная работа с процессами в Java

Zt-Exec — это легковесная библиотека для выполнения и управления внешними процессами в Java-приложениях. Она предоставляет удобный API для запуска командных процессов, чтения их вывода и обработки ошибок, предлагая более гибкие возможности по сравнению со стандартным ProcessBuilder.

🗣 Zt-Exec — отличный выбор, если нужно просто и эффективно запускать внешние команды или управлять процессами прямо из Java-кода.

🔗 Ссылочка на доку

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

Senior Java Developer

Разбираем как решать задачи на LeetCode

✅ Примеры решений
✅ Пояснения

Выбери своё направление:

1. Python
2. JavaScript
3. Java
4. C#
5. Golang
6. C/C++
7. PHP
8. Kotlin
9. Swift

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

Senior Java Developer

Обучайся ИТ и строй карьеру уже во время учебы

Это возможно в «Школе 21» — школе цифровых технологий, проекте Сбера

Вот лишь несколько особенностей:
— обучение в школе бесплатное, от тебя нужна только мотивация
— 100% выпускников работают в крутых ИТ-компаниях
— стажировка входит в образовательный трек
— во время обучения соберешь портфолио и получишь реальный опыт

Кампусы школы открыты уже в 13 городах России и работают 24/7.

Узнавай больше и подавай заявку на сайте «Школы 21» уже сейчас!

Реклама. Заказчик АНО "Школа 21" ИНН 7736316133

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

Senior Java Developer

#вопросы_с_собеседований
Из за чего может возникать NoClassDefFoundError, NoSuchMethodError?

🔸 NoClassDefFoundError может возникнуть, если нужной библиотеки с этим классом нет в classpath
🔸 NoSuchMethodError может возникнуть из-за несовместимости ваших библиотек, если зависимая библиотека A вызывает метод из старой версии библиотеки B, но в classpath есть более новая версия библиотеки B, c другой сигнатурой этого метода

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

Senior Java Developer

Метод Collections.shuffle

Метод shuffle() случайным образом перемешивает все элементы переданного списка.

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

Senior Java Developer

Что такое ReadWriteLock?

ReadWriteLock — это интерфейс, расширяющий базовый интерфейс Lock. Используется для улучшения производительности в многопоточном процессе и оперирует парой связанных блокировок (одна - для операций чтения, другая - для записи). Блокировка чтения может удерживаться одновременно несколькими читающими потоками, до тех пор, пока не появится записывающий. Блокировка записи является эксклюзивной.

Существует реализующий интерфейс ReadWriteLock класс ReentrantReadWriteLock, который поддерживает до 65535 блокировок записи и до стольки же блокировок чтения.

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

Senior Java Developer

Присоединяйся к всероссийскому чемпионату по программированию МТС True Tech Champ 2024 с призовым фондом в 10 250 000 ₽. Решай алгоритмические задачи или программируй роботов.

Какие задания и этапы ждут участников, расскажут на вводном вебинаре создатели треков 26 сентября в 17:00. Регистрируйся по ссылке.

В чемпионате найдутся задачи для начинающих ИТ-специалистов и опытных разработчиков.

✔️ В алгоритмическом треке участники будут работать со структурами данных, покажут математические навыки и умение решать алгоритмические задачи.

✔️ В треке по программированию роботов нужно будет соревноваться на скорость прохождения лабиринта робомышью.

Подробнее о чемпионате — по ссылке.

Регистрация участников: до 12 октября
Старт онлайн-этапов: с 1 октября
Финал в офлайне: 8 ноября

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

Senior Java Developer

🔥Тесты для подготовки к собеседованию🔥
Выбери своё направление:

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

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

Senior Java Developer

👩‍💻 Пройди тест по Java

Проверь насколько хорошо ты знаешь Java и готов освоить 👩‍💻 Spring!

Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене.

👉 ПРОЙТИ ТЕСТ: https://vk.cc/cBkfFY

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

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

Senior Java Developer

Как остановить поток?

На данный момент в 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).

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

Senior Java Developer

#вопросы_с_собеседований
Сколько создается новых объектов, когда вы добавляете новый элемент в HashMap?

Создается один новый объект статического вложенного класса Entry<K,V>.

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