dezembro 21, 2025
13 min de leitura

Perguntas para Entrevista de Engenheiro Sênior de Nuvem GCP: Guia Completo

interview
career-advice
job-search
Perguntas para Entrevista de Engenheiro Sênior de Nuvem GCP: Guia Completo
Milad Bonakdar

Milad Bonakdar

Autor

Domine conceitos avançados do GCP com perguntas abrangentes para entrevistas, cobrindo design de arquitetura, GKE, Cloud Functions, otimização de custos e segurança para cargos de engenheiro sênior de nuvem.


Introdução

Espera-se que engenheiros de nuvem GCP seniores projetem arquiteturas escaláveis, implementem serviços avançados, otimizem custos e garantam a segurança em escala. Esta função exige profundo conhecimento dos serviços do GCP, das melhores práticas de arquitetura e experiência em produção.

Este guia abrange questões essenciais de entrevistas para engenheiros de nuvem GCP seniores, com foco em arquitetura, serviços avançados e soluções estratégicas.


Arquitetura & Design

1. Desenhe uma aplicação de alta disponibilidade no GCP.

Resposta: Arquitetura pronta para produção com redundância e escalabilidade:

Loading diagram...

Componentes Chave:

# Criar grupo de instâncias gerenciadas com autoescalabilidade
gcloud compute instance-groups managed create my-mig \
  --base-instance-name=my-app \
  --template=my-template \
  --size=3 \
  --zone=us-central1-a

# Configurar autoescalabilidade
gcloud compute instance-groups managed set-autoscaling my-mig \
  --max-num-replicas=10 \
  --min-num-replicas=3 \
  --target-cpu-utilization=0.7 \
  --cool-down-period=90

# Criar balanceador de carga
gcloud compute backend-services create my-backend \
  --protocol=HTTP \
  --health-checks=my-health-check \
  --global

# Adicionar grupo de instâncias ao backend
gcloud compute backend-services add-backend my-backend \
  --instance-group=my-mig \
  --instance-group-zone=us-central1-a \
  --global

Princípios de Design:

  • Implantação multi-zona
  • Autoescalabilidade baseada em métricas
  • Serviços gerenciados para bancos de dados
  • CDN para conteúdo estático
  • Verificações de saúde e monitoramento

Raridade: Muito Comum Dificuldade: Difícil


Google Kubernetes Engine (GKE)

2. Como você implanta e gerencia aplicações no GKE?

Resposta: GKE é o serviço Kubernetes gerenciado do Google.

Processo de Implantação:

# Criar cluster GKE
gcloud container clusters create my-cluster \
  --num-nodes=3 \
  --machine-type=e2-medium \
  --zone=us-central1-a \
  --enable-autoscaling \
  --min-nodes=3 \
  --max-nodes=10

# Obter credenciais
gcloud container clusters get-credentials my-cluster \
  --zone=us-central1-a

# Implantar aplicação
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: gcr.io/my-project/myapp:v1
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 512Mi
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 8080
EOF

Recursos do GKE:

  • Auto-atualização e auto-reparo
  • Workload Identity para segurança
  • Binary Authorization
  • Integração com o Cloud Monitoring

Raridade: Muito Comum Dificuldade: Difícil


Serverless & Serviços Avançados

3. Quando você usaria Cloud Functions vs Cloud Run?

Resposta: Escolha com base nas características da carga de trabalho:

Cloud Functions:

  • Orientado a eventos (Pub/Sub, Storage, HTTP)
  • Curta duração (< 9 minutos)
  • Escalabilidade automática para zero
  • Pague por invocação

Cloud Run:

  • Baseado em contêineres
  • Requisições HTTP ou Pub/Sub
  • Maior duração (até 60 minutos)
  • Mais controle sobre o ambiente
# Exemplo de Cloud Function
def hello_pubsub(event, context):
    """Acionado por mensagem Pub/Sub"""
    import base64
    
    if 'data' in event:
        message = base64.b64decode(event['data']).decode('utf-8')
        print(f'Mensagem recebida: {message}')
        
        # Processar mensagem
        process_data(message)
# Implantar Cloud Function
gcloud functions deploy hello_pubsub \
  --runtime=python39 \
  --trigger-topic=my-topic \
  --entry-point=hello_pubsub

# Implantar Cloud Run
gcloud run deploy myapp \
  --image=gcr.io/my-project/myapp:v1 \
  --platform=managed \
  --region=us-central1 \
  --allow-unauthenticated

Raridade: Comum Dificuldade: Média


Rede Avançada

4. Explique VPC Compartilhado e quando usá-lo.

Resposta: VPC Compartilhado permite que múltiplos projetos compartilhem uma rede VPC comum.

Benefícios:

  • Administração de rede centralizada
  • Compartilhamento de recursos entre projetos
  • Faturamento simplificado
  • Políticas de segurança consistentes

Arquitetura:

Loading diagram...
# Habilitar VPC Compartilhado no projeto host
gcloud compute shared-vpc enable my-host-project

# Anexar projeto de serviço
gcloud compute shared-vpc associated-projects add my-service-project \
  --host-project=my-host-project

# Conceder permissões
gcloud projects add-iam-policy-binding my-host-project \
  --member=serviceAccount:[email protected] \
  --role=roles/compute.networkUser

Casos de Uso:

  • Grandes organizações
  • Ambientes multi-time
  • Gerenciamento de rede centralizado
  • Requisitos de conformidade

Raridade: Comum Dificuldade: Média-Difícil


Otimização de Custos

5. Como você otimiza os custos do GCP?

Resposta: Estratégias de otimização de custos:

1. Dimensionamento adequado (Right-sizing):

# Usar API Recommender
gcloud recommender recommendations list \
  --project=my-project \
  --location=us-central1 \
  --recommender=google.compute.instance.MachineTypeRecommender

2. Descontos por Uso Contínuo (Committed Use Discounts):

  • Compromissos de 1 ou 3 anos
  • Até 57% de economia
  • Flexível ou baseado em recursos

3. VMs Preemptivas:

# Criar instância preemptiva
gcloud compute instances create my-preemptible \
  --preemptible \
  --machine-type=e2-medium

4. Ciclo de Vida do Armazenamento (Storage Lifecycle):

# Definir política de ciclo de vida
gsutil lifecycle set lifecycle.json gs://my-bucket

# lifecycle.json
{
  "lifecycle": {
    "rule": [
      {
        "action": {"type": "SetStorageClass", "storageClass": "NEARLINE"},
        "condition": {"age": 30}
      },
      {
        "action": {"type": "Delete"},
        "condition": {"age": 365}
      }
    ]
  }
}

5. Monitoramento:

  • Relatórios do Cloud Billing
  • Alertas de orçamento
  • Detalhamento de custos por serviço/projeto

Raridade: Muito Comum Dificuldade: Média


Segurança

6. Como você implementa as melhores práticas de segurança no GCP?

Resposta: Abordagem de segurança multi-camadas:

1. Melhores Práticas de IAM:

# Usar contas de serviço com permissões mínimas
gcloud iam service-accounts create my-app-sa \
  --display-name="Conta de Serviço da Minha App"

# Conceder função específica
gcloud projects add-iam-policy-binding my-project \
  --member=serviceAccount:[email protected] \
  --role=roles/storage.objectViewer \
  --condition='expression=resource.name.startsWith("projects/_/buckets/my-bucket"),title=bucket-access'

2. Segurança de VPC:

  • Acesso Privado do Google
  • VPC Service Controls
  • Cloud Armor para proteção contra DDoS

3. Criptografia de Dados:

# Chaves de criptografia gerenciadas pelo cliente
gcloud kms keyrings create my-keyring \
  --location=global

gcloud kms keys create my-key \
  --location=global \
  --keyring=my-keyring \
  --purpose=encryption

# Usar com Cloud Storage
gsutil -o 'GSUtil:encryption_key=...' cp file.txt gs://my-bucket/

4. Monitoramento:

  • Cloud Audit Logs
  • Security Command Center
  • Cloud Logging e Monitoring

Raridade: Muito Comum Dificuldade: Difícil


Análise de Dados

7. Como você projeta e otimiza o BigQuery para análise em larga escala?

Resposta: BigQuery é o data warehouse serverless e altamente escalável do Google.

Arquitetura:

  • Armazenamento colunar
  • Escalabilidade automática
  • Interface SQL
  • Escala de petabytes
  • Preço por consulta

Design de Tabela:

-- Criar tabela particionada
CREATE TABLE mydataset.events
(
  event_id STRING,
  user_id STRING,
  event_type STRING,
  event_data JSON,
  event_timestamp TIMESTAMP
)
PARTITION BY DATE(event_timestamp)
CLUSTER BY user_id, event_type
OPTIONS(
  partition_expiration_days=90,
  require_partition_filter=true
);

-- Criar view materializada
CREATE MATERIALIZED VIEW mydataset.daily_summary
AS
SELECT
  DATE(event_timestamp) as event_date,
  event_type,
  COUNT(*) as event_count,
  COUNT(DISTINCT user_id) as unique_users
FROM mydataset.events
GROUP BY event_date, event_type;

Estratégias de Otimização:

1. Particionamento:

-- Particionamento baseado em tempo
CREATE TABLE mydataset.sales
PARTITION BY DATE(sale_date)
AS SELECT * FROM source_table;

-- Particionamento por intervalo de inteiros
CREATE TABLE mydataset.user_data
PARTITION BY RANGE_BUCKET(user_id, GENERATE_ARRAY(0, 1000000, 10000))
AS SELECT * FROM source_table;

-- Consultar com filtro de partição (custo-efetivo)
SELECT *
FROM mydataset.events
WHERE DATE(event_timestamp) BETWEEN '2024-01-01' AND '2024-01-31'
  AND event_type = 'purchase';

2. Clustering:

-- Cluster por colunas frequentemente filtradas
CREATE TABLE mydataset.logs
PARTITION BY DATE(log_timestamp)
CLUSTER BY user_id, region, status
AS SELECT * FROM source_logs;

-- Consultas se beneficiam do clustering
SELECT *
FROM mydataset.logs
WHERE DATE(log_timestamp) = '2024-11-26'
  AND user_id = '12345'
  AND region = 'us-east1';

3. Otimização de Consulta:

-- Ruim: SELECT * (escaneia todas as colunas)
SELECT * FROM mydataset.large_table;

-- Bom: SELECT colunas específicas
SELECT user_id, event_type, event_timestamp
FROM mydataset.large_table;

-- Usar agregação aproximada para grandes datasets
SELECT APPROX_COUNT_DISTINCT(user_id) as unique_users
FROM mydataset.events;

-- Evitar auto-joins, usar window functions
SELECT
  user_id,
  event_timestamp,
  LAG(event_timestamp) OVER (PARTITION BY user_id ORDER BY event_timestamp) as prev_event
FROM mydataset.events;

4. Controle de Custos:

# Definir bytes máximos cobrados
bq query \
  --maximum_bytes_billed=1000000000 \
  --use_legacy_sql=false \
  'SELECT COUNT(*) FROM mydataset.large_table'

# Dry run para estimar custos
bq query \
  --dry_run \
  --use_legacy_sql=false \
  'SELECT * FROM mydataset.large_table'

Carregamento de Dados:

# Carregar do Cloud Storage
bq load \
  --source_format=NEWLINE_DELIMITED_JSON \
  --autodetect \
  mydataset.mytable \
  gs://mybucket/data/*.json

# Carregar com schema
bq load \
  --source_format=CSV \
  --skip_leading_rows=1 \
  mydataset.mytable \
  gs://mybucket/data.csv \
  schema.json

# Streaming inserts (tempo real)
from google.cloud import bigquery

client = bigquery.Client()
table_id = "my-project.mydataset.mytable"

rows_to_insert = [
    {"user_id": "123", "event_type": "click", "timestamp": "2024-11-26T10:00:00"},
    {"user_id": "456", "event_type": "purchase", "timestamp": "2024-11-26T10:05:00"},
]

errors = client.insert_rows_json(table_id, rows_to_insert)
if errors:
    print(f"Errors: {errors}")

Melhores Práticas:

  • Sempre use filtros de partição
  • Cluster por colunas de alta cardinalidade
  • Evite SELECT *
  • Use funções aproximadas para grandes datasets
  • Monitore os custos de consulta
  • Use views materializadas para consultas repetidas
  • Desnormalize os dados quando apropriado

Raridade: Muito Comum Dificuldade: Difícil


Serviços Avançados de Banco de Dados

8. Quando você usaria Cloud Spanner vs Cloud SQL?

Resposta: Escolha com base na escala, consistência e requisitos geográficos:

Cloud Spanner:

  • Banco de dados relacional distribuído globalmente
  • Escalabilidade horizontal (ilimitada)
  • Consistência forte entre regiões
  • SLA de 99.999% de disponibilidade
  • Custo mais alto

Cloud SQL:

  • Banco de dados gerenciado regional (MySQL, PostgreSQL, SQL Server)
  • Escalabilidade vertical (limitada)
  • Região única (com réplicas de leitura)
  • SLA de 99.95% de disponibilidade
  • Custo mais baixo

Comparação:

CaracterísticaCloud SpannerCloud SQL
EscalaPetabytesTerabytes
ConsistênciaForte globalRegional
Disponibilidade99.999%99.95%
LatênciaMilissegundos de um dígito globalmenteBaixa (regional)
CustoAltoModerado
Caso de UsoApps globais, sistemas financeirosApps regionais, cargas de trabalho tradicionais

Exemplo de Cloud Spanner:

-- Criar instância Spanner
gcloud spanner instances create my-instance \
  --config=regional-us-central1 \
  --nodes=3 \
  --description="Instância de Produção"

-- Criar banco de dados
gcloud spanner databases create my-database \
  --instance=my-instance \
  --ddl='CREATE TABLE Users (
    UserId INT64 NOT NULL,
    Username STRING(100),
    Email STRING(255),
    CreatedAt TIMESTAMP
  ) PRIMARY KEY (UserId)'

-- Inserir dados
gcloud spanner databases execute-sql my-database \
  --instance=my-instance \
  --sql="INSERT INTO Users (UserId, Username, Email, CreatedAt)
        VALUES (1, 'alice', '[email protected]', CURRENT_TIMESTAMP())"

-- Consultar com consistência forte
gcloud spanner databases execute-sql my-database \
  --instance=my-instance \
  --sql="SELECT * FROM Users WHERE UserId = 1"

Cliente Python:

from google.cloud import spanner

# Criar cliente
spanner_client = spanner.Client()
instance = spanner_client.instance('my-instance')
database = instance.database('my-database')

# Ler com consistência forte
def read_user(user_id):
    with database.snapshot() as snapshot:
        results = snapshot.execute_sql(
            "SELECT UserId, Username, Email FROM Users WHERE UserId = @user_id",
            params={"user_id": user_id},
            param_types={"user_id": spanner.param_types.INT64}
        )
        for row in results:
            print(f"Usuário: {row[0]}, {row[1]}, {row[2]}")

# Escrever com transação
def create_user(user_id, username, email):
    def insert_user(transaction):
        transaction.execute_update(
            "INSERT INTO Users (UserId, Username, Email, CreatedAt) "
            "VALUES (@user_id, @username, @email, CURRENT_TIMESTAMP())",
            params={
                "user_id": user_id,
                "username": username,
                "email": email
            },
            param_types={
                "user_id": spanner.param_types.INT64,
                "username": spanner.param_types.STRING,
                "email": spanner.param_types.STRING
            }
        )
    
    database.run_in_transaction(insert_user)

Exemplo de Cloud SQL:

# Criar instância Cloud SQL
gcloud sql instances create my-instance \
  --database-version=POSTGRES_14 \
  --tier=db-n1-standard-2 \
  --region=us-central1 \
  --root-password=mypassword

# Criar banco de dados
gcloud sql databases create mydatabase \
  --instance=my-instance

# Conectar
gcloud sql connect my-instance --user=postgres

# Criar réplica de leitura
gcloud sql instances create my-replica \
  --master-instance-name=my-instance \
  --tier=db-n1-standard-1 \
  --region=us-east1

Quando Usar:

Use Cloud Spanner quando:

  • Precisar de distribuição global
  • Requerer consistência forte entre regiões
  • Escalar além de uma única região
  • Transações financeiras
  • Aplicações de missão crítica
  • Orçamento permite um custo mais alto

Use Cloud SQL quando:

  • Aplicação regional
  • Familiarizado com MySQL/PostgreSQL
  • Sensível a custos
  • Escala moderada (< 10TB)
  • Cargas de trabalho SQL existentes
  • Não precisa de consistência global

Raridade: Comum Dificuldade: Média-Difícil


Segurança & Compliance

9. Como você implementa VPC Service Controls?

Resposta: VPC Service Controls cria perímetros de segurança em torno dos recursos do GCP para evitar a exfiltração de dados.

Conceitos Chave:

  • Service Perimeter: Limite em torno dos recursos
  • Access Levels: Condições para acesso
  • Ingress/Egress Rules: Controlar o fluxo de dados

Arquitetura:

Loading diagram...

Configuração:

# Criar política de acesso
gcloud access-context-manager policies create \
  --organization=123456789 \
  --title="Política de Produção"

# Criar nível de acesso
gcloud access-context-manager levels create CorpNetwork \
  --policy=accessPolicies/123456789 \
  --title="Rede Corporativa" \
  --basic-level-spec=access_level.yaml

# access_level.yaml
conditions:
  - ipSubnetworks:
    - 203.0.113.0/24  # Intervalo de IP corporativo
  - members:
    - user:[email protected]

Criar Service Perimeter:

# Criar perímetro
gcloud access-context-manager perimeters create production_perimeter \
  --policy=accessPolicies/123456789 \
  --title="Perímetro de Produção" \
  --resources=projects/123456789012 \
  --restricted-services=storage.googleapis.com,bigquery.googleapis.com \
  --access-levels=accessPolicies/123456789/accessLevels/CorpNetwork

# Adicionar projeto ao perímetro
gcloud access-context-manager perimeters update production_perimeter \
  --policy=accessPolicies/123456789 \
  --add-resources=projects/987654321098

Regras de Entrada/Saída (Ingress/Egress Rules):

# ingress_rule.yaml
ingressPolicies:
  - ingressFrom:
      sources:
        - accessLevel: accessPolicies/123456789/accessLevels/CorpNetwork
      identities:
        - serviceAccount:[email protected]
    ingressTo:
      resources:
        - '*'
      operations:
        - serviceName: storage.googleapis.com
          methodSelectors:
            - method: '*'

# Aplicar regra de entrada
gcloud access-context-manager perimeters update production_perimeter \
  --policy=accessPolicies/123456789 \
  --set-ingress-policies=ingress_rule.yaml

Regras de Saída (Egress Rules):

# egress_rule.yaml
egressPolicies:
  - egressFrom:
      identities:
        - serviceAccount:[email protected]
    egressTo:
      resources:
        - projects/external-project-id
      operations:
        - serviceName: storage.googleapis.com
          methodSelectors:
            - method: 'google.storage.objects.create'

# Aplicar regra de saída
gcloud access-context-manager perimeters update production_perimeter \
  --policy=accessPolicies/123456789 \
  --set-egress-policies=egress_rule.yaml

Serviços Suportados:

  • Cloud Storage
  • BigQuery
  • Cloud SQL
  • Compute Engine
  • GKE
  • Cloud Functions
  • E muitos mais

Testes:

# Testar acesso de dentro do perímetro
from google.cloud import storage

def test_access():
    try:
        client = storage.Client()
        bucket = client.bucket('my-protected-bucket')
        blobs = list(bucket.list_blobs())
        print(f"Acesso concedido: {len(blobs)} objetos")
    except Exception as e:
        print(f"Acesso negado: {e}")

# Isso terá sucesso da rede autorizada
# Isso falhará da rede não autorizada
test_access()

Monitoramento:

# Visualizar logs do VPC SC
gcloud logging read \
  'protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"' \
  --limit=50 \
  --format=json

Casos de Uso:

  • Evitar exfiltração de dados
  • Requisitos de conformidade (HIPAA, PCI-DSS)
  • Proteger dados sensíveis
  • Isolar ambientes de produção
  • Segurança multi-tenant

Melhores Práticas:

  • Comece com o modo dry-run
  • Teste completamente antes da aplicação
  • Use níveis de acesso para controle refinado
  • Monitore os logs do VPC SC
  • Documente os limites do perímetro
  • Revisões de acesso regulares

Raridade: Incomum Dificuldade: Difícil


Conclusão

Entrevistas para engenheiros de nuvem GCP seniores exigem profundo conhecimento técnico e experiência prática. Foque em:

  1. Arquitetura: Alta disponibilidade, escalabilidade, recuperação de desastres
  2. GKE: Orquestração de contêineres, estratégias de implantação
  3. Serverless: Casos de uso de Cloud Functions, Cloud Run
  4. Rede: VPC Compartilhado, conectividade híbrida
  5. Otimização de Custos: Dimensionamento adequado, uso comprometido, políticas de ciclo de vida
  6. Segurança: IAM, criptografia, controles de VPC

Demonstre experiência no mundo real com sistemas de produção e tomada de decisões estratégicas. Boa sorte!

Newsletter subscription

Dicas de carreira semanais que realmente funcionam

Receba as últimas ideias diretamente na sua caixa de entrada

Pare de Se Candidatar. Comece a Ser Contratado.

Transforme seu currículo em um ímã de entrevistas com otimização impulsionada por IA em que candidatos a emprego em todo o mundo confiam.

Comece grátis

Compartilhar esta publicação

Seja Contratado 50% Mais Rápido

Candidatos que usam currículos profissionais aprimorados por IA conseguem vagas em uma média de 5 semanas comparado às 10 padrão. Pare de esperar e comece a fazer entrevistas.