Sobes.tech

Golang

Como utilizou Kafka e RabbitMQ como brokers? Por que dois?

214

Se tivesses que escolher entre duas empresas ou duas equipas, no que te focarias e como escolherias?

210

Para que precisas de um gestor no teu trabalho? Para que serve?

210

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)?

209

Como funciona uma tabela hash? Qual é a complexidade de inserção e leitura? Características da implementação em Go.

209

Tens alguma ideia de em que equipa gostarias de trabalhar? Como deveria ser essa equipa?

206

Já aconteceu de você fazer algo por muito tempo e, no final, não ser implementado ou ser adiado na pilha?

205

Com que frequência realizavam revisões de código na equipa?

204

Quantos anos de experiência comercial em desenvolvimento com Go?

201

É 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

200

Como será o processo de envio e recepção de mensagens entre dois clientes? Descreva o fluxo completo.

197

Como é que o cliente fica a saber das mensagens recebidas enquanto estava offline?

197

O que é HTTPS? Como difere do HTTP? Como protege contra ataques de 'homem no meio'?

194

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") } }

194

O que se deseja mais agora — desenvolvimento de produto ou de plataforma?

192

SELECT * c.id, -- selecionar todos os chats (c.id, c.name) para todos os usuários pelo nome ($1) where text > 'abc'

192

Qual é a diferença entre processos, threads e goroutines em Go?

191

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 );

191

Fala de forma geral sobre o projeto — o que foi para o utilizador final?

191
/4