Что выведет код?
#Tasks
import java.util.HashMap;
import java.util.Map;
public class Task041125 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
String key = "key";
System.out.print(map.put(key, 1) + " ");
System.out.print(map.put(key, 2) + " ");
System.out.print(map.putIfAbsent(key, 3) + " ");
System.out.print(map.compute(key, (k, v) -> null) + " ");
System.out.print(map.put(key, 4));
}
}
#Tasks
👍1
Варианты ответа:
Anonymous Quiz
0%
null 1 2 null 4
13%
null 1 2 null null
50%
null 2 2 null 4
38%
null 1 2 2 null
👍2
Бот заряжен и готов выдавать ссылки!
Переходите и просите у него ссылку)
Чтобы избежать ошибок при работе с ботом нажмите /start
@JFB_admin_bot
Переходите и просите у него ссылку)
Чтобы избежать ошибок при работе с ботом нажмите /start
@JFB_admin_bot
👍1
GraphQL. Как усложнение упрощает жизнь.
В сегодняшнем видео мы рассмотрели что такое GraphQL.
Сегодня я написал и запустил простой демонстрационный код в котором рассмотрел что такое GraphQL.
🔵 Разобрали в чем отличие от REST и gRPC, как это работает.
🔵 Написали файл shema.graphqls, разобрали какие типы данных в нем применяются.
🔵 Как всегда немного подебажили))
Репозиторий на GitHub ждет Ваших звезд☺️
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
В сегодняшнем видео мы рассмотрели что такое GraphQL.
Сегодня я написал и запустил простой демонстрационный код в котором рассмотрел что такое GraphQL.
Репозиторий на GitHub ждет Ваших звезд
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Вопрос с собеседований
Что делает класс AtomicInteger?🤓
Ответ:
AtomicInteger обеспечивает атомарные операции инкремента/декремента без блокировок.
Он использует низкоуровневые CAS (compare-and-swap) операции, что быстрее, чем синхронизация.
Это ключевой инструмент при реализации неблокирующих алгоритмов.
#собеседование
Что делает класс AtomicInteger?
Ответ:
Он использует низкоуровневые CAS (compare-and-swap) операции, что быстрее, чем синхронизация.
Это ключевой инструмент при реализации неблокирующих алгоритмов.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
История IT-технологий сегодня — 05 ноября
ℹ️ Кто родился в этот день
Бернар Шазель (родился 5 ноября 1955 года) — французско-американский учёный в вычислительной геометрии; автор ряда фундаментальных алгоритмических результатов (soft heap, эффективные алгоритмы MST и т.п.).
🌐 Знаковые события
2007 — Компания Google представила открытую мобильную платформу Android.
#Biography #Birth_Date #Events #05Ноября
Бернар Шазель (родился 5 ноября 1955 года) — французско-американский учёный в вычислительной геометрии; автор ряда фундаментальных алгоритмических результатов (soft heap, эффективные алгоритмы MST и т.п.).
2007 — Компания Google представила открытую мобильную платформу Android.
#Biography #Birth_Date #Events #05Ноября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Типы RPC в gRPC
Одно из ключевых преимуществ gRPC — это гибкость модели обмена данными.
REST традиционно работает в стиле “один запрос — один ответ”.
gRPC, в отличие от него, поддерживает четыре типа взаимодействия, и каждый из них решает свою задачу.
1. Unary RPC (один запрос — один ответ)
Это самый простой и самый распространённый тип — аналог классического REST-вызова.
Клиент отправляет один запрос, сервер обрабатывает его и возвращает один ответ.
Клиент → (один запрос) → Сервер
Сервер → (один ответ) → Клиент
Пример .proto
Сервер (Java)
Клиент
Где применяется:
CRUD-операции (создание, получение, обновление, удаление).
Любые точечные вызовы, где не требуется поток данных.
По сути: это "REST, но бинарный, типобезопасный и в 10 раз быстрее".
2. Server Streaming RPC (поток ответов от сервера)
В этом типе клиент делает один запрос, а сервер возвращает несколько ответов последовательно — поток сообщений.
Клиент → (один запрос) → Сервер
Сервер → (много ответов в потоке) → Клиент
Сеанс продолжается, пока сервер не закончит отправку данных.
Пример .proto
Сервер (Java)
Клиент
Где применяется:
Поток обновлений или уведомлений.
Стриминг данных (например, список записей, логи, результаты аналитики).
Долгие вычисления, когда сервер постепенно отдаёт результаты.
Пример из реального мира:
Сервер передаёт клиенту “живой” поток котировок акций или данных из IoT-устройств.
#Java #middle #gRPC #proto
Одно из ключевых преимуществ gRPC — это гибкость модели обмена данными.
REST традиционно работает в стиле “один запрос — один ответ”.
gRPC, в отличие от него, поддерживает четыре типа взаимодействия, и каждый из них решает свою задачу.
1. Unary RPC (один запрос — один ответ)
Это самый простой и самый распространённый тип — аналог классического REST-вызова.
Клиент отправляет один запрос, сервер обрабатывает его и возвращает один ответ.
Клиент → (один запрос) → Сервер
Сервер → (один ответ) → Клиент
Пример .proto
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
}
message UserRequest {
int32 id = 1;
}
message UserResponse {
string name = 1;
int32 age = 2;
}Сервер (Java)
public class UserServiceImpl extends UserServiceGrpc.UserServiceImplBase {
@Override
public void getUser(UserRequest request, StreamObserver<UserResponse> responseObserver) {
UserResponse response = UserResponse.newBuilder()
.setName("Alice")
.setAge(30)
.build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
}Клиент
UserResponse response = stub.getUser(
UserRequest.newBuilder().setId(1).build()
);
System.out.println(response.getName());
Где применяется:
CRUD-операции (создание, получение, обновление, удаление).
Любые точечные вызовы, где не требуется поток данных.
По сути: это "REST, но бинарный, типобезопасный и в 10 раз быстрее".
2. Server Streaming RPC (поток ответов от сервера)
В этом типе клиент делает один запрос, а сервер возвращает несколько ответов последовательно — поток сообщений.
Клиент → (один запрос) → Сервер
Сервер → (много ответов в потоке) → Клиент
Сеанс продолжается, пока сервер не закончит отправку данных.
Пример .proto
service OrderService {
rpc ListOrders (OrdersRequest) returns (stream Order);
}
message OrdersRequest {
string user = 1;
}
message Order {
string id = 1;
string product = 2;
}Сервер (Java)
public class OrderServiceImpl extends OrderServiceGrpc.OrderServiceImplBase {
@Override
public void listOrders(OrdersRequest request, StreamObserver<Order> responseObserver) {
for (int i = 1; i <= 3; i++) {
Order order = Order.newBuilder()
.setId("ORD-" + i)
.setProduct("Product " + i)
.build();
responseObserver.onNext(order);
try { Thread.sleep(1000); } catch (InterruptedException ignored) {}
}
responseObserver.onCompleted();
}
}Клиент
stub.listOrders(OrdersRequest.newBuilder().setUser("Bob").build())
.forEachRemaining(order -> System.out.println(order.getProduct()));Где применяется:
Поток обновлений или уведомлений.
Стриминг данных (например, список записей, логи, результаты аналитики).
Долгие вычисления, когда сервер постепенно отдаёт результаты.
Пример из реального мира:
Сервер передаёт клиенту “живой” поток котировок акций или данных из IoT-устройств.
#Java #middle #gRPC #proto
👍1
3. Client Streaming RPC (поток запросов от клиента)
Теперь наоборот — клиент отправляет поток запросов, а сервер отвечает одним итоговым сообщением.
Клиент → (много запросов) → Сервер
Сервер → (один ответ) → Клиент
Это удобно, когда клиенту нужно собрать несколько событий или пакетов данных и отправить их вместе.
Пример .proto
Сервер (Java)
Клиент
Где применяется:
Отправка файлов по частям.
Отчёты, собираемые из нескольких частей.
Потоковое логирование от клиента на сервер.
#Java #middle #gRPC #proto
Теперь наоборот — клиент отправляет поток запросов, а сервер отвечает одним итоговым сообщением.
Клиент → (много запросов) → Сервер
Сервер → (один ответ) → Клиент
Это удобно, когда клиенту нужно собрать несколько событий или пакетов данных и отправить их вместе.
Пример .proto
service UploadService {
rpc UploadPhotos (stream PhotoChunk) returns (UploadStatus);
}
message PhotoChunk {
bytes content = 1;
}
message UploadStatus {
string message = 1;
}Сервер (Java)
public class UploadServiceImpl extends UploadServiceGrpc.UploadServiceImplBase {
@Override
public StreamObserver<PhotoChunk> uploadPhotos(StreamObserver<UploadStatus> responseObserver) {
return new StreamObserver<PhotoChunk>() {
int totalBytes = 0;
@Override
public void onNext(PhotoChunk chunk) {
totalBytes += chunk.getContent().size();
}
@Override
public void onError(Throwable t) {
System.err.println("Upload failed: " + t.getMessage());
}
@Override
public void onCompleted() {
UploadStatus status = UploadStatus.newBuilder()
.setMessage("Uploaded " + totalBytes + " bytes")
.build();
responseObserver.onNext(status);
responseObserver.onCompleted();
}
};
}
}Клиент
StreamObserver<PhotoChunk> requestObserver = asyncStub.uploadPhotos(
new StreamObserver<UploadStatus>() {
@Override
public void onNext(UploadStatus status) {
System.out.println(status.getMessage());
}
@Override
public void onError(Throwable t) {}
@Override
public void onCompleted() {}
}
);
// Отправляем несколько чанков
requestObserver.onNext(PhotoChunk.newBuilder().setContent(ByteString.copyFrom(new byte[1000])).build());
requestObserver.onNext(PhotoChunk.newBuilder().setContent(ByteString.copyFrom(new byte[500])).build());
requestObserver.onCompleted();
Где применяется:
Отправка файлов по частям.
Отчёты, собираемые из нескольких частей.
Потоковое логирование от клиента на сервер.
#Java #middle #gRPC #proto
4. Bidirectional Streaming RPC (двунаправленный поток)
Самый мощный и сложный тип.
Клиент и сервер одновременно отправляют данные потоками.
Они не ждут завершения друг друга — общение идёт асинхронно в обе стороны.
Клиент ⇄ (двунаправленный поток) ⇄ Сервер
Пример .proto
Сервер (Java)
Клиент
Где применяется:
Чаты и видеоконференции.
Онлайн-игры и взаимодействие в реальном времени.
Телеметрия, двунаправленные датчики, IoT.
Главная особенность: оба канала открыты, и клиент, и сервер могут посылать данные независимо друг от друга.
5. Под капотом
Все типы RPC работают поверх HTTP/2, где каждый поток — это отдельный канал в рамках одного TCP-соединения.
gRPC использует этот механизм для организации стримов.
По сути, StreamObserver в Java — это высокоуровневая абстракция над HTTP/2-стримом, обеспечивающая асинхронность и реактивное взаимодействие.
#Java #middle #gRPC #proto
Самый мощный и сложный тип.
Клиент и сервер одновременно отправляют данные потоками.
Они не ждут завершения друг друга — общение идёт асинхронно в обе стороны.
Клиент ⇄ (двунаправленный поток) ⇄ Сервер
Пример .proto
service ChatService {
rpc Chat (stream ChatMessage) returns (stream ChatMessage);
}
message ChatMessage {
string user = 1;
string text = 2;
}Сервер (Java)
public class ChatServiceImpl extends ChatServiceGrpc.ChatServiceImplBase {
@Override
public StreamObserver<ChatMessage> chat(StreamObserver<ChatMessage> responseObserver) {
return new StreamObserver<ChatMessage>() {
@Override
public void onNext(ChatMessage message) {
// Эхо-сообщение обратно клиенту
ChatMessage reply = ChatMessage.newBuilder()
.setUser("Server")
.setText("Echo: " + message.getText())
.build();
responseObserver.onNext(reply);
}
@Override
public void onError(Throwable t) {
System.err.println("Error: " + t.getMessage());
}
@Override
public void onCompleted() {
responseObserver.onCompleted();
}
};
}
}Клиент
StreamObserver<ChatMessage> requestObserver = asyncStub.chat(
new StreamObserver<ChatMessage>() {
@Override
public void onNext(ChatMessage value) {
System.out.println(value.getUser() + ": " + value.getText());
}
@Override
public void onError(Throwable t) {}
@Override
public void onCompleted() {}
}
);
requestObserver.onNext(ChatMessage.newBuilder().setUser("Client").setText("Hello!").build());
requestObserver.onNext(ChatMessage.newBuilder().setUser("Client").setText("How are you?").build());
requestObserver.onCompleted();
Где применяется:
Чаты и видеоконференции.
Онлайн-игры и взаимодействие в реальном времени.
Телеметрия, двунаправленные датчики, IoT.
Главная особенность: оба канала открыты, и клиент, и сервер могут посылать данные независимо друг от друга.
5. Под капотом
Все типы RPC работают поверх HTTP/2, где каждый поток — это отдельный канал в рамках одного TCP-соединения.
gRPC использует этот механизм для организации стримов.
По сути, StreamObserver в Java — это высокоуровневая абстракция над HTTP/2-стримом, обеспечивающая асинхронность и реактивное взаимодействие.
#Java #middle #gRPC #proto
👍1
Что выведет код?
#Tasks
import java.util.TreeMap;
public class Task061125 {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "one");
map.put(3, "three");
map.put(5, "five");
map.put(7, "seven");
System.out.print(map.lowerKey(4) + " ");
System.out.print(map.floorKey(4) + " ");
System.out.print(map.higherKey(4) + " ");
System.out.print(map.ceilingKey(4));
}
}
#Tasks