Golang
Что такое API и для чего он нужен в интеграциях системы?
Как ты будешь понимать, что за счёт новых знаний стал более ценным?
С какими деталями/технологиями вы работали?
Реализация patch-процесса для загрузки и перерасчёта исторических данных — что значит перерасчёт исторических данных? Зачем каждую ночь пересчитывать?
-- Написать запрос, который исправит данные: -- заменить parent_id на NULL только у категорий, -- которые ссылаются сами на себя -- ОЖИДАЕМОЕ СОСТОЯНИЕ ТАБЛИЦЫ ПОСЛЕ UPDATE -- +----+----------+-----------+ -- | id | name | parent_id | -- +----+----------+-----------+ -- | 1 | pharma | NULL // Заменено на NULL -- | 2 | products | 4 -- | 3 | games | NULL // Заменено на NULL -- | 4 | music | 2 -- +----+----------+-----------+
Что такое партиционирование и зачем оно нужно?
Что такое индексы в базах данных, какие виды бывают и с какими вы работали?
Какие примитивы синхронизации есть в Go? В чем разница между Mutex и RWMutex? Когда использовать atomics?
На работе каким индексами пользовался? На практике что применял? В Wildberries?
Какие ещё языки программирования знаешь помимо Go на хорошем уровне?
Зачем нужен канал в небуферизированной передаче, если данные идут из стека в стек? Какую роль выполняет канал?
Какими инструментами Go пользовался, в том числе для профилирования и оценки производительности?
Почему ушли с предыдущего места?
Системный дизайн: спроектируй систему автоматизации парковки
Ты пришёл на проект, где код писался годами, куча легаси, нет тестов, всё еле дышит. С чего начнёшь работу, если нужно внедрить новую фичу?
/ * Нам нужно передать данные из некоторого источника некоторому потребителю. При этом источник отдает данные небольшими пачками (~ десятки записей), а потребитель оптимальнее работает с крупными батчами (~тысячи записей). Реальный пример - поставка данных из очередей типа 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 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 { // TODO }
С какими брокерами сообщений работал?
Используешь ли какие-то ИИ-инструменты, например, Cursor или Claude? Если да, то для каких целей?
Расскажи про проект в Авито — позиция (мидл/сеньор), какие задачи решал?
Как перевести число в двоичную систему?