Golang
Que formato de trabalho considera — remoto, híbrido ou escritório?
Quais métodos podem ser usados para garantir o processamento do Kafka até 100 mil mensagens por segundo?
De que forma o processador central gere a distribuição de tarefas entre as filas de tarefas internas e globais?
Pode explicar o princípio de funcionamento e o uso do objeto sync.Pool em Go?
Que operações existem sobre slices em Go?
Como se chama o processo de mover elementos de um Map para outro?
/* Precisamos transferir dados de uma fonte para um consumidor. A fonte fornece os dados em pequenos lotes (~dez registos), enquanto que o consumidor funciona melhor com lotes maiores (~mil registos). Um exemplo real é a transferência de dados de filas tipo Kafka para uma base de dados Clickhouse. Fonte: - Praticamente infinita. - A fonte nunca devolve mais de MaxItems registos numa chamada a Next. - Dentro de uma "sessão" (uma chamada à função Pipe), a fonte devolve dados novos em cada chamada a Next. - No entanto, após reiniciar, a fonte começa na posição "confirmada" anterior, indicada por cookie. Portanto, *cada* valor de cookie devolvido por Next, após guardar os dados no receptor, deve ser confirmado com a chamada a Commit, na mesma ordem em que foram devolvidos por Next. Receptor: - Não pode processar mais de MaxItems de cada vez. Nível básico: É necessário implementar a função func Pipe(p Producer, c Consumer) error que lê dados da fonte, os agrupa num buffer de tamanho não superior a MaxItems e os guarda no receptor, depois de o fazer, confirma o progresso na fonte. Dificuldade adicional: Os métodos Next, Process e Commit estão relacionados com chamadas de rede e podem demorar bastante. Para acelerar o processo, é necessário paralelizar os processos de leitura, escrita e confirmação de progresso. De modo que, durante Process ou Commit, a leitura da fonte e a formação do novo buffer continuem. */ const MaxItems = 9999 type Producer interface { // Next devolve: // - um lote de itens para processar // - uma cookie para confirmar quando o processamento estiver concluído // - um erro Next() (items []any, cookie int, err error) // Commit é usado para marcar um lote de dados como processado Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Como é que a operação select é implementada na linguagem Go e como ela funciona com canais?
É possível suspender a execução de uma goroutine de modo que ela bloqueie em uma thread do sistema específica?
A linguagem Go possui suporte embutido para arrays?
Qual mecanismo de abstração na linguagem Go é destinado a representar caracteres ou tokens?
O que significa um valor nulo para um segmento numa linguagem de programação?
Quais métodos podem ser utilizados para dividir uma base de dados com sharding?
Que tipos de dados são adequados para uso como chave na estrutura de dados Map?
Pode explicar o funcionamento do mecanismo do agendador de tarefas no sistema operativo?
Pode explicar a estrutura interna e o funcionamento de uma tabela hash?
Tem experiência na resolução de problemas complexos relacionados com o uso de Go Modules nos seus projetos?
Que ferramentas ou bibliotecas de testes automáticos prefere usar no seu trabalho?
Quais protocolos de transmissão de dados utilizou para interagir com a parte cliente da aplicação?
O mecanismo Mutex garante uma ordem estrita para os threads ao acederem a recursos partilhados para leitura e escrita?