Java Learning
18.8K subscribers
1.61K photos
1 video
3 files
992 links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
#Вопросы_с_собеседования

При помощи чего формируются запросы к базе данных?

Для выполнения запросов к базе данных в Java используются три интерфейса:

☕️ java.sql.Statement - для операторов SQL без параметров;
☕️ java.sql.PreparedStatement - для операторов SQL с параметрами и часто выполняемых операторов;
☕️ java.sql.CallableStatement - для исполнения хранимых в базе процедур.

Объекты-носители интерфейсов создаются при помощи методов объекта java.sql.Connection:

☕️ java.sql.createStatement() возвращает объект Statement;
☕️ java.sql.prepareStatement() возвращает объект PreparedStatement;
☕️ java.sql.prepareCall() возвращает объект CallableStatement;
👍141
Collections.min/max

Удивительно, насколько часто можно встретить написанный вручную код, который находит максимальный или минимальный элемент чего-то по какому-нибудь критерию.

Казалось бы, такая тривиальная задача должна быть давно решена. На самом деле она и так давно решена: есть методы Collections.min и Collections.max. Раньше было не очень удобно писать компараторы, но в Java-8 всё стало легче.

К примеру, вам нужно найти ключ в Map, соответствующий максимальному значению. Воспользуйтесь кодом с картинки.
👍221
#вопросы_с_собеседований
Какие промежуточные методы работы со стримами вы знаете?

filter
() отфильтровывает записи, возвращая только записи, соответствующие условию;
skip() позволяет пропустить определённое количество элементов в начале;
distinct() возвращает стрим без дубликатов (для метода equals());
map() преобразует каждый элемент;
peek() возвращает тот же стрим, применяя к каждому элементу функцию;
limit() позволяет ограничить выборку определенным количеством первых элементов;
sorted() позволяет сортировать значения либо в натуральном порядке, либо задавая Comparator;
mapToInt(), mapToDouble(), mapToLong() - аналоги map() возвращающие стрим числовых примитивов;
flatMap(), flatMapToInt(), flatMapToDouble(), flatMapToLong() - похожи на map(), но могут создавать из одного элемента несколько.

Для числовых стримов дополнительно доступен метод mapToObj(), который преобразует числовой стрим обратно в объектный.
14👍6
Что за зверь "Matcher"?

Класс Java Matcher (java.util.regex.Matcher) создан для поиска некоторого множества вхождений регулярного выражения в одном тексте и поиска по одному шаблону в разных текстах. Класс Java Matcher имеет много полезных методов.

Например:

• boolean matches(): вернет значение true при совпадении строки с шаблоном.
• boolean find(): вернет значение true при обнаружении подстроки, совпадающей с шаблоном, и перейдет к ней.
• int start(): вернет значение индекса соответствия.
• int end(): вернет значение индекса последующего соответствия.
• String replaceAll(String str): вернет значение измененной строки подстрокой str.

Другие методы Matcher можно найти в официальной документации.

Рассмотрите простой пример работы с Pattern и Matcher.
10👍4
Что выведет код сверху?
Anonymous Quiz
37%
6
19%
3
5%
1
39%
Error
👍43🤔6🔥51
#Вопросы_с_собеседования

В чем разница между interrupted() и isInterrupted()?

Механизм прерывания работы потока в Java реализован с использованием внутреннего флага, известного как статус прерывания. Прерывание потока вызовом Thread.interrupt() устанавливает этот флаг. Методы Thread.interrupted() и isInterrupted() позволяют проверить, является ли поток прерванным.

Когда прерванный поток проверяет статус прерывания, вызывая статический метод Thread.interrupted(), статус прерывания сбрасывается.

Нестатический метод isInterrupted() используется одним потоком для проверки статуса прерывания у другого потока, не изменяя флаг прерывания.
👍111
#Вопросы_с_собеседования

Напишите пример перехвата и обработки исключения в блоке try — catch метода

Ответ на картинке.
👍14🤔42
#Вопросы_с_собеседования

Сколько различных типов конструкторов существует в Java?

В Java есть 2 типа конструкторов:
1) Конструктор по умолчанию — не принимает никаких параметров.
2) Параметризованный конструктор — принимает как минимум один параметр.
👍33
😱5👍3
Что будет выведено на экран?
Anonymous Quiz
23%
A got caught B got caught
25%
B got caught
32%
Compiler Error
20%
A got caught
🤔19👍16
#Вопросы_с_собеседования

Перечислите все конструкции, к которым применим модификатор static.

☕️ поля;
☕️ методы;
☕️ вложенные классы;
☕️ члены секции import;
☕️ статический блок инициализации.
👍151🤔1
#Вопросы_с_собеседования

Укажите различия между конструктором и методами в Java

Ответ на картинке.
👍24🤔2
#Вопросы_с_собеседования

Можно ли перегружать метод main() в Java?

Да, метод main() может быть перегружен, но JVM или виртуальная машина Java вызывает только исходный метод main().
👍27
Захват координат курсора

Чтобы захватить события мыши, необходимо реализовать интерфейс MouseMotionListener. Когда курсор попадает в определенную область, срабатывает обработчик события mouseMoved, из которого можно получить точные координаты.
👍23
Что выведет код сверху?
Anonymous Quiz
22%
12-1
8%
11-1
5%
11-2
21%
12-2
17%
22-2
27%
Error
👍29🤔11😱6
Как остановить поток?

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

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

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

Программа выводит:
мама
папа
сын.
👍191😢1
Три задачи на знание Java от ChatGPT

Попросили языковую модель ChatGPT составить три задачи на знание Java: простую, среднюю и сложную.

Смотреть статью
👍11