Como utilizou Kafka e RabbitMQ como brokers? Por que dois?
Golang
O que é a entidade Service no Kubernetes?
Se tivesses que escolher entre duas empresas ou duas equipas, no que te focarias e como escolherias?
Para que precisas de um gestor no teu trabalho? Para que serve?
O que é sharding e para que é utilizado? Como escolher a chave de sharding para tabelas de um serviço de táxi (motoristas, clientes, pedidos)?
Como funciona uma tabela hash? Qual é a complexidade de inserção e leitura? Características da implementação em Go.
Tens alguma ideia de em que equipa gostarias de trabalhar? Como deveria ser essa equipa?
Já aconteceu de você fazer algo por muito tempo e, no final, não ser implementado ou ser adiado na pilha?
Com que frequência realizavam revisões de código na equipa?
Quantos anos de experiência comercial em desenvolvimento com Go?
É necessário projetar a arquitetura de backend para um mensageiro (Slack, Teams, Mattermost). Requisitos e restrições: apenas chats 1x1, sem chats em grupo apenas mensagens de texto, sem anexos o serviço está disponível via internet até 10.000 utilizadores no sistema as mensagens devem ser entregues rapidamente, em poucos segundos a ordem das mensagens deve ser preservada, sem duplicados deve ser possível rolar o chat para trás, ou seja, armazenar mensagens os clientes são dispositivos móveis, não é necessário projetá-los não é necessário projetar a autorização
Como será o processo de envio e recepção de mensagens entre dois clientes? Descreva o fluxo completo.
Como é que o cliente fica a saber das mensagens recebidas enquanto estava offline?
O que é HTTPS? Como difere do HTTP? Como protege contra ataques de 'homem no meio'?
Para a execução correta do código: o ponto de entrada -- a função main no pacote main package main import ( "crypto/md5" "fmt" ) var alphabet = []rune{'a', 'b', 'c', 'd', '1', '2', '3'} func RecoverPassword(h []byte) string { return "" } func hashPassword(in string) []byte { h := md5.Sum([]byte(in)) return h[:] } func main() { tests := []string{"a", "12", "abc333d"} ok := true for _, exp := range tests { h := hashPassword(exp) act := RecoverPassword(h) if act != exp { fmt.Printf("Erro: esperado %q, obtido %q\n", exp, act) ok = false } } if ok { fmt.Println("Todos os testes passaram com sucesso") } }
O que se deseja mais agora — desenvolvimento de produto ou de plataforma?
SELECT * c.id, -- selecionar todos os chats (c.id, c.name) para todos os usuários pelo nome ($1) where text > 'abc'
Qual é a diferença entre processos, threads e goroutines em Go?
Condição Existem 3 entidades: utilizador, chat, mensagem • O utilizador tem um nome e uma data de registo • O chat tem um nome e uma data de criação • A mensagem tem texto, autor e data de criação • Um utilizador pode estar em vários chats ao mesmo tempo • A mensagem pertence obrigatoriamente a um chat, não pode pertencer a mais de um chat ao mesmo tempo • É necessário descrever o domínio em forma de tabelas -- distribuído -- message_count nos chats limite de 100 --getShard(time zone) -> shard_id -> 1 --getShard(time zone) -> shard_id -> 2 --shard1 [1..100] --shard2 [101..200] CREATE TABLE users ( id int PRIMARY KEY, name varchar(255) NOT NULL, reg_at TIMESTAMP NOT NULL DEFAULT NOW() ); CREATE TABLE chats ( id int PRIMARY KEY, name VARCHAR(255) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW(), message_count int NOT NULL CHECK <= 100 ); CREATE TABLE user_chats ( user_id int not null REFERENCES users(id), chat_id int NOT NULL REFERENCES chats(id), PRIMARY KEY (user_id, chat_id) ); CREATE TABLE messages ( id int PRIMARY KEY, chat_id int NOT NULL REFERENCES chats(id), author_id int NOT NULL REFERENCES users(id), created_at TIMESTAMP NOT NULL DEFAULT NOW(), text TEXT NOT NULL );
Fala de forma geral sobre o projeto — o que foi para o utilizador final?