Dicas para candidatos de um programador que conduz entrevistas no Facebook



No ano passado, passei inúmeras horas entrevistando candidatos para vários cargos no Facebook. E, como agora tive a oportunidade de visitar os dois lados do processo de seleção, gostaria de ajudá-lo - estudantes que estão tentando obter o primeiro estágio na vida, desenvolvedores mais experientes que estão se preparando para mudar para outra empresa ou aqueles que querem entrar em programação de um ambiente profissional completamente diferente.

Neste artigo, quero descrever as lições mais importantes que aprendi com a experiência de entrevistar programadores no Facebook. Espero que eles lançem luz sobre algumas características desse processo, que muito, muito, muito nervos exaustivos.

Formatar


As entrevistas para programadores, em regra, assumem a forma de uma conversa, com duração de 45 minutos, e têm como objetivo testar o seu conhecimento de estruturas e algoritmos de dados. Os estagiários geralmente só precisam passar por uma entrevista em que demonstrem suas habilidades de escrita de código. Os desenvolvedores de nível superior provavelmente terão que participar de duas ou três entrevistas de redação de código, uma ou duas entrevistas nas quais testarão suas habilidades de design de sistema, além de uma reunião separada para avaliar suas qualidades pessoais. Aqui vou falar apenas sobre entrevistas de código.

Recentemente me perguntaram: "E se eu não conseguir encontrar uma solução para esse problema imediatamente?" Eu respondi: "Bem, se a tarefa for escolhida corretamente, você não deve encontrá-la imediatamente". Caso contrário, qual é o objetivo? O objetivo da entrevista é entender como você é bom em programação. Na equipe do Facebook, as informações que respondem a essa pergunta são chamadas de sinal. O entrevistador procura tirar o máximo proveito dele. Em outras palavras, se entendermos que você já está familiarizado com a tarefa proposta, nossa responsabilidade é oferecer outra.

Precisamos ver como você lida com as dificuldades. Se você, por acaso, puder recitar a solução de cor diretamente de Cracking The Coding Interview, não saberemos nada sobre sua capacidade de resolver problemas.

Práticas recomendadas para entrevistas de emprego


Os melhores dos melhores candidatos se tornam a força motriz da entrevista - eles mesmos conversam e praticamente não precisam que o funcionário da empresa os empurre na direção certa. Normalmente, esses programadores por capricho, sem avisar de fora, fazem o seguinte:

  1. Faça perguntas esclarecedoras.
  2. Analise as opções de solução, seus prós e contras
  3. Código de rascunho
  4. Mostrar implementação da solução
  5. Testando sua solução

Não confunda iniciativa com pressa. Uma postura ativa não significa que você deve se apressar imediatamente para escrever o código. Pelo contrário, se você iniciar o código nos primeiros cinco minutos da conversa, isso pode arruinar bastante a impressão. O primeiro passo para uma brilhante entrevista de emprego são perguntas esclarecedoras.

Inteligente Faça perguntas

Antes de tomar uma decisão, você precisa entender bem o problema. Alguns refinamentos pensativos podem aumentar seriamente suas chances de sucesso. Aqui estão alguns, por exemplo:

  • Isso precisa ser feito sem memória adicional?
  • Em que entrada devemos nos concentrar?
  • O que é mais importante - desempenho ou baixo consumo de memória?

Dessa forma, você pode se concentrar no que realmente importa e tirar tudo da cabeça. Saber o que você não pode pensar não é menos valioso do que saber que requer atenção especial.

Não pense

Muitas vezes, os candidatos começam a adicionar algum tipo de especulação por conta própria (variáveis ​​são apenas números positivos, matrizes não podem estar vazias, todos os dados de entrada são seguros). Este é um sino sério. Nunca ajuste as condições para que seja mais conveniente encontrar uma solução. Peça.

"Assumimos que todos os valores são positivos?"

Nenhum lugar é mais fácil. Se eles dizem que sim, isso é ótimo. Não são necessárias verificações adicionais. Caso contrário, uma única declaração de condição é suficiente para proteger seu código de qualquer chance. Freqüentemente, com a ajuda de tais perguntas, você pode obter uma indicação de em que direção precisa se mover.

Opções de solução

Os entrevistadores gostam muito de quando os candidatos destacam várias soluções. Isso mostra que você entende: você pode abordar qualquer tarefa de diferentes ângulos e, mais importante, obriga o entrevistado a informar sem solicitações diretas. Yeeee!

Não podemos simplesmente pegar e definir a resposta certa para você. Mas se você propõe duas opções, A e B, e pergunta: “Qual abordagem, na sua opinião, é mais apropriada aqui?”, Então certamente escolheremos o que parecer mais com o desejado.

Rascunhe sua solução em forma de código

Nas entrevistas técnicas, a escrita é mais frequentemente necessária no quadro-negro. Consequentemente, não funcionará para inserir operadores quando e onde quiser. Você deve ter uma boa idéia do que fará antes de começar a escrever.

Respire fundo e comece a planejar seu código. Pode ser um código de rascunho, pode ser um esquema. O principal é que você sabe quais estruturas de dados serão usadas nelas e quais variáveis ​​serão do seu interesse. Acho que ninguém quer que o resultado de seu trabalho seja algo assim:



Escreva a implementação

Nesta fase, tudo geralmente pára, embora, no bom sentido, não deva ser. Em teoria, a implementação da solução é a mais simples. Você fez perguntas inteligentes, considerou abordagens diferentes, pensou no algoritmo - tudo o que resta é pintar tudo. Enquanto isso, não se esqueça ...

Comunicação!

Fale em voz alta. É muito difícil levá-lo ao ponto certo, se não sei o que você está pensando. Se você o levar a algum lugar no lugar errado, eu intervirei. Se você estiver indo na direção certa, provavelmente não vou derrubá-lo.

No entanto, é necessário fazer uma ressalva: o estilo de entrevista pessoal decide muito. Alguém interveio no curso da decisão mais ativamente, alguém prefere ficar longe.

Teste

Curiosamente, este passo é negligenciado com mais frequência. Eu diria que 98% dos desenvolvedores que estavam nas minhas entrevistas deveriam prestar mais atenção na verificação de suas decisões.

No início da entrevista, o candidato geralmente recebe uma opção de teste junto com a tarefa. Após a conclusão do trabalho na solução, eles executam o código através do teste apropriado. Mas há um problema: oferecemos a opção de teste mais primitiva. Como regra geral, não afeta casos limítrofes e não permite verificar o código como deveria. Com esses parâmetros, seu algoritmo fornece a saída desejada; com outros, pode não.

A maneira mais fácil de se exibir em uma entrevista técnica é escrever testes. Quanto mais, melhor. Quanto mais difícil, melhor. Quanto mais abrangente, melhor. Na maioria dos casos, isso permitirá que você capture bugs antes que eu os indique. E essas coisas falam a seu favor.

O que fazer se você não souber o que fazer


Mesmo assim, o que você deve fazer se receber uma tarefa e não conseguir encontrar uma solução imediatamente?
Prossiga em etapas. Lembre-se: talvez a tarefa lhe pareça semelhante a qualquer uma das que você resolveu antes. Muitas das tarefas que propus nas entrevistas eram tarefas básicas, que são desmontadas em qualquer curso em que são estudados algoritmos e estruturas de dados - mas com um subvertido.

Se nada vier à mente, não entre em pânico. Está tudo bem. Não se preocupe em tentar encontrar imediatamente a solução mais eficaz - comece pela mais simples. Então, levando-o a um ponto de partida, pense: quais são os gargalos aqui? O que exige mais otimização? Como isso pode ser otimizado?

Reduza as fraquezas do sistema com os pontos fortes das estruturas de dados. Quando você precisa tornar um algoritmo mais eficiente, as estruturas de dados geralmente (embora nem sempre) são úteis. Cada um deles tem suas próprias vantagens e desvantagens (a tabela de hash é a velocidade da pesquisa de dados, a árvore de pesquisa binária está classificando-os e assim por diante). As melhores soluções são obtidas quando você consegue fechar algum gargalo devido à força de uma ou outra estrutura de dados.

Bem, por exemplo, você tem uma tarefa:

Dada uma proposta, calcule quantas vezes cada letra do alfabeto aparece nela.

Se você usar o método de pesquisa exaustivo, terá que contar cada letra sucessivamente e resumir os dados no resultado final. A ineficiência do método reside na necessidade de armazenar e procurar informações: salvamos os dados que recebemos para cada letra e depois os extraímos para formar um resultado total. Se você observar as estruturas de dados disponíveis, notará que uma se destaca entre as outras da maneira que precisamos:

  • Árvore de pesquisa binária
  • Matriz
  • Tabela de hash
  • Árvore AVL
  • Stack
  • Fila

A tabela de hash armazena e recupera dados com mais eficiência. Se você o usar, não precisará analisar a proposta vinte e seis vezes - apenas uma é suficiente.

Procure uma pista


Muitas vezes, uma dica é introduzida nas tarefas de programação que abrem o caminho para uma solução mais conveniente. Geralmente, isso é algum tipo de insignificante, uma condição incomum devido à qual você pode agir com maior eficiência do que com outras iniciais. Verifique se há algo assim em sua tarefa.

Digamos:

Dadas duas matrizes classificadas do tipo Inteiro, A e B; é necessário mesclar B de A. Supõe-se que A possa acomodar todos os elementos de B; o número de elementos inicializados nas matrizes é m e n, respectivamente.

A tarefa é tirada diretamente do livro Como quebrar a entrevista de codificação. Notou uma pista? Poderíamos receber apenas duas matrizes para mesclar, mas não: em nosso cenário, uma é completamente colocada na outra. É disso que eu estou falando. Se você notar essas reservas, saiba que elas não são incluídas acidentalmente.

Aqui, o espaço livre oferece a oportunidade de otimizar o processo de fusão. A solução completa pode ser vista aqui .

Peça ajuda


Às vezes acontece que você passou por todas as etapas, mas permaneceu em um beco sem saída. Nesse caso, você só precisa entrar em contato com os entrevistadores para obter ajuda.

Pelo fato de ficarmos dez minutos em silêncio, não será mais fácil para ninguém. Se você realmente não tem ideia do que fazer, pedir pistas será a melhor saída. Cada um de nós precisa de dicas de tempos em tempos. Tudo decide como você será capaz de usá-lo.

Em conclusão


Uma entrevista técnica é o mesmo teste padronizado que conhecemos desde a graduação e a inscrição na universidade. As tarefas diferem em detalhes, mas os conceitos básicos e estratégias de solução permanecem mais ou menos padrão.

Muitos candidatos são excluídos de coisas muito simples: pensam em suas próprias condições, não pronunciam a linha de pensamento, testam mal sua decisão. Todos esses erros podem ser corrigidos, e "definitivamente não" pode se transformar em "tomada". Use o sistema que eu esbocei neste artigo e você estará em boa forma.

Source: https://habr.com/ru/post/pt473018/


All Articles