Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме gRPC-GoВсе вопросы
gRPC-GoJuniorТеория

Что такое Protocol Buffers (protobuf) и почему gRPC использует его вместо JSON?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Protocol Buffers — бинарный формат сериализации с компактным encoding по номерам полей. gRPC использует его для меньшего размера сообщений, быстрого парсинга и строгой типизации через .proto-схему.

Пример .proto и генерация Go-кода

syntax = "proto3";
package product;
option go_package = "example.com/gen/product";

message Product {
  string id    = 1;
  string name  = 2;
  double price = 3;
  repeated string tags = 4;
}
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
protoc --go_out=. --go-grpc_out=. product.proto

Что такое Protocol Buffers

Protocol Buffers (protobuf) — язык описания схем данных и бинарный формат сериализации от Google. Схема описывается в .proto-файлах; инструмент protoc генерирует код для десятков языков. Каждое поле кодируется парой (номер поля, значение) без имён — это ключевое отличие от JSON.

Сравнение Protobuf vs JSON

  • Размер: Protobuf в среднем в 3–10 раз меньше JSON. Поля кодируются varint-числами вместо строк.
  • Скорость парсинга: бинарный формат парсится в 5–7 раз быстрее JSON; нет необходимости в лексере строк.
  • Типизация: все типы строго определены в .proto; опечатки в именах полей — ошибка компиляции, а не runtime-баг.
  • Эволюция схемы: поля идентифицируются по номерам, а не именам — переименование поля обратно совместимо.
  • Читаемость: JSON читаем человеком без декодера; бинарный protobuf требует инструментов (protoscope, grpcurl).

Использование сгенерированного кода

package main

import (
	"fmt"
	"log"

	"google.golang.org/protobuf/proto"
	pb "example.com/gen/product"
)

func main() {
	p := &pb.Product{
		Id:    "sku-42",
		Name:  "Gopher Plush",
		Price: 19.99,
		Tags:  []string{"toys", "go"},
	}

	// Сериализация
	data, err := proto.Marshal(p)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("protobuf bytes: %d\n", len(data)) // ~25 байт

	// Десериализация
	var p2 pb.Product
	if err := proto.Unmarshal(data, &p2); err != nil {
		log.Fatal(err)
	}
	fmt.Println(p2.Name)
}

Обратная совместимость полей

// v2 — безопасное добавление поля
message Product {
  string id       = 1;
  string name     = 2;
  double price    = 3;
  repeated string tags = 4;
  string currency = 5; // новое поле — старые клиенты игнорируют
}
// НЕЛЬЗЯ: менять тип поля 3 с double на int64 — нарушает wire-совместимость
// НЕЛЬЗЯ: переиспользовать номер 3 для другого поля после удаления старого

Подводные камни

  • Нельзя переиспользовать номера полей; удалённые поля следует помечать через reserved 3; и reserved "price";.
  • Значения по умолчанию в proto3 (0, "", false) не отличимы от явно выставленных; используйте optional или google.protobuf.BoolValue для явного null.
  • Бинарный формат не самодокументирован — без .proto-файла декодировать данные крайне сложно; храните схемы в Schema Registry.
  • Изменение типа существующего поля (например, int32 → int64) нарушает wire-формат даже при совпадении имени.
  • JSON-транскодинг (grpc-gateway) преобразует proto в JSON по правилам camelCase — имя user_id станет userId; фронтенд должен об этом знать.
  • Версия protoc и плагинов protoc-gen-go должна быть согласована во всей команде; разные версии могут генерировать несовместимый код.
  • proto.Clone не копирует неизвестные поля корректно в некоторых версиях; для глубоких копий проверяйте поведение вашей версии SDK.

Частые вопросы на собеседовании

  • Как работает аутентификация в gRPC? Как реализовать TLS и mutual TLS (mTLS)?
  • Как реализовать token-based аутентификацию (JWT) в gRPC с помощью metadata?
  • Как реализовать gRPC-сервер на Go?
  • Каковы четыре типа паттернов взаимодействия gRPC? Объясните unary, server streaming, client streaming и bidirectional streaming.

Типичные ошибки

  • Давать ответ про protobuf и JSON в gRPC только на уровне определения, не показывая поведение в реальном приложении.
  • Игнорировать границы ответственности вокруг темы «protobuf и JSON в gRPC»: кто отменяет работу, кто владеет ресурсом и где формируется ответ клиенту.
  • Не связывать protobuf и JSON в gRPC с observability, тестированием или безопасностью, когда это влияет на продакшен-поведение.

Что проверяет интервьюер

  • Точно объясняет, что именно делает protobuf и JSON в gRPC и где это используется в Go-коде.
  • Связывает protobuf и JSON в gRPC с корректным lifecycle запроса, отменой, конкурентностью или конфигурацией сервера там, где это уместно.
  • Не изобретает API и опирается на реальные контракты официальной документации.

Как вы знаете этот вопрос?

Проверить себя по теме gRPC-Go →

Источники

  • https://grpc.io/docs/what-is-grpc/introduction/
  • https://grpc.io/docs/what-is-grpc/core-concepts/
←Предыдущий вопросКак реализовать отмену (cancellation) в gRPC streaming calls?Следующий вопрос→Что такое gRPC и каковы его основные преимущества перед REST?

Связанные темы

gRPC-Goapi-designserializationtechnical-reasoning