Sobes.tech

Оё муҳлат вуҷуд дорад?

215

Оё таҷрибаи кор бо системаҳои тақсимшуда доред?

215

Дар бораи базаҳои маълумот нақл кун — бо кадомҳо кор кардаӣ ва ҳоло бо кадомҳо кор мекунӣ?

214

Берілген символдар жолы. i және j көрсеткіштерінің жұбын табыңыз (i <= j), олардың арасында, соның ішінде, қайталанатын символдар жоқ. "aba" жолы үшін жауап 5: [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") "abcb" жолы үшін жауап ?: aba 3 + 2 = 5 abcb 4 (a, b, c, d) + 1 (ab) + 1 (bc) + 1 (cb) + 1 (abc) = 8

213

/* Ҳарфлардан иборат сатр берилган. Қайси i ва j индекси жўфтликларининг сонини топинг, улар орасида такрорланувчи ҳарфлар йўқ. "aba" сири учун жавоб 5: фақат ASCII бўлмаслиги мумкин [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */

213

/* Нам нужно передать данные из некоторого источника некоторому потребителю. При этом источник отдает данные небольшими пачками (~ десятки записей), а потребитель оптимальнее работает с крупными батчами (~тысячи записей). Реальный пример - поставка данных из очередей типа 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 }

213

Чӣ гуна фарқият доранд муҳитҳои local, dev, stage, prod?

213

Қоидаи ислоҳоти вобастагиро шарҳ диҳед ва чаро даъвати мустақим ба усулҳои репозиторӣ аз истифодаи ҳолат SOLID-ро вайрон мекунад.

212

Чӣ гуна шумо санҷиш ва тасдиқи дурустии дархостҳои иҷрошударо анҷом додед?

Junior — Middle
211

/* Микросервис архитектурасига эга бўлган илова мавжуд. Микросервис, Backend интерфейси орқали абстракция қилинади. Микросервиснинг бир нусхасига кириш учун, сиз BackendImpl туридан фойдаланишингиз мумкин, у аллақачон амалга оширилган. Ҳар бир микросервисда бир неча ўнлаб ишга туширилган нусхалар мавжуд, уларнинг ҳар бири ўз манзили addr орқали кириш мумкин. Бироқ, микросервиснинг алоҳида нусхалари ишончли эмас: улар ёки тўкилади, ёки мавжуд эмас ёки ортиқча юкланган бўлиши мумкин. Шунинг учун, сиз Balancer турини амалга оширишингиз керак, у ҳам шунингдек, Backend интерфейсини амалга оширади ва микросервис нусхалари орасида мижоз томонидан юк балансини амалга оширади, ҳар сафар **энг кам юкланган** нусхани танлайди. */

210

JWT чӣ гуна эътибори худро месанҷад? Чӣ гуна тасдиқ мекунад, ки токен қалбакӣ нест?

210

/* Има апликација со архитектура на микросервиси. Микросервисот може да се апстрахира преку интерфејсот Backend. За пристап до примерокот на микросервисот, можете да користите типот BackendImpl, кој веќе е имплементиран. Секој микросервис има неколку десетици работни примероци, секој од нив е достапен преку својата адреса addr. Меѓутоа, поединечните примероци на микросервисот не се сигурни: можат да паѓаат, да бидат недостапни или пренатоварени. Затоа, треба да ја имплементирате типот Balancer, кој исто така ја имплементира интерфејсот Backend и врши баланс на товарот од страна на клиентот меѓу примероците на микросервисот, секогаш избирајќи **најмалку натоварен** примерок. */ type Request interface{} type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr содржи ip:port на конкретен примерок func NewBackend(addr string) *BackendImpl type Balancer struct { // TODO } var _ Backend = &Balancer{} // addrs содржат адресите на сите балансирани примероци func NewBalancer(addrs []string) *Balancer { // TODO }

209

Оё таҷрибаи идора кардани гурӯҳ доред?

208

Маҳдудияти семафор ва канали бо буфер ҳамчун ҳалли маҳдуд кардани дархостҳои параллелӣ чист?

208

Чӣ ба ҷавоб илова мешавад, вақте ки тиреза эътибор пайдо мекунад?

207

Чӣ тавр унсурҳоро дар харита муқоиса кардан мумкин аст? Чӣ тавр санҷед, ки ду харита мувофиқанд?

205

Беҳтарин миқдори дархостҳо дар сония (RPS) ки хидматрасонии баландтарин коркард кардааст, чӣ қадар аст?

204

Тавсияеро дар забони Go — бахши амалӣ (мушкилоти зиндагии таҳиягар, бе алгоритмҳо): беҳтар ё ислоҳ кардани хидмат. Вақт — 1,5 соат.

204

Команда чӣ гуна буд? Монофунксионалӣ ё кросс-функсионалӣ буд?

204

Формати корӣ: дур, дар офис ё гибрид?

203
/11