Existe-t-il de bons livres pour les questions d’entretien sur la conception et l’architecture des logiciels ?


Réponse courte:

Grokking the System Design Interview est une excellente ressource. Il a un bon ensemble de questions sur la conception de systèmes. Les posts suivants ont également été très utiles :

  • Comment NE PAS concevoir Netflix dans votre entretien de conception de système de 45 minutes ?
  • Anatomie d'un entretien de conception de système

Long answer:

J'ai passé des centaines d'entretiens de conception de système (SDI) au cours des dernières années et, tout comme les entretiens de codage, les candidats qui n'ont pas passé de temps à se préparer aux SDI obtiennent le plus souvent de mauvais résultats. Cela prend encore plus d'importance lorsque vous passez des entretiens dans des entreprises de pointe comme Google, Facebook ou Amazon. Dans ces entreprises, si un candidat n'obtient pas des résultats supérieurs à la moyenne, ses chances d'obtenir une offre sont limitées. De plus, une bonne performance lors de ces entretiens se traduit toujours par une meilleure offre (financièrement), puisque votre performance reflète votre capacité à travailler avec des systèmes complexes.

Pour les IDS, une chose extrêmement importante est de connaître les compromis entre les différentes décisions de conception que vous prenez. Par exemple, vous devez savoir, quel schéma de partitionnement des données convient le mieux à votre système ou à quelle couche vous pouvez introduire un cache pour accélérer les choses. Discuter de ces options pendant l'entretien est l'aspect le plus important que les intervieweurs recherchent chez un candidat et, pour vous y préparer, vous devez étudier de multiples problèmes de conception.

Récemment, lorsque j'ai parcouru Grokking the System Design Interview, j'ai trouvé que c'était une ressource assez raisonnable pour les IDS. Il aborde un énorme ensemble de problèmes de conception (comme Dropbox, Netflix, Yelp, Uber, etc.) et possède une section utile qui se concentre sur les concepts de base des systèmes évolutifs.

Compte tenu de cela, permettez-moi de recommander quelques autres choses pour les IDS :

a. Familiarize yourself with distributed systems concepts like Caching, Data Partitioning, Consistent Hashing, Load Balancing, Redundancy and Replication, CAP Theorem, etc.

b. Practice a few system design problems:

  • Designing a URL Shortening service like TinyURL
  • Designing Instagram
  • Designing Twitter
  • Designing Dropbox
  • Designing Youtube
  • Designing Typeahead Suggestion
  • Designing Facebook’s Newsfeed
  • Designing Yelp
  • Designing Uber

c. Follow a step by step approach to attack a system design problem in an interview:

Step 1: Requirements clarifications: Always ask questions to find the exact scope of the problem you are solving.

Step 2: System interface definition: Define what APIs are expected from the system. This’ll also ensure if you haven’t gotten any requirement wrong.

Step 3: Back-of-the-envelope estimation: C'est toujours une bonne idée d'estimer l'échelle du système que vous allez concevoir.

Etape 4 : Définir le modèle de données : Bien que cela ne soit pas nécessaire au début, cela clarifiera la façon dont les données circuleront entre les différents composants du système et, plus tard, vous guidera également vers le partitionnement des données.

Étape 5 : Conception de haut niveau : Dessinez un schéma fonctionnel avec 5-6 cases représentant les composants de base de votre système.

Étape 6 : Conception détaillée des composants : Creusez plus profondément dans 2-3 composants ; les commentaires des interviewers devraient toujours vous guider vers les parties du système qu'il veut que vous expliquiez davantage.

Étape 7 : Goulets d'étranglement : Essayez de discuter d'autant de goulets d'étranglement que possible, et des différentes approches pour les atténuer.

J'espère que cela vous a aidé ! Je serai heureux d'entendre vos commentaires.