Golang
Можете объяснить, что такое типы, передаваемые по ссылке в языках программирования?
Каким образом реализовать и использовать класс для эффективного построения строк в Java?
Как бы ты действовал, если заметил, что серверная часть работает с задержками?
Какие последствия возникают при попытке получить данные из Slave, если эта информация еще не была полностью скопирована с Master?
Каким образом можно подключить механизм логирования к вашему приложению?
Каким образом можно завершить работу с каналом в программе?
Можете объяснить, что подразумевается под термином IAM в контексте информационной безопасности?
Как называется механизм в репликации, при котором происходит автоматический выбор нового лидера после сбоя основного сервера?
Можете ли вы объяснить значимость и роль переменной kq в языке Go?
Можно ли стандартизировать обработку ошибок?
/* Нам нужно передать данные из некоторого источника некоторому потребителю. При этом источник отдает данные небольшими пачками (~ десятки записей), а потребитель оптимальнее работает с крупными батчами Реальный пример - поставка данных из очередей типа Kafka в базу Clickhouse. Источник: - Условно бесконечный. - Источник никогда не возвращает более MaxItems записей за один вызов Next. - В рамках одной "сессии" (одного вызова функции Pipe) источник каждый раз возвращает новые данные на каждый вызов Next. - Однако, после перезапуска источник начнет с прошлой "подтвержденной" позиции, задаваемой cookie. Поэтому *каждое* значение cookie, которое вернул вызов Next, после сохранения данных в приемнике, должно быть фиксировано вызовом Commit, причем строго в той же последовательности, в которой их вернул Next Приемник: - Не может обработать более MaxItems за один раз. Базовый уровень: Требуется реализовать функцию func Pipe(p Producer, c Consumer) error которая читает данные из источника, группирует их в буфер размером не более MaxItems и сохраняет в приемник, после чего фиксирует прогресс в источнике. */ const MaxItems = 9999 type Producer interface { // Next returns: // - batch of items to be processed // - cookie to be commited when processing is done // - error Next() (items []any, cookie int, err error) // Commit is used to mark data batch as processed Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
Какой у вас опыт использования Elasticsearch в проектах?
Можно ли осуществлять безопасное чтение данных из структуры данных map без риска возникновения ошибок?
Какие ключевые свойства характеризуют массивы в программировании?
Можешь перечислить основные ссылочные типы данных, используемые в Go?
Какими инструментами ты пользуется для поиска и устранения ошибок в коде?
Каким образом можно отсортировать массив структур в языке Go?
Каким образом осуществляется поиск элементов в структуре данных Map в языке Go?
Каким образом можно корректно остановить выполнение горутин с использованием контекста в Go?
Какие типы данных подходят для использования в качестве ключа в структуре данных Map?