P
prepair.app
Começar entrevista →
EnglishУкраїнськаРусскийDeutsch
💎

Middle Ruby on RailsPerguntas de entrevista Ruby on Rails

Middle · 2–4 anos de experiência

As entrevistas de Ruby seguem duas camadas: a própria linguagem — blocks, módulos, a cadeia de busca de métodos — e depois o Rails, onde a maioria das perguntas na verdade é sobre Active Record e o banco de dados por trás dele. Aqui estão as perguntas mais frequentes, cada uma com uma resposta modelo. Middle: compreensão mais profunda, otimização e situações reais de trabalho.

Experimente — sem necessidade de conta
Preparando sua pergunta…

Temas para se preparar

Núcleo do Ruby e blocks
OOP, módulos e mixins
Active Record e associações
Rails MVC, routing, controllers
Consultas N+1 e performance
RSpec, FactoryBot, Rubocop

6 perguntas de nível Middle com respostas

1

Explique a cadeia de busca de métodos no Ruby.

Resposta

O Ruby procura na classe singleton do objeto, depois nos módulos prepended, depois na própria classe, depois nos módulos included em ordem reversa de inclusão, depois sobe para a superclasse, e repete. SomeClass.ancestors imprime a ordem real, o que resolve a maioria das discussões mais rápido do que raciocinar sobre isso. super continua por essa mesma cadeia a partir de onde você está.

2

`includes`, `preload`, `eager_load` — quando cada um se aplica?

Resposta

preload carrega a associação em uma segunda consulta. eager_load usa um único LEFT OUTER JOIN. includes escolhe por você, mudando para um join quando você referencia a associação num where. Use includes por padrão, e recorra aos outros dois quando precisar forçar a estratégia — geralmente porque o join está duplicando linhas ou a segunda consulta é mais barata.

3

Como você encontraria e corrigiria um endpoint lento?

Resposta

Comece pelos logs e pelo número de consultas, não lendo código — a maioria dos endpoints lentos no Rails são problemas de consulta. Procure N+1, um índice faltando atrás de um where numa tabela grande, e trabalho que não precisa estar no request de jeito nenhum. EXPLAIN diz se o índice está realmente sendo usado. Caching é o que você faz depois disso, não no lugar disso.

4

Como você indexa uma consulta, e quando um índice não ajuda?

Resposta

Você indexa as colunas pelas quais filtra e ordena, e para um índice de múltiplas colunas a ordem importa — ele pode atender um prefixo de suas colunas, não qualquer subconjunto. Um índice não ajuda quando a consulta toca a maior parte da tabela de qualquer forma, e custa a cada escrita, então indexar tudo é um problema por si só. Um LIKE '%x' com coringa no início não pode usar um índice B-tree comum de jeito nenhum.

5

Por que background jobs precisam ser idempotentes?

Resposta

Porque um job pode rodar duas vezes — um retry depois de um timeout, um crash depois do trabalho mas antes da confirmação. Se rodar duas vezes cobra o cartão duas vezes, isso é um bug do job, não da fila. Você torna isso seguro associando o efeito a uma chave: verifica se a cobrança já existe, usa um índice único, ou torna a operação naturalmente repetível.

6

Como você evita models gordos sem criar uma pasta cheia de classes minúsculas?

Resposta

Você extrai o comportamento que não é sobre o próprio estado do registro — um service object para uma operação de vários passos, um query object para um scope complexo, um form object quando um formulário abrange dois models. O modo de falha nas duas direções é real: um model de 900 linhas que ninguém consegue tocar, ou quarenta classes de um método só sem um lugar óbvio. O teste é se uma pessoa nova consegue encontrar o código pelo nome.

🦎

Só ler as respostas não basta

Numa entrevista de verdade você fala sob pressão. O Cam faz essas mesmas perguntas, avalia cada resposta e mostra exatamente o que melhorar.

Praticar entrevista de Middle Ruby on Rails →
Grátis · 3 entrevistas por mês

Outros níveis — Ruby on Rails

Junior Ruby on RailsSenior Ruby on RailsTodas as perguntas de Ruby on Rails

Outras especializações

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🦫Middle Go Backend🟢Middle Node.js Backend🔷Middle C++🟨Middle JavaScript⚛️Middle React Frontend