Go тілінде тапсырма жазу — практикалық бөлім (әзірлеушінің өмірінен тапсырмалар, алгоритмдерсіз): сервисді жетілдіру немесе түзету. Ұзақтығы — 1,5 сағат.
Golang
JWT қолданғанда клиент, авторизация микросервісі және дүкен микросервісі арасындағы өзара әрекеттесу қалай болады? Ал JWT болмаса, сессиялармен не өзгереді?
Жұмыс тәжірибеңіз туралы айтып беріңіз және не істейсіз?
AeroHotels жобасы туралы айтыңыз: соңғы архитектура, сіз қалай бэкендті жобаладыңыз?
Қабатталған архитектура дегеніміз не және ол сіздің жобаңызда қалай ұйымдастырылды?
Команда құрамы қандай болды? Бұл монофункционалды ма, әлде кросс-функционалды ма?
Қазіргі уақытта өзіңіз үшін қызықты болатын қандай лауазымды қарастырып жатырсыз?
Груминг және ол жоспарлаудан қалай ерекшеленеді?
Міндет: LLM-ге 5 параллель сұраулар шектеуі бар қызмет бар. 6-шы сұрау келгенде, 429 қатесі пайда болады. Бұл мәселені концептуалды түрде қалай шешуге болады?
/* Қосымшасы микросервистік архитектураға ие. Микросервис 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 }
Қандай жұмыс форматын қарастырасыз?
Қаржылық күтулеріңіз қандай?
Функция қалай жоспарлау, әзірлеу, тестілеу, кодты қарау, шығарылым және кері қайтару кезеңдерінен өтеді?
/* берілген жол символдардан тұрады. i және j индекстерінің санын табыңыз (i <= j), олардың арасында қайталанатын символдар жоқ. "aba" үшін жауап 5: [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
Сіз Яндекс мультитрек бағдарламасы туралы не білесіз?
Сіз есеп айырысу бойынша жобада LLM-ді қалай енгіздіңіз? Жалпы әдісіңізді бөлісіңіз.
Сыртқы LLM-ге жіберу алдында жеке деректермен қалай жұмыс істедіңіз?
/* Берілген жол символдардан тұрады. i және j индекстерінің санын табыңыз (i <= j), олардың арасында қайталанатын символдар жоқ. "aba" жолы үшін жауап 5: ASCII болуы мүмкін [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
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 backends []*BackendImpl index int mu sync.Mutex } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { if len(b.backends) == 0 { return nil, fmt.Errorf("Backends саны 0") } b.mu.Lock() index := b.index if b.index + 1 == len(b.backends) { b.index = 0 index = 0 } b.mu.Unlock() resp, err := b.backends[index].Invoke(ctx, req) return resp, err } // addrs барлық балансқа салынатын экземплярлардың мекенжайларын қамтиды func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImpl, len(addrs))