Java for Beginner
750 subscribers
733 photos
209 videos
12 files
1.2K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
История IT-технологий сегодня — 26 октября


ℹ️ Кто родился в этот день

Брендан Дэмиен Маккей (родился 26 октября 1951 года) — австралийский учёный (компьютерные науки и комбинаторика), внес значимый вклад в вычислительную теорию графов и алгоритмическую комбинаторику; автор множества алгоритмов и программ для исчерпывающего поиска в графах.


🌐 Знаковые события

1861 — немецкий изобретатель Филипп Рейс во Франкфурте продемонстрировал своё изобретение, которое он назвал телефоном.

2012 — выпуск операционной системы Windows 8.


#Biography #Birth_Date #Events #26Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
💸 Измерим твою цену в рублях?


Вот о чём думают каждый вкатун и джун в начале пути?

Наверно:
“Вот бы мне знать весь Spring, Quarkus и написать свой компилятор.”
“Удалёнка, спать до обеда и лавандовый раф на завтрак.”

Да ладно...
Вспомни себя, когда ты только думал о начале обучения 😏

Все как один думают о зарплате.

О том, как быстро смогут подрасти по грейду, по цифрам и по лайкам под постом о первом оффере.



🫰 Мир, где деньги = значимость

Так уж устроено — мы живём в обществе, где сумма на счёте практически определяет, кто ты.
Купил айфон — молодец.
Ходишь пешком — лох.

А теперь добавь сюда программистов, где каждый второй гордо пишет “Middle 250k” в профиле и считает, что это уже характеристика личности.


Но вот вопрос: зарплата — это действительно твоя ценность, или просто временная рыночная оценка твоего труда?


🧑‍💻 Везунчики на старте.

Иногда некоторым просто везет. 🤷‍♀️

Компания в моменте расширяется, стартап получил инвестиции, или программист угадал хайповый стек.
И вот неожиданно он — “молодец”. Хотя внутри всё тот же растерянный джун, просто с хорошим прайсом.

А бывает и наоборот: человек пашет, реально шарит, но получает меньше, потому что не умеет себя продавать, живёт не в столице или просто не хочет прыгать по вакансиям ради пары тысяч.

И кто из них лучше?

Тот, кто умнее?
Или тот, кто просто дороже стоит на hh?



⛔️ Проблема начинается, когда ты меришь себя чужим оффером

“Он получает больше. Значит, он лучше.”

Вот так и начинается внутренний диссонанс, который выжигает уверенность, мотивацию и любовь к делу.

А потом приходят выгорание, обида и мысли вроде:
“Да пошло оно всё, если рынок не ценит”.

Но рынок никого не ценит.
Он просто платит столько, сколько сейчас может.
Он не меряет твою душу, потенциал и умение учиться. Только ту выгоду, которую ты можешь в итоге принести.



🤫 Как жить, если твой сосед зарабатывает больше?

Пойми:
Деньги — не показатель личности, ума, знаний и опыта.


Развивайся, а не сравнивай.
Зарплата может упасть, проект может закрыться, а вот навыки и адекватность останутся при тебе.
Настоящий уровень — это не оффер, а то, что ты можешь, когда оффера нет.
Делай ставку на свое ежедневное развитие, а не на 3-х месячный оффер сеньора, откуда тебя с треском выпнут.
Время так или иначе все расставит по своим местам.

Не завидуй — анализируй.
Если кто-то получает больше — попробуй понять, почему.
У него может быть другой стек, опыт, знания языка, регион.
Это не повод злиться, это повод задуматься.

Понимаешь, что ты лучше — борись.

Ты видишь, что твой "коллега" получает в 2 раза больше чем ты, но не может пройти твоего ревью?
Значит пора что-то менять. Пора начинать толкаться плечами, ведь ты хочешь жить лучше?

Это не повод становиться врагом всем, кто хуже тебя.
Это повод стать вровень с теми, кто лучше — и не стесняться заявить об этом.


Так что да, твоя зарплата — не ты. И не уровень твоих компетенций.

Но то, как ты к ней относишься — говорит о тебе громче, чем цифры в оффере.

Кичиться в моменте что ты получаешь 400к, но не знаешь и не слышал, к примеру о Spring AI - глупо.
Завтра тебя перепрыгнет более опытный в нужном стеке мидл, а ты пойдешь на дно.

Поэтому развитие и связи — это приоритет, а офферы лишь заслуженное приложение.

А для этого надо общаться и учиться...

И быть подписанным на наш канал ☺️😉


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

😎

#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥71
История IT-технологий сегодня — 27 октября


ℹ️ Кто родился в этот день

Исаак Семёнович Брук (27 октября (9 ноября) 1902 года, Минск, Российская империя — 6 октября 1974, Москва, СССР) — советский учёный в электротехнике и вычислительной технике, один из организаторов и руководителей работ по созданию отечественных вычислительных машин (серия М-1…М-3), основатель научной школы в области ЭВМ в СССР. (в ряде русскоязычных источников дата рождения указывается как 27 октября 1902 (старый стиль) / 9 ноября — есть варианты формата дат в разных справочниках).


🌐 Знаковые события

Не нашел((


#Biography #Birth_Date #Events #27Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Сколько Вы зарабатываете? (если не секрет)
Anonymous Poll
17%
до 30к в месяц
22%
30-50
0%
50-80
9%
80-100
17%
100-150
17%
150-300
0%
300+к в месяц
17%
300млн в нс
👍1
Раздел 6. Коллекции в Java

Глава 4. Queue и Deque

Практика:
В «Библиотеке» добавить очередь читателей (Queue<String>) для книги. Когда книга возвращается — выдать её первому из очереди

Откройте проект «Библиотека»

Запустите IntelliJ IDEA и откройте существующий проект LibraryProject. Убедитесь, что классы Book и Library существуют: Book с полями title, author, year (и геттерами), Library с массивом книг, счетчиком bookCount, методом addBook и Set для авторов.

Импортируйте необходимые пакеты:
В файлах, где будете использовать Queue, убедитесь, что импортированы java.util.Queue и java.util.LinkedList (или ArrayDeque — выберите реализацию для FIFO). IDE подскажет, когда вы начнете писать код — используйте Ctrl+Enter для автодобавления импорта.

Выберите реализацию Queue:
Для этого задания используйте LinkedList<String> как Queue — она проста для FIFO и позволяет операции на концах. Альтернатива — ArrayDeque для большей эффективности, если хотите поэкспериментировать.


Обновление класса Book для очереди читателей

Поскольку очередь читателей относится к конкретной книге (кто ждет эту книгу), добавим её в класс Book.

Добавьте поле для Queue<String>:
Откройте файл Book.java.
Объявите приватное поле readerQueue типа Queue<String>, инициализированное как new LinkedList<> (или new ArrayDeque<>).
Это множество будет хранить имена читателей в порядке очереди (FIFO: первый добавленный — первый получит книгу).



Добавьте методы для работы с очередью

Создайте публичный метод addToQueue(String readerName), который:
Добавляет имя читателя в конец очереди с помощью offer (readerQueue.offer(readerName)).
Можно вывести сообщение, например, "Читатель [readerName] добавлен в очередь за книгой [title]".


Создайте публичный метод returnBook(), который моделирует возврат книги:
Проверяет, пуста ли очередь (readerQueue.isEmpty()).
Если пуста — выводит сообщение "Книга свободна, очередь пуста".
Если не пуста — извлекает первого читателя с помощью poll (String nextReader = readerQueue.poll();).
Выводит сообщение "Книга выдана следующему читателю: [nextReader]".
(Опционально: Если книга была занята, здесь можно обновить статус, но для простоты пока опустим).


Обновите конструктор Book:
В конструкторе Book убедитесь, что readerQueue инициализируется (если не сделали при объявлении поля).


Интеграция с классом Library

Теперь обновим Library, чтобы при добавлении книги учитывать очередь, но поскольку очередь в Book, Library будет работать с объектами Book.

Обновите метод addBook(Book book):
В методе addBook оставьте добавление в массив книг, но добавьте проверку: Если очередь читателей в книге не пуста (book.getReaderQueue().isEmpty() == false), выведите сообщение "Книга добавлена, но имеет очередь читателей".
(Это опционально, но поможет связать с практикой).



Добавьте метод для возврата книги

Создайте публичный метод returnBookByTitle(String title), который:
Ищет книгу в массиве по title (перебор с equals).
Если найдена — вызывает returnBook() на объекте Book.
Если не найдена — выводит сообщение "Книга не найдена".



Обновление класса Main для тестирования

Теперь протестируем новую функциональность в Main.

Создайте объекты и добавьте книги:
В методе main создайте объект Library.
Создайте объект Book (например, с title "Война и мир", author "Толстой", year 1869).
Вызовите addBook на Library.

Добавьте читателей в очередь:
Через объект Book вызовите addToQueue несколько раз с разными именами читателей (например, "Иван", "Мария", "Петр").
Вызовите returnBook() на Book — первый читатель ("Иван") должен получить книгу, остальные остаются в очереди.


Протестируйте возврат:
Вызовите returnBook() еще раз — следующий читатель ("Мария") получит.
Продолжите, пока очередь не опустеет — последний вызов вернет null или сообщение о пустоте.



#Java #для_новичков #beginner #Collections #Deque #ArrayDeque #LinkedList
👍2
Тестирование и отладка

После реализации протестируйте, чтобы убедиться в правильной работе очереди.

Запустите проект:
Правой кнопкой на Main.java → Run 'Main.main()'.
В консоли увидите сообщения о добавлении читателей и выдаче книги по порядку (FIFO: первый добавленный — первый получает).


Проверьте FIFO:

Убедитесь, что читатели выдаются в порядке добавления (offer в конец, poll из начала).
Попробуйте добавить null как читателя — проверьте поведение (LinkedList позволит).


Отладка:
Установите breakpoint в методе returnBook перед poll и после — шагайте (F8) и смотрите размер очереди (readerQueue.size()).
Если ошибки: NullPointerException (если очередь не инициализирована или книга не найдена) — добавьте проверки if (readerQueue != null && !readerQueue.isEmpty()).
ArrayIndexOutOfBoundsException в массиве книг — расширьте массив или используйте динамический список (позже заменим на List).


Эксперименты:
Измените реализацию Queue на ArrayDeque — проверьте, работает ли аналогично (да, но эффективнее по памяти).
Добавьте метод isQueueEmpty() в Book для проверки пустоты — используйте в Library для статистики.



Полезные советы для новичков

Инициализация Queue: Всегда инициализируйте в конструкторе Book (readerQueue = new LinkedList<>();), чтобы избежать NullPointerException.
Проверка возвращаемого: Poll возвращает null при пустой — используйте if (nextReader != null) для сообщений.
Расширение: Подумайте о статусе книги (boolean isAvailable) — при возврате устанавливайте true, при выдаче — false.
Массив книг: Пока используем массив, но заметьте ограничения — в следующих уроках заменим на List<Book>.
Thread-safety: Если проект вырастет, подумайте о ConcurrentLinkedQueue для многопоточности.



#Java #для_новичков #beginner #Collections #Deque #ArrayDeque #LinkedList
👍2
Что выведет код?

import java.util.TreeSet;

public class Task271025 {
public static void main(String[] args) {
TreeSet<Integer> set = new TreeSet<>();
set.add(5);
set.add(3);
set.add(8);
set.add(1);

System.out.print(set.lower(4) + " ");
System.out.print(set.higher(4) + " ");
System.out.print(set.floor(3) + " ");
System.out.print(set.ceiling(6));
}
}


#Tasks
👍1
Варианты ответа:
Anonymous Quiz
50%
1 8 1 5
17%
3 5 3 5
25%
3 5 3 8
8%
3 8 3 8
👍2
Вопрос с собеседований

Что такое SPI (Service Provider Interface) в Java? 🤓


Ответ:

SPI
— это механизм для подключения модулей и расширений без изменения основного кода.

Реализуется через META-INF/services.

Используется во многих библиотеках (например, JDBC). Это паттерн «плагины» для Java-приложений.



#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
История IT-технологий сегодня — 28 октября


ℹ️ Кто родился в этот день

Уи́льям Ге́нри Гейтс III (англ. William Henry Gates III; 28 октября 1955, Сиэтл, Вашингтон), более известный как Билл Гейтс (англ. Bill Gates) — американский предприниматель и программист, сооснователь компании Microsoft; один из пионеров персональных компьютеров и массового ПО.

Лэндон Курт Нолл (родился 28 октября 1960 года) — американский информатик и математик; со-обнаруживший 25-ю и 26-ю числа Мерсенна, автор хеш-функции Fowler–Noll–Vo и участник соревнований по обфускации кода.


🌐 Знаковые события

1914 Фирма «Kodak» объявляет о начале работы над созданием технологий цветной фотографии.


#Biography #Birth_Date #Events #28Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Что такое gRPC и зачем он нужен

Представьте, что ваши программы — это люди в огромном городе. Им нужно обмениваться информацией: один спрашивает адрес, другой — погоду, третий — заказывает еду. Если они общаются письмами (медленно и объемно), то город встанет в пробке. А если по телефону — быстро, четко и без лишних слов?

Вот gRPC (высокопроизводительный фреймворк для удаленного вызова процедур) — это как суперсовременная телефонная сеть для программ. Он позволяет одной программе вызывать функции в другой, как будто они работают на одном компьютере, но через интернет или сеть.

Зачем изучать gRPC в 2025 году? Потому что мир софта ушел от простых сайтов к сложным системам: миллиарды устройств в интернете вещей, тысячи микросервисов в компаниях вроде Netflix или Uber. Обычные веб-API (как REST) здесь тормозят — gRPC ускоряет всё в 7–10 раз, экономит трафик и упрощает разработку.


Что такое RPC: Простое объяснение концепции удаленного вызова процедур

Удаленный вызов процедур (RPC — Remote Procedure Call) — это идея, где программа А "звонит" программе Б и говорит: "Выполни эту функцию и верни результат". Всё выглядит как обычный вызов локальной функции: передаешь данные, ждешь ответ — и готово. Никаких сложностей с сетью на уровне кода.

Пример из жизни: Вы в приложении нажимаете "Получить погоду" — ваше мобильное app вызывает функцию на сервере метеослужбы. Сервер считает, возвращает данные. В gRPC это пишется так же просто:
Клиент (ваше app): ответ = сервер.ПолучитьПогоду(город="Москва")
Сервер: выполняет расчет и отдает результат.


Без RPC пришлось бы вручную формировать запросы, парсить ответы — утомительно. gRPC автоматизирует всё: генерирует готовый код, управляет соединением и ошибками. В итоге — код чище, быстрее и надежнее.


Разница gRPC с REST: Почему RPC побеждает в скорости и гибкости

REST (Representational State Transfer — архитектурный стиль для веб-API) — популярный подход, где API строится вокруг эндпоинтов для получения данных. Использует HTTP-методы (GET, POST), текст в формате JSON. Просто читать человеку, но медленно для машин.

Вот ключевые различия:

Формат данных: REST — текст (JSON, большой и медленный), gRPC — бинарный (компактный, в 3–10 раз меньше). JSON "Привет, мир!" — 15 байт, в gRPC — 5 байт.
Скорость: gRPC на HTTP/2 (мультиплексирование — много запросов по одному каналу) в 7 раз быстрее при приеме данных, в 10 раз — при отправке. Идеально для мобильного интернета.
Гибкость общения: REST — только "запрос-ответ". gRPC поддерживает стриминг (поток сообщений): сервер шлет обновления в реальном времени (как чат), клиент загружает файлы порциями, или оба общаются одновременно.
Языки и платформы: REST — универсален, но код пишется вручную. gRPC генерирует код для 10+ языков (Python, Go, Java) из одного описания — никаких несоответствий.
Отладка: REST читаем в браузере, gRPC — бинарный, но есть инструменты вроде gRPCurl (аналог curl).

REST хорош для публичных API (сайты, простые apps). gRPC — для внутренних систем, где важна производительность. В 2025 году компании комбинируют: REST снаружи, gRPC внутри.


#Java #middle #gRPC
👎1
Почему Google создал gRPC: От внутренних нужд к мировому стандарту

Google — гигант с миллионами микросервисов (маленькие программы, работающие вместе). С 2001 года они использовали внутренний фреймворк Stubby для их связи. Но Stubby был закрытым, и партнерам (Android, YouTube API) приходилось писать свои библиотеки.

В 2015 году Google открыл gRPC: эволюцию Stubby на HTTP/2 и Protocol Buffers (protobuf — бинарный формат для данных).

Цели:
Объединить сервисы в дата-центрах и на устройствах.
Поддержка стриминга для реал-тайма.
Автоматическая генерация кода — один .proto-файл для всех языков.

К 2025 году gRPC — проект CNCF (Cloud Native Computing Foundation), используется в Google Cloud, Netflix (стриминг видео), Uber (поездки в реальном времени), Cisco. За 10 лет обработал триллионы вызовов — доказанная надежность.


Где применяется gRPC: От микросервисов до умных устройств

gRPC — король сценариев с высокой нагрузкой:

Микросервисы: Тысячи маленьких сервисов в Kubernetes (оркестратор контейнеров). Netflix использует для рекомендаций фильмов — миллиарды запросов в секунду без задержек. Внутренняя связь: сервис оплаты "звонит" сервису доставки.
Интернет вещей (IoT): Миллиарды устройств (умные лампочки, датчики). gRPC соединяет их с облаком: низкий трафик, стриминг данных (температура в реальном времени). Пример: умный дом от Google Nest.
Внутренние API: В компаниях — связь backend'ов. Uber: расчет маршрутов между сервисами. Банки: обработка транзакций. Не для клиентов (там REST), а внутри — для скорости.

В 2025: gRPC в AI (TensorFlow), играх (реал-тайм мультиплеер), авто (Tesla — связь машин с облаком).


#Java #middle #gRPC
👍2
Что выведет код?

import java.util.HashSet;

public class Task281025 {
public static void main(String[] args) {
HashSet<String> set1 = new HashSet<>();
set1.add("hello");
set1.add("world");

HashSet<String> set2 = new HashSet<>();
set2.add("world");
set2.add("hello");

System.out.println(set1.equals(set2));
System.out.println(set1 == set2);

HashSet<String> set3 = set1;
set3.add("java");

System.out.println(set1.contains("java"));
System.out.println(set2.contains("java"));
}
}


#Tasks
👍1