Entrevistas de PHP cobrem semântica da linguagem, OOP, Laravel ou Symfony, MySQL, e fundamentos de segurança web. Abaixo estão as perguntas mais comuns com respostas modelo. Middle: compreensão mais profunda, otimização e situações reais de trabalho.
1
Qual é a diferença entre `has_many through` e `belongsToMany`?
Resposta
Em termos do Laravel, belongsToMany usa uma tabela pivot que existe só para unir dois models. Uma relação has-many-through alcança um model distante através de um intermediário que é uma entidade real por si só. Se a tabela de junção carrega seus próprios dados — um timestamp, um status — ela é um model, e tratá-la como pivot é como esses dados ficam difíceis de alcançar.
2
O que é uma consulta N+1 e como você encontra uma?
Resposta
É uma consulta para uma lista e mais uma por item, porque um relacionamento é carregado de forma lazy dentro de um loop. Você encontra no log de consultas ou com um pacote que conta consultas por request. with() carrega eager numa segunda consulta. A armadilha é corrigir cacheando a página em vez da consulta.
3
O que o service container faz?
Resposta
Resolve as dependências de uma classe por você: você pede um tipo num construtor e o container o constrói, incluindo as próprias dependências desse tipo. Vincular uma interface a uma implementação num provider é o que faz o código depender de um contrato em vez de uma classe concreta, que é o objetivo de todo o exercício.
4
Qual é a diferença entre um middleware e um controller?
Resposta
O middleware envolve o request e decide se continua — autenticação, rate limiting, logging. Um controller trata o request que conseguiu passar. A ordem importa, e colocar a autorização num controller em vez de num middleware significa que todo controller precisa lembrar de fazer isso.
5
Como funcionam as filas, e o que precisa ser verdade sobre um job?
Resposta
O job é serializado para um store, um processo worker o pega e o roda fora de banda. O que precisa ser verdade é que ele pode rodar duas vezes — o worker pode travar depois de fazer o trabalho e antes de confirmá-lo. Qualquer coisa que envie dinheiro ou e-mail precisa de uma guarda, e jobs de longa duração precisam de um timeout menor que a janela de visibilidade.
6
Qual é a diferença entre uma migration e um seeder?
Resposta
Uma migration muda o schema e é versionada para que cada ambiente convirja para a mesma forma. Um seeder insere dados — linhas de referência em produção, dados fake em desenvolvimento. Colocar mudanças de dados dentro de uma migration é comum e tudo bem para dados de referência, mas fazer backfill de uma tabela grande ali trava o deploy.
7
Como você previne SQL injection e XSS?
Resposta
SQL injection se previne com parameter binding, que o query builder e o Eloquent fazem por você — o perigo é DB::raw com input interpolado. XSS se previne escapando na saída, que as {{ }} do Blade fazem e as {!! !!} deliberadamente não fazem. Ambos são sobre não misturar dados numa linguagem no momento errado.