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
🪟 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
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
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)