Golang
Como são implementados os mecanismos de restrição dos níveis de isolamento das transações ao nível do sistema de gestão de bases de dados?
O que pode dar errado ao converter um segmento de bytes em uma string?
Quais as consequências se os dados transmitidos através do canal permanecerem não lidos?
Qual é a vantagem das goroutines em comparação com os threads em termos de eficiência e facilidade de uso?
Quais parâmetros podem ser configurados para o funcionamento do agendador de tarefas?
Quais métodos podem ser usados para garantir o processamento do Kafka até 100 mil mensagens por segundo?
Como você percebe a situação quando o uso da interface não é explicitamente indicado no código?
Fala-me do projeto atual em que estás a trabalhar ou que trabalhaste recentemente
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?
Como é implementado o processamento paralelo e sequencial de tarefas na linguagem Go?
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?