Ի՞նչ էր եղել ձեր աշխատած տվյալների ամենամեծ ծավալը և քանի՞ հարցում էր ընթերցում/գրառման համար։
Golang
/* Միկրոսերվիսի ճարտարապետությամբ հավելված կա: Միկրոսերվիսը կարող է ամփոփվել Backend ինտերֆեյսի միջոցով: Միկրոսերվիսի օրինակին մուտք գործելու համար կարող եք օգտագործել տիպը BackendImpl, որը արդեն իրականացված է: Յուրաքանչյուր միկրոսերվիս ունի մի քանի տասնյակ գործարկված նմուշներ, որոնցից յուրաքանչյուրը հասանելի է իր սեփական հասցեով addr: Սակայն, միկրոսերվիսի առանձին օրինակները չեն վստահելի: նրանք կարող են ընկնել, լինել անհասանելի կամ ծանրաբեռնված: Աստիճանաբար, դուք պետք է իրականացնեք Balancer տիպը, որը նույնպես իրականացնում է Backend ինտերֆեյսը և իրականացնում է կլիենտ-կողմ բեռի հավասարակշռություն միկրոսերվիսի օրինակների միջև, ընտրելով ամեն անգամ **ամենափոքր բեռնված** օրինակ:
Կարող եք կարճ ներկայացնել ձեր փորձը: Ի՞նչ է ձեր հիմնական ծրագրավորման լեզուն: Քանի տարի է, ինչ աշխատում եք արդյունաբերական զարգացման ոլորտում:
Ինչու որոշեցիք օգտագործել LLM, ոչ թե պարզապես տրամաբանություն կոդում?
Ի՞նչն է առավելություն JWT-ի համեմատ սերվերում սեսիաների պահպանումին:
Ի՞նչ չափի հիշողություն է սկզբում հատկացվել բուֆերին:
func Pipe(p Producer, c Consumer) error { // TODO buf := make([]any, 0, MaxItems) cookies := make([]int, 0) flush := func() error { if len(buf) == 0 { return nil } if err := c.Process(buf); err != nil { return err } for _, cookie := range cookies { if err := p.Commit(cookie); err != nil { return err } } buf = buf[:0] cookies = cookies[:0] return nil } for { items, cookie, err := p.Next() if err != nil { flush() return err }
Ի՞նչ է քո հիմնական ծրագրավորման լեզուն: Օգտագործում ես C++ կամ Python?
Ինչու է backend.Invoke զանգը կատարվել մյուտեքսից դուրս?
Ի՞նչ կլինի, եթե Consumer.Process-ը վերադարձնի սխալ — տվյալները բաքից չեն կորցվի:
Բալանսավորողը պետք է հասկանա, որ բեքենդը պատասխանում է սխալներով, և որոշ ժամանակ անց գերազանցելով սահմանը, այն դուրս հանի բալանսավորումից (Circuit Breaker)
Տրված է S տողը, անհրաժեշտ է հաշվել այդ տողում գտնվող բոլոր ենթատողերի քանակը, որոնք պարունակում են այդ տողի բոլոր նիշերը առնվազն մեկ անգամ: Օրինակներ: "abca" -> 3 // abc, bca, abca "aa" -> 3 // aa, a, a, "ffg" -> 2 // ffg, fg
Ի՞նչ է ձեր ներկայիս բարձր բեռի ժամանակ մեկ վայրկյանում առավելագույն հարցումների քանակը:
Ի՞նչ ծրագրավորման լեզուներ, բացի Go-ից, եք օգտագործում ինքներդ կամ առևտրային զարգացման մեջ:
Սա նիշերի շղթա է։ Գտեք i և j ցուցանիշների զույգերի քանակը (i <= j), որոնց միջև, ներառյալ, կրկնվող նշաններ չկան։ "aba" շղթայի համար պատասխանն է 5՝ [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") "acbb" շղթայի համար պատասխանն է ?:
Դուք որ ծրագրավորման լեզվով եք աշխատում: Ինչու՞ առաջացան սինտաքսի դժվարություններ:
Որ չափանիշներով եք ընտրելու գործատու? Ի՞նչն է ձեզ համար ամենակարևորնը:
// TODO backends []*BackendImpl index int mu sync.Mutex func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { 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) b.mu.Lock() defer b.mu.Unlock() b.index += 1 return resp, err } // addr պարունակում է ip:port կոնկրետ օրինակ func NewBackend(addr string) *BackendImpl // addrs պարունակում են բոլոր բալանսավորված օրինակների հասցեները func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImpl, len(addrs)) for _, addr := range addrs { backends = append(backends, NewBackend(addr)) } return &Balancer{ backends: backends, } }
Դուք պատրաստ եք անհրաժեշտության դեպքում կամ անձնական ցանկությամբ անցնել այլ ծրագրավորման լեզու?
Որտե՞ղ ես ապրում, որտե՞ղ ես գտնվում?