Pergunta de entrevista para Engenheiro de Software

Me explique como você analisaria a complexidade de tempo e de espaço de um trecho de código.

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Descubra como o tempo de execução cresce conforme a entrada cresce, e aí descarte constantes e termos de ordem menor. Leia a estrutura do código: blocos sequenciais somam, loops aninhados multiplicam, e chamadas recursivas seguem a recorrência. Espaço é a memória extra que você aloca além da entrada, incluindo a pilha de chamadas. Diga o pior caso por padrão, e aponte o caso médio separadamente se eles diferirem de forma significativa.

Por que os entrevistadores perguntam isso

Análise de complexidade é o vocabulário comum para falar de performance, então o entrevistador quer saber se você consegue raciocinar sobre escala antes de escrever código, em vez de depois de fazer profiling em produção. Eles estão checando se você separa a taxa de crescimento de micro otimizações, se você lembra de espaço além de tempo, e se você consegue enxergar o custo escondido em coisas como ordenar dentro de um loop ou copiar uma lista a cada iteração.

Como estruturar sua resposta

  • Nomeie a entrada e diga o que n realmente mede.
  • Percorra o código de cima para baixo, somando trabalho sequencial e multiplicando trabalho aninhado.
  • Diga tempo e espaço separadamente, descartando constantes.
  • Sinalize o pior caso e a entrada que o dispara.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Eu começo nomeando o n, porque metade da confusão nessas conversas vem de duas pessoas medindo coisas diferentes. Depois eu leio o código estruturalmente. Blocos sequenciais somam, então o maior vence; loops aninhados multiplicam; uma chamada recursiva vira uma recorrência que eu posso expandir ou reconhecer. Para espaço eu conto qualquer coisa que eu alocar além da entrada, e sempre incluo a pilha de chamadas, que é a parte que as pessoas esquecem na recursão. Um exemplo concreto: eu tinha uma função que parecia linear porque era um loop sobre uma lista de pedidos, mas dentro dela a gente chamava um helper que buscava um registro por id numa lista. Aquela busca era linear, então o custo real era quadrático, e só apareceu quando um cliente chegou a uns quarenta mil pedidos. A gente trocou a lista por um dicionário indexado por id e o endpoint foi de uns nove segundos para menos de duzentos milissegundos. Então minha regra é olhar dentro de cada chamada, não só nos loops que dá para ver.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Qual é a complexidade se a entrada já estiver ordenada?
  • Como a análise amortizada mudaria sua resposta para um array dinâmico?
  • Quando você aceitaria um big O pior por uma constante melhor no mundo real?

Mais perguntas para Engenheiro de Software

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot