DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on

53 6

[Conceito] - Ideias de Questões para Entrevistas: System Design

Conteúdo original em https://twitter.com/zanfranceschi/status/1569375318091386885


Ei dev,

Já fiz muitas entrevistas técnicas na condição de entrevistador e gosto particularmente de questões de System Design (ou Arquitetura – como queira chamar).

Nessa thread, coloco algumas questões que costumava fazer.

cc @sseraphini

Image


Antes de irmos para as questões, gostaria de compartilhar uma prática que me ajudava nas avaliações. Para perguntas abertas (que não têm uma resposta correta), costumava incluir a expectativa de resposta. Farei isso aqui também.

Legenda:
Q – Questão
ER – Expectativa de Resposta


Q: Quais foram/são suas atividades frequentes (aquelas que geram experiência prática) mais relevantes relacionadas à posição?

ER: Atividades similares ou que agregam valor à posição trabalhada.


Q: Quando acha adequado usar um banco NoSQL vs um banco relacional tradicional?

ER: Demonstrar conhecimentos sobre as diferenças entre os dois. Ex.: escalabilidade horizontal/vertical, ACID (alguns nosql oferecem ACID), complexidade de queries, padrões de acesso, etc.


Q: Você concorda que, numa aplicação de borda, com alta variabilidade de concorrência de acessos, usar um banco nosql é adequado? Por que?

ER: Demonstrar um pouco mais de conhecimento em NoSQL. Geralmente é adequado por causa da escalabilidade horizontal natural.


Q: Como escalar um banco relacional tradicional?

ER: No geral, verticalmente (mais/menos memória, CPU, storage, etc.).

obs.: Por incrível que pareça, muita gente responde "escalando horizontalmente" sem mencionar réplicas de leitura.


Q: Supondo dois tipos de load balancers – um que atua na camada TCP 4 e outro na camada 7 – em quais cenários você usaria um e outro?

ER: Basicamente um ser ignorante em relação ao conteúdo e o outro ser capaz de inspecionar headers, paths, etc; ideal para HTTP, por exemplo.


Q: Sobre os códigos de status do HTTP, você poderia me falar o que cada faixa representa (200, 300, 400, 500)?

ER: 200 resposta positiva do servidor / 300 redirecionamentos, cache / 400 erro do cliente / 500 erro do servidor.


Q: Como você aborda escalabilidade?

ER: Essa questão é muito aberta e boa para entender um pouco a maturidade da pessoa. Geralmente abordar async/sync, vertical/horizontal, cache, detectar over-engineering na resposta, etc.


Q: Como você lida com tolerância a falhas?

ER: Questão bem aberta também. Eliminar/diminuir pontos únicos de falhas, recuperação, monitoramento, etc., são bons tópicos.


Q: Você conhece padrões de integrações com filas/tópicos? Se sim, qual foi sua participação em projetos com esse tipo de integração e quais padrões usou?

ER: Se sim, contar alguns padrões usados e quais problemas resolveram.


Q: Você sabe a diferença entre Object, File e Block Storages?

ER: Contar a diferença básica entre eles e cenários de uso.

obs.: uma boa referência: https://www.redhat.com/en/topics/data-storage/file-block-object-storage


Q: Quais aspectos/dimensões você pondera antes de incluir um novo componente num desenho de solução? "Componente" aqui pode ser entendido como qualquer building block significativo para a solução como, por exemplo, Kafka, MongoDB, Kubernetes, Redis, Oracle, uma biblioteca, etc. +


ER: Os mais diversos possíveis: orçamento, conhecimento do time, facilidade de encontrar profissionais no mercado que conheçam, capacidade de manutenção, maturidade do produto, ofertas de clients para linguagens de programação, "match" no provedor cloud, etc.


Q: Qual sua abordagem em relação a segurança?

ER: Questão super ampla também. Mencionar autenticação/autorização, hardening, topologia de redes, MFA, são bons sub tópicos.


Q: Como você comunica sobre as soluções que desenha?

ER: Essa questão é direcionada a cargos de maior responsabilidade (arquitetura, staff eng., etc.) e ajuda a entender o modus operandi da pessoa entrevistada.


Q: Me conte sobre algum projeto que considera que falhou e o motivo.

ER: Não ter medo de assumir erros – todos nós cometemos. Boa para ter uma noção sobre como a pessoa lida com erros (teoricamente, pelo menos).


Q: Quando você acha que a abordagem "least privilege access" não é adequada.

ER: Quando segurança não for importante e velocidade de desenvolvimento for.


Q: Geralmente, quais são as maiores dores da operação de sistemas distribuídos?

ER: No geral, eles são complexos. Troubleshooting, por exemplo é mais difícil.


Q: Como uma arquitetura assíncrona pode afetar a experiência do usuário?

ER: Abordar Consistência Eventual.


Q: O que acha da abordagem multi-cloud?

ER: Questão super aberta. Dependendo do cargo, é possível detectar bastante maturidade em aspectos como custos, disponibilidade, lock-in, abstrações de provedores, etc.


E por aí vai...

Essas questões fazem parte de uma lista infinita e, obviamente, incluí apenas algumas das quais me lembrei.

Normalmente, também incluo questões mais focadas na posição para complementar a entrevista.


Me conte aí qual outra questão você acha boa para uma entrevista? Não esqueça de incluir a expectativa de resposta se for uma pergunta aberta.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (1)

Collapse
 
vsouto profile image
Victor

Excelente material!

Algumas respostas estão rasas, mas as perguntas são ótimas mesmo para estudarmos.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay