20 Questions d’entretien des développeurs iOS

Se préparer pour votre entretien iOS

Le grand jour approche. Que ce soit un entretien téléphonique, en ligne ou en personne, c’est toujours un peu stressant. Donc, pour soulager le stress, vous avez fait un travail de préparation – terminé les devoirs sur l’entreprise avec laquelle vous interviewez, traqué le responsable du recrutement et la moitié de l’équipe d’ingénierie de l’entreprise de votre choix sur linkedin & github, vous avez brossé certaines des compétences et connaissances que vous n’avez pas utilisées depuis un moment – vous êtes prêt à partir.

Mais en suivant la devise des NAVY Seals des États-Unis « Deux est un et un n’est rien », passons à un autre rafraîchissement rapide pour vous aider à réaliser cette interview iOS. Alors allons-y droit!

Commençons par quelques-unes des questions de base auxquelles j’espère que vous êtes déjà prêt. Ils peuvent sembler évidents, mais vous seriez choqué de voir combien d’ingénieurs ont lamentablement échoué pendant les 12 années que j’ai passées à faire des entretiens techniques.

Questions techniques

Ok, maintenant que nous avons couvert cela, passons aux questions techniques.

Voir ici le slideshare pour toutes les questions d’entretien technique!

Question 1

Sur un constructeur UITableViewCell:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

À quoi sert le reuseIdentifier?

Le reuseIdentifier est utilisé pour indiquer qu’une cellule peut être réutilisée dans un UITableView. Par exemple, lorsque la cellule a la même apparence, mais a un contenu différent. Le UITableView conservera un cache interne de UITableViewCell avec le reuseIdentifier et permettra de les réutiliser lorsque dequeueReusableCellWithIdentifier: est appelé. En réutilisant les cellules de la table, les performances de défilement de la vue de table sont meilleures car de nouvelles vues n’ont pas besoin d’être créées.

Question 2

Expliquer la différence entre les propriétés synthétisées atomiques et non atomiques?

Atomique et non atomique fait référence à la question de savoir si les setters/getters d’une propriété liront et écriront des valeurs atomiquement dans la propriété. Lorsque le mot-clé atomique est utilisé sur une propriété, tout accès à celle-ci sera « synchronisé ». Par conséquent, un appel au getter sera garanti pour renvoyer une valeur valide, mais cela entraîne une petite pénalité de performance. Par conséquent, dans certaines situations, nonatomic est utilisé pour fournir un accès plus rapide à une propriété, mais il y a un risque qu’une condition de concurrence fasse en sorte que la propriété soit nulle dans de rares circonstances (lorsqu’une valeur est définie à partir d’un autre thread et que l’ancienne valeur a été libérée de la mémoire mais que la nouvelle valeur n’a pas encore été entièrement affectée à l’emplacement en mémoire de la propriété).

Question 3

Expliquer la différence entre copier et conserver?

Conserver un objet signifie que le nombre de rétention augmente d’un. Cela signifie que l’instance de l’objet sera conservée en mémoire jusqu’à ce que son compte de rétention tombe à zéro. La propriété stockera une référence à cette instance et partagera la même instance avec toute autre personne qui l’a également conservée. Copier signifie que l’objet sera cloné avec des valeurs en double. Il n’est partagé avec personne d’autre.

Vous voulez réussir votre entretien technique? Planifiez une séance de pratique d’entretien Technique avec un expert maintenant!

Question 4

Qu’est-ce que la méthode swizzling dans l’objectif C et pourquoi l’utiliseriez-vous?

La méthode swizzling permet de commuter l’implémentation d’un sélecteur existant au moment de l’exécution pour une implémentation différente dans une table de répartition des classes. Swizzling vous permet d’écrire du code qui peut être exécuté avant et / ou après la méthode d’origine. Par exemple, peut-être pour suivre le temps d’exécution de la méthode ou pour insérer des instructions de journal

#import "UIViewController+Log.h"@implementation UIViewController (Log) + (void)load { static dispatch_once_t once_token; dispatch_once(&once_token, ^{ SEL viewWillAppearSelector = @selector(viewDidAppear:); SEL viewWillAppearLoggerSelector = @selector(log_viewDidAppear:); Method originalMethod = class_getInstanceMethod(self, viewWillAppearSelector); Method extendedMethod = class_getInstanceMethod(self, viewWillAppearLoggerSelector); method_exchangeImplementations(originalMethod, extendedMethod); }); } - (void) log_viewDidAppear:(BOOL)animated { ; NSLog(@"viewDidAppear executed for %@", ); }@end

Question 5

Quelle est la différence entre les états d’exécution non en cours d’exécution, inactifs, actifs, en arrière-plan et suspendus?

  • Ne fonctionne pas: L’application n’a pas été lancée ou était en cours d’exécution mais a été interrompue par le système.
  • Inactif : L’application s’exécute au premier plan mais ne reçoit actuellement pas d’événements. (Il peut exécuter un autre code cependant.) Une application ne reste généralement que brièvement dans cet état lorsqu’elle passe à un état différent.
  • Actif : L’application s’exécute au premier plan et reçoit des événements. C’est le mode normal pour les applications de premier plan.
  • Arrière-plan: L’application est en arrière-plan et exécute le code. La plupart des applications entrent brièvement dans cet état sur le chemin de la suspension. Cependant, une application qui demande un temps d’exécution supplémentaire peut rester dans cet état pendant un certain temps. De plus, une application lancée directement en arrière-plan entre dans cet état au lieu de l’état inactif.
  • Suspendu: L’application est en arrière-plan mais n’exécute pas de code. Le système déplace automatiquement les applications dans cet état et ne les avertit pas avant de le faire. Lorsqu’elle est suspendue, une application reste en mémoire mais n’exécute aucun code. Lorsqu’une condition de mémoire faible se produit, le système peut purger les applications suspendues sans préavis pour faire plus d’espace pour l’application de premier plan.

Question 6

Qu’est-ce qu’une catégorie et quand est-elle utilisée?

Une catégorie est un moyen d’ajouter des méthodes supplémentaires à une classe sans l’étendre. Il est souvent utilisé pour ajouter une collection de méthodes connexes. Un cas d’utilisation courant consiste à ajouter des méthodes supplémentaires aux classes intégrées dans les frameworks Cocoa. Par exemple, en ajoutant des méthodes de téléchargement asynchrones à la classe UIImage.

Question 7

Pouvez-vous repérer le bogue dans le code suivant et suggérer comment le corriger:

@interface MyCustomController : UIViewController @property (strong, nonatomic) UILabel *alert; @end @implementation MyCustomController - (void)viewDidLoad { CGRect frame = CGRectMake(100, 100, 100, 50); self.alert = initWithFrame:frame]; self.alert.text = @"Please wait..."; ; dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ sleep(10); self.alert.text = @"Waiting over"; } ); } @end 

Toutes les mises à jour de l’interface utilisateur doivent être effectuées sur le thread principal. Dans le code ci-dessus, la mise à jour du texte d’alerte peut ou non se produire sur le thread principal, car la file d’attente de répartition globale ne donne aucune garantie. Par conséquent, le code doit être modifié pour toujours exécuter la mise à jour de l’interface utilisateur sur le thread principal

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ sleep(10); dispatch_async(dispatch_get_main_queue(), ^{ self.alert.text = @"Waiting over"; });}); 

Question 8

Quelle est la différence entre viewDidLoad et viewDidAppear?
Que devez-vous utiliser pour charger des données d’un serveur distant à afficher dans la vue ?

viewDidLoad est appelé lorsque la vue est chargée, que ce soit à partir d’un fichier Xib, d’un storyboard ou créé par programme dans loadView. viewDidAppear est appelé chaque fois que la vue est présentée sur l’appareil. Lequel utiliser dépend du cas d’utilisation de vos données. Si les données sont assez statiques et peu susceptibles de changer, elles peuvent être chargées dans viewDidLoad et mises en cache. Cependant, si les données changent régulièrement, il est préférable d’utiliser viewDidAppear pour les charger. Dans les deux cas, les données doivent être chargées de manière asynchrone sur un thread d’arrière-plan pour éviter de bloquer l’interface utilisateur.

Question 9

De quelles considérations avez-vous besoin lors de l’écriture d’un UITableViewController qui affiche des images téléchargées à partir d’un serveur distant?

C’est une tâche très courante dans iOS et une bonne réponse ici peut couvrir toute une série de connaissances. L’information importante dans la question est que les images sont hébergées à distance et qu’elles peuvent prendre du temps à télécharger, donc quand il demande des « considérations », vous devriez parler de:

  • Téléchargez l’image uniquement lorsque la cellule défile dans la vue, c’est-à-dire lorsque cellForRowAtIndexPath est appelé.
  • Téléchargement de l’image de manière asynchrone sur un thread d’arrière-plan afin de ne pas bloquer l’interface utilisateur afin que l’utilisateur puisse continuer à faire défiler.
  • Lorsque l’image a été téléchargée pour une cellule, nous devons vérifier si cette cellule est toujours dans la vue ou si elle a été réutilisée par une autre donnée. Si elle a été réutilisée, nous devrions jeter l’image, sinon nous devons revenir au thread principal pour changer l’image sur la cellule.

D’autres bonnes réponses parleront de la mise en cache hors ligne des images, en utilisant des images d’espace réservé pendant le téléchargement des images.

Question 10

Qu’est-ce qu’un protocole, comment définissez-vous le vôtre et quand est-il utilisé ?

Un protocole est similaire à une interface de Java. Il définit une liste de méthodes requises et facultatives qu’une classe doit/ peut implémenter si elle adopte le protocole. N’importe quelle classe peut implémenter un protocole et d’autres classes peuvent ensuite envoyer des messages à cette classe en fonction des méthodes de protocole sans qu’elle connaisse le type de la classe.

@protocol MyCustomDataSource- (NSUInteger)numberOfRecords;- (NSDictionary *)recordAtIndex:(NSUInteger)index;@optional- (NSString *)titleForRecordAtIndex:(NSUInteger)index;@end

Un cas d’utilisation courant consiste à fournir une source de données pour UITableView ou UICollectionView.

Question 11

Qu’est-ce que le KVC et le KVO? Donnez un exemple d’utilisation de KVC pour définir une valeur.

KVC signifie Codage Clé-Valeur. C’est un mécanisme par lequel les propriétés d’un objet peuvent être accédées à l’aide de chaînes au moment de l’exécution plutôt que d’avoir à connaître statiquement les noms des propriétés au moment du développement. KVO signifie Observation de la valeur clé et permet à un contrôleur ou à une classe d’observer les modifications d’une valeur de propriété.

Disons qu’il existe une propriété name sur une classe:

@property (nonatomic, copy) NSString *name;

Nous pouvons y accéder en utilisant KVC:

NSString *n = 

Et nous pouvons modifier sa valeur en lui envoyant le message:

Question 12

Que sont les blocs et comment sont-ils utilisés?Les blocs

sont un moyen de définir une seule tâche ou unité de comportement sans avoir à écrire une classe Objective-C entière. Sous les blocs de couverture se trouvent toujours des objets C objectifs. Il s’agit d’une fonctionnalité au niveau du langage qui permet de prendre en charge des techniques de programmation telles que les lambdas et les fermetures dans Objective-C. La création d’un bloc se fait en utilisant la syntaxe ^ { }:

 myBlock = ^{ NSLog(@"This is a block"); }

Il peut être invoqué comme ceci:

myBlock();

C’est essentiellement un pointeur de fonction qui a également une signature qui peut être utilisée pour appliquer la sécurité du type à la compilation et à l’exécution. Par exemple, vous pouvez passer un bloc avec une signature spécifique à une méthode comme celle-ci:

- (void)callMyBlock:(void (^)(void))callbackBlock;

Si vous souhaitez que le bloc reçoive des données, vous pouvez modifier la signature pour les inclure:

- (void)callMyBlock:(void (^)(double, double))block { ... block(3.0, 2.0);}

Question 13

Quels mécanismes iOS fournit-il pour prendre en charge le multi-threading?

  • NSThread crée un nouveau thread de bas niveau qui peut être démarré en appelant la méthode start.
NSThread* myThread = initWithTarget:self selector:@selector(myThreadMainMethod:) object:nil];; 
  • NSOperationQueue permet de créer un pool de threads et de les utiliser pour exécuter NSOperation s en parallèle. NSOperation s peut également être exécuté sur le thread principal en demandant NSOperationQueue pour le mainQueue.
NSOperationQueue* myQueue = init];; ;
  • GCD ou Grand Central Dispatch est une fonctionnalité moderne d’Objective-C qui fournit un riche ensemble de méthodes et d’API à utiliser afin de prendre en charge les tâches multi-threads courantes. GCD fournit un moyen de mettre en file d’attente les tâches à répartir sur le thread principal, une file d’attente concurrente (les tâches sont exécutées en parallèle) ou une file d’attente série (les tâches sont exécutées dans l’ordre FIFO).
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_async(myQueue, ^{ printf("Do some work here.\n");});

Question 14

Quelle est la chaîne des intervenants?

Lorsqu’un événement se produit dans une vue, par exemple un événement tactile, la vue déclenche l’événement sur une chaîne d’objets UIResponder associés au UIView. Le premier UIResponder est le UIView lui-même, s’il ne gère pas l’événement, il continue la chaîne jusqu’à ce que UIResponder gère l’événement. La chaîne comprendra UIViewController s, parent UIView s et leurs UIViewController s associés, si aucun de ceux-ci ne gère l’événement, il est demandé au UIWindow s’il peut le gérer et enfin si cela ne gère pas l’événement, le UIApplicationDelegate est demandé.

Si vous avez l’occasion de dessiner celui-ci, cela vaut la peine d’impressionner l’intervieweur:

 entrez la description de l'image ici

Question 15

Quelle est la différence entre l’utilisation d’un délégué et d’une notification?

Les deux sont utilisés pour envoyer des valeurs et des messages aux parties intéressées. Un délégué est pour la communication individuelle et est un modèle promu par Apple. Dans la délégation, les événements de levée de classe auront une propriété pour le délégué et s’attendront généralement à ce qu’il implémente certains protocol. La classe délégante peut alors appeler les méthodes du protocole _delegate_s.La notification

permet à une classe de diffuser des événements sur l’ensemble de l’application à toutes les parties intéressées. La classe de diffusion n’a pas besoin de savoir quoi que ce soit sur les auditeurs pour cet événement, la notification est donc très utile pour aider à découpler les composants d’une application.

 postNotificationName:@"TestNotification" object:self];

Question 16

Quelle est votre préférence lors de l’écriture des interfaces utilisateur? Fichiers Xib, Storyboards ou programmatiques UIView ?

Il n’y a pas de bonne ou de mauvaise réponse à cela, mais c’est un excellent moyen de voir si vous comprenez les avantages et les défis de chaque approche. Voici les réponses communes que j’entends:

  • Les storyboards et les Xib sont parfaits pour produire rapidement des UI qui correspondent à une spécification de conception. Ils sont également très faciles pour les chefs de produits à voir visuellement à quelle distance se trouve un écran.
  • Les storyboards sont également parfaits pour représenter un flux à travers une application et permettre une visualisation de haut niveau d’une application entière.
  • Les inconvénients de Storyboard sont que dans un environnement d’équipe, ils sont difficiles à travailler en collaboration car il s’agit d’un seul fichier et la fusion devient difficile à gérer.
  • Les storyboards et les fichiers Xib peuvent également souffrir de duplication et devenir difficiles à mettre à jour. Par exemple, si tous les boutons doivent être identiques et ont soudainement besoin d’un changement de couleur, cela peut être un processus long / difficile de le faire à travers les storyboards et les xib.
  • La construction programmatique de UIView peut être verbeuse et fastidieuse, mais elle peut permettre un plus grand contrôle et également une séparation et un partage plus faciles du code. Ils peuvent également être plus facilement testés à l’unité.

La plupart des développeurs proposeront une combinaison des 3 où il est logique de partager du code, puis des fichiers UIView s ou Xib réutilisables.

Question 17

Comment stockeriez-vous en toute sécurité des données d’utilisateur privées hors ligne sur un appareil? Quelles autres bonnes pratiques de sécurité devraient être adoptées ?

Encore une fois, il n’y a pas de bonne réponse à cela, mais c’est un excellent moyen de voir à quel point une personne a creusé la sécurité iOS. Si vous interviewez une banque, je m’attends presque certainement à ce que quelqu’un en sache quelque chose, mais toutes les entreprises doivent prendre la sécurité au sérieux, alors voici la liste idéale de sujets que je m’attendrais à entendre dans une réponse:

  • Si les données sont extrêmement sensibles, elles ne doivent jamais être stockées hors ligne sur l’appareil car tous les appareils sont fissurables.
  • Le porte-clés est une option pour stocker des données en toute sécurité. Cependant, son cryptage est basé sur le code PIN de l’appareil. Les utilisateurs ne sont pas obligés de définir un code PIN, de sorte que dans certaines situations, les données peuvent même ne pas être cryptées. De plus, le code PIN des utilisateurs peut être facilement piraté.
  • Une meilleure solution consiste à utiliser quelque chose comme SQLCipher qui est une base de données SQLite entièrement cryptée. La clé de chiffrement peut être appliquée par l’application et séparée du code PIN de l’utilisateur.

Les autres bonnes pratiques de sécurité sont:

  • Communiquez uniquement avec des serveurs distants via SSL/HTTPS.
  • Si possible, implémentez l’épinglage de certificat dans l’application pour empêcher les attaques man-in-the-middle sur le WiFi public.
  • Effacez les données sensibles de la mémoire en les écrasant.
  • Assurez-vous que toutes les validations des données soumises sont également exécutées côté serveur.

Question 18

Qu’est-ce que MVC et comment est-il implémenté dans iOS?
Quels sont les pièges que vous avez rencontrés avec cela? Existe-t-il des alternatives au MVC?

MVC signifie Modèle, Vue, Contrôleur. C’est un modèle de conception qui définit comment séparer la logique lors de la mise en œuvre des interfaces utilisateur. Dans iOS, Apple fournit UIView comme classe de base pour tous les _View_s, UIViewController est fourni pour prendre en charge le contrôleur qui peut écouter les événements dans une vue et mettre à jour la vue lorsque les données changent. Le modèle représente des données dans une application et peut être implémenté en utilisant n’importe quel NSObject, y compris des collections de données telles que NSArray et NSDictionary.

Certains des pièges que les gens rencontrent sont gonflés UIViewController et ne séparent pas le code en classes au-delà du format MVC. Je recommande fortement de lire quelques solutions à cela:

  • https://www.objc.io/issues/1-view-controllers/lighter-view-controllers/
  • https://speakerdeck.com/trianglecocoa/unburdened-viewcontrollers-by-jay-thrash
  • https://programmers.stackexchange.com/questions/177668/how-to-avoid-big-and-clumsy-uitableviewcontroller-on-ios

En termes d’alternatives, c’est assez ouvert. L’alternative la plus courante est MVVM utilisant ReactiveCocoa, mais d’autres incluent VIPER et utilisant du code Réactif fonctionnel.

Question 19

Un chef de produit de votre entreprise signale que l’application plante. Que fais-tu?

C’est une excellente question dans n’importe quel langage de programmation et est vraiment conçue pour voir comment vous résolvez le problème. On ne vous donne pas beaucoup d’informations, mais certaines interviews vous donneront plus de détails sur le problème au fur et à mesure. Commencez simplement:

  • obtenez les étapes exactes pour le reproduire.
  • découvrez l’appareil, version iOS.
  • ont-ils la dernière version?
  • récupère les journaux de périphérique si possible.

Une fois que vous pouvez le reproduire ou avoir plus d’informations, commencez à utiliser l’outillage. Disons qu’il se bloque à cause d’une fuite de mémoire, je m’attendrais à voir quelqu’un suggérer d’utiliser l’outil de fuite d’instruments. Un candidat vraiment impressionnant commencerait à parler de l’écriture d’un test unitaire qui reproduit le problème et le débogage à travers celui-ci.

D’autres variantes de cette question incluent l’interface utilisateur lente ou le gel de l’application. Encore une fois, l’idée est de voir comment vous résolvez le problème, quels outils connaissez-vous qui pourraient vous aider et savez-vous comment les utiliser correctement.

Question 20

Qu’est-ce que la mise en page automatique? Qu’est-ce que cela signifie lorsqu’une contrainte est « cassée » par iOS?

AutoLayout est un moyen de disposer UIView s en utilisant un ensemble de contraintes qui spécifient l’emplacement et la taille en fonction des autres vues ou en fonction de valeurs explicites. La mise en page automatique facilite la conception d’écrans qui redimensionnent et mettent mieux en page leurs composants en fonction de la taille et de l’orientation d’un écran. _Constraint_s comprennent:

  • définir la distance horizontale / verticale entre 2 vues
  • définir la hauteur / largeur comme un rapport par rapport à une vue différente
  • une largeur / hauteur / espacement peut être une valeur statique explicite

Parfois, les contraintes entrent en conflit les unes avec les autres. Par exemple, imaginez un UIView qui a 2 contraintes de hauteur: l’une dit faire le UIView 200px de haut, et la seconde dit faire la hauteur deux fois la hauteur d’un bouton. Si le runtime iOS ne peut pas satisfaire ces deux contraintes, il ne doit en choisir qu’une. L’autre est alors signalé comme étant « cassé » par iOS.

Questions standard

« Parlez-moi de vous. »

C’est VRAIMENT délicat! Tant de gens lisent leur CV à haute voix (oubliant que je le regarde bien!), énumérant toutes les classes qu’ils ont suivies au collège, tous les postes qu’ils ont jamais occupés (et cela s’ajoute vraiment pour les ingénieurs de niveau supérieur) et toutes les responsabilités (qui sont souvent les mêmes dans 2 ou 3 entreprises dans lesquelles une personne en particulier a travaillé. Donc, 20 minutes plus tard, je ne sais toujours rien de nouveau / en dehors du CV sur le candidat, nous sommes à 20 minutes, et d’ici là, je crois qu’il pourrait aussi bien s’agir de robots (et les robots ont tendance à ne pas très bien s’intégrer aux équipes dynamiques).

Alors faites-vous (et le responsable du recrutement) une faveur en préparant un argumentaire d’ascenseur de 2 minutes de votre parcours – restez simple, concis et bref, puis ajoutez quelque chose de personnel à la fin. Aimez-vous courir? Entraînez-vous l’équipe de football de votre fille? Fan de Star Wars ? Ajouter un peu de personnalité est un excellent brise-glace, et fera une transition incroyable dans la partie la plus profonde de l’interview.

« Décrivez un problème intéressant et comment vous l’avez résolu. »

Vos chances d’entendre celui-ci sont essentiellement de 99%, vous feriez donc mieux d’avoir une excellente réponse prête pour eux! Voici quelques conseils : pensez à un projet particulièrement étonnant dont vous êtes fier. Compris ? Très bien! Maintenant, prenez un morceau de papier et résumez-le en 5 points.
1ère puce – très brève histoire des circonstances derrière le projet
2ème puce – la nature du projet lui-même
3ème puce – les problèmes que vous avez rencontrés en les résolvant
4ème bulle – comment avez-vous résolu les difficultés ci-dessus
5ème puce – qu’en avez-vous appris.

Maintenant, trouvez quelqu’un qui écoutera (un ami, un partenaire, un collègue) et demandez-lui si l’histoire a du sens (moins tous les aspects techniques si la personne avec qui vous parlez n’est pas votre pair). C’est un excellent moyen de valider si l’histoire se tient ensemble.

Vous seriez choqué combien de fois j’ai entendu des choses comme « et puis je suis allé voir John, et il a utilisé l’outil qu’il a créé pour supprimer le bug critique qui alors …… ». Qui est Tom ? Votre manager ? Stagiaire ? Peer ? Pourquoi êtes-vous allé le voir de tous les membres de votre compagnie? Quel est cet outil magique qu’il a mis en place ? Quel bogue critique a-t-il exactement supprimé et comment? Quel en a été le résultat ?

Vous avez l’idée 😃

Bonus supplémentaire? Vous avez maintenant 5 puces que vous pouvez utiliser comme une feuille de triche pendant votre entretien sans ressembler à CE gars qui lit son CV à haute voix.

Passons maintenant aux questions ÉTRANGES que certains gestionnaires d’embauche aiment poser pour vous faire oublier votre jeu.

  • Comment testeriez-vous un grille-pain?
  • Combien de stylos pouvez-vous insérer dans un avion?
  • Combien y a-t-il de fenêtres à San Francisco ?
  • Combien de balles de golf peuvent tenir dans un autobus scolaire?
  • Combien de Big Mac McDonald’s vend-il chaque année aux États-Unis ?

La liste s’allonge encore et encore. Bien que cela n’ait rien à voir avec vos compétences techniques, cela permet de vérifier comment vous gérez les balles courbes et de voir si vous êtes capable de résoudre les problèmes étape par étape. Dans la plupart des cas, il n’y a pas de réponses parfaites à ce type de questions (bien que vous puissiez les google pour votre tranquillité d’esprit). Tout dépend de la façon dont vous expliquez votre logique à votre intervieweur.

Voici la réponse à la question balles de golf de Michael Beauchamp, pour vous faire une idée de ce dont je parle:

Je pense qu’un autobus scolaire standard mesure environ 8 pieds de large sur 6 pieds de haut sur 20 pieds de long – ce n’est qu’une supposition basée sur les milliers d’heures que j’ai passées derrière des autobus scolaires alors que la circulation dans toutes les directions est arrêtée.

Cela signifie 960 pieds cubes et comme il y a 1728 pouces cubes dans un pied coudée, cela signifie environ 1,6 million de pouces cubes.

Je calcule le volume d’une balle de golf à environ 2,5 pouces cubes (4/3 * pi*.85) comme.85 pouces est le rayon d’une balle de golf.

Divisez ces 2,5 pouces cubes en 1.6 millions et vous obtenez 660 000 balles de golf. Cependant, comme il y a des sièges et de la merde qui prennent de la place et que la forme sphérique d’une balle de golf signifie qu’il y aura un espace vide considérable entre eux une fois empilés, je vais arrondir à 500 000 balles de golf.

Voir? Étape par étape. Et soudain, c’est une question relativement simple et logique. Restez calme, et au lieu d’essayer de trouver un numéro instantané dans votre tête, accompagnez l’intervieweur dans votre train de pensées avec vous.

Besoin d’une pratique réelle? N’hésitez pas à planifier un entretien fictif avec Matt, qui fait des entretiens techniques depuis 12 ans, et demandez ses commentaires!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.