Uber

Cultura Uber:

  • Player Coach mindset: Execute + ajude equipe
  • Bias for action: Faça acontecer, não só planeje
  • Problem-solving: Lide com ambiguidade
  • Roll up sleeves: Mãos na massa

Tópicos Prioritários:

  • Graph Algorithms: Dijkstra, A*, shortest path
  • Geo-spatial: Nearest driver, distance calculations
  • Real-time systems: WebSocket, updates ao vivo
  • Distributed systems: Consistency, availability
  • Rate limiting: Surge pricing scenarios

Processo de Entrevista:

  • Phone Screen: 1 problema de código (45 min)
  • Onsite (4-5 rodadas): 2x Algoritmos, 1x System Design, 1x Behavioral (RPALP)
  • Bar raiser: Avalia "Uberity" e impacto

Geo-spatial: Encontrar Motoristas Próximos


                    PROBLEMA: Given user location, find 5 nearest drivers           

                                                                            
  Naive: Calcular distância para TODOS os drivers → O(n)                   
                                                                            
  OTIMIZAÇÕES:                                                            
  • Grid-based: Dividir mapa em células (1km x 1km)                       
  • Geohash: "9q8yy" = ~5km x 5km, "9q8yyk" = ~600m x 600m          
  • QuadTree: Árvore 2D para busca por radius                             
  • Google S2: Geometria esférica com Hilbert curve                       
                                                                            

Perguntas Comuns de Design:

  • Como fazer matching de passageiros com motoristas?
  • Como implementar surge pricing?
  • Como otimizar rotas em tempo real?
  • Como detectar fraude em viagens?

Problemas Uber-Favorite

Network Delay Time Medium

Dijkstra básico - muito cobrado.

Dijkstra Graph
Resolver no LeetCode →
Word Search II Hard

Trie + DFS - muito cobrado.

Trie DFS
Resolver no LeetCode →
Regular Expression Matching Hard

DP com . e * - favorito.

DP String
Resolver no LeetCode →
Task Scheduler Medium

Scheduling - relevante para Uber Eats.

Heap Greedy
Resolver no LeetCode →

🪟 Microsoft

Cultura Microsoft:

  • Growth mindset: Aprendizado contínuo
  • Learning culture: Pergunte, explore
  • Teamwork: Colaboração é chave
  • Ownership: Responsabilidade pelo que faz

Tópicos Prioritários:

  • Binary Trees: MUITO cobrado! Traversal, construction, LCA
  • String manipulation: Manipulação de texto
  • Clean code: Legibilidade, naming
  • Edge cases: Valide inputs inválidos
  • BFS/DFS balance: Ambos são importantes

Processo de Entrevista Microsoft:

  • Online Assessment: 2-3 problemas (generics coding)
  • Phone Screen (1x): 1 problema easy/medium
  • Onsite (4-5 rodadas):
    • 2-3x Coding (foco em árvores!)
    • 1x System Design (para níveis altos)
    • 1-2x Behavioral (comportamento)
  • AA Bonus: Se OA foi forte, pode pular phone

Binary Trees: O Temas #1 da Microsoft

Microsoft AMA árvores em TODO! Prepare-se para:

Tipos de problemas que aparecem:
1. Traversals: inorder, preorder, postorder, level-order
2. Construction: array → BST, dois traversals → árvore
3. Validation: é BST válido?
4. LCA: menor ancestral comum
5. Path problems: soma de paths, menor caminho
6. Serialization: serialize/deserialize

Templates essenciais:

# Inorder traversal (visita left, root, right)
def inorder(node):
    if not node: return
    inorder(node.left)
    process(node.val)
    inorder(node.right)

# Level order (BFS) - guarda níveis
def level_order(root):
    queue = [root]
    while queue:
        level = []
        for _ in range(len(queue)):
            node = queue.pop(0)
            level.append(node.val)
            if node.left: queue.append(node.left)
            if node.right: queue.append(node.right)

# Valid BST com range
def is_valid(node, lo=-inf, hi=inf):
    if not node: return True
    if node.val <= lo or node.val >= hi: return False
    return is_valid(node.left, lo, node.val) and \
           is_valid(node.right, node.val, hi)

Dicas Microsoft:

  • Foque em árvores binárias - aparem muito
  • Escreva código limpo e com bons nomes
  • Teste seus próprios casos de borda
  • Comunique seu raciocínio em voz alta
  • 4-5 rodadas técnicas, incluindo behavioral

Problemas Microsoft-Favorite

Binary Tree Invert Easy

Inverta árvore binária - basics.

Tree DFS
Resolver no LeetCode →
Maximum Depth Easy

Profundidade da árvore.

Tree DFS BFS
Resolver no LeetCode →
Validate BST Medium

Valide BST - MUITO cobrado.

Tree BST
Resolver no LeetCode →
Lowest Common Ancestor Medium

LCA de BST e Binary Tree.

Tree LCA
Resolver no LeetCode →
Serialize/Deserialize Tree Medium

Serialize árvore binária.

Tree Design
Resolver no LeetCode →
Path Sum II Medium

Todos os paths com soma X.

Tree DFS Backtracking
Resolver no LeetCode →

Meta (Facebook)

Cultura Meta:

  • Move fast: Velocidade é crucial
  • Focus on impact: Resultados práticos
  • Be bold: Aposte em ideias grandes
  • Build social value: Impacto social

Tópicos Prioritários:

  • Arrays & Hashing: MUITO cobrado
  • Two Pointers: Somas, palindromes
  • Linked Lists: Manipulação
  • Fast-paced: Espera resolver 2-3 problemas por hora
  • Live coding: Escreva código rodando

Processo de Entrevista Meta:

  • Recruiter Screen: Conversa inicial
  • Phone Screen (1x): 1 problema medium (30 min)
  • Onsite (4 rodadas):
    • 2x Coding (1 easy + 1 medium ou hard)
    • 1x System Design (para E5+)
    • 1x Behavioral (Mini-hire/promotion)
  • Special Coding: 1h para problema mais complexo

Meta Speedrun: Resolva Rápido!

Meta valoriza velocidade. Dicas para passar:

Meta Typical Timeline:
• 45 min por sessão
• Esperam 2 problemas resolvidos
• Tempo por problema: ~15-20 min

Estratégia:
1. Leia rápido, pergunte clarifying
2. Brute force primeiro (validate)
3. Otimize com pattern matching:
   • Array ordenado + soma → Two Pointers
   • Substrings → Sliding Window
   • Subproblemas → DP
   • Busca em árvore → BFS/DFS
4. Code rápido, SEM helpers

Padrões que aparecem MUITO:
• Two Sum → Hash Map
• 3Sum/4Sum → Sort + Two Pointers
• Valid Palindrome → Two Pointers
• Merge Intervals → Sort + Greedy
• Top K → Heap ou Quick Select

Cuidado: Linked Lists são clássicos no Meta!
• Reverse, Detect Cycle, Merge Sorted

Problemas Meta-Favorite

Two Sum Easy

O clássico do Facebook (primeiro problema que eles pedem).

Hash Map Array
Resolver no LeetCode →
3Sum Medium

Variante do Two Sum - favorito.

Two Pointers Array
Resolver no LeetCode →
Reverse Linked List Easy

Linked list basics.

Linked List
Resolver no LeetCode →
Valid Palindrome Easy

String manipulation básica.

Two Pointers String
Resolver no LeetCode →

Google

Cultura Google:

  • Technical excellence: Alta barreira técnica
  • Multiple rounds: 4-6 rodadas técnicas
  • Focus on fundamentals: Bases sólidas
  • Algorithmic depth: DP, Graphs, Recursion

Tópicos Prioritários:

  • Dynamic Programming: Nível hard
  • Graph Algorithms: DFS, BFS, Dijkstra
  • Recursion: Backtracking, tree problems
  • Binary Search: Variações
  • Complex code: Não tenha medo de código longo

Processo de Entrevista Google:

  • Phone Screen (2x): 1-2 problemas de código
  • Onsite (4-5 rodadas):
    • 2-3x Algoritmos (geralmente hard)
    • 1x System Design (L3+) ou Coding (L4)
    • 1-2x General Cognitive (raciocínio)
    • 1x Behavioral/Googleyness
  • Leveling: Baseado em consistency nas rodadas

O Median Problem: Por Que é Tão Famoso?

"Find median of two sorted arrays" — O problema que define Google

Input: [1, 3, 5, 7] e [2, 4, 6, 8]
Output: 4.5 (média de 4 e 5)

Solução: Binary search na array MENOR
• Buscar partição que divide arrays ao meio
• Garantir: left_side_count = right_side_count
• Usar mediana das metades para comparar

Por que é hard?
• Não é só merge + median
• Precisamos O(log(min(n,m)))!

Complexidade vs outras soluções:
• Merge simples: O(n+m) → não é optimal!
• Binary search: O(log(min(n,m))) → Google's way!

Este problema testa:
1. Entender binary search profundamente
2. PENSAR em complexidade optimal
3. Lidar com paridade (ímpar/par de elementos)

Problemas Google-Favorite

Median of Two Sorted Arrays Hard

O problema clássico do Google - O(log).

Binary Search Hard
Resolver no LeetCode →
Wildcard Matching Hard

DP ou two pointers - variant do Google.

DP Two Pointers
Resolver no LeetCode →
Word Ladder Hard

BFS para transformations.

BFS Graph
Resolver no LeetCode →