Golang
Опишете процеса на събиране и настройка на gRPC услуга за ръчни тестове или разработка
Как се реализират механизмите за ограничаване на нивата на изолация на транзакциите на ниво система за управление на бази данни?
Какво може да се обърка при преобразуването на байтов сегмент в низ?
Какви ще са последиците, ако данните, предавани чрез канала, останат непрочетени?
Какъв формат на работа разглеждате — дистанционен, хибриден или офис?
Какви методи могат да се използват за осигуряване на обработка на Kafka до 100 хиляди съобщения в секунда?
Как управлява централният процесор разпределението на задачите между вътрешните и глобалните опашки с задачи?
Можете ли да обясните принципа на работа и използването на обекта sync.Pool в Go?
Какви операции съществуват върху слайсовете в Go?
Как се нарича процесът на преместване на елементи от една Map в друга?
/* Трябва да прехвърлим данни от източник към потребител. Източникът предоставя данни на малки пакети (~десет записа), докато потребителят работи по-ефективно с големи пакети (~хиляда записа). Реален пример е прехвърлянето на данни от опашки тип Kafka към база данни Clickhouse. Източник: - Практически безкраен. - Източникът никога не връща повече от MaxItems записи при едно извикване на Next. - В рамките на една "сесия" (едно извикване на функцията Pipe), източникът при всяко Next връща нови данни. - След рестарт обаче, източникът започва от предишната "потвърдена" позиция, указана от cookie. Затова, всяка стойност cookie, върната от Next, след като данните са запазени в получателя, трябва да бъде потвърдена с извикване на Commit, в същия ред, в който са били върнати от Next. Получател: - Не може да обработи повече от MaxItems наведнъж. Базово ниво: Трябва да се реализира функцията func Pipe(p Producer, c Consumer) error, която чете данни от източника, ги групира в буфер с размер не по-голям от MaxItems и ги запазва в получателя, след което потвърждава напредъка в източника. Усложнение: Методите Next, Process и Commit са свързани с мрежови извиквания и могат да отнемат доста време. За ускоряване на процеса, трябва да се паралелизират процесите по четене, запис и потвърждаване на напредъка. Така, че по време на Process или Commit, четенето от източника и формирането на новия буфер да продължават. */ 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 }
Как се реализира операцията select в езика Go и как работи с каналите?
Може ли да спрем изпълнението на горутина така, че да блокира на конкретен системен нишка?
Има ли езикът Go вградена поддръжка за масиви?
Кой механизъм за абстракция в езика Go е предназначен за представяне на символи или токени?
Какви методи могат да се използват за разделяне на база данни чрез шардиране?
Какви типове данни са подходящи за използване като ключ в структурата данни Map?
Можете ли да обясните механизма на функциониране на планировщика на задачи в операционната система?
Можете ли да обясните вътрешната структура и работата на хеш таблица?
Имали ли сте опит в решаването на сложни задачи, свързани с използването на Go Modules във вашите проекти?