// код за функцията best() // с обработка на грешки при липса на наличен бекенд
Golang
На какъв програмен език работите? Защо възникнаха затруднения със синтаксиса?
/* Трябва да прехвърлим данни от източник към потребител. Източникът предоставя данни на малки пакети (~десет записа), докато потребителят работи по-ефективно с големи пакети (~хиляда записа). Реален пример е прехвърлянето на данни от опашки тип 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 връща: // - пакет от елементи за обработка // - cookie за потвърждение, когато обработката е завършена // - грешка Next() (items []any, cookie int, err error) // Commit се използва за маркиране на пакет данни като обработен Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Нека поговорим за микросервизна архитектура. Какво беше по-често напоследък: поддръжка или разработка?
Готови ли сте при необходимост или по лични желания да преминете към друг програмен език?
4 - бързо приемане на входящи задачи, 5 - връщане на резултата от задачата по заявка 6 - ако няма резултат, връщане на съответния статус /* Процесор - услуга, която изпълнява дълга, ресурсно-интензивна операция. Вече е реализирана Грешките, които връща, са изключително свързани с неправилни входни данни, стабилни са и повторното им искане е безсмислено */ type Processor interface { Process([]byte) ([]byte, error) } /* Предполагаме, че имаме генератор на уникални идентификатори (например UUID). Генераторът гарантира, че няма да има сблъсъци */ type ID string // func NewID() ID /* Планировчикът приема задачи от клиентите, ги поставя в опашка и започва обработката. Осигурява, че не повече от 'threads' метода за обработка работят едновременно Позволява да се провери статусът на задачата и да се получи резултатът не блокира публичните си методи за обработка */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // логика за инициализация return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // реализиране return "" }
Как да проверите дали прозорецът съдържа всички необходими символи?
Използвали ли сте публични облаци? Ако да, кои доставчици и услуги?
Имали ли сте опит в писането на програми с многонитови или асинхронни операции?
Разкажете ни за последните си проекти и използваната технологична стека.
// код за функцията best() // с обработка на грешки при липса на наличен бекенд
Правилно ли е, че в момента живеете в [град] и ще ви бъде удобно да работите в хибриден формат с посещения в офиса?
Разкажи какво се случва в крайна сметка — как натрупваме буфера?
Нека разгледаме пример: first=[1,1,2], second=[1,2]. Какво трябва да върне вашият алгоритъм и работи ли правилно с дублиращи се елементи?
Какви са вашите очаквания за заплата?
Как да ограничим броя на горутините, така че да не се изпълняват повече от 'threads' метода на Process едновременно? Кой ще извлича задачите от канала?
Кои анти-патерни в архитектурата на микросервизите знаете?
// код за функцията best() // с обработка на грешки при липса на наличен бекенд
[име] попита: при запазване на позицията на елемент по-малък от X, каква ще бъде позицията?
Занимахте ли се с лидерски задачи през цялото време на работата си?