История IT-технологий сегодня — 26 октября
ℹ️ Кто родился в этот день
Брендан Дэмиен Маккей (родился 26 октября 1951 года) — австралийский учёный (компьютерные науки и комбинаторика), внес значимый вклад в вычислительную теорию графов и алгоритмическую комбинаторику; автор множества алгоритмов и программ для исчерпывающего поиска в графах.
🌐 Знаковые события
1861 — немецкий изобретатель Филипп Рейс во Франкфурте продемонстрировал своё изобретение, которое он назвал телефоном.
2012 — выпуск операционной системы Windows 8.
#Biography #Birth_Date #Events #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
🔥7 1
Java for Beginner
This media is not supported in your browser
VIEW IN TELEGRAM
В тему поста
🗿3
История IT-технологий сегодня — 27 октября
ℹ️ Кто родился в этот день
Исаак Семёнович Брук (27 октября (9 ноября) 1902 года, Минск, Российская империя — 6 октября 1974, Москва, СССР) — советский учёный в электротехнике и вычислительной технике, один из организаторов и руководителей работ по созданию отечественных вычислительных машин (серия М-1…М-3), основатель научной школы в области ЭВМ в СССР. (в ряде русскоязычных источников дата рождения указывается как 27 октября 1902 (старый стиль) / 9 ноября — есть варианты формата дат в разных справочниках).
🌐 Знаковые события
Не нашел((
#Biography #Birth_Date #Events #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
Глава 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
После реализации протестируйте, чтобы убедиться в правильной работе очереди.
Запустите проект:
Правой кнопкой на 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
Что выведет код?
#Tasks
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
👍2
Вопрос с собеседований
Что такое SPI (Service Provider Interface) в Java?🤓
Ответ:
SPI — это механизм для подключения модулей и расширений без изменения основного кода.
Реализуется через META-INF/services.
Используется во многих библиотеках (например, JDBC). Это паттерн «плагины» для Java-приложений.
#собеседование
Что такое 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Октября
Уи́льям Ге́нри Гейтс 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 это пишется так же просто:
Без 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
Представьте, что ваши программы — это люди в огромном городе. Им нужно обмениваться информацией: один спрашивает адрес, другой — погоду, третий — заказывает еду. Если они общаются письмами (медленно и объемно), то город встанет в пробке. А если по телефону — быстро, четко и без лишних слов?
Вот 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
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
Что выведет код?
#Tasks
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