Escolha um hash map quando você só precisa de buscas, inserções e remoções por chave, e quer tempo constante em média. Escolha uma árvore balanceada quando precisa de ordenação: varreduras por faixa, chave mais próxima ou iteração em ordem, tudo em tempo logarítmico. Árvores também dão comportamento previsível no pior caso, enquanto um hash map pode degradar feio com hashing ruim ou travar num resize na hora errada.
Por que os entrevistadores perguntam isso
Isso é um indicador de se você escolhe estruturas de dados de propósito ou pega um dicionário por reflexo. O entrevistador quer ouvir que você conecta o padrão de acesso à estrutura, que você sabe que a performance de hash map é uma média e não uma garantia, e que você reconhece quando ordenação, consultas por faixa ou latência limitada no pior caso tornam a árvore a escolha certa.
Como estruturar sua resposta
- Diga em quais operações cada estrutura é genuinamente boa.
- Amarre a escolha ao padrão de acesso da pergunta.
- Mencione o comportamento de pior caso, não só a média.
- Dê um exemplo em que você trocou uma pela outra.
Exemplo de resposta
Meu padrão é hash map, porque na maior parte do tempo eu estou fazendo busca pontual por id e tempo constante em média é difícil de bater. No momento em que o requisito envolve ordenação, porém, eu mudo. Qualquer coisa do tipo me dê todos os eventos entre dois timestamps, ou ache a próxima chave depois desta, é uma consulta por faixa, e um hash map não consegue fazer isso sem varrer tudo. Isso pede uma árvore, ou na prática uma estrutura ordenada com busca binária. Eu também penso na cauda. Buscas de hash são constantes em média, mas uma função de hash ruim ou um rehash podem dar pico, e dentro de um orçamento de latência isso me importa. Numa funcionalidade de leaderboard que construí a gente começou com um dicionário de usuário para pontuação e depois tinha que ordenar tudo a cada leitura. Quando migramos para um sorted set no Redis, as leituras viraram logarítmicas e o endpoint parou de cair no pico. Mesmos dados, padrão de acesso diferente, estrutura diferente.
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 funcionaPerguntas de acompanhamento que você pode esperar
- O que acontece com um hash map quando muitas chaves colidem?
- Como você implementaria um cache least recently used?
- Quando uma trie encaixa melhor do que qualquer uma das duas?
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