#вопросы_с_собеседований
Что такое JDBC?
JDBC, Java DataBase Connectivity (соединение с базами данных на Java) — промышленный стандарт взаимодействия Java-приложений с различными СУБД. Реализован в виде пакета java.sql
, входящего в состав Java SE.
JDBC основан на концепции драйверов, которые позволяют получать соединение с базой данных по специально описанному URL. При загрузке драйвер регистрирует себя в системе и в дальнейшем автоматически вызывается, когда программа требует URL, содержащий протокол, за который этот драйвер отвечает.
Встроенные исключения
Java определяет несколько классов исключений внутри стандартного пакета java.lang.
Наиболее общие из этих исключений являются подклассами стандартного типа RuntimeException. Поскольку java.lang неявно импортируется во все java-программы, то большинство исключений, полученных из RuntimeException, автоматические.
Java определяет несколько других типов исключений, которые относятся к его различным библиотекам класса. Ниже приведен список неконтролируемых исключений на этапе выполнения (Unchecked RuntimeException).
➡️ Picocli — мощный инструмент для создания CLI-приложений в Java
Picocli — это простая и гибкая библиотека для создания командных интерфейсов (CLI) в Java. Она поддерживает аннотации для автоматической генерации документации по командам, обработку аргументов, подкоманд, автодополнение и много других возможностей, которые упрощают создание сложных CLI-приложений.
🗣 Picocli — это отличный выбор для разработчиков, которым нужно быстро и просто создать CLI-приложение с минимальным количеством кода и мощными функциями.
🔗 Ссылочка на доку
➡️ Использование 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
🌍Откройте мир Clojure: сфера разработки, основные фишки и преимущества языка.
Изучите, чем Clojure выделяется среди других бэкендовых языков и какие преимущества он предлагает. Узнайте, как Clojure может улучшить вашу разработку и открыть новые карьерные возможности.
Мероприятие для опытных разработчиков.
📅Открытый вебинар 3 октября в 20:00 мск пройдет в рамках большого курса. После занятия вы сможете продолжить обучение по специальной цене и даже в рассрочку!
Регистрация: https://vk.cc/cBwbDC
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
➡️ HikariCP — высокопроизводительный пул соединений для баз данных
HikariCP — это лёгкий и быстрый пул соединений для баз данных, который считается одним из самых производительных в экосистеме Java.
Он минимизирует задержки при подключении к базам данных, обеспечивая быстрый доступ к ресурсам и высокую масштабируемость. Благодаря простоте настройки и высокой производительности, HikariCP является отличным выбором для проектов, где требуется эффективное управление соединениями с базой данных.
🗣 HikariCP — отличный выбор для высоконагруженных приложений, где важна производительность и стабильность соединений с базой данных.
🔗 Ссылочка на доку
➡️ Использование метода String::indent
для удобной работы с отступами строк
Начиная с Java 12, был добавлен метод String.indent()
, который позволяет легко добавлять или удалять отступы у каждой строки в многострочном тексте.•
Это полезно для форматирования строк, когда нужно управлять отступами, особенно при создании сложных текстовых структур.•
Метод String.indent()
делает управление отступами более удобным и чистым, особенно при работе с форматированными текстами в Java.
Создаем графическое окно и меняем цвет фона при клике мышью с помощью 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>
.