Recrutement
Analyser l’efficacité du code

Définition

Capacité d’analyser et d’améliorer le code pour qu’il fonctionne avec une complexité optimale en créant des systèmes qui stockent et transmettent efficacement les données.

Pourquoi est-ce important chez Palantir ?

La performance de nos logiciels est essentielle. Nos systèmes centraux doivent organiser les données de manière rationnelle et permettre des requêtes efficaces. Divers services accèdent à nos systèmes centraux en exécutant des algorithmes qui extraient des informations à partir de volumes de données importants. Nos systèmes frontaux fournissent différents types de visualisations en temps réel. Il est impératif que le code et les données soient aussi efficaces que possible pour assurer la satisfaction des utilisateurs.

Les ingénieurs de Palantir doivent déterminer les composants critiques pour la performance d’un grand système et ceux où nous pouvons faire des compromis. Quand répliquer les données sous plusieurs formats optimisés pour des types de requêtes différents ? Quand optimiser la gestion de l’espace de stockage ? Comment tirer parti des serveurs à très haute mémoire en conservant une partie des données en cache pour un accès rapide ? Quelles données conserver ? Comment les synchroniser ? Et comment y accéder de la manière la plus efficace possible ? Comment détecter et optimiser les goulots d’étranglement ? Quand l’optimisation du temps processeur est-elle critique et quand les E/S de performance sont-elles limitées ?

Comment se préparer

Maîtrisez les principes fondamentaux, mais gardez les contraintes du monde réel à l’esprit. Quelques conseils :

  • Mettez de l’ordre dans votre notation O. Sachez calculer correctement l’efficacité des algorithmes et déterminez comment les performances changent en fonction des différentes valeurs de la fonction O. Pratiquez avec des algorithmes existants et des contenus d’apprentissage.
  • Alors que la complexité temporelle est généralement la plus importante, ne négligez jamais la complexité spatiale et les interactions entre les deux. Essayez de déterminer quand l’introduction de la complexité spatiale peut être avantageuse pour optimiser le temps et quand elle n’est qu’une surcharge inutile.
  • Ne perdez pas de vue les applications réelles des algorithmes. Quel est l’impact pratique d’une optimisation qui ne change pas l’ordre de la complexité ? Quels sont les vrais compromis de performance dans un système à composants multiples ? Quels sont les meilleurs et les pires scénarios réalistes ? Et les scénarios moyens ? Et comment se comparent-ils aux situations théoriques ?