Java for Beginner
675 subscribers
546 photos
155 videos
12 files
838 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Варианты ответа:
Anonymous Quiz
17%
45
17%
10
33%
25
33%
175
Что выведет код?

import java.util.ArrayDeque;

public class ArrayDequeChallenge {
public static void main(String[] args) {
ArrayDeque<Integer> deque = new ArrayDeque<>();
for (int i = 0; i < 10; i++) {
deque.add(i);
}

while (deque.size() > 1) {
deque.removeFirst();
if (deque.size() > 1) {
deque.addLast(deque.removeFirst() + deque.removeLast());
}
}

System.out.println("Result: " + deque.peek());
}
}


#Tasks
Мы научим Вас плохому😂

https://t.me/Java_for_beginner_dev

#Mems
Внимание!

На гитхабе (возможно, где-то еще) стали появляться поддельные версии goodbyedpi.exe с вирусом.
Тот архив с паролем, имейте ввиду. Поддельный goodbyedpi.exe значительно большего веса (в 40+ раз). Оригинальный ~100 КБ, поддельный > 4 МБ.
Благодаря сообществу
ntc.party удалено уже 4 репозитория на гитхабе с поддельным goodbyedpi.exe,
но почти наверняка эти подделки распространились в интернете.


#От_подписчиков
Встреча создана! ☝️

Заходите порешать задачки вместе с нами!⭐️

Ждем всех!
https://telemost.yandex.ru/j/42492956505565
Live stream started
Основные методы ArrayDeque и их применение

Основные методы ArrayDeque:

addFirst(E e):
Добавляет элемент в начало очереди. Если очередь заполнена, увеличивает её размер.
ArrayDeque<Integer> deque = new ArrayDeque<>();
deque.addFirst(10);
deque.addFirst(20);
System.out.println(deque); // [20, 10]


addLast(E e):
Добавляет элемент в конец очереди. Если очередь заполнена, увеличивает её размер.
deque.addLast(30);
System.out.println(deque); // [20, 10, 30]


offerFirst(E e):
Предлагает добавить элемент в начало очереди. Возвращает true, если элемент был добавлен успешно.
deque.offerFirst(40);
System.out.println(deque); // [40, 20, 10, 30]


offerLast(E e):
Предлагает добавить элемент в конец очереди. Возвращает true, если элемент был добавлен успешно.
deque.offerLast(50);
System.out.println(deque); // [40, 20, 10, 30, 50]


pollFirst():
Возвращает и удаляет первый элемент из очереди. Возвращает null, если очередь пуста.
Integer first = deque.pollFirst();
System.out.println(first); // 40
System.out.println(deque); // [20, 10, 30, 50]


pollLast():
Возвращает и удаляет последний элемент из очереди. Возвращает null, если очередь пуста.
Integer last = deque.pollLast();
System.out.println(last); // 50
System.out.println(deque); // [20, 10, 30]


peekFirst():
Возвращает первый элемент из очереди, не удаляя его. Возвращает null, если очередь пуста.
Integer peekFirst = deque.peekFirst();
System.out.println(peekFirst); // 20


peekLast():
Возвращает последний элемент из очереди, не удаляя его. Возвращает null, если очередь пуста.
Integer peekLast = deque.peekLast();
System.out.println(peekLast); // 30


push(E e):
Вставляет элемент на вершину стека. Эквивалентен методу addFirst(E e).
deque.push(60);
System.out.println(deque); // [60, 20, 10, 30]


pop():
Возвращает и удаляет элемент с вершины стека. Эквивалентен методу pollFirst().
Integer pop = deque.pop();
System.out.println(pop); // 60
System.out.println(deque); // [20, 10, 30]



Примеры использования ArrayDeque


Реализация стека с использованием ArrayDeque:
import java.util.ArrayDeque;

public class StackExample {
public static void main(String[] args) {
ArrayDeque<Integer> stack = new ArrayDeque<>();

stack.push(1);
stack.push(2);
stack.push(3);

while (!stack.isEmpty()) {
System.out.println(stack.pop());
}
}
}


Реализация очереди с использованием ArrayDeque:
import java.util.ArrayDeque;

public class QueueExample {
public static void main(String[] args) {
ArrayDeque<Integer> queue = new ArrayDeque<>();

queue.addLast(1);
queue.addLast(2);
queue.addLast(3);

while (!queue.isEmpty()) {
System.out.println(queue.pollFirst());
}
}
}


Реализация двусторонней очереди с использованием ArrayDeque:
import java.util.ArrayDeque;

public class DequeExample {
public static void main(String[] args) {
ArrayDeque<Integer> deque = new ArrayDeque<>();

deque.addFirst(1);
deque.addLast(2);
deque.addFirst(3);
deque.addLast(4);

while (!deque.isEmpty()) {
System.out.println(deque.pollFirst());
}
}
}


#Java #Training #Medium #ArrayDeque
Java for Beginner pinned «Вчера мы провели трансляцию в канале по решению задач с Codewar. Устраивает ли вас такой формат, нужно ли делать запись, для пересмотра?»
LinkedBlockingQueue, отличия от других очередей.

LinkedBlockingQueue — это реализация блокирующей очереди на основе связанного списка, предоставляемая в пакете java.util.concurrent. Она поддерживает опциональную ограниченную емкость и используется для передачи данных между потоками с возможностью блокировки.

Основные отличия от других очередей:

Блокирующая очередь: Ожидает свободного места для добавления или доступного элемента для извлечения.
Основана на связанном списке: В отличие от ArrayBlockingQueue, которая использует массив, LinkedBlockingQueue использует связанный список.
Опциональная ограниченная емкость: Вы можете задать максимальную емкость очереди. По умолчанию емкость не ограничена.


import java.util.concurrent.LinkedBlockingQueue;

public class LinkedBlockingQueueExample {
public static void main(String[] args) {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(10);

try {
queue.put(1);
queue.put(2);
System.out.println(queue.take());
System.out.println(queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


Внутреннее устройство

LinkedBlockingQueue реализует блокирующую очередь с использованием двух внутренних объектов Node, а также использует механизмы блокировок для управления доступом к очереди.

Основные компоненты:

Внутренний класс Node:
Узел, содержащий данные и ссылку на следующий элемент в очереди.
static class Node<E> {
E item;
Node<E> next;

Node(E x) { item = x; }
}


Голова и хвост очереди:

head: Ссылка на первый узел в очереди.
last: Ссылка на последний узел в очереди.

private transient Node<E> head;
private transient Node<E> last;


Механизмы блокировки:


Две раздельные блокировки для вставки и удаления: putLock и takeLock.

private final ReentrantLock putLock = new ReentrantLock();
private final Condition notFull = putLock.newCondition();
private final ReentrantLock takeLock = new ReentrantLock();
private final Condition notEmpty = takeLock.newCondition();


Принцип работы:

Вставка элемента (put):
Захватывается блокировка putLock.
Проверяется, не превышает ли очередь максимальную емкость.
Создается новый узел и добавляется в конец очереди.
Если очередь была пустой, сигнализируется о наличии новых элементов (notEmpty.signal()).
Освобождается блокировка putLock.


Извлечение элемента (take):
Захватывается блокировка takeLock.
Проверяется, не пустая ли очередь.
Удаляется узел из начала очереди.
Если очередь была заполнена, сигнализируется о наличии свободного места (notFull.signal()).
Освобождается блокировка takeLock.


import java.util.concurrent.LinkedBlockingQueue;

public class LinkedBlockingQueueExample {
public static void main(String[] args) {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(2);

// Вставка элементов
new Thread(() -> {
try {
queue.put(1);
System.out.println("Inserted 1");
queue.put(2);
System.out.println("Inserted 2");
queue.put(3);
System.out.println("Inserted 3");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();

// Извлечение элементов
new Thread(() -> {
try {
Thread.sleep(2000);
System.out.println("Removed " + queue.take());
System.out.println("Removed " + queue.take());
System.out.println("Removed " + queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}


Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.geeksforgeeks.org/linkedblockingqueue-class-in-java/
https://www.baeldung.com/java-queue-linkedblocking-concurrentlinked

#Java #Training #Medium #LinkedBlockingQueue
Что выведет код?

import java.util.concurrent.LinkedBlockingQueue;

public class LinkedBlockingQueueChallenge {
public static void main(String[] args) throws InterruptedException {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
for (int i = 0; i < 10; i++) {
queue.put(i);
}

int result = 0;
while (!queue.isEmpty()) {
result += queue.take();
if (!queue.isEmpty()) {
queue.put(queue.take() * 2);
}
}

System.out.println("Result: " + result);
}
}


#Tasks
Варинаты ответа:
Anonymous Quiz
40%
115
30%
129
30%
126
0%
131
Основные методы LinkedBlockingQueue

put(E e):

Вставляет элемент в конец очереди. Если очередь заполнена, блокируется до освобождения места.
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(2);
queue.put(1);
queue.put(2);


take():

Извлекает и удаляет элемент из начала очереди. Если очередь пуста, блокируется до появления элемента.
Integer item = queue.take();
System.out.println(item);


offer(E e):

Вставляет элемент в конец очереди, если есть свободное место. Возвращает true, если элемент был добавлен, иначе false.
boolean added = queue.offer(3);
System.out.println(added); // false, если очередь заполнена


poll():

Извлекает и удаляет элемент из начала очереди. Возвращает null, если очередь пуста.
Integer item = queue.poll();
System.out.println(item);


peek():

Возвращает элемент из начала очереди без его удаления. Возвращает null, если очередь пуста.
Integer item = queue.peek();
System.out.println(item);


remainingCapacity():

Возвращает количество свободных мест в очереди.
int capacity = queue.remainingCapacity();
System.out.println(capacity);


drainTo(Collection<? super E> c):

Перемещает все доступные элементы в указанную коллекцию.
List<Integer> list = new ArrayList<>();
queue.drainTo(list);
System.out.println(list);


clear():

Удаляет все элементы из очереди.
queue.clear();


Примеры использования

Производитель-потребитель:
import java.util.concurrent.LinkedBlockingQueue;

public class ProducerConsumerExample {
public static void main(String[] args) {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(5);

// Производитель
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
queue.put(i);
System.out.println("Produced: " + i);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}).start();

// Потребитель
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
Integer item = queue.take();
System.out.println("Consumed: " + item);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}).start();
}
}


Очередь задач:
import java.util.concurrent.LinkedBlockingQueue;

public class TaskQueueExample {
public static void main(String[] args) {
LinkedBlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<>(10);

// Запуск потока исполнителя задач
new Thread(() -> {
while (true) {
try {
Runnable task = taskQueue.take();
task.run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}).start();

// Добавление задач в очередь
taskQueue.offer(() -> System.out.println("Task 1 executed"));
taskQueue.offer(() -> System.out.println("Task 2 executed"));
}
}


#Java #Training #Medium #LinkedBlockingQueue
Всем доброго субботнего утра!☝️

Какие планы на выходные?

А давайте делится идеями пет проектов, давайте посмотрим кто заморочился больше?

Желаю каждому участнику канала, прекрасных выходных!🍻

Завтра увидимся на лайф-кодинге!😜
This media is not supported in your browser
VIEW IN TELEGRAM
Доброе утро!

Напоминаю, что сегодня в 16:00 по МСК, мы вновь встречаемся, чтобы разобрать структурные паттерны проектирования.

Запасайтесь хорошим настроением и печеньками, ждем всех!

🖐
И вот зачем он это сделал? 😡😂

https://t.me/Java_for_beginner_dev

#Mems
Запись нашей сегодняшней встречи -
https://youtu.be/_jnIaJz_mJc
https://rutube.ru/video/506c291cd9b61894b4c99ac8c168e115/

Огромный респект тем кто смог прийти, за участие и подсказки!
@Alexander_Gors отдельное спасибо, за лайф-кодинг!)

Сегодня, мы совместно рассмотрели на примерах структурные паттерны проектирования:
- Адаптер (Adapter)
- Мост(Bridge)
- Компоновщик (Composite)
- Декоратор (Decorator, Wrapper)
- Фасад (Facade)
- Легковес (Flyweight)
- Заместитель (Proxy)


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

Гит репозиторий с результатом - https://github.com/Oleborn/PatternsOfCoding

Всем теплой ночи и легкой рабочей недели! 🫡✌️
Встреча_в_Телемосте_11_08_24_20_03_54_—_запись.webm
227 MB
Для тех кто не смог победить блокировку Youtube и не желает заходить в Rutube выкладываю видео тут!

Смотрите на здоровье) 🫡

Но с вас подписка на Youtube и Rutube и делитесь этими видео, буду крайне благодарен!)))

#online_meeting