Skip to main content

Você deve se preparar para comentar sobre quais tópicos?

Antes de se aprofundar em tópicos técnicos que serão abordados na entrevista, converse com seu contato de recrutamento para entender os assuntos/habilidades sobre os quais você provavelmente discutirá ou demonstrará. No geral, nossas entrevistas técnicas incluem exercícios de design de sistemas ou programação no quadro branco. Tenha sempre em mente que inventar está no nosso DNA e que a tecnologia é uma ferramenta fundamental a que recorremos para evoluir e aperfeiçoar cada aspecto da experiência que oferecemos aos nossos clientes. Ao revisar os tópicos listados abaixo, pense sempre no cliente.

Tópicos técnicos

Não exigimos que você saiba nenhuma linguagem de programação específica antes de se candidatar a um cargo técnico. No entanto, familiaridade com uma linguagem proeminente normalmente é pré-requisito para o sucesso. Você deve estar familiarizado com a sintaxe de linguagens como Java, Python, C#, C/C++ ou Ruby. Você também deve conhecer algumas nuances de linguagens, como o funcionamento de gerenciamento de memórias ou as coleções e bibliotecas mais comumente usadas etc.

A maior parte do nosso trabalho envolve armazenar e oferecer acesso a dados de maneira eficiente. Isso exige uma base substancial em estruturas de dados. Você precisará entender as funcionalidades internas de estruturas comuns de dados e conseguir comparar e contrastar seus usos em diferentes aplicações. Esperaremos que você conheça tempos de execução comuns, bem como a forma como eles usam memória.

Sua entrevista não focará a memorização de algoritmos. No entanto, ter bom entendimento dos algoritmos mais comuns facilitará na hora de responder algumas perguntas. Considere revisar algoritmos comuns, como árvores, divisão e conquista, busca em largura versus busca em profundidade, além de entender os benefícios de cada um. Saber os tempos de execução, limitações teóricas e estratégias básicas de implementação de diferentes classes de algoritmos é mais importante do que memorizar os detalhes específicos de qualquer algoritmo.

Esteja preparado para escrever códigos sintaticamente corretos, e não pseudocódigos. Se você se sente enferrujado para programar sem um IDE ou escrever um código em uma linguagem específica, prepare-se para arregaçar as mangas e programar com papel e caneta. A coisa mais importante que um engenheiro de desenvolvimento de software faz na Amazon é escrever códigos robustos, bem testados e distribuíveis. Esses são os principais critérios de avaliação do seu código. Verifique casos extremos e exceções (“edge cases”) e confirme que nenhum erro tenha sido inserido. Essa é a sua chance de exibir suas habilidades de programação.

Um bom design é fundamental para criar um código perene, sem bugs e extensível. Sabemos que há maneiras ilimitadas de resolver qualquer problema de software, mas quando um programa precisa ser extensível e sustentável, um bom design é crucial para o sucesso. Uma forma de criar software duradouro é usar práticas de design orientado a objetos. Você deve ter conhecimento prático de alguns padrões de design úteis e comuns, bem como a capacidade de escrever software de maneira orientada a objetos. Você provavelmente não precisará dar detalhes de como um padrão específico de design funciona, mas esteja pronto para defender as suas escolhas de design.

A maioria dos softwares que criamos tem o respaldo de um armazenamento de dados. Muitos dos desafios enfrentados pelo pessoal de tecnologia surgem da necessidade de se desenvolver uma forma eficiente de armazenar e acessar dados no futuro. A Amazon está à frente do movimento de bancos de dados não relacionais. Disponibilizamos recursos do Amazon Web Services, como o DynamoDB, para a comunidade de desenvolvedores, para que eles possam utilizar ao máximo e com facilidade os benefícios dos bancos de dados não relacionais. Não esperamos nenhum nível específico de conhecimento sobre bancos de dados não relacionais, mas você deve conhecer, de forma geral, os conceitos e aplicações de bases de dados. Quanto mais você souber sobre os tradeoffs entre bancos de dados relacionais e não relacionais, mais preparado estará.

Os sistemas da Amazon precisam funcionar com tolerâncias muito restritas a uma carga alta. Nós temos ferramentas internas que nos ajudam a fazer distribuições, mas é importante que você entenda alguns conceitos básicos de computação distribuída. Entender tópicos como arquitetura orientada a serviços, Map Reduce, cache distribuído, balanceamento de carga, entre outros, ajudará você a formular respostas para algumas perguntas complicadas que receberá sobre arquitetura distribuída.

Você não precisa saber criar seu próprio sistema operacional do zero, mas deve estar familiarizado com algumas questões que podem afetar o desempenho das programações (por exemplo, gerenciamento de memória, processos, threads, sincronização, paginação e multithreads).

Esperamos que nossos engenheiros saibam os fundamentos por trás do funcionamento da internet. Relembre como os navegadores funcionam de forma geral, desde consultas de DNS e TCP/IP a conexões de soquete. É obrigatório ter um sólido conhecimento sobre os fundamentos do funcionamento da Rede Mundial de Computadores (Worldwide Web).

Esteja preparado para responder sobre modelamento orientado por dados, protocolos de treino e teste, análise de erros e significância estatística. Por exemplo, você receberá uma definição de um problema e deverá formulá-lo como um problema de aprendizado de máquina, propondo uma solução que inclua ideias de fontes de dados, notas, abordagens de modelos e possíveis armadilhas. Você deve entender algoritmos e métodos básicos de Inteligência Artificial e Aprendizado de Máquina. Releia seus livros preferidos sobre o assunto.

 

Sabemos que é uma lista longa de tópicos para revisar. Saiba que seus entrevistadores não vão avaliar a sua habilidade de decorar cada detalhe de cada assunto. Eles vão se concentrar na capacidade que você tem de aplicar o que sabe para resolver problemas de forma eficiente e eficaz. Com tempo (às vezes) limitado para se preparar para uma entrevista técnica, recomendamos que você revise fundamentos de ciência computacional e pratique programação fora de um ambiente de desenvolvimento integrado. Usar seu tempo dessa forma provavelmente trará os melhores resultados.

 

Voltar para a página de preparação para entrevista presencial