# Como usar flashcards para dominar entrevistas de programação

Preparar-se para entrevistas técnicas nas principais empresas de tecnologia (frequentemente chamadas de FAANG ou MAANG) pode ser avassalador. Com centenas de estruturas de dados, algoritmos e conceitos de design de sistemas para memorizar, simplesmente resolver problemas no LeetCode nem sempre é suficiente.

Muitos engenheiros de software de sucesso usam **flashcards de repetição espaçada** como uma arma secreta para reter conceitos técnicos complexos. Veja como você pode usar o Flashcards World para se preparar para sua próxima entrevista de programação.

## 1. Memorizando Complexidades de Tempo e Espaço (Notação Big O)

Durante uma entrevista de programação, você não precisa apenas resolver o problema; você precisa conhecer a eficiência da sua solução. Se um entrevistador perguntar: "Podemos fazer melhor do que O(N^2)?", você precisa conhecer instantaneamente as complexidades de tempo de estruturas de dados alternativas.

**Como criar os flashcards:**
*   **Frente:** Qual é a complexidade de tempo média e no pior caso para pesquisa em um Hash Map?
*   **Verso:** Média: O(1). Pior caso: O(N) (se houver muitas colisões de hash).
*   **Frente:** Qual é a complexidade de tempo de ordenar um array usando Merge Sort?
*   **Verso:** O(N log N) tanto para o caso médio quanto para o pior. A complexidade de espaço é O(N).

Crie um baralho dedicado para "Complexidades Big O" e revise-o diariamente.

## 2. Reconhecendo Padrões de Algoritmos

Em vez de tentar memorizar soluções exatas de código para 500 problemas diferentes, use flashcards para memorizar **padrões**. Depois de reconhecer o padrão, você pode escrever o código.

**Como criar os flashcards:**
*   **Frente:** Gatilho do padrão: "Encontrar o caminho mais curto em um grafo não ponderado."
*   **Verso:** Busca em Largura (BFS - Breadth-First Search) usando uma Fila (Queue).
*   **Frente:** Gatilho do padrão: "Encontrar todas as combinações ou permutações de um array."
*   **Verso:** Backtracking / Busca em Profundidade (DFS - Depth-First Search) usando recursão.
*   **Frente:** Gatilho do padrão: "Encontrar o subarray de soma máxima de um tamanho fixo K."
*   **Verso:** Técnica de Janela Deslizante (Sliding Window).

## 3. Vocabulário e Trade-offs de System Design

As entrevistas de design de sistemas exigem que você pondere diferentes compensações (trade-offs) arquitetônicas. Os flashcards são perfeitos para memorizar os prós e os contras de diferentes tecnologias.

**Como criar os flashcards:**
*   **Frente:** SQL vs. NoSQL: Quando você deve escolher NoSQL?
*   **Verso:** 1. Quando os dados não são estruturados ou não têm esquema. 2. Quando você precisa de dimensionamento horizontal rápido (sharding). 3. Para prototipagem rápida.
*   **Frente:** Qual é a diferença entre Long Polling, WebSockets e Server-Sent Events (SSE)?
*   **Verso:** (Liste as definições e o caso de uso específico para cada um, como o uso de WebSockets para um aplicativo de bate-papo em tempo real).

## 4. Sintaxe e Peculiaridades Específicas da Linguagem

Em uma entrevista, você não tem acesso ao preenchimento automático da sua IDE ou ao StackOverflow. Você precisa conhecer perfeitamente a sintaxe da linguagem escolhida (Python, Java, C++, etc.).

*   **Frente (Python):** Como você ordena um dicionário por seus valores em ordem decrescente?
*   **Verso:** `sorted(my_dict.items(), key=lambda x: x[1], reverse=True)`

## Por que usar o Flashcards World para preparação de código?

*   **Realce de sintaxe:** Você pode adicionar facilmente trechos de código aos seus flashcards usando a integração Markdown.
*   **Multiplataforma:** Revise as notações Big O no seu celular enquanto vai para o trabalho ou escola.
*   **Repetição Espaçada:** Nosso algoritmo garante que você revise as perguntas de design de sistemas mais difíceis com mais frequência do que a sintaxe básica que você já conhece.

Pare de reler passivamente o livro "Cracking the Coding Interview". Comece a relembrar ativamente as informações com flashcards e entre na sua próxima entrevista técnica com confiança.
