5 min read

10 perguntas comuns em uma entrevista de programador

10 perguntas comuns em uma entrevista de programador

Em setembro de 2015, escrevi um artigo sobre perguntas em entrevista em meu blog coisadeprogramador, foi um período da minha carreira que participei de diversas rodadas de entrevista, eu trabalhava em um contexto Microsoft (C# e SQL Server), entretanto na minha jornada aprendi outros frameworks e linguagens, até mesmo coisas exóticas do hype como Meteor.

Achei relevante abordar sobre as perguntas, não com o viés de ser um copy/paste para os entrevistados e sim preparo dos programadores no Brasil, por este motivo mantive este artigo em português.

As vezes focamos em “frameworks” e linguagens, porém deixamos lacunas conceituais de lado. É muito frustrante desejar uma vaga na empresa X e mandar mal na entrevista, não interessa seu portfólio, seu projeto pessoal, seu github, por este motivo é importante se preparar para a entrevista, que faz parte do seu cartão de visita.

Vamos a lista de possíveis perguntas que podem direcionar seus estudos, com as devidas atualizações.

1. Princípios da orientação a objeto

É um paradigma de programação baseado em interações entre unidades de software (objetos), tentando aproximar-se do mundo real. Abstração, encapsulamento, herança e polimorfismo são os princípios da orientação a objeto.

Na era da linguagem estruturada, resumidamente escreviam e copiavam blocos de código, para entrega de programas e o POO surgiu para mudar essa mentalidade, então a relevância deste assunto deve ser alta.

Mesmo com a diversidade de linguagens e trabalhos específicos com linguagem funcional (Elixir / Clojure / Scala / F#) ou algo totalmente diferente como Go, é muito importante entender quais problemas esse paradigma resolve.

2. Design Patterns

Motivado pela solução de problemas recorrentes, os padrões existem para alcançar um objetivo na engenharia de software. Estes objetivos muitas vezes resultam em uma solução madura.

Segundo o livro GoF - Gang of Four, existem 23 padrões. Alguns padrões são bem familiares e encontrados em alguns frameworks que nós utilizamos.

Padrões de criação (5)

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton

Padrões estruturais (7)

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy

Padrões comportamentais (11)

  • Chain of Responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

3. DDD

O Domain Driven Design é uma abordagem de desenvolvimento orientado a domínio, focando no entendimento da regra de negócio. A abstração nos domínios facilitam o entendimento da regra de negócio juntamente com a linguagem ubíqua, ou seja, uma linguagem "comum" entre desenvolvedores e usuários de sistema.

Estes são os pilares, Entidades, Objetos de Valor, Serviços, Agregados e Repositórios, é bem nítido identificar um projeto com a abordagem DDD.

4. TDD & BDD

Criado pelo engenheiro de software Kent Beck, o Test Driven Development (TDD) aborda o desenvolvimento orientado a teste. O TDD é um conceito promovido pelo Extreme Programming.

É primordial saber abordar como são feitos seus testes de unidade e integração, mocks e stubs, entre outras as técnicas que você utiliza.

Criado como uma resposta ao TDD, o Behavior Driven Development (BDD), promove a colaboração entre desenvolvedores, profissionais relacionados ao negócio e o setor de qualidade de software. Produzindo testes voltados aos cenários do negócio, estreitando a comunicação entre as equipes.

Um framework referência nesse assunto que disponibiliza bibliotecas para diversas linguagens é Cucumber veja mais sobre.

5. Banco de dados

São conjuntos de arquivos relacionados entre si e armazenados em um sistema de computador. Estes podem ser relacionais ou não relacionais.

Bancos relacionais

  • SQL Server, Oracle, MySQL e PostgreSQL utilizam conceitos como Data Definition Language (DDL). Data Manipulation Language (DML), Data Control Language (DCL) e TCL (Transaction Control Language).

Recursos em comum chaves primárias, chaves estrangeiras e indexadores.

Bancos não relacionais

  • MongoDB, Cassandra, Redis e DynamoDB, dessa lista o Cassandra apesar dos muitos conceitos relacionais aplicados, não possui chaves estrangeiras, já o Redis trabalha com chave valor, MongoDB com documentos.

Esses são os pilares, chaves para acesso ao documento/valor e indexadores para suporte a extração, cada banco possui um recurso específico e tem sua finalidade de uso.

Resumidamente precisamos abordar sobre a diferença conceitual entre relacional e não relacional e recursos em comum como chaves e indexadores porque utilizar?

Os bancos Opensource listados são utilizados no contexto on-premise, há também serviços de cloud como DynamoDB, BigQuery e CosmosDB.

6. ORM

O mapeamento de objeto relacional é uma técnica que promove a abstração do banco de dados, onde objetos do banco de dados relacionais (tabelas) são representados por classes e os seus registros por instâncias. A abstração do banco de dados possibilita que a aplicação utilize qualquer banco de dados.

Existem diversos frameworks para suporte deste conceito, por exemplo: Hibernate, Entity Framework, Active Record e Sequelize.

7. API Gateway

É um serviços responsável pelo gerenciamento e monitoramento de APIs com facilidade. Como seu próprio nome diz é o responsável pela entrada, encontramos recursos como throttling/rate-limit (onde limitamos o uso de cada serviço), roteamento, autenticação (básica, por chaves e OAuth2), gerenciamento de versões de API,  entre outros mágicos recursos.

Os cloud providers mais utilizados disponibilizam soluções de API Gateway. Minha maior experiência é com o Kong, que é um API Gateway que possibilita a instalação on-premisse e personalização de acordo com a demanda.

8. REST

O termo REST significa "Representational Transfer" é um estilo de arquitetura que define padrões de como uma API deve se comportar, foi definido por Roy Fielding em 2000.

Vale reforçar que para não cometer equívocos devemos entender a natureza dos verbos e respostas mais utilizados na criação de APIs.

  • GET, POST, PUT, PATCH e DELETE
  • 200, 201, 202, 204, 207, 400, 401, 403, 409, 422, 429, 500, 501, 503 e 504.

9. Message Oriented Middleware (MOM), "mensageria"

É o conceito que define o suporte ao envio e recebimento de mensagem entre sistemas distribuídos, através de um Message Broker.

O Message Broker pode ser uma ferramenta do mundo corporativo como Microsoft Message Queuing e IBM Websphere MQ, ou outras muito conhecidas do contextos on-premise como RabbitMQ e Kafka, ou até mesmo serviços de Cloud AWS SQS, AWS Kinesis e Google Cloud Pub/Sub.

Para suportar o serviço podemos ter filas, tópicos ou recursos específicos de cada Message Broker, o importante é o suporte aos sistemas distribuídos que podem ser de linguagens diversas.

10. SCRUM

Foi concebido como um estilo de gerenciamento de projeto em montadoras de automóveis. O SCRUM é um framework que promove uma interação entre a equipe, visando a gestão de projetos e o desenvolvimento ágil. As entregas são divididas em ciclos (sprints), onde o KanBam e o Gráfico de Burndown são ferramentas utilizadas.

Muitas das técnicas apresentadas no SCRUM são aplicadas por diversas equipes, digo não somente em TI, como Daily, Planning e Sprint Review.

Ufa!

Muito bem! Se você chegou at aqui espero que esse conteúdo seja relevante e você possa compartilhar e comentar. Não tem bala de prata, as perguntas são genéricas e apenas uma lista, dependendo do contexto, perguntas específicas da vaga serão consideradas, por este motivo, mantenha seu kernel atualizado meu amigo!

Abaixo estão algumas dicas para a fase de entrevista técnica. Vejo você na próxima!

10 pontos essenciais para testes técnicos
Este artigo lista os principais pontos que devemos encontrar em testes técnicos.