/* É uma string de caracteres dada. Encontrar o número de pares de índices i e j (i <= j), entre os quais não há caracteres repetidos. Para a string "aba", a resposta é 5: podem ser ASCII [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") */
Golang
Tem experiência em suporte ou desenvolvimento de sistemas distribuídos?
Já utilizou nuvens públicas? Se sim, com quais provedores e serviços?
Como você trabalha a arquitetura — há um arquiteto na equipe, plataforma, comité?
Qual será a velocidade de uma busca linear de todos os backends com alta RPS (por exemplo, 30.000 RPS e 10 backends)?
Como verificar rapidamente se há todos os caracteres na janela (comparação de dois mapas)?
type Balancer struct { // TODO backends []*BackendImpl index int mu sync.Mutex N int K time.Duration } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { if len(b.backends) == 0 { return nil, fmt.Errorf("Número de backends no slice 0") } b.mu.Lock() index := b.index for b.backends[index].banned { b.index = (b.index + 1) % len(b.backends) index = b.index } b.index = (b.index + 1) % len(b.backends) b.mu.Unlock() backend := b.backends[index] resp, err := backend.Backend.Invoke(ctx, req) if err != nil && backend.countErrors < b.N { backend.mu.Lock() backend.countErrors += 1 if backend.countErrors == b.N { backend.banned = true go func() { time.Sleep(b.K) backend.mu.Lock() defer backend.mu.Unlock() backend.banned = false backend.countErrors = 0 }() } backend.mu.Unlock() } return resp, err } // addrs contêm os endereços de todas as instâncias balanceadas func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImplF, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } }
Qual foi o maior volume de dados com que trabalhou em bases de dados?
/** :-))) :-(( "ab :-)" = "ab " "ab :-)))" = "ab " "ab :-)))(" = "ab (" "ab ):-)" = "ab )" ":-)" = "" **/ func deleteP(str string) string { n := len(str) res := make([]byte, 0, n) i := 0 for i < n { if str[i] == ':' && str[i+1] == '-' && (str[i+2] == ')' || str[i+2] == '(') { ch := str[i+2] i += 2 for i < n && str[i] == ch { i++ } } else { res = append(res, str[i]) } } return string(res) }
Em quantos hosts o serviço funcionava e quantas instâncias eram iniciadas?
Fala-me mais sobre o teu primeiro emprego de 2019 a 2021.
Quão ativamente estão a procurar? Talvez já existam algumas ofertas?
Existem formas mais simples e rápidas de equilibrar a carga em vez de escolher o backend menos carregado?
Quantas pessoas estiveram envolvidas no maior projeto em que trabalhaste? Menos de dez, dezenas, centenas?
Como resolver o problema de limitação de pedidos paralelos num sistema distribuído com várias instâncias, se o utilizador deve esperar em vez de receber um erro?
Encontre erros de sintaxe no código corrigido
Por que as mensagens do Message Service vão diretamente através do gRPC, em vez de através do Kafka?
func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) for right := 0; right < len(s); right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }
Implemente o método BulkCreateUsers com base no arquivo proto: crie a estrutura do projeto, a lógica de negócios, o repositório e as consultas SQL seguindo os princípios SOLID
É possível fazer memória constante sem remover o mapa?