RecommandéCareerTous niveaux

Niveau 5 : Entretiens et Tests Techniques

3-4 semaines
Niveau Tous niveaux
Career
EntretiensSQLPythonPipeline DesignTests Techniques

🎯 Objectifs d'Apprentissage

Préparation Entretiens

Maîtriser les questions techniques courantes

Tests Pratiques

Résoudre des problèmes en temps limité

SQL Avancé

Requêtes complexes et optimisations

Pipeline Design

Concevoir des architectures robustes

Communication

Expliquer ses choix et solutions

Best Practices

Standards de l'industrie

📚 Sujets d'Entretien

🗄️

SQL

Requêtes complexes et optimisations

Window functions
CTEs
Performance tuning
🐍

Python

Code propre et efficace

Data structures
Algorithms
Testing
🏗️

System Design

Architectures scalables

Microservices
Data pipelines
Caching

Data Engineering

Concepts et outils

ETL/ELT
Streaming
Data quality

❓ Questions Fréquentes

Comment optimiser une requête SQL lente ?

Analyser le plan d'exécution, créer des index appropriés, restructurer la requête

EXPLAINIndexJOIN optimization

Comment gérer la cohérence des données dans un système distribué ?

Utiliser des patterns comme SAGA, Event Sourcing, ou des modèles de cohérence appropriés

SAGAEvent SourcingConsistency models

Comment concevoir un pipeline de données pour traiter 1TB par jour ?

Partitionnement, parallélisme, monitoring, et gestion des erreurs

PartitioningParallel processingMonitoring

🗄️ Exemples SQL

Analyse des Ventes E-commerce

Requête SQL Complexe avec Window Functions

1-- Exercice : Analyse des Ventes E-commerce
2-- Calcul des métriques de vente par mois pour 2024
3
4SELECT 
5    DATE_FORMAT(o.order_date, '%Y-%m') as month,
6    COUNT(DISTINCT o.order_id) as total_orders,
7    SUM(o.quantity * o.unit_price) as total_revenue,
8    ROUND(SUM(o.quantity * o.unit_price) / COUNT(DISTINCT o.order_id), 2) as avg_order_value,
9    COUNT(DISTINCT o.user_id) as unique_customers,
10    -- Window function pour calculer la croissance mensuelle
11    LAG(SUM(o.quantity * o.unit_price)) OVER (ORDER BY DATE_FORMAT(o.order_date, '%Y-%m')) as prev_month_revenue,
12    ROUND(
13        (SUM(o.quantity * o.unit_price) - LAG(SUM(o.quantity * o.unit_price)) OVER (ORDER BY DATE_FORMAT(o.order_date, '%Y-%m'))) 
14        / LAG(SUM(o.quantity * o.unit_price)) OVER (ORDER BY DATE_FORMAT(o.order_date, '%Y-%m')) * 100, 2
15    ) as revenue_growth_pct
16FROM orders o
17WHERE o.order_date >= '2024-01-01' 
18    AND o.order_date < '2025-01-01'
19    AND o.status = 'completed'
20GROUP BY DATE_FORMAT(o.order_date, '%Y-%m')
21ORDER BY month;

🐍 Exemples Python

Pipeline ETL Robuste

Pipeline ETL avec Gestion d'Erreurs

1import pandas as pd
2from sqlalchemy import create_engine
3import logging
4from datetime import datetime, timedelta
5from typing import Dict, List, Optional
6
7class DataPipelineOrchestrator:
8    """
9    Pipeline ETL robuste pour traitement de données e-commerce
10    Utilisé dans les entretiens pour tester la conception de systèmes
11    """
12    
13    def __init__(self, source_config: Dict, target_config: Dict):
14        self.source_engine = create_engine(source_config['connection_string'])
15        self.target_engine = create_engine(target_config['connection_string'])
16        self.logger = self._setup_logger()
17        
18    def _setup_logger(self) -> logging.Logger:
19        logger = logging.getLogger(__name__)
20        logger.setLevel(logging.INFO)
21        handler = logging.StreamHandler()
22        formatter = logging.Formatter(
23            '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
24        )
25        handler.setFormatter(formatter)
26        logger.addHandler(handler)
27        return logger
28    
29    def extract_daily_orders(self, date: str) -> pd.DataFrame:
30        """Extract des commandes pour une date donnée"""
31        query = '''
32        SELECT 
33            o.order_id,
34            o.user_id,
35            o.product_id,
36            o.quantity,
37            o.unit_price,
38            o.order_date,
39            o.region,
40            p.category,
41            p.brand,
42            u.user_type
43        FROM orders o
44        JOIN products p ON o.product_id = p.product_id
45        JOIN users u ON o.user_id = u.user_id
46        WHERE DATE(o.order_date) = %s
47            AND o.status = 'completed'
48        '''
49        
50        try:
51            df = pd.read_sql_query(query, self.source_engine, params=[date])
52            self.logger.info(f"Extracted {len(df)} orders for {date}")
53            return df
54        except Exception as e:
55            self.logger.error(f"Failed to extract data for {date}: {e}")
56            raise

💡 Conseils pour l'Entretien

Avant l'Entretien

  • Réviser les concepts fondamentaux
  • Pratiquer le code sur papier
  • Préparer des questions pour l'entreprise

Pendant l'Entretien

  • Clarifier les exigences
  • Expliquer votre raisonnement
  • Demander des clarifications

📚 Prochaines Étapes

Félicitations ! Vous avez terminé le Niveau 5. Vous êtes maintenant prêt à passer au niveau suivant.