Comecei a fazer networking na escola e trabalho por dinheiro há mais de 16 anos. Consegui muitos empregos, em grandes e pequenas empresas, aí abri meu próprio negócio e contratei pessoas regularmente. Com o passar dos anos e da experiência, eu e muitos outros desenvolvemos a intuição de entrevistar.
Isso ocorre quando não há algoritmo claro. Você acabou de falar com uma pessoa e entender algo por si mesmo. Você pergunta o que o candidato fez no emprego anterior, se apega ao tópico - e agora está apenas discutindo tópicos de engenharia, mais ou menos no mesmo nível que os colegas. Se a conversa correr bem e a pessoa gostar, está tudo bem.
Essa intuição dificilmente pode ser aprendida em livros e textos, ela vem por si mesma com a experiência. Junto com ela, frases como "Eu não me importo com o conhecimento específico como uma perspectiva geral, a capacidade de buscar informações, entender, vamos trabalhar juntos" e assim por diante.
Mas às vezes, para não perder o controle, você ainda precisa se lembrar que conhecimento um engenheiro deve ter e quais perguntas podem ser as mais objetivas possíveis para avaliar a pessoa que você vê pela primeira vez na vida.
Primeiro, analiso rapidamente todos os currículos
Enquanto analiso as respostas, presto atenção às palavras-chave e aos locais de trabalho. Eu sempre leio a carta de apresentação - muitos candidatos são eliminados nesta fase. Publico uma postagem de trabalho sobre como encontrar um engenheiro de DevOps e recebo uma resposta de um desenvolvedor Python, um desenvolvedor Golang ou um mensageiro atual que está "muito interessado e gostaria de tentar".
Passam currículos, que indicam a experiência de trabalho em estruturas estatais, algo no espírito de "administrador de primeira categoria no Banco Central da Federação Russa". Todas essas histórias prolixas sobre a "administração de sistemas de informação" interrompi imediatamente, sem hesitação. Quanto mais oficiosa e burocrática for a descrição do trabalho anterior, maior será a chance de esse candidato não ter visto nada em sua vida, exceto Windows e backups usando uma interface gráfica.
Em uma seleção rápida de currículos, a regra ajuda: quanto mais tecnologias eu conhecer, melhor. Se o currículo de uma pessoa diz MySQL, Linux, Postgres, Apache e assim por diante, as chances existem. A pessoa pelo menos ouviu falar de tecnologia e, quem sabe, talvez até tenha trabalhado com ela. Mas vamos ser honestos - você pode escrever qualquer coisa em seu currículo.
Na entrevista, a primeira coisa que faço é verificar o banco de dados
Quando eu ficar velho e frágil e for teimosamente espancado, vou começar a bater com um pedaço de pau nas costas de todos que não conhecem a rede! Isso é obrigatório para qualquer engenheiro. Vivemos em um mundo onde tudo acontece em redes. Mesmo em um setor público fechado, há um contorno local. E lá está um desenvolvedor que escreve algum serviço de proxy ou compõe um serviço que funciona com uma API e não entende nada sobre a API.
Não exijo nenhum conhecimento especial, não peço para configurar o MPLS para mim. Mas o que é uma máscara de sub-rede, o que é um endereço IP - no século 21, todos os especialistas em TI deveriam saber. Não tenho ideia do que se passa na cabeça de uma pessoa quando ela não entende o que é 127.0.0.1. Ele se senta em uma máquina local, ele tem um serviço em execução em uma máquina virtual. O serviço possui um ponto de extremidade 127.0.0.1, uma conexão com o banco de dados. Por ignorância, nosso herói fode a mesma coisa. Como resultado: "Não consigo me conectar à base." Claro, caramba, ele não conecta!
Se a pessoa tiver certificado CCNA, tudo bem, mesmo que ela não tenha tirado, não tenha recebido fisicamente, mas preparada - esse fato é suficiente para mim.
Por exemplo, aqui está um quebra-cabeça CCNA padrão para entender como as redes funcionam
Existem dois switches de redes diferentes, existe um roteador entre eles. O computador A deseja enviar dados para o computador B.
O que acontece neste momento?: «, , , . , , MAC- , . , , . , ».
Então eu pergunto em todas as camadas do modelo OSI
Alguém já ouviu falar do Protocolo Spanning Tree? Sobre o protocolo raiz, sobre a camada IP? Ok, como tudo funciona? Ele entende como o roteamento acontece? Bem, em massa: tabelas de roteamento, protocolo de roteamento dinâmico, camada de transporte TCP. E assim por diante.
Eu quero ouvir a diferença entre TCP e UDP. Um bom especialista me responderá por que sistemas críticos (por exemplo, Sistema de Nome de Domínio) usam o protocolo sem entrega de mensagem garantida (UDP).
A resposta é simples - é mais rápido dessa forma. Ao organizar uma sessão TCP, você pode enviar um pacote UDP 3 vezes para lá e recebê-lo de volta. E sem sobrecarga.
Eu faço perguntas sobre DNS
Quais são os tipos de gravação? Meu interlocutor sabe o que é um registro MX, como funciona o spf ou como funciona o DKIM.
Sim, esse conhecimento pode não ser útil no trabalho. Mas é importante para mim saber se uma pessoa entende a essência da tecnologia, se ela estava interessada em ler sobre ela. Ele adicionou alguns registros ao DNS e ao Google o que é um registro SPF, ou não?
O protocolo HTTP é usado absolutamente em todos os lugares agora, e estou perguntando sobre isso
Começo fazendo as perguntas padrão sobre as diferenças entre as versões 1.0, 1.1 e a versão dois do http. Estou interessado em saber o que são cabeçalhos e por que são necessários. Como um servidor web entende que recebeu uma solicitação de um host virtual específico e não de outro? E sempre faço algumas perguntas sobre o Nginx.
Em seguida, mudo suavemente minha atenção para o protocolo TLS
Como funciona o SSL \ TLS? Um engenheiro precisa entender isso pelo menos em um nível básico - há uma autoridade de certificação raiz, ele assinou o certificado e o certificado é usado em algum lugar.
Em TLS, geralmente estou interessado no processo de estabelecimento de uma conexão. Por que precisamos de chaves privadas e públicas e como elas interagem? Se uma pessoa se atrapalha, faço uma pergunta capciosa: é possível ter vários certificados diferentes em um IP-shnik?
Responder sob o spoiler, TLS-, HTTP-, - , HTTP-, . Nginx , , . TLS-, , TLS-. . , IP- SSL.
Passando para Linux e BASH
Você precisa saber tudo sobre o Unix, todos os sistemas semelhantes ao Unix. Você precisa saber trabalhar com Shell e Bash, conhecer os comandos básicos. ls, mkdir, etc.
Bem, se o candidato pode fazer um pouco de script no BASH, significa que ele tentou de alguma forma automatizar essa história.
No Linux, vou perguntar como substituir linhas em um arquivo por outras linhas. Ou como analisar alguns access.log em Nginx usando BASH. Para uma pessoa falar sobre awk, sobre gato, sobre tipo, sobre tudo que ajuda o trabalho rápido.
Existem arquivos de texto em todos os lugares, você precisa trabalhar com eles corretamente. Se o candidato se oferecer para copiá-los para o Excel e fazer algo lá, ficarei constrangido.
Em seguida, você precisa descobrir como são as coisas com a virtualização.
Virtualização convencional, virtualização por meio do hipervisor. Se um candidato começa a falar sobre paravirtualização, significa que ele sabe de algo.
Minha pergunta principal é: qual é a diferença entre a virtualização de contêiner e a virtualização de hipervisor normal? É bom que a pessoa compare o que é melhor, o que é pior, onde o que é adequado usar.
Movendo para contêineres
Descobrindo se a pessoa com quem você está falando trabalhou com o Docker? Ele compilou imagens, escreveu arquivos Docker, usou Docker compose, implantou com ele. Por que esses contêineres são necessários e como eles funcionam? Nosso candidato mencionou o sistema de orquestração de contêineres Swarm ou Kubernetes? Você pode fazer todo um bloco de perguntas, mas o principal é entender se a pessoa fez o trabalho com as próprias mãos com recipientes ou não?
Perguntando sobre a implantação de CI / CD
Estou interessado em uma lista enorme de coisas: como ele configura a implantação automática, como ele configura a integração contínua? Como seus aplicativos são montados, ele usa sistemas de análise de código (PVS-Studio, SonarQube). Como ele escreve testes ou como ele integra testes escritos por desenvolvedores.
Ele faz algum tipo de teste de integração nesses assemblies? O que acontece a seguir com o que ele coletou? De alguma forma, soma-se a defeitos ou é compactado em contêineres do docker, enviado para o registro? Deixe que ele diga quais sistemas ele usou para configurar o processo de CI / CD. Pode ser GitLab CI, Circle CI e algumas soluções em nuvem. Talvez Jenkins, bem, você não deve se esquecer dos scripts do PowerShell auto-escritos.
Diga-me como uma pessoa implanta e eu entenderei tudo. Ele pode ser implantado usando Helm em Kubernetes, Ansible, scripts ou qualquer outra coisa escrita por você.
Sobre o sistema de gerenciamento de configuração
Falamos Ansible com mais frequência. Porque a maioria das pessoas o conhece. Então, por que precisamos de funções, como criptografar e armazenar dados secretos, como fazer upload de senhas para um repositório Git? E coisas assim.
Aprenda sobre a capacidade de escrever código
Entender o desenvolvimento é importante para entender como os serviços interagem, por que APIs, protocolos de autenticação e autorização são necessários. É bom se o próprio candidato escreveu algo. Até mesmo scripts básicos em Python ou Shell são suficientes para mim. O que importa não é o código, mas quais tarefas a pessoa queria resolver, o que ela queria realizar.
A codificação é necessária para dar suporte à infraestrutura, escrever scripts locais para backups, monitoramento personalizado, para obter métricas com calma. Muitas vezes acontece no trabalho que simplesmente não existe uma solução padrão para alguma tarefa.
As perguntas finais da entrevista são sobre armazenamento de banco de dados
SQL, NoSQL - quais são as diferenças, com o que você trabalhou? Mais frequentemente encontro pessoas com experiência em PostgreSQL, com menos frequência - MySQL. Eu faço perguntas sobre índices, se um candidato pode configurar uma réplica, se ele pode configurar a replicação lógica entre tabelas ou apenas dados. E o que ele vai monitorar neste caso? Como acelerar a base?
A propósito, esta é uma boa pergunta. Digamos que a base agora esteja assentada e apoiada no disco. E nada pode ser feito com ele - ninguém mais comprará o servidor. Como você faz isso funcionar mais rápido agora?
Somente...: fsync, , . Linux , , . , , . , . . . , .
Resumindo -
- redes
- Nível API
- camada de transporte TCP \ UDP
- Protocolos DNS e HTTP
- Linux
- virtualização de contêiner e hipervisor
- CI / CD
- sistema de gerenciamento de configuração
- recipientes
- Base de dados
Tudo isso permite que você faça uma imagem completa de uma pessoa.
A coisa mais crítica da minha lista é o conhecimento básico. Se você não conhece a base, é hora de terminar sua atribuição de previdência.
Se uma pessoa não puder me responder o que é uma máscara de sub-rede, ou não entender por que os cabeçalhos são necessários em HTTP, na maioria dos casos, esse candidato obtém o maior sinal de menos em meu bloco de notas. Você não estava curioso para saber como todas essas coisas funcionam como mouse-poke?
É muito difícil trabalhar com pessoas que apenas repetem mecanicamente o que aprenderam, em vez de descobrir como tudo funciona. Um iniciante que não conhece o Docker pode descobrir facilmente se tiver uma compreensão do que são HTTP, TLS e redes.
Mas, finalmente, o ponto mais importante - essa lista inteira não é necessária para segui-la em uma entrevista real. Você deve examinar essa lista antes de contratar pessoas.
E se tudo der certo, chame o candidato para uma entrevista e faça-lhe apenas uma pergunta - qual foi a maior falha que você cometeu no trabalho, como você consertou e que conclusões você tirou de seus erros.
Quando uma pessoa tem algo a contar, essa sessão de previdência social passará como uma conversa amigável entre dois engenheiros com cerveja.
Bem, por tradição, eu o convido a se juntar à nossa comunidade no carrinho - lá discutimos regularmente todos esses tópicos e muitos outros que serão úteis na entrevista e no trabalho.