C# Study Guide
Guia completo de .NET, C#, sistemas distribuídos e arquitetura — preparação para entrevistas
Este guia cobre 66 topicos organizados em 14 áreas. Cada seção tem teoria, código com syntax highlighting, diagramas SVG interativos e perguntas clássicas de entrevista. Use a navegação lateral ou siga a ordem sugerida abaixo.
Caminho de Estudo Sugerido
Siga esta ordem para construir conhecimento progressivamente:
1C# Fundamentals
→2Async & Performance
→3Architecture & Design
→4ASP.NET & EF Core
→5Padrões Distribuídos
→6Cloud & SRE
Padrões Distribuídos
Strangler Fig
Migração incremental do legado em 3 fases. Proxy, dual write, sync job.
Feature Flags
Hash determinístico para % de tráfego. Simulador interativo.
Anti-Corruption Layer
Protege o domínio novo do modelo do legado. Inbound e Outbound.
Outbox + Idempotência
Garante que eventos não se perdem. At-least-once delivery.
Saga Pattern
Transações distribuídas com compensating transactions.
Resilience
Circuit Breaker, Retry com backoff + jitter.
Deferred Execution
IEnumerable vs IQueryable — onde o filtro realmente executa.
CDC com Debezium
Change Data Capture via WAL/Debezium → Kafka. Evolução natural do Outbox.
C# Fundamentals
Polymorphism
Virtual dispatch, interfaces, pattern matching, strategy. Simulador de pricing.
Interfaces vs Abstract
Quando usar cada um. Decision tree, Template Method, versioning.
Collections & Generics
Array, List, Dictionary, Queue, Stack. Big-O de cada operação.
Immutability
Records, StringBuilder, string interning, thread safety.
Records & Patterns
Record types, with-expressions, pattern matching, discriminated unions.
Delegates & Events
Func/Action, multicast, events, pub/sub async.
Async & Performance
LINQ & Deferred
Deferred vs immediate, IQueryable, closures, expression trees.
Async/Await
State machine, cancellation, parallel vs sequential. Timeline simulator.
Threading
Locks, SemaphoreSlim, concurrent collections. Race condition simulator.
Memory & Span
Stack vs heap, Span<T>, zero-allocation parsing.
Parallel
Parallel.ForEach, PLINQ, partitioning, cancellation.
Architecture & Design
Dependency Injection
Lifetimes, Service Locator anti-pattern, testing. Lifetime visualizer.
Error Handling
Exception hierarchy, custom exceptions, guard clauses, async exceptions.
IDisposable
Dispose pattern, using statement, async disposal.
Serialization
System.Text.Json, custom converters, source generators.
SOLID Principles
Os 5 princípios com exemplos bad/good em C#.
Design Patterns
Strategy, Observer, Factory, Decorator, Repository.
CQRS & Event Sourcing
Command/Query separation, MediatR, event store, projections. Simulador interativo.
ASP.NET Core
REST API Design
Controllers vs Minimal APIs, status codes, versioning, filters. Simulador de status codes.
Middleware & Pipeline
Request pipeline, custom middleware, order matters.
Auth & Authorization
JWT, claims, policies, role vs policy-based.
Security & OWASP
OWASP Top 10, injection, CORS, rate limiting, secrets. Simulador de rate limiter.
Crypto & Auth
Hashing, AES, RSA, JWT deep dive, OAuth 2.0, OIDC, PKCE. Simulador JWT decoder.
HTTP Resilience
Polly v8, retry, circuit breaker, timeout, bulkhead.
Background Services
IHostedService, BackgroundService, timed vs queued.
Caching
IMemoryCache, IDistributedCache, cache-aside pattern.
Messaging & Events
Data & EF Core
Testing & DevOps
Testing & TDD
xUnit, mocking, integration tests, test patterns.
Benchmarking
BenchmarkDotNet, memory diagnostics, comparing approaches.
Logging & Observability
Serilog, structured logging, OpenTelemetry, distributed tracing. Simulador de log levels.
Docker & Deployment
Dockerfile multi-stage, docker-compose, health checks, CI/CD. Simulador de build size.
Architecture Leadership
Strategic DDD
Bounded contexts, ubiquitous language, context mapping, subdomínios core/supporting/generic.
Team Topologies
4 tipos de time, 3 modos de interação, carga cognitiva, lei de Conway.
ADRs
Architecture Decision Records: Nygard, MADR, Y-Statements, Advice Forum.
Platform Engineering
Internal Developer Platform, golden paths, microservice chassis, plataforma como produto.
DORA & Accelerate
As 4 métricas (DF, LT, CFR, MTTR), 24 capabilities, cultura generativa.
Systems Thinking
Feedback loops, leverage points, arquétipos sistêmicos em engenharia.
Harness Engineering
Guides + sensors em volta de coding agents. As 3 categorias de Fowler.
AI Agents em Produção
Lições do LinkedIn Hiring Assistant: arquitetura, evals, guardrails, custo.
Semantic Web & Knowledge Graphs
RDF Basics
Triples, Turtle, URIs, datatype vs object property, TBox vs ABox.
OWL & SHACL
OWL infere (open-world); SHACL valida (closed-world). Caso "Deck ≥99 cartas".
SPARQL Queries
Pattern matching, FILTER, OPTIONAL, UNION, agregação, property paths.
RDF vs LPG
Triplas semânticas vs Neo4j/Cypher. Quando cada um, Neptune híbrido.
dotNetRDF (C#)
IGraph, SPARQL local & remoto, ShaclProcessor, integração com Fuseki/Neptune.
Data Architecture
Side Projects
DevOps & Deployment
Cloud & AWS
EKS & Kubernetes
Deployments, Services, IRSA, Karpenter, probes corretos. Internet → ALB → Pod.
SQS / SNS / EventBridge / Kinesis
Quando usar cada, fan-out pattern, idempotência em consumers at-least-once, DLQ.
CloudWatch & X-Ray
OpenTelemetry .NET 8, ADOT Collector, três pilares, Logs Insights, EMF.
SLI / SLO / Error Budget
Four Golden Signals, por que p99 e não média, burn-rate alerts.
Blameless Postmortem & On-Call
Cultura, 5 Whys, severidade, runbooks, template completo.
Perguntas clássicas de entrevista
Amostra rápida abaixo — veja todas as 362 perguntas agrupadas por tópico em /interview-questions.
❓ Por que Strangler Fig em vez de reescrever tudo do zero?
Big bang rewrite concentra todo o risco em um único go-live sem rollback — Joel Spolsky chamou o full rewrite de "o pior erro estratégico que uma empresa de software pode cometer". Strangler Fig entrega valor incrementalmente, permite rollback a qualquer momento e mantém o sistema em produção durante toda a migração.
❓ Como o hash garante que o mesmo usuário sempre vai pro mesmo sistema?
SHA256 é determinístico — o mesmo input sempre produz o mesmo output. userId → SHA256 → primeiros 4 bytes → uint → % 100. O uint (sem sinal) garante 0–99 direto; com int seria preciso Math.Abs, que tem resto negativo e o edge case de int.MinValue. O resultado é sempre o mesmo para o mesmo GUID.
❓ Por que usar jitter no exponential backoff?
Sem jitter, todos os clientes que falharam ao mesmo tempo esperam o mesmo delay (thundering herd). Jitter randomiza, distribuindo a carga no tempo.
❓ IEnumerable vs IQueryable — quando usar cada um?
IQueryable traduz expressões LINQ para SQL — o filtro roda no banco. IEnumerable carrega tudo em memória e filtra no C#. Use IQueryable para filtros que devem rodar no banco, AsEnumerable() para operações que só existem em C#.