Java с нуля до middle
153 subscribers
56 photos
14 links
Download Telegram
Задача с leetcode

Дана строка s, состоящая из слов и пробелов. Вернуть длину последнего слова в строке.

Решение в комментах
Можно ли переопределить статический метод?
Anonymous Quiz
40%
Можно
46%
Нет
Заполнить пустое место в методе action() так,
чтобы был корректно вызван метод
Anonymous Quiz
58%
super
14%
this
8%
One
20%
new One()
Задача реализовать интерфейс

Используйте мапу
https://codeshare.io/MN1x1Q

Я напишу свою завтра
Кто нибудь попробывал реализовать интерфейс?
Anonymous Poll
22%
Да
36%
Нет
53%
Новый год завтра!
Вот реализация
https://codeshare.io/eVRnWJ

Пишите, тесты, я свои напишу позже
https://codeshare.io/WdqD9E

Написал пару тестов, остальные сами пишите, если не выйдет пишите в коменты помогу.

Это совершенно типичное задание для джуна на работе, реализация интерфейса, тесты.
С Новым годом!!! 🎄
Желаю вам в новом году доучить джаву и найти работу.
Всем мир! ✌️
👍154
Функциональный интерфейс

Появился в java 8, содержит один единственный абстрактный метод.

Дан интерфейс, дана лямбда.
Задание переписать лямбду в анонимный класс, решение в комментах.
Predicate

Интерфейс который предоставляет boolean метод test(). В основном используется для фильтрации данных из потока. Можно еще всякие проверки писать, типа есть соединения с бд, отправляет ли в кафку. Ну и запускать шедулер когда тру.

На картинке написал предикат, который проверяет содержится ли в стринге буква "c". Метод тест возвращает true, если элемент есть.

Задание:
Дан массив стрингов написать цепочку предикатов на поиск элементов содержащих "a", "c".
Решение в комментах
👍2
Function

Интерфейс принимает объект одного типа и возвращает другого.

На картинке мы считаем количество символов в стринг.
apply() как раз тот метод куда мы пихаем стринг и ожидаем что он нам выведет Integer, т.к в function мы определили s.length()

Задание:
Посчитать количество символов у массива стрингов, через stream.
Решение в комментах
Consumer

Интерфейс принимает объект и выполняет над ним операцию

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

Задача:
К массиву интов прибавить двойку и вывести это на экран. Сделать это через stream.
Решение сами знаете где)
Supplier

Интерфейс в Java, который представляет функцию, которая не принимает никаких аргументов и возвращает результат. Имеет один единственный абстрактным метод get().

На картинке мы создаем массив интов и потом записываем его с помощью get.

Задание:

Создать стрим интов, сгенерировать в нем 100 рандомных чисел, далее вывести 20 из них в консоль.
Решение в комментах
Comparator

Интерфейс, который принимает в метод int compare(o1, o2) два значения и возвращает целое число, знак которого определяет правило сортировки. Возвращает 1, -1, 0

На картинке определим сравнения строк в обратном порядке, то есть если строка больше, то она будет выше. Если переставить местами a и b, будет обычная сортировка.

Задача:

String[] str = {"apple" ,"nike", "oppo", "lenovo", "puma", "mercedes"};

Создать стрим из этого массива, отcортировать по возрастанию символов в слове, если символов одинаковое количество, сортировать по алфавиту.
Решение в комментах
Задача с собеса

Даны три отсортированных массива, одинаковой длины. Найти и вывести одинаковые элементы

Решение в комментах
🔥4
Задача

Даны целые числа N и K, и последовательность из N целых чисел. Циклически сдвинуть все элементы последовательности на K элементов вправо.

Кто может решить?)
Многопоточка

Что делает этот код?
1. Создаем переменную counter, которую будем увеличивать
2. Создаем метод increment, в котором увеличиваем переменную на 1
3. Создаем класс R, который имплементирует Runnable и переопределяем метод run.
4. в методе run вызываем increment() 1000 раз
5.Создаем в main два потока и пихаем туда наш класс. Стартуем потоки через start() и просим их дождаться главного потока main, через join()
6. Выводим результат
Какой будет результат?
Anonymous Quiz
26%
2000
2%
1500
4%
0
68%
Всегда разный
Какой из потоков начнет работу первый? Они начнут работу в одно время? С одинаковой ли скоростью они работают?
Мы этого не знаем и гарантировать не можем.

Что выходит на практике, первый поток вызывает метод increment, и увеличивает count допустим до 200 сохраняя в память. Второй так же сразу начинает работу, но работает медленнее и за это же время увеличивает только до 100 и сохраняет в память, переписывая прошлое значение.

Первый поток что-то подвис, допустим ядро отвлеклось на другую задачу и до того, как он пробудится и начнет увеличивать снова, он берет число из память, а это число 100, а не 200. Вот тут и появляются проблема, называется она Data race.

Решить ее можно синхронизацией метода increment, написав public static synchronized void increment() . Это означает что дергать метод разные потоки будут строго по очереди.

Лучше переписать это через AtomicInteger. AtomicInteger имеет потокобезопасный метод getAndIncrement().