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.