https://codeshare.io/WdqD9E
Написал пару тестов, остальные сами пишите, если не выйдет пишите в коменты помогу.
Это совершенно типичное задание для джуна на работе, реализация интерфейса, тесты.
Написал пару тестов, остальные сами пишите, если не выйдет пишите в коменты помогу.
Это совершенно типичное задание для джуна на работе, реализация интерфейса, тесты.
С Новым годом!!! 🎄
Желаю вам в новом году доучить джаву и найти работу.
Всем мир! ✌️
Желаю вам в новом году доучить джаву и найти работу.
Всем мир! ✌️
👍15❤4
Predicate
Интерфейс который предоставляет boolean метод test(). В основном используется для фильтрации данных из потока. Можно еще всякие проверки писать, типа есть соединения с бд, отправляет ли в кафку. Ну и запускать шедулер когда тру.
На картинке написал предикат, который проверяет содержится ли в стринге буква "c". Метод тест возвращает true, если элемент есть.
Задание:
Дан массив стрингов написать цепочку предикатов на поиск элементов содержащих "a", "c".
Решение в комментах
Интерфейс который предоставляет boolean метод test(). В основном используется для фильтрации данных из потока. Можно еще всякие проверки писать, типа есть соединения с бд, отправляет ли в кафку. Ну и запускать шедулер когда тру.
На картинке написал предикат, который проверяет содержится ли в стринге буква "c". Метод тест возвращает true, если элемент есть.
Задание:
Дан массив стрингов написать цепочку предикатов на поиск элементов содержащих "a", "c".
Решение в комментах
👍2
Function
Интерфейс принимает объект одного типа и возвращает другого.
На картинке мы считаем количество символов в стринг.
apply() как раз тот метод куда мы пихаем стринг и ожидаем что он нам выведет Integer, т.к в function мы определили s.length()
Задание:
Посчитать количество символов у массива стрингов, через stream.
Решение в комментах
Интерфейс принимает объект одного типа и возвращает другого.
На картинке мы считаем количество символов в стринг.
apply() как раз тот метод куда мы пихаем стринг и ожидаем что он нам выведет Integer, т.к в function мы определили s.length()
Задание:
Посчитать количество символов у массива стрингов, через stream.
Решение в комментах
Consumer
Интерфейс принимает объект и выполняет над ним операцию
На картинке мы прибавляем к инту двойку и выводим значение. Стоит заметить, что инт не изменяется и остается единицей, т.к в консьюмере создается копия.
Задача:
К массиву интов прибавить двойку и вывести это на экран. Сделать это через stream.
Решение сами знаете где)
Интерфейс принимает объект и выполняет над ним операцию
На картинке мы прибавляем к инту двойку и выводим значение. Стоит заметить, что инт не изменяется и остается единицей, т.к в консьюмере создается копия.
Задача:
К массиву интов прибавить двойку и вывести это на экран. Сделать это через stream.
Решение сами знаете где)
Supplier
Интерфейс в Java, который представляет функцию, которая не принимает никаких аргументов и возвращает результат. Имеет один единственный абстрактным метод get().
На картинке мы создаем массив интов и потом записываем его с помощью get.
Задание:
Создать стрим интов, сгенерировать в нем 100 рандомных чисел, далее вывести 20 из них в консоль.
Решение в комментах
Интерфейс в Java, который представляет функцию, которая не принимает никаких аргументов и возвращает результат. Имеет один единственный абстрактным метод get().
На картинке мы создаем массив интов и потом записываем его с помощью get.
Задание:
Создать стрим интов, сгенерировать в нем 100 рандомных чисел, далее вывести 20 из них в консоль.
Решение в комментах
Comparator
Интерфейс, который принимает в метод int compare(o1, o2) два значения и возвращает целое число, знак которого определяет правило сортировки. Возвращает 1, -1, 0
На картинке определим сравнения строк в обратном порядке, то есть если строка больше, то она будет выше. Если переставить местами a и b, будет обычная сортировка.
Задача:
String[] str = {"apple" ,"nike", "oppo", "lenovo", "puma", "mercedes"};
Создать стрим из этого массива, отcортировать по возрастанию символов в слове, если символов одинаковое количество, сортировать по алфавиту.
Решение в комментах
Интерфейс, который принимает в метод int compare(o1, o2) два значения и возвращает целое число, знак которого определяет правило сортировки. Возвращает 1, -1, 0
На картинке определим сравнения строк в обратном порядке, то есть если строка больше, то она будет выше. Если переставить местами a и b, будет обычная сортировка.
Задача:
String[] str = {"apple" ,"nike", "oppo", "lenovo", "puma", "mercedes"};
Создать стрим из этого массива, отcортировать по возрастанию символов в слове, если символов одинаковое количество, сортировать по алфавиту.
Решение в комментах
Задача с собеса
Даны три отсортированных массива, одинаковой длины. Найти и вывести одинаковые элементы
Решение в комментах
Даны три отсортированных массива, одинаковой длины. Найти и вывести одинаковые элементы
Решение в комментах
🔥4
Задача
Даны целые числа N и K, и последовательность из N целых чисел. Циклически сдвинуть все элементы последовательности на K элементов вправо.
Кто может решить?)
Даны целые числа N и K, и последовательность из N целых чисел. Циклически сдвинуть все элементы последовательности на K элементов вправо.
Кто может решить?)
Многопоточка
Что делает этот код?
1. Создаем переменную counter, которую будем увеличивать
2. Создаем метод increment, в котором увеличиваем переменную на 1
3. Создаем класс R, который имплементирует Runnable и переопределяем метод run.
4. в методе run вызываем increment() 1000 раз
5.Создаем в main два потока и пихаем туда наш класс. Стартуем потоки через start() и просим их дождаться главного потока main, через join()
6. Выводим результат
Что делает этот код?
1. Создаем переменную counter, которую будем увеличивать
2. Создаем метод increment, в котором увеличиваем переменную на 1
3. Создаем класс R, который имплементирует Runnable и переопределяем метод run.
4. в методе run вызываем increment() 1000 раз
5.Создаем в main два потока и пихаем туда наш класс. Стартуем потоки через start() и просим их дождаться главного потока main, через join()
6. Выводим результат
Какой из потоков начнет работу первый? Они начнут работу в одно время? С одинаковой ли скоростью они работают?
Мы этого не знаем и гарантировать не можем.
Что выходит на практике, первый поток вызывает метод increment, и увеличивает count допустим до 200 сохраняя в память. Второй так же сразу начинает работу, но работает медленнее и за это же время увеличивает только до 100 и сохраняет в память, переписывая прошлое значение.
Первый поток что-то подвис, допустим ядро отвлеклось на другую задачу и до того, как он пробудится и начнет увеличивать снова, он берет число из память, а это число 100, а не 200. Вот тут и появляются проблема, называется она Data race.
Решить ее можно синхронизацией метода increment, написав public static synchronized void increment() . Это означает что дергать метод разные потоки будут строго по очереди.
Лучше переписать это через AtomicInteger. AtomicInteger имеет потокобезопасный метод getAndIncrement().
Мы этого не знаем и гарантировать не можем.
Что выходит на практике, первый поток вызывает метод increment, и увеличивает count допустим до 200 сохраняя в память. Второй так же сразу начинает работу, но работает медленнее и за это же время увеличивает только до 100 и сохраняет в память, переписывая прошлое значение.
Первый поток что-то подвис, допустим ядро отвлеклось на другую задачу и до того, как он пробудится и начнет увеличивать снова, он берет число из память, а это число 100, а не 200. Вот тут и появляются проблема, называется она Data race.
Решить ее можно синхронизацией метода increment, написав public static synchronized void increment() . Это означает что дергать метод разные потоки будут строго по очереди.
Лучше переписать это через AtomicInteger. AtomicInteger имеет потокобезопасный метод getAndIncrement().
Но так никто не делает...
Хотите отслеживать состояние и более эффективно управлять потокам. Используйте ExecutorService.
На скрине переписал код
В этом коде создается объект ExecutorService с использованием метода newFixedThreadPool(2) из класса Executors. Это создает пул потоков с фиксированным размером 2, что означает, что может быть запущено не более 2 задач одновременно.
Далее в коде вызываются методы execute(new R()), которые отправляют задачи на выполнение в пул потоков. Задачи будут выполняться в одном из свободных потоков из пула.
Затем вызывается метод awaitTermination(1, TimeUnit.SECONDS), который блокирует выполнение потока, в котором он был вызван, до тех пор, пока все задачи из пула потоков не будут завершены или не истечет время 1 секунда.
Далее вызывается метод shutdownNow(), который прекращает прием новых задач и завершает текущие задачи как можно скорее.
Хотите отслеживать состояние и более эффективно управлять потокам. Используйте ExecutorService.
На скрине переписал код
В этом коде создается объект ExecutorService с использованием метода newFixedThreadPool(2) из класса Executors. Это создает пул потоков с фиксированным размером 2, что означает, что может быть запущено не более 2 задач одновременно.
Далее в коде вызываются методы execute(new R()), которые отправляют задачи на выполнение в пул потоков. Задачи будут выполняться в одном из свободных потоков из пула.
Затем вызывается метод awaitTermination(1, TimeUnit.SECONDS), который блокирует выполнение потока, в котором он был вызван, до тех пор, пока все задачи из пула потоков не будут завершены или не истечет время 1 секунда.
Далее вызывается метод shutdownNow(), который прекращает прием новых задач и завершает текущие задачи как можно скорее.
https://www.youtube.com/watch?v=-e1_QhJ1EhQ
Это вам мотивация, почему надо быть связанным с технологиями, получать тех образование или просто постоянно быть в контексте происходящего!
Это вам мотивация, почему надо быть связанным с технологиями, получать тех образование или просто постоянно быть в контексте происходящего!
YouTube
Atlas Gets a Grip | Boston Dynamics
It’s time for Atlas to pick up a new set of skills and get hands on. In this video, the humanoid robot manipulates the world around it: Atlas interacts with objects and modifies the course to reach its goal—pushing the limits of locomotion, sensing, and athleticism.…
👍3
Написал тут быструю приложуху как работает Hibernate
https://github.com/IvanKorni/hiber-h2
Есть worker у него только имя и фамилия, задача сохранить его в бд h2. Сделать это только с помощью Hibernate.
После сохранения вывести всех воркеров из бд.
Задание:
1. Сломать прогу, сделать так что бы был все время rollback при сохранении
2. Сделать логирование
3. Поднять кеш второго уровня
4. Достать одного воркера по фамилии
5. Задача посложнее: убрать из мейна все это, разнести все по слоям, сделать метод на сохранение и получение, написать тесты
Скидывайте код, я гляну
https://github.com/IvanKorni/hiber-h2
Есть worker у него только имя и фамилия, задача сохранить его в бд h2. Сделать это только с помощью Hibernate.
После сохранения вывести всех воркеров из бд.
Задание:
1. Сломать прогу, сделать так что бы был все время rollback при сохранении
2. Сделать логирование
3. Поднять кеш второго уровня
4. Достать одного воркера по фамилии
5. Задача посложнее: убрать из мейна все это, разнести все по слоям, сделать метод на сохранение и получение, написать тесты
Скидывайте код, я гляну
👍2
Всем привет, залил на гитхаб можете смотреть.
Т.к никто ничего не понял, буду делать голосование и объяснять темы подробнее, хибер и работа с бд это основа, должны понимать все.
Т.к никто ничего не понял, буду делать голосование и объяснять темы подробнее, хибер и работа с бд это основа, должны понимать все.
👍2