20 iOS Developer Interview Questions

Prepararsi per la tua intervista iOS

Il grande giorno sta arrivando. Che si tratti di un telefono, online o di persona intervista è sempre un po ‘ stressante. Quindi, per alleviare lo stress che hai fatto un po ‘di lavoro di preparazione – completato i compiti sulla società con cui stai intervistando, pedinato il gestore assumente e metà del team di ingegneri della compagnia di tua scelta su linkedin & github, hai spazzolato su alcune delle abilità e conoscenze che non hai usato in un po’ – sei pronto ad andare.

Ma seguendo US Navy Seals motto “Due è uno e uno è nessuno” andiamo attraverso un altro rapido aggiornamento per aiutarvi asso che iOS intervista. Quindi andiamo a destra in esso!

Iniziamo con alcune delle domande di base che spero tu sia già pronto per. Potrebbero sembrare ovvio, ma si sarebbe scioccato quanti ingegneri fallito miseramente a loro durante i 12 anni ho fatto interviste tecniche.

Domande tecniche

Ok, ora che abbiamo quello coperto, saltiamo nelle domande tecniche.

Vedi qui per lo slideshare per tutte le domande di intervista tecnica!

Domanda 1

Su un costruttore UITableViewCell:

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

Per che cosa si usa reuseIdentifier?

Il reuseIdentifierviene utilizzato per indicare che una cella può essere riutilizzata in un UITableView. Ad esempio quando la cella ha lo stesso aspetto, ma ha contenuti diversi. UITableView manterrà una cache interna di UITableViewCell con reuseIdentifier e consentirà loro di essere riutilizzati quando viene chiamato dequeueReusableCellWithIdentifier:. Riutilizzando la cella della tabella, le prestazioni di scorrimento di tableview sono migliori perché non è necessario creare nuove viste.

Domanda 2

Spiega la differenza tra proprietà sintetizzate atomiche e non atomiche?

Atomico e non atomico si riferisce al fatto che i setter / getter per una proprietà leggeranno e scriveranno atomicamente i valori nella proprietà. Quando la parola chiave atomic viene utilizzata su una proprietà, qualsiasi accesso ad essa verrà “sincronizzato”. Pertanto una chiamata al getter sarà garantita per restituire un valore valido, tuttavia questo viene fornito con una piccola penalità di prestazioni. Quindi in alcune situazioni nonatomic viene utilizzato per fornire un accesso più rapido a una proprietà, ma c’è una possibilità di una condizione di competizione, causando la struttura ad essere nullo in rare circostanze, quando un valore viene impostato da un altro thread e il vecchio valore è stato rilasciato dalla memoria, ma il nuovo valore non è ancora stato completamente ricevuto per la posizione in memoria per la struttura).

Domanda 3

Spiega la differenza tra copia e conservazione?

Mantenere un oggetto significa che il conteggio di conservazione aumenta di uno. Ciò significa che l’istanza dell’oggetto verrà mantenuta in memoria fino a quando il conteggio di conservazione non scende a zero. La proprietà memorizzerà un riferimento a questa istanza e condividerà la stessa istanza con chiunque altro l’abbia conservata. Copia significa che l’oggetto verrà clonato con valori duplicati. Non è condiviso con nessun altro.

Vuoi fare il tuo colloquio tecnico? Pianificare una sessione di pratica intervista tecnica con un esperto ora!

Domanda 4

Qual è il metodo swizzling in Objective C e perché lo useresti?

Metodo swizzling consente l’implementazione di un selettore esistente da commutare in fase di runtime per un’implementazione diversa in una tabella di spedizione di classi. Swizzling consente di scrivere codice che può essere eseguito prima e/o dopo il metodo originale. Ad esempio, forse per tenere traccia del tempo di esecuzione del metodo o per inserire istruzioni di registro

#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

Domanda 5

Qual è la differenza tra stati di esecuzione non in esecuzione, inattivi, attivi, in background e sospesi?

  • Non in esecuzione: L’applicazione non è stato lanciato o era in esecuzione, ma è stato terminato dal sistema.
  • Inattivo: l’app è in esecuzione in primo piano ma al momento non riceve eventi. (Potrebbe essere in esecuzione altro codice però.) Un’app di solito rimane in questo stato solo brevemente mentre passa a uno stato diverso.
  • Attivo: l’app è in esecuzione in primo piano e sta ricevendo eventi. Questa è la modalità normale per le app in primo piano.
  • Sfondo: L’applicazione è in background e l’esecuzione di codice. La maggior parte delle applicazioni entrano in questo stato brevemente nel loro modo di essere sospeso. Tuttavia, un’app che richiede un tempo di esecuzione aggiuntivo può rimanere in questo stato per un periodo di tempo. Inoltre, un’app lanciata direttamente in background entra in questo stato invece dello stato inattivo.
  • Sospeso: l’app è in background ma non sta eseguendo il codice. Il sistema sposta automaticamente le app in questo stato e non le notifica prima di farlo. Durante la sospensione, un’app rimane in memoria ma non esegue alcun codice. Quando si verifica una condizione di memoria insufficiente, il sistema può eliminare le app sospese senza preavviso per creare più spazio per l’app in primo piano.

Domanda 6

Che cos’è una categoria e quando viene utilizzata?

Una categoria è un modo per aggiungere metodi aggiuntivi a una classe senza estenderla. Viene spesso utilizzato per aggiungere una raccolta di metodi correlati. Un caso d’uso comune consiste nell’aggiungere metodi aggiuntivi alle classi incorporate nei framework Cocoa. Ad esempio, l’aggiunta di metodi di download asincroni alla classe UIImage.

Domanda 7

Puoi individuare il bug nel seguente codice e suggerire come risolverlo:

@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 

Tutti gli aggiornamenti dell’interfaccia utente devono essere eseguiti sul thread principale. Nel codice sopra l’aggiornamento al testo di avviso può o non può accadere sul thread principale, poiché la coda di spedizione globale non offre garanzie . Pertanto il codice dovrebbe essere modificato per eseguire sempre l’aggiornamento dell’interfaccia utente sul thread principale

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

Domanda 8

Qual è la differenza tra viewDidLoad e viewDidAppear?
Quale si dovrebbe usare per caricare i dati da un server remoto da visualizzare nella vista?

viewDidLoadviene chiamato quando la vista viene caricata, sia da un file Xib, storyboard o creato a livello di codice in loadView. viewDidAppear viene chiamato ogni volta che la vista viene presentata sul dispositivo. Quale usare dipende dal caso d’uso per i tuoi dati. Se i dati sono abbastanza statici e non è probabile che cambino, possono essere caricati in viewDidLoad e memorizzati nella cache. Tuttavia, se i dati cambiano regolarmente, utilizzare viewDidAppear per caricarlo è meglio. In entrambe le situazioni, i dati devono essere caricati in modo asincrono su un thread in background per evitare di bloccare l’interfaccia utente.

Domanda 9

Quali considerazioni hai bisogno quando scrivi un UITableViewController che mostra le immagini scaricate da un server remoto?

Questo è un compito molto comune in iOS e una buona risposta qui può coprire tutta una serie di conoscenze. L’importante informazione nella domanda è che le immagini sono ospitate in remoto e potrebbero richiedere del tempo per il download, quindi quando chiede “considerazioni”, dovresti parlare di:

  • Scarica l’immagine solo quando la cella viene fatta scorrere in vista, cioè quando viene chiamato cellForRowAtIndexPath.
  • Scaricare l’immagine in modo asincrono su un thread in background in modo da non bloccare l’interfaccia utente in modo che l’utente possa continuare a scorrere.
  • Quando l’immagine è stata scaricata per una cella, dobbiamo verificare se quella cella è ancora nella vista o se è stata riutilizzata da un’altra parte di dati. Se è stato riutilizzato, dovremmo scartare l’immagine, altrimenti dobbiamo tornare al thread principale per cambiare l’immagine sulla cella.

Altre buone risposte continueranno a parlare del caching offline delle immagini, utilizzando le immagini segnaposto mentre le immagini vengono scaricate.

Domanda 10

Che cos’è un protocollo e come si definisce il proprio e quando viene utilizzato?

Un protocollo è simile a un’interfaccia di Java. Definisce un elenco di metodi obbligatori e facoltativi che una classe deve / può implementare se adotta il protocollo. Qualsiasi classe può implementare un protocollo e altre classi possono quindi inviare messaggi a quella classe in base ai metodi del protocollo senza conoscere il tipo di classe.

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

Un caso d’uso comune fornisce un’origine dati per UITableViewo UICollectionView.

Domanda 11

Che cos’è KVC e KVO? Fai un esempio di utilizzo di KVC per impostare un valore.

KVC sta per codifica chiave-valore. È un meccanismo mediante il quale è possibile accedere alle proprietà di un oggetto utilizzando le stringhe in fase di runtime piuttosto che dover conoscere staticamente i nomi delle proprietà in fase di sviluppo. KVO sta per Key-Value Observing e consente a un controller o a una classe di osservare le modifiche a un valore di proprietà.

Diciamo che c’è una proprietà name su una classe:

@property (nonatomic, copy) NSString *name;

Possiamo accedervi usando KVC:

NSString *n = 

E possiamo modificare il suo valore inviandogli il messaggio:

Domanda 12

Cosa sono i blocchi e come vengono utilizzati?

I blocchi sono un modo per definire una singola attività o unità di comportamento senza dover scrivere un’intera classe Objective-C. Sotto le copertine I blocchi sono ancora oggetti Objective C. Sono una funzionalità a livello di linguaggio che consente di supportare tecniche di programmazione come lambda e chiusure in Objective-C. La creazione di un blocco viene eseguita utilizzando la sintassi ^ { } :

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

Può essere invocato in questo modo:

myBlock();

È essenzialmente un puntatore di funzione che ha anche una firma che può essere utilizzata per applicare la sicurezza del tipo in fase di compilazione e runtime. Ad esempio è possibile passare un blocco con una firma specifica a un metodo in questo modo:

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

Se si desidera che al blocco vengano forniti alcuni dati è possibile modificare la firma per includerli:

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

Domanda 13

Quali meccanismi fornisce iOS per supportare il multi-threading?

  • NSThread crea un nuovo thread di basso livello che può essere avviato chiamando il metodo start.
NSThread* myThread = initWithTarget:self selector:@selector(myThreadMainMethod:) object:nil];; 
  • NSOperationQueue consente di creare e utilizzare un pool di thread per eseguire NSOperation s in parallelo. NSOperation s può anche essere eseguito sul thread principale chiedendo NSOperationQueue per mainQueue.
NSOperationQueue* myQueue = init];; ;
  • GCD o Grand Central Dispatch è una funzionalità moderna di Objective-C che fornisce un ricco set di metodi e API da utilizzare per supportare attività multi-threading comuni. GCD fornisce un modo per accodare le attività per l’invio sul thread principale, una coda concorrente (le attività vengono eseguite in parallelo) o una coda seriale (le attività vengono eseguite in ordine FIFO).
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_async(myQueue, ^{ printf("Do some work here.\n");});

Domanda 14

Qual è la catena dei risponditori?

Quando si verifica un evento in una vista, ad esempio un evento touch, la vista attiverà l’evento su una catena di UIResponderoggetti associati a UIView. Il primo UIResponder è UIView stesso, se non gestisce l’evento, continua la catena fino a quando UIResponder gestisce l’evento. La catena includerà UIViewController s, parent UIViews e il loro associato UIViewControllers, se nessuno di questi gestisce l’evento, viene chiesto a UIWindow se può gestirlo e infine se questo non gestisce l’evento, viene chiesto a UIApplicationDelegate.

Se hai l’opportunità di tirarlo fuori, vale la pena farlo per impressionare l’intervistatore:

inserisci qui la descrizione dell'immagine

Domanda 15

Qual è la differenza tra l’utilizzo di un delegato e la notifica?

Entrambi sono utilizzati per l’invio di valori e messaggi alle parti interessate. Un delegato è per la comunicazione one-to-one ed è un modello promosso da Apple. In delegation gli eventi di raccolta della classe avranno una proprietà per il delegato e in genere si aspettano che implementi alcuni protocol. La classe delegante può quindi chiamare i metodi del protocollo _delegate_s.

La notifica consente a una classe di trasmettere eventi in tutta l’applicazione a tutte le parti interessate. La classe broadcasting non ha bisogno di sapere nulla sugli ascoltatori per questo evento, quindi la notifica è molto utile per aiutare a disaccoppiare i componenti in un’applicazione.

 postNotificationName:@"TestNotification" object:self];

Domanda 16

Qual è la tua preferenza quando scrivi UI? File Xib, Storyboard o programmatici UIView?

Non c’è una risposta giusta o sbagliata a questo, ma è un ottimo modo per vedere se comprendi i benefici e le sfide con ogni approccio. Ecco le risposte comuni che sento:

  • Storyboard e Xib sono ottimi per produrre rapidamente UI che corrispondono a specifiche di progettazione. Sono anche molto facili per i product manager per vedere visivamente quanto è lungo uno schermo.
  • Gli Storyboard sono anche ottimi per rappresentare un flusso attraverso un’applicazione e consentire una visualizzazione di alto livello di un’intera applicazione.
  • Gli svantaggi di Storyboard sono che in un ambiente di team sono difficili da lavorare in modo collaborativo perché sono un singolo file e l’unione diventa difficile da gestire.
  • Storyboard e file Xib possono anche soffrire di duplicazione e diventare difficili da aggiornare. Ad esempio, se tutti i pulsanti hanno bisogno di apparire identici e improvvisamente hanno bisogno di un cambiamento di colore, allora può essere un processo lungo/difficile farlo attraverso storyboard e xib.
  • La costruzione a livello di codice di UIViewpuò essere dettagliata e noiosa, ma può consentire un maggiore controllo e anche una più facile separazione e condivisione del codice. Possono anche essere testati più facilmente.

La maggior parte degli sviluppatori proporrà una combinazione di tutti e 3 in cui ha senso condividere il codice, quindi riutilizzare i file UIView o Xib.

Domanda 17

Come archiviare in modo sicuro i dati degli utenti privati offline su un dispositivo? Quali altre best practice di sicurezza dovrebbero essere adottate?

Ancora una volta non c’è una risposta giusta a questo, ma è un ottimo modo per vedere quanto una persona ha scavato nella sicurezza iOS. Se stai intervistando una banca, mi aspetto quasi sicuramente che qualcuno ne sappia qualcosa, ma tutte le aziende devono prendere sul serio la sicurezza, quindi ecco l’elenco ideale di argomenti che mi aspetto di sentire in una risposta:

  • Se i dati sono estremamente sensibili, non dovrebbero mai essere memorizzati offline sul dispositivo perché tutti i dispositivi sono crackable.
  • Il portachiavi è un’opzione per memorizzare i dati in modo sicuro. Tuttavia è la crittografia si basa sul codice pin del dispositivo. Gli utenti non sono costretti a impostare un pin, quindi in alcune situazioni i dati potrebbero non essere crittografati. Inoltre il codice pin degli utenti può essere facilmente violato.
  • Una soluzione migliore è usare qualcosa come SQLCipher che è un database SQLite completamente crittografato. La chiave di crittografia può essere applicata dall’applicazione e separata dal codice pin dell’utente.

Altre best practice di sicurezza sono:

  • Comunicare solo con server remoti tramite SSL / HTTPS.
  • Se possibile implementare il pinning del certificato nell’applicazione per prevenire attacchi man-in-the-middle sul WiFi pubblico.
  • Cancella i dati sensibili dalla memoria sovrascrivendoli.
  • Assicurarsi che tutta la convalida dei dati inviati venga eseguita anche sul lato server.

Domanda 18

Che cos’è MVC e come viene implementato in iOS?
Quali sono alcune insidie che hai sperimentato con esso? Ci sono alternative a MVC?

MVC sta per Modello, Vista, Controller. È un modello di progettazione che definisce come separare la logica quando si implementano le interfacce utente. In iOS, Apple fornisce UIView come classe base per tutte le _View_s, UIViewController viene fornito per supportare il Controller che può ascoltare gli eventi in una vista e aggiornare la vista quando i dati cambiano. Il modello rappresenta i dati in un’applicazione e può essere implementato utilizzando qualsiasi NSObject, incluse raccolte di dati come NSArraye NSDictionary.

Alcune delle insidie che le persone colpiscono sono gonfie UIViewController e non separano il codice in classi oltre il formato MVC. Consiglio vivamente di leggere alcune soluzioni a questo:

  • 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

In termini di alternative, questo è abbastanza aperto. L’alternativa più comune è MVVM utilizzando ReactiveCocoa, ma altri includono VIPER e utilizzando il codice reattivo funzionale.

Domanda 19

Un product manager dell’azienda segnala che l’applicazione si blocca. Cosa fa?

Questa è una grande domanda in qualsiasi linguaggio di programmazione ed è davvero progettata per vedere come si risolve il problema. Non ti vengono date molte informazioni, ma alcune interviste ti faranno scivolare maggiori dettagli sul problema mentre vai avanti. Inizio semplice:

  • ottieni i passaggi esatti per riprodurlo.
  • scopri il dispositivo, versione iOS.
  • hanno l’ultima versione?
  • ottieni i registri del dispositivo se possibile.

Una volta che è possibile riprodurre o avere più informazioni quindi iniziare a utilizzare utensili. Diciamo che si blocca a causa di una perdita di memoria, mi aspetto di vedere qualcuno suggerire di utilizzare lo strumento di perdita di strumenti. Un candidato davvero impressionante inizierebbe a parlare di scrivere un test unitario che riproduce il problema e il debug attraverso di esso.

Altre varianti di questa domanda includono l’interfaccia utente lenta o il congelamento dell’applicazione. Ancora una volta l’idea è di vedere come risolvere il problema, quali strumenti conosci che potrebbero aiutare e sai come usarli correttamente.

Domanda 20

Che cos’è l’AutoLayout? Cosa significa quando un vincolo viene “rotto” da iOS?

L’AutoLayout è un modo per disporre UIViewutilizzando un insieme di vincoli che specificano la posizione e le dimensioni in base ad altre viste o in base a valori espliciti. AutoLayout semplifica la progettazione di schermi che ridimensionano e layout i loro componenti in base alle dimensioni e all’orientamento di uno schermo. _Constraint_s include:

  • impostazione della distanza orizzontale/verticale tra 2 viste
  • impostazione dell’altezza/larghezza come rapporto rispetto a una vista diversa
  • una larghezza/altezza/spaziatura può essere un valore statico esplicito

A volte i vincoli sono in conflitto tra loro. Ad esempio, immagina un UIView che ha 2 vincoli di altezza: uno dice che rende UIView 200px alto, e il secondo dice che rende l’altezza due volte l’altezza di un pulsante. Se il runtime iOS non può soddisfare entrambi questi vincoli, deve sceglierne solo uno. L’altro viene quindi segnalato come “rotto” da iOS.

Domande standard

“Parlami di te.”

Questo è DAVVERO difficile! Così tante persone leggono il loro curriculum ad alta voce (dimenticando che sto guardando proprio a questo!), elencando ogni classe che hanno preso al college, ogni posizione che hanno mai ricoperto (e questo si aggiunge davvero agli ingegneri di livello senior) e ogni responsabilità (che spesso capita di essere la stessa in 2 o 3 aziende in cui quella particolare persona ha lavorato. Quindi, 20 minuti dopo, non so ancora nulla di nuovo/al di fuori del curriculum sul candidato, siamo a 20 minuti, e da allora credo che potrebbero anche essere robot (e i robot tendono a non adattarsi molto bene alle squadre dinamiche).

Quindi fai un favore a te stesso (e al gestore assumente) preparando un elevator pitch lungo 2min del tuo background – mantienilo semplice, conciso e breve, quindi aggiungi qualcosa di personale alla fine. Ti piace correre? Stai allenando la squadra di calcio di tua figlia? Die hard Star Wars fan? L “aggiunta di un po” di personalità in è un grande rompighiaccio, e farà per una transizione sorprendente nella parte più profonda del colloquio.

“Descrivi un problema interessante e come lo hai risolto.”

La tua possibilità di ascoltare questo è fondamentalmente del 99%, quindi è meglio avere una grande risposta pronta per loro! Ecco alcuni suggerimenti: pensa a un progetto particolarmente sorprendente di cui sei orgoglioso. Capito? Forte! Ora, prendi un pezzo di carta e riassumilo in 5 punti elenco.
1st bullet point – molto breve retroscena delle circostanze dietro il progetto
2nd bullet-la natura del progetto stesso
3rd bullet-i problemi che hai incontrato mentre lo risolvevi/li
4thbullet – come hai risolto le difficoltà sopra
5th bullet point-cosa hai imparato da esso.

Ora, trova qualcuno che ascolterà (un amico, un partner, un collega) e chiedi loro se la storia ha senso (meno eventuali aspetti tecnici se la persona con cui stai parlando non è il tuo pari). È un ottimo modo per convalidare se la storia si tiene insieme.

Saresti scioccato quante volte ho sentito cose come ” e poi sono andato da John, e ha usato lo strumento che ha creato per rimuovere il bug critico che poi……”. Chi è Tom? Il tuo manager? Stagista? Pari? Perché sei andato da lui di tutti nella tua compagnia? Cos’è quello strumento magico che ha messo insieme? Quale bug critico ha rimosso esattamente e come? Qual è stato il risultato?

Si ottiene l’idea 😃

Bonus aggiuntivo? Ora avete 5 punti elenco è possibile utilizzare come un cheat sheet durante l’intervista senza guardare come quel ragazzo che sta leggendo il suo curriculum ad alta voce.

Ora saltiamo nelle strane domande che alcuni responsabili delle assunzioni amano lanciare per farti perdere il tuo gioco.

  • Come si prova un tostapane?
  • Quante penne puoi inserire in un aereo?
  • Quante finestre ci sono a San Francisco?
  • Quante palline da golf può andare bene in uno scuolabus?
  • Quanti Big Mac vende McDonald’s ogni anno negli Stati Uniti?

La lista continua all’infinito. Mentre non ha nulla a che fare con le vostre abilità tecniche, fa un buon lavoro di controllo come avete a che fare con le palle curva, e per vedere se siete in grado di logico passo-passo problem solving. Nella maggior parte dei casi, non ci sono risposte perfette a questo tipo di domande (anche se puoi google per la tua tranquillità). È tutto su come spieghi la tua logica al tuo intervistatore.

Ecco la risposta alla domanda di palline da golf di Michael Beauchamp, quindi hai l’idea di cosa sto parlando:

Immagino che uno scuolabus standard sia di circa 8 piedi di larghezza per 6 piedi di altezza per 20 piedi di lunghezza – questa è solo un’ipotesi basata sulle migliaia di ore in cui sono stato intrappolato dietro gli scuolabus mentre il traffico in tutte le direzioni viene fermato.

Ciò significa 960 piedi cubi e poiché ci sono 1728 pollici cubi in un piede cubito, ciò significa circa 1,6 milioni di pollici cubi.

Calcolo il volume di una pallina da golf di circa 2,5 pollici cubi (4/3 * pi*.85) as .85 pollici è il raggio di una pallina da golf.

Dividere che 2,5 pollici cubi in 1.6 milioni e si arriva con 660.000 palline da golf. Tuttavia, dal momento che ci sono posti e merda in là occupare spazio e anche dal momento che la forma sferica di una pallina da golf significa che ci sarà notevole spazio vuoto tra di loro quando impilati, io arrotondare fino a 500.000 palline da golf.

Vedi? Passo dopo passo. E improvvisamente è una domanda relativamente semplice e logica. Stai calmo, e invece di cercare di trovare un numero istantaneo nella tua testa, cammina l’intervistatore attraverso il tuo treno di pensieri con te.

Hai bisogno di pratica di vita reale? Sentitevi liberi di programmare un colloquio finto con Matt, che ha fatto interviste tecniche per 12 anni, e chiedere il suo feedback!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.