Este documento serve como referĂŞncia para entrevistas tĂ©cnicas de desenvolvedores Go, organizando os conhecimentos esperados por nĂvel de senioridade.
đź‘¶ Desenvolvedor JĂşnior
Fundamentos da Linguagem
- Sintaxe básica: Variáveis, constantes, tipos de dados primitivos
- Estruturas de controle: if/else, switch, for loops
- Funções: Declaração, parâmetros, retorno múltiplo
- Arrays e Slices: Diferenças e uso básico
- Maps: Criação, inserção, leitura e deleção
- Structs: Definição e uso básico
-
Ponteiros: Conceito básico e quando usar
&e* - Packages: Importação e uso de pacotes da stdlib
-
Error handling: Tratamento básico de erros com
if err != nil
Conceitos Básicos
- Exported vs Unexported: Entender maiĂşsculas/minĂşsculas em identificadores
- Zero values: Valores padrĂŁo dos tipos
- Type conversion: ConversĂŁo entre tipos
- String manipulation: Operações básicas com strings
- fmt package: Printf, Sprintf, Println
Ferramentas Essenciais
- go run: Executar programas Go
- go build: Compilar programas
- go fmt: Formatar cĂłdigo automaticamente
- go mod init: Inicializar mĂłdulo Go
- go get: Baixar dependĂŞncias
Bibliotecas Standard Library (Básicas)
-
fmt- Formatação de I/O -
strings- Manipulação de strings -
strconv- Conversões string/números -
os- Interação com sistema operacional -
io- Interfaces básicas de I/O
Perguntas Sugeridas para JĂşnior
1. Explique a diferença entre array e slice
Resposta esperada:
- Array tem tamanho fixo definido em tempo de compilação
[5]int - Slice é dinâmico, referência para um array subjacente
[]int - Slice pode crescer com
append() - Arrays sĂŁo valores, slices sĂŁo referĂŞncias
2. O que sĂŁo zero values? DĂŞ exemplos
Resposta esperada:
- Valor padrão quando variável é declarada sem inicialização
-
int/float: 0 -
string: "" (vazia) -
bool: false -
pointer/slice/map/channel: nil
3. Como você declara uma variável em Go? Quais as diferentes formas?
Resposta esperada:
var x int = 10 // declaração completa
var x = 10 // tipo inferido
x := 10 // declaração curta (apenas em funções)
var x int // declarada com zero value
4. O que acontece se você não tratar um erro retornado por uma função?
Resposta esperada:
- O compilador não força tratamento de erro
- Variável
errfica ignorada (usar_para explĂcito) - Pode causar bugs silenciosos em runtime
- Boa prática: sempre verificar
if err != nil
5. Qual a diferença entre make e new?
Resposta esperada:
-
new(T): aloca memĂłria zerada, retorna*T(ponteiro) -
make(T): inicializa slice/map/channel, retornaT(nĂŁo ponteiro) -
newpara qualquer tipo,makeapenas para slice, map, channel -
makepode especificar capacidade:make([]int, 0, 10)
6. Como funciona o retorno múltiplo de funções?
Resposta esperada:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("divisĂŁo por zero")
}
return a / b, nil
}
result, err := divide(10, 2)
- Go permite retornar mĂşltiplos valores
- Comum retornar
(resultado, error) - Pode usar retornos nomeados
🧑‍💻 Desenvolvedor Pleno
Conhecimentos Avançados da Linguagem
- Interfaces: Definição, implementação implĂcita, type assertion
- Goroutines: Criação e conceitos de concorrência
- Channels: Comunicação entre goroutines, buffered vs unbuffered
- Select statement: Multiplexing de channels
- Defer: Uso e ordem de execução
- Panic e Recover: Quando e como usar
- Methods: Receivers (value vs pointer)
- Embedding: Composição de structs
- Type assertions e Type switches
- Generics (Go 1.18+): Sintaxe básica e uso
Padrões e Boas Práticas
- Error handling: Padrões idiomáticos, custom errors
- Context package: Cancelamento e timeouts
- Dependency injection: Injeção de dependências
- Clean Architecture: Separação de camadas
- SOLID principles aplicados em Go
- Table-driven tests: PadrĂŁo de testes em Go
- Naming conventions: Convenções de nomenclatura
Ferramentas e Ecosystem
- go test: Testes unitários e de integração
- go mod: Gerenciamento completo de dependĂŞncias
- go vet: Análise estática de código
- golangci-lint: Linting avançado
- go generate: Geração de código
- Delve: Debugger para Go
- pprof: Profiling de performance
Bibliotecas Standard Library (Intermediárias)
-
net/http- Servidor HTTP e cliente -
encoding/json- Serialização JSON -
database/sql- Interface de banco de dados -
context- Controle de contexto e cancelamento -
sync- Primitivas de sincronização (Mutex, WaitGroup, Once) -
time- Manipulação de tempo -
log- Logging básico -
testing- Framework de testes
Frameworks e Bibliotecas Populares
- Web Frameworks: Gin, Echo, Fiber, Chi
- ORMs: GORM, sqlx, ent
- Validation: go-playground/validator
- Configuration: Viper, envconfig
- Testing: testify, gomock
Banco de Dados
- Uso de
database/sqlcom drivers (postgres, mysql) - Preparação de statements
- Transações
- Connection pooling
- Migrations (golang-migrate, goose)
Perguntas Sugeridas para Pleno
1. Explique como funcionam as goroutines e o scheduler do Go
Resposta esperada:
- Goroutines sĂŁo threads leves gerenciadas pela runtime do Go
- Scheduler usa modelo M:N (M goroutines em N threads OS)
- Componentes: G (goroutine), M (thread OS), P (processador lĂłgico)
- Work stealing: P rouba goroutines de outras filas quando ociosas
- Preemptivo desde Go 1.14
2. Qual a diferença entre buffered e unbuffered channels?
Resposta esperada:
- Unbuffered
make(chan int): send bloqueia até receive - Buffered
make(chan int, 10): send só bloqueia se buffer cheio - Unbuffered garante sincronização
- Buffered permite assincronia limitada
3. Quando vocĂŞ usaria um pointer receiver vs value receiver?
Resposta esperada:
- Pointer receiver: modificar estado, grandes structs, consistĂŞncia
- Value receiver: imutabilidade, pequenas structs, tipos primitivos
- Regra: se algum método usa pointer, todos devem usar
func (p *Person) SetName(n string) { p.name = n } // pointer
func (p Person) GetName() string { return p.name } // value ok
4. Como vocĂŞ implementaria um rate limiter usando channels?
Resposta esperada:
limiter := time.Tick(100 * time.Millisecond)
for req := range requests {
<-limiter // bloqueia até próximo tick
go handle(req)
}
Ou usar golang.org/x/time/rate com token bucket
5. Explique o padrão de erro idiomático em Go e como criar custom errors
Resposta esperada:
// Padrão idiomático
result, err := doSomething()
if err != nil {
return fmt.Errorf("failed to do something: %w", err)
}
// Custom error
type ValidationError struct {
Field string
Message string
}
func (e *ValidationError) Error() string {
return fmt.Sprintf("%s: %s", e.Field, e.Message)
}
- Usar
%wpara wrapping (Go 1.13+) -
errors.Is()eerrors.As()para verificação
6. Como funciona o Context e quando você deve usá-lo?
Resposta esperada:
- Propaga cancelamento, timeouts e valores entre goroutines
- Primeiro parâmetro de funções por convenção
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
- Usar para: requests HTTP, queries DB, operações longas
- NĂŁo usar para: passar dependĂŞncias opcionais
7. Qual a diferença entre sync.Mutex e sync.RWMutex?
Resposta esperada:
-
Mutex: lock exclusivo (escrita ou leitura) -
RWMutex: múltiplos readers ou um writer - RWMutex otimiza cenários read-heavy
mu.RLock() // mĂşltiplas goroutines podem ler
mu.RUnlock()
mu.Lock() // exclusivo para escrita
mu.Unlock()
8. Como você estruturaria uma aplicação web em Go?
Resposta esperada:
/cmd/api - entry point
/internal
/handlers - HTTP handlers
/services - business logic
/repository - data access
/models - domain models
/pkg - código reutilizável
/migrations - DB migrations
- Dependency injection
- Interface-based design
- Separação de camadas
9. Explique o que Ă© race condition e como detectar em Go
Resposta esperada:
- MĂşltiplas goroutines acessando mesma memĂłria, pelo menos uma escrevendo
- Comportamento nĂŁo-determinĂstico
- Detectar:
go run -race main.goougo test -race - Prevenir: channels, sync.Mutex, sync/atomic
🎓 Desenvolvedor Sênior
Expertise Técnica Profunda
- Runtime internals: Garbage collector, scheduler, memory model
- Performance optimization: Benchmarking, profiling, otimizações
- Concurrency patterns: Worker pools, pipeline, fan-out/fan-in
- Memory management: Stack vs heap allocation, escape analysis
- Reflection: Package reflect, quando usar e trade-offs
- Unsafe package: Quando Ă© apropriado e riscos
- Assembly: Leitura básica de assembly output
- Build tags e conditional compilation
- CGo: Integração com C, trade-offs de performance
Arquitetura e Design
- Microservices: Design, comunicação, patterns
- Domain-Driven Design em Go
- Hexagonal Architecture / Ports & Adapters
- Event-driven architecture
- CQRS e Event Sourcing
- API Design: REST, gRPC, GraphQL
- Distributed systems: CAP theorem, eventual consistency
- Message queues: RabbitMQ, Kafka, NATS
Observabilidade e Reliability
- Structured logging: zap, zerolog
- Metrics: Prometheus, OpenTelemetry
- Tracing: Jaeger, OpenTelemetry
- Monitoring: Grafana, alerting
- Circuit breakers e retry policies
- Rate limiting e backpressure
- Load balancing
- Health checks e readiness probes
DevOps e Deployment
- Docker: Criação de imagens otimizadas multi-stage
- Kubernetes: Deployment, Services, ConfigMaps, Secrets
- CI/CD: GitLab CI, GitHub Actions, Jenkins
- Infrastructure as Code: Terraform, CloudFormation
- Cloud platforms: AWS, GCP, Azure com Go SDKs
- Service mesh: Istio, Linkerd
Segurança
- Authentication/Authorization: JWT, OAuth2, OIDC
- Cryptography: TLS, encryption at rest
- Input validation e sanitization
- SQL injection prevention
- Secrets management: Vault, AWS Secrets Manager
- Security best practices: OWASP Top 10
Testing Avançado
- Test coverage: Estratégias para cobertura efetiva
- Mocking: gomock, testify/mock
- Integration tests: testcontainers-go
- E2E tests: Estratégias de teste end-to-end
- Contract testing: Pact
- Load testing: k6, vegeta
- Chaos engineering: PrincĂpios e ferramentas
Performance
- Profiling: CPU, memory, goroutine, mutex profiling
- Benchmarking: Microbenchmarks, análise de resultados
- Optimization: Hot path optimization, algoritmos eficientes
- Memory leaks: Detecção e prevenção
- Caching strategies: Redis, in-memory caching
- Database optimization: Indexing, query optimization
Ferramentas Avançadas
- go:generate: Templates, protobuf, mocks
- Wire: Dependency injection automática
- Buf: Gerenciamento de Protocol Buffers
- Task/Make: Build automation
- govulncheck: Verificação de vulnerabilidades
- staticcheck: Análise estática avançada
Liderança Técnica
- Code review: Habilidade de revisar cĂłdigo efetivamente
- Mentoria: Capacidade de ensinar e guiar jĂşniores/plenos
- Architectural decisions: Trade-offs e decisões de arquitetura
- Technical debt: Identificação e gerenciamento
- RFC/ADR: Documentação de decisões técnicas
- Performance budgets: Definição e monitoramento
- Migration strategies: Estratégias de migração de sistemas legados
Comunidade e Ecosystem
- Go Proverbs: Conhecimento dos princĂpios da linguagem
- Go proposals: Acompanhamento de novas features
- Open source: Contribuição em projetos Go
- TendĂŞncias: Conhecimento das Ăşltimas tendĂŞncias em Go
- Go conferences: Acompanhamento de talks e keynotes
Bibliotecas e Frameworks Avançados
- gRPC: Implementação completa de serviços
- Protocol Buffers: Definição de schemas
- GraphQL: go-graphql, gqlgen
- Temporal/Cadence: Workflow orchestration
- NATS: Messaging system
- etcd: Service discovery e configuration
- Consul: Service mesh e discovery
Perguntas Sugeridas para SĂŞnior
1. Explique como funciona o garbage collector do Go e suas otimizações
Resposta esperada:
- GC concurrent tri-color mark-and-sweep
- STW (Stop-The-World) minimizado (<1ms em Go 1.5+)
- Write barriers durante marking phase
- Tuneable com
GOGC(padrão 100 = 100% overhead) - Otimizações: escape analysis move alocações para stack
2. Como você identificaria e resolveria um memory leak em produção?
Resposta esperada:
-
pprofpara heap profile:go tool pprof http://localhost:6060/debug/pprof/heap - Comparar snapshots:
basevs current - Monitorar goroutine leaks:
/debug/pprof/goroutine - Procurar: maps sem cleanup, goroutines sem término, channels não fechados
- Solução: defer cleanup, context cancelation, timeouts
3. Descreva a implementação de um worker pool otimizado usando goroutines
Resposta esperada:
func workerPool(jobs <-chan Job, results chan<- Result, workers int) {
var wg sync.WaitGroup
for i := 0; i < workers; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for job := range jobs {
results <- process(job)
}
}()
}
wg.Wait()
close(results)
}
- NĂşmero de workers =
runtime.NumCPU()ou baseado em I/O - Buffered channels para evitar blocking
4. Quando vocĂŞ usaria reflection e quais sĂŁo os trade-offs?
Resposta esperada:
- Casos: serialização (JSON), ORMs, dependency injection, testes
- Trade-offs: performance (-10x a -100x), type safety perdida, complexidade
- Evitar em hot paths
- Alternativas: code generation, generics (Go 1.18+)
5. Como funciona escape analysis e como isso afeta performance?
Resposta esperada:
- Determina se variável vai para stack ou heap
- Stack: rápido, sem GC overhead
- Heap: escapa se: retornada, armazenada em estrutura global, muito grande
- Ver decisões:
go build -gcflags='-m' - Otimizar: retornar values em vez de pointers quando possĂvel
6. Explique diferentes estratégias de graceful shutdown em serviços Go
Resposta esperada:
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatal(err)
}
- Drain connection pools, finalizar goroutines, flush buffers
- Health check retorna unhealthy imediatamente
7. Como vocĂŞ implementaria um sistema distribuĂdo de rate limiting?
Resposta esperada:
- Sliding window com Redis:
INCR key,EXPIRE key ttl - Token bucket distribuĂdo: Redis sorted sets
- Algoritmos: leaky bucket, sliding window counter
- Considerar: latĂŞncia rede, consistĂŞncia eventual, fallback local
8. Descreva sua abordagem para migrar um monolito para microservices em Go
Resposta esperada:
- Estratégia strangler fig pattern
- Identificar bounded contexts (DDD)
- Extrair serviços por domĂnio, nĂŁo por camada
- API Gateway para roteamento
- Event-driven communication (NATS/Kafka)
- Database per service gradualmente
- Feature flags para rollback
9. Como vocĂŞ garantiria zero-downtime deployment?
Resposta esperada:
- Blue-green deployment ou rolling update
- Health checks (readiness/liveness probes)
- Graceful shutdown
- Database migrations backward compatible
- Feature toggles
- Load balancer draining
- Monitoring e rollback automático
10. Explique o memory model do Go e como prevenir race conditions sutis
Resposta esperada:
- Happens-before relationship
- Channel operations garantem sincronização
-
sync/atomicpara operações atômicas - Evitar: unsynchronized shared memory
- Usar
-racedetector sempre - Patterns: channels, mutexes, sync.Once
11. Como você otimizaria uma aplicação Go que está com alto uso de CPU?
Resposta esperada:
- CPU profiling:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 - Identificar hot paths (top functions)
- Otimizações: algoritmos (O(n²) → O(n log n)), pools (
sync.Pool), reduce allocations - Benchmarks antes/depois:
go test -bench=. -benchmem - Considerar: caching, lazy evaluation, concurrency
12. Descreve como implementaria observabilidade completa em um sistema distribuĂdo
Resposta esperada:
- Logging: structured logs (zap/zerolog), correlation IDs
- Metrics: Prometheus (RED/USE method), custom business metrics
- Tracing: OpenTelemetry, propagação de trace context
- Dashboards: Grafana com SLI/SLO
- Alerting: baseado em SLOs, runbooks
- Instrumentação automática vs manual
13. Quais sĂŁo os trade-offs entre diferentes patterns de error handling em Go?
Resposta esperada:
-
if err != nil: verboso mas explĂcito -
panic/recover: apenas para erros irrecuperáveis - Sentinel errors vs error types vs wrapped errors
-
errors.Is/Asvs type assertion - Error wrapping: contexto vs stack trace
- Considerações: performance, debugabilidade, API clarity
14. Como você faria profiling de uma aplicação em produção sem impactar performance?
Resposta esperada:
- Ativar pprof endpoints com autenticação
- Sample rate baixo (30s, nĂŁo continuous)
- Apenas em subset de instâncias
- Off-peak hours se possĂvel
- Usar
-seconds=30para limitar duração - Continuous profiling tools: Google Cloud Profiler, Datadog
- Overhead < 5% aceitável
15. Explique sua estratégia para testing em uma arquitetura de microservices
Resposta esperada:
- Unit tests: lĂłgica de negĂłcio isolada, mocks
- Integration tests: testcontainers-go para dependencies
- Contract tests: Pact entre consumers/providers
- E2E tests: cenários crĂticos, ambiente staging
- Chaos testing: simular falhas (latency, network partition)
- Test pyramid: muito unit, médio integration, pouco E2E
- CI/CD com coverage mĂnimo (80%+)
🎯 Guia de Nivelamento Interativo
Esta seção ajuda vocĂŞ a identificar o nĂvel do desenvolvedor quando vocĂŞ nĂŁo tem certeza. Use o fluxograma abaixo para fazer perguntas progressivas e deduzir o nĂvel baseado nas respostas.
Como Usar
- Comece com a Pergunta Inicial (P1)
- Avalie a resposta do candidato
- Siga o fluxo baseado na qualidade da resposta
- Faça perguntas de confirmação
- Chegue a uma conclusĂŁo sobre o nĂvel
Fluxograma de Nivelamento
P1: Explique a diferença entre slice e array em Go
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Não sabe, confunde conceitos, diz que são iguais | Abaixo de Júnior |
| ✓ Básica | "Array fixo, slice dinâmico", menciona append()
|
Júnior potencial → P2 |
| ✓✓ Completa | Implementação interna, slice como referência, capacity vs length, performance | Pleno+ → P3 |
P2: Como vocĂŞ trataria erros em Go?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Apenas if err != nil sem contexto adicional |
JĂşnior confirmado |
| ✓ Intermediária | Wrap errors com %w, contexto nas mensagens |
Pleno potencial → P4 |
| ✓✓ Avançada | Custom errors, errors.Is/As, patterns idiomáticos |
Pleno+ → P5 |
P3: Explique como funcionam as goroutines e o scheduler do Go
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | "São threads leves" sem mais detalhes | Pleno potencial → P4 |
| ✓ Intermediária | M:N threading, G-M-P model, conceitos corretos | Pleno+ → P5 |
| ✓✓ Avançada | Work stealing, preemption, detalhes de implementação | Sênior potencial → P6 |
P4: Quando vocĂŞ usaria um pointer receiver vs value receiver?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Não sabe quando usar | Júnior confirmado |
| ✓ Intermediária | Mutação vs imutabilidade, performance básica | Pleno potencial → P7 |
| ✓✓ Avançada | Escape analysis, consistency rules, trade-offs | Pleno+ → P8 |
P5: Como vocĂŞ implementaria um rate limiter usando channels?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Não consegue ou implementação errada | Pleno confirmado |
| ✓ Intermediária |
time.Tick ou buffered channel básico |
Pleno+ → P8 |
| ✓✓ Avançada | Token bucket, bibliotecas x/time/rate, distribuĂdo |
Sênior potencial → P9 |
P6: Como você identificaria e resolveria um memory leak em produção?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Não sabe ferramentas ou processo | Pleno confirmado |
| ✓ Intermediária | Menciona pprof, processo básico de investigação | Sênior potencial → P9 |
| ✓✓ Avançada | pprof detalhado, goroutine leaks, continuous profiling | Sênior potencial → P10 |
P7: O que Ă© race condition e como detectar em Go?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Conceito vago ou incorreto | Júnior confirmado |
| âś“ Boa | Explica bem, menciona -race, sync primitives |
Pleno confirmado |
P8: Como você estruturaria uma aplicação web em Go?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Tudo em um arquivo ou sem separação clara | Pleno confirmado |
| ✓ Intermediária | Handler/Service/Repository básico | Pleno confirmado |
| ✓✓ Avançada | Hexagonal/Clean arch, DI, interfaces bem definidas | Sênior potencial → P11 |
P9: Descreva sua abordagem para migrar um monolito para microservices em Go
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Sem experiência ou estratégia | Pleno confirmado |
| ✓ Intermediária | Strangler pattern, bounded contexts | Sênior potencial → P12 |
| ✓✓ Avançada | DDD completo, event-driven, database per service | Sênior potencial → P13 |
P10: Como você faria profiling de uma aplicação em produção sem impactar performance?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Não considerou impacto | Pleno confirmado |
| ✓ Intermediária | Sample rate, subset de instâncias | Sênior confirmado |
| ✓✓ Avançada | Continuous profiling, overhead budget, ferramentas enterprise | Sênior confirmado |
P11: Quais sĂŁo os trade-offs entre diferentes patterns de error handling em Go?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Conhece apenas if err != nil | Pleno confirmado |
| ✓ Intermediária | Sentinel vs wrapped, trade-offs básicos | Sênior confirmado |
| ✓✓ Avançada | Performance, debugabilidade, API design | Sênior confirmado |
P12: Como vocĂŞ garantiria zero-downtime deployment?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Não sabe estratégias | Pleno confirmado |
| ✓ Intermediária | Blue-green ou rolling, health checks | Sênior confirmado |
| ✓✓ Avançada | Graceful shutdown completo, migrations compatĂveis | SĂŞnior confirmado |
P13: Como vocĂŞ implementaria observabilidade completa em um sistema distribuĂdo?
| NĂvel Resposta | Indicadores | Dedução |
|---|---|---|
| ❌ Inadequada | Apenas logging isolado | Pleno confirmado |
| ✓ Intermediária | Logs + Metrics + Tracing, ferramentas | Sênior confirmado |
| ✓✓ Avançada | OpenTelemetry, correlation IDs, SLI/SLO, runbooks | Sênior confirmado |
đź’ˇ Dicas de Uso
- Flexibilidade: VocĂŞ nĂŁo precisa seguir todas as perguntas se já tiver certeza do nĂvel
- Adaptação: Ajuste perguntas baseado no contexto da vaga
- Observação: Preste atenção não só no que dizem, mas em COMO explicam
- Profundidade: Faça follow-ups para confirmar entendimento real vs decorado
- Prática: Candidatos podem saber teoria mas não ter prática (ou vice-versa)
⚠️ Sinais de Alerta
-
Red Flags para qualquer nĂvel:
- Respostas decoradas sem entendimento
- NĂŁo admite quando nĂŁo sabe
- Defensivo ao receber perguntas mais difĂceis
- Não consegue explicar com exemplos práticos
-
Green Flags:
- Admite quando nĂŁo sabe algo especĂfico
- Relaciona conceitos entre si
- Dá exemplos de experiências reais
- Faz perguntas de volta para clarificar contexto
📊 Conhecimentos por Categoria
Categorização Visual
JĂşnior â–“â–“â–“â–“â–“â–“â–“â–“â–‘â–‘â–‘â–‘â–‘â–‘â–‘â–‘â–‘â–‘â–‘â–‘ Sintaxe e Fundamentos
Pleno ▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░ Padrões e Ferramentas
Sênior ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ Arquitetura e Liderança
đź’ˇ Dicas para Entrevistas
Para Avaliar JĂşnior
- Foque em fundamentos: sintaxe, tipos de dados, estruturas básicas
- Peça para resolver problemas simples de algoritmos
- Avalie a capacidade de ler e entender cĂłdigo
- Teste conhecimento de error handling básico
Para Avaliar Pleno
- Apresente cenários reais de desenvolvimento
- Peça para desenhar arquitetura de uma API REST
- Avalie conhecimento de testes e boas práticas
- Discuta trade-offs de diferentes abordagens
- CĂłdigo review de um snippet com problemas
Para Avaliar SĂŞnior
- Discussões de arquitetura em alto nĂvel
- Resolução de problemas de produção (debugging, performance)
- Decisões técnicas com justificativas baseadas em trade-offs
- Capacidade de mentoria e liderança técnica
- Conhecimento de design distribuĂdo e escalabilidade
đź”— Recursos Recomendados
Livros
- JĂşnior: "The Go Programming Language" (Donovan & Kernighan)
- Pleno: "Concurrency in Go" (Katherine Cox-Buday)
- SĂŞnior: "Distributed Services with Go" (Travis Jeffery)
Websites
Practice
- Exercism Go Track
- LeetCode com soluções em Go
- Gophercises
Top comments (0)