20 iOS Dezvoltator Interviu Întrebări

Noțiuni de bază gata pentru interviu iOS

ziua cea mare se apropie. Fie că este vorba un telefon, online sau în persoană interviu este întotdeauna un pic stresant. Deci, pentru a ușura stresul, ați făcut niște lucrări de pregătire – ați finalizat temele pentru compania cu care intervievați, ați urmărit managerul de angajare și jumătate din echipa de ingineri de la compania la alegere pe linkedin & github, ați periat unele dintre abilitățile și cunoștințele pe care nu le – ați folosit de ceva vreme-sunteți gata să plecați.

dar în urma US Navy Seals motto-ul „Doi este unul și unul este nici unul” să trecem printr-o altă perfecționare rapidă pentru a vă ajuta să ace acel interviu iOS. Deci, să trecem direct în ea!

să începem cu câteva dintre întrebările de bază pentru care sper că sunteți deja pregătiți. Ar putea părea evidente, dar ați fi șocați cât de mulți ingineri au eșuat lamentabil în timpul celor 12 ani în care am făcut interviuri tehnice.

întrebări tehnice

Ok, acum că am acoperit asta, să trecem la întrebările tehnice.

vezi AICI pentru slideshare pentru toate întrebările tehnice interviu!

Întrebarea 1

pe un constructor UITableViewCell:

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

pentru ce se utilizează reuseIdentifier?

reuseIdentifiereste utilizat pentru a indica faptul că o celulă poate fi reutilizată într-un UITableView. De exemplu, când celula arată la fel, dar are conținut diferit. UITableViewva menține un cache intern de UITableViewCell cu reuseIdentifier și le va permite să fie reutilizate atunci când dequeueReusableCellWithIdentifier: este apelat. Prin reutilizarea celulei tabelului, performanța de derulare a tableview este mai bună, deoarece nu trebuie create noi vizualizări.

întrebarea 2

explicați diferența dintre proprietățile sintetizate Atomice și nonatomice?

Atomice și non-atomice se referă la dacă setters/getters pentru o proprietate Atomic va citi și scrie valori la proprietate. Când cuvântul cheie atomic este utilizat pe o proprietate, orice acces la acesta va fi „sincronizat”. Prin urmare, un apel către getter va fi garantat să returneze o valoare validă, cu toate acestea, aceasta vine cu o penalizare mică de performanță. Prin urmare, în unele situații nonatomic este folosit pentru a oferi acces mai rapid la o proprietate, dar există o șansă ca o condiție de rasă să determine proprietatea să fie nulă în circumstanțe rare (atunci când o valoare este setată dintr-un alt fir și vechea valoare a fost eliberată din memorie, dar noua valoare nu a fost încă atribuită complet locației din memorie pentru proprietate).

întrebarea 3

explicați diferența dintre copiere și păstrare?

reținerea unui obiect înseamnă că numărul de rețineri crește cu unul. Aceasta înseamnă că instanța obiectului va fi păstrată în memorie până când numărul de reținere scade la zero. Proprietatea va stoca o referință la această instanță și va împărtăși aceeași instanță cu oricine altcineva care a păstrat-o. Copiere înseamnă că obiectul va fi clonat cu valori duplicate. Nu este împărtășită cu nimeni altcineva.

vrei să asul interviu tehnic? Programează Acum o sesiune de practică a interviului tehnic cu un expert!

întrebarea 4

ce este metoda swizzling în obiectivul C și de ce l-ați folosi?

metoda swizzling permite punerea în aplicare a unui selector existent pentru a fi pornit în timpul rulării pentru o implementare diferită într-un tabel de expediere clase. Swizzling vă permite să scrieți cod care poate fi executat înainte și / sau după metoda originală. De exemplu, poate pentru a urmări executarea metodei de timp a luat, sau pentru a insera declarații jurnal

#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

Întrebarea 5

care este diferența dintre nu-rulează, inactiv, activ, fundal și stări de execuție suspendate?

  • nu rulează: Aplicația nu a fost lansată sau rulează, dar a fost încheiată de sistem.
  • inactiv: aplicația rulează în prim-plan, dar în prezent nu primește evenimente. (Se poate executa alt cod, deși.) O aplicație rămâne de obicei în această stare doar pe scurt, deoarece trece la o altă stare.
  • activ: aplicația rulează în prim-plan și primește evenimente. Acesta este modul normal pentru aplicațiile din prim-plan.
  • fundal: Aplicația se află în fundal și execută codul. Majoritatea aplicațiilor intră pe scurt în această stare pe cale de a fi suspendate. Cu toate acestea, o aplicație care solicită timp suplimentar de execuție poate rămâne în această stare pentru o perioadă de timp. În plus, o aplicație lansată direct în fundal Intră în această stare în loc de starea inactivă.
  • suspendat: aplicația este în fundal, dar nu execută codul. Sistemul mută automat aplicațiile în această stare și nu le notifică înainte de a face acest lucru. În timp ce este suspendată, o aplicație rămâne în memorie, dar nu execută niciun cod. Când apare o stare de memorie redusă, sistemul poate curăța aplicațiile suspendate fără notificare pentru a face mai mult spațiu pentru aplicația din prim-plan.

întrebarea 6

ce este o categorie și când este utilizată?

o categorie este o modalitate de a adăuga metode suplimentare unei clase fără a o extinde. Este adesea folosit pentru a adăuga o colecție de metode conexe. Un caz comun de utilizare este de a adăuga metode suplimentare pentru a construit în clase în cadrele de cacao. De exemplu, adăugarea metodelor de descărcare asincronă la clasa UIImage.

întrebarea 7

puteți să găsiți eroarea în următorul cod și să sugerați cum să o remediați:

@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 

toate actualizările UI trebuie să se facă pe firul principal. În codul de mai sus actualizarea textului de alertă se poate întâmpla sau nu pe firul principal, deoarece coada de expediere globală nu oferă garanții . Prin urmare, codul trebuie modificat pentru a rula întotdeauna actualizarea UI pe firul 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"; });}); 

întrebarea 8

care este diferența dintre viewDidLoad și viewDidAppear?
ce ar trebui să utilizați pentru a încărca date de pe un server la distanță pentru a fi afișate în vizualizare?

viewDidLoadeste apelat atunci când vizualizarea este încărcată, fie dintr-un fișier Xib, storyboard sau creat programatic în loadView. viewDidAppear este apelat de fiecare dată când vizualizarea este prezentată pe dispozitiv. Ce să utilizați depinde de cazul de utilizare a datelor dvs. Dacă datele sunt destul de statice și nu sunt susceptibile de a se schimba, atunci pot fi încărcate în viewDidLoad și memorate în cache. Cu toate acestea, în cazul în care datele se schimbă în mod regulat apoi folosind viewDidAppear pentru a încărca este mai bine. În ambele situații, datele trebuie încărcate asincron pe un fir de fundal pentru a evita blocarea UI.

întrebarea 9

ce considerații aveți nevoie atunci când scrieți un UITableViewController care arată imaginile descărcate de pe un server la distanță?

aceasta este o sarcină foarte comună în iOS și un răspuns bun aici poate acoperi o întreagă serie de cunoștințe. Informațiile importante din întrebare sunt că imaginile sunt găzduite de la distanță și pot necesita timp pentru descărcare, prin urmare, atunci când solicită „considerații”, ar trebui să vorbiți despre:

  • descărcați imaginea numai atunci când celula este derulată în vizualizare, adică atunci când este apelat cellForRowAtIndexPath.
  • descărcarea imaginii asincron pe un fir de fundal, astfel încât să nu blocheze UI, astfel încât utilizatorul să poată continua să deruleze.
  • când imaginea a fost descărcată pentru o celulă, trebuie să verificăm dacă acea celulă este încă în vizualizare sau dacă a fost reutilizată de o altă bucată de date. Dacă a fost reutilizat, atunci ar trebui să aruncăm imaginea, altfel trebuie să revenim la firul principal pentru a schimba imaginea din celulă.

alte răspunsuri bune vor continua să vorbească despre cache-ul offline al imaginilor, folosind imagini substituente în timp ce imaginile sunt descărcate.

întrebarea 10

ce este un protocol și cum îl definiți pe al dvs. și când este folosit?

un protocol este similar cu o interfață din Java. Acesta definește o listă de metode necesare și opționale pe care o clasă trebuie/poate implementa dacă adoptă protocolul. Orice clasă poate implementa un protocol și alte clase pot trimite apoi Mesaje la acea clasă pe baza metodelor de protocol fără a cunoaște tipul clasei.

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

un caz comun de utilizare este furnizarea unei surse de date pentru UITableViewsau UICollectionView.

întrebarea 11

ce este KVC și KVO? Dați un exemplu de utilizare a KVC pentru a seta o valoare.

KVC standuri pentru codificare cheie-valoare. Este un mecanism prin care proprietățile unui obiect pot fi accesate folosind șirul în timpul rulării, mai degrabă decât să cunoască static numele proprietăților la momentul dezvoltării. KVO reprezintă observarea valorii cheie și permite unui controler sau unei clase să observe modificările aduse unei valori a proprietății.

să presupunem că există o proprietate name pe o clasă:

@property (nonatomic, copy) NSString *name;

îl putem accesa folosind KVC:

NSString *n = 

și putem modifica valoarea lui prin trimiterea mesajului:

întrebarea 12

ce sunt blocurile și cum sunt utilizate?

blocurile sunt o modalitate de a defini o singură sarcină sau unitate de comportament fără a fi nevoie să scrieți o întreagă clasă Objective-C. Sub capacele blocuri sunt încă obiecte c obiective. Sunt o caracteristică la nivel de limbaj care permite tehnici de programare precum Lambda-uri și închideri să fie acceptate în Obiectiv-C. crearea unui bloc se face folosind sintaxa ^ { } :

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

poate fi invocat astfel:

myBlock();

este, în esență, un indicator de funcție care are, de asemenea, o semnătură care poate fi utilizată pentru a impune siguranța tipului la compilare și la rulare. De exemplu, puteți trece un bloc cu o semnătură specifică la o metodă ca aceasta:

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

dacă doriți ca blocul să primească unele date, puteți schimba semnătura pentru a le include:

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

întrebarea 13

ce mecanisme oferă iOS pentru a sprijini multi-threading?

  • NSThread creează un nou fir de nivel scăzut care poate fi pornit apelând metoda start.
NSThread* myThread = initWithTarget:self selector:@selector(myThreadMainMethod:) object:nil];; 
  • NSOperationQueue permite crearea și utilizarea unui grup de fire pentru a executa NSOperation s în paralel. NSOperations poate fi rulat și pe firul principal solicitând NSOperationQueue pentru mainQueue.
NSOperationQueue* myQueue = init];; ;
  • GCD sau Grand Central Dispatch este o caracteristică modernă a Objective-C, care oferă un set bogat de metode și API-uri de utilizat pentru a sprijini sarcini comune multi-threading. GCD oferă o modalitate de a coadă sarcini pentru expediere fie pe firul principal, o coadă concurentă (sarcini sunt rulate în paralel) sau o coadă de serie (sarcini sunt rulate în ordine FIFO).
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_async(myQueue, ^{ printf("Do some work here.\n");});

întrebarea 14

care este lanțul de răspuns?

când un eveniment are loc într-o vizualizare, de exemplu un eveniment tactil, vizualizarea va declanșa evenimentul într-un lanț de obiecte UIResponder asociate cu UIView. Primul UIResponder este UIView în sine, dacă nu gestionează evenimentul, atunci continuă lanțul până când UIResponder gestionează evenimentul. Lanțul va include UIViewController s, părinte UIView s și lor asociate UIViewController s, în cazul în care nici unul dintre cei se ocupe de eveniment, atunci UIWindow este întrebat dacă se poate descurca și în cele din urmă în cazul în care nu se ocupa de eveniment, atunci UIApplicationDelegate este întrebat.

dacă aveți ocazia să o desenați, merită să faceți acest lucru pentru a impresiona intervievatorul:

introduceți descrierea imaginii aici

întrebarea 15

care este diferența dintre utilizarea unui delegat și notificare?

ambele sunt utilizate pentru trimiterea de valori și mesaje către părțile interesate. Un delegat este pentru comunicare unu-la-unu și este un model promovat de Apple. În delegație, evenimentele de ridicare a clasei vor avea o proprietate pentru delegat și se vor aștepta de obicei să implementeze unele protocol. Clasa de delegare poate apela apoi metodele protocolului _delegate_s.

Notificarea permite unei clase să difuzeze evenimente în întreaga aplicație către orice părți interesate. Clasa de radiodifuziune nu trebuie să știe nimic despre ascultători pentru acest eveniment, prin urmare notificarea este foarte utilă pentru a ajuta la decuplarea componentelor dintr-o aplicație.

 postNotificationName:@"TestNotification" object:self];

întrebarea 16

care este preferința dvs. atunci când scrieți UI? Fișiere Xib, storyboard-uri sau programatice UIView?

nu există un răspuns corect sau greșit la acest lucru, dar este o modalitate excelentă de a vedea dacă înțelegeți beneficiile și provocările cu fiecare abordare. Iată răspunsurile comune pe care le aud:

  • Storyboard și Xib sunt foarte bune pentru a produce rapid UI care se potrivesc cu un spec de design. De asemenea, sunt foarte ușor pentru managerii de produse să vadă vizual cât de departe este un ecran.
  • Storyboard-urile sunt, de asemenea, excelente pentru a reprezenta un flux printr-o aplicație și pentru a permite o vizualizare la nivel înalt a unei aplicații întregi.
  • dezavantajele Storyboard-ului sunt că într-un mediu de echipă sunt dificil de lucrat în colaborare, deoarece sunt un singur fișier și îmbinarea devine dificil de gestionat.
  • storyboard-urile și fișierele Xib pot suferi, de asemenea, de duplicare și pot deveni dificil de actualizat. De exemplu, dacă toate butoanele trebuie să arate identice și au nevoie brusc de o schimbare de culoare, atunci poate fi un proces lung/dificil de a face acest lucru pe storyboards și xibs.
  • construirea programatică a UIViewpoate fi detaliată și obositoare, dar poate permite un control mai mare și, de asemenea, o separare și partajare mai ușoară a codului. Ele pot fi, de asemenea, mai ușor de testat unitate.

majoritatea dezvoltatorilor vor propune o combinație a tuturor celor 3 în care are sens să partajeze Cod, apoi reutilizabile UIView s sau Xib fișiere.

întrebarea 17

cum ați stoca în siguranță datele utilizatorilor privați offline pe un dispozitiv? Ce alte bune practici de securitate ar trebui luate?

din nou, nu există un răspuns corect la acest lucru, dar este o modalitate excelentă de a vedea cât de mult a săpat o persoană în securitatea iOS. Dacă intervievați cu o bancă, aproape sigur m-aș aștepta ca cineva să știe ceva despre asta, dar toate companiile trebuie să ia în serios securitatea, așa că iată lista ideală de subiecte pe care m-aș aștepta să le aud într-un răspuns:

  • dacă datele sunt extrem de sensibile, atunci nu ar trebui să fie stocate offline pe dispozitiv, deoarece toate dispozitivele sunt crackable.
  • brelocul este o opțiune pentru stocarea datelor în siguranță. Cu toate acestea, criptarea se bazează pe codul pin al dispozitivului. Utilizatorii nu sunt obligați să stabilească un cod pin, astfel încât, în unele situații, datele nu pot fi chiar criptate. În plus, codul PIN al utilizatorilor poate fi ușor hacked.
  • o soluție mai bună este să folosiți ceva de genul SQLCipher, care este o bază de date SQLite complet criptată. Cheia de criptare poate fi aplicată de aplicație și separată de codul pin al utilizatorului.

Alte bune practici de securitate sunt:

  • comunicați numai cu serverele la distanță prin SSL / HTTPS.
  • dacă este posibil, punerea în aplicare a certificatului de fixare în cerere pentru a preveni atacurile om-in-the-middle pe WiFi publice.
  • ștergeți datele sensibile din memorie prin suprascrierea acestora.
  • asigurați-vă că toate validările datelor trimise sunt rulate și pe partea de server.

întrebarea 18

ce este MVC și cum este implementat în iOS?
care sunt unele capcane pe care le-ați experimentat cu ea? Există alternative la MVC?

MVC înseamnă Model, vizualizare, controler. Este un model de design care definește modul de separare a logicii la implementarea interfețelor de utilizator. În iOS, Apple oferă UIView ca o clasă de bază pentru toate _View_s, UIViewController este furnizat pentru a sprijini controlerul care poate asculta evenimente într-o vizualizare și actualiza vizualizarea atunci când datele se schimbă. Modelul reprezintă datele dintr-o aplicație și poate fi implementat folosind orice NSObject, inclusiv colecții de date precum NSArray și NSDictionary.

unele dintre capcanele pe care oamenii le lovesc sunt umflate UIViewController și nu separă codul în clase dincolo de formatul MVC. Mi-ar recomanda foarte citit pe unele soluții la acest:

  • 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

în ceea ce privește alternativele, acest lucru este destul de deschis. Cea mai comună alternativă este MVVM folosind ReactiveCocoa, dar altele includ VIPER și folosind Cod Reactiv funcțional.

întrebarea 19

un manager de produs din compania dvs. raportează că aplicația se blochează. Cu ce te ocupi?

aceasta este o întrebare mare în orice limbaj de programare și este într-adevăr conceput pentru a vedea cum vă rezolva problema. Nu vi se oferă multe informații, dar unele interviuri vă vor strecura mai multe detalii despre problemă pe măsură ce mergeți. Începeți simplu:

  • obțineți pașii exacți pentru ao reproduce.
  • aflați dispozitivul, versiunea iOS.
  • au cea mai recentă versiune?
  • obțineți jurnalele dispozitivului, dacă este posibil.

odată ce îl puteți reproduce sau aveți mai multe informații, începeți să utilizați scule. Să presupunem că se blochează din cauza unei scurgeri de memorie, m-aș aștepta să văd pe cineva sugerând utilizarea instrumentelor instrument de scurgere. Un candidat cu adevărat impresionant ar începe să vorbească despre scrierea unui test unitar care reproduce problema și depanarea prin ea.

alte variante ale acestei întrebări includ UI lent sau înghețarea aplicației. Din nou, ideea este să vedeți cum rezolvați problema, ce instrumente știți despre care ar ajuta și știți cum să le utilizați corect.

întrebarea 20

ce este AutoLayout? Ce înseamnă atunci când o constrângere este” ruptă ” de iOS?

AutoLayout este o modalitate de a stabili UIViewS folosind un set de constrângeri care specifică locația și dimensiunea în raport cu alte vizualizări sau pe baza valorilor explicite. AutoLayout facilitează proiectarea ecranelor care redimensionează și aranjează mai bine componentele lor în funcție de dimensiunea și orientarea unui ecran. _constraint_s includ:

  • setarea distanței orizontale/verticale între 2 vizualizări
  • setarea înălțimii/lățimii pentru a fi un raport relativ la o vizualizare diferită
  • o lățime/înălțime/spațiere poate fi o valoare statică explicită

uneori constrângerile intră în conflict între ele. De exemplu, imaginați-vă un UIView care are 2 constrângeri de înălțime: unul spune face UIView 200px mare, iar al doilea spune face înălțimea de două ori înălțimea unui buton. În cazul în care runtime iOS nu poate satisface ambele aceste constrângeri, atunci trebuie să alegeți doar unul. Celălalt este apoi raportat ca fiind „rupt” de iOS.

întrebări Standard

„Spune-mi despre tine.”

acesta este unul foarte complicat! Atât de mulți oameni își citesc CV-ul cu voce tare (uitând că mă uit chiar la el!), enumerând fiecare clasă pe care au luat-o la facultate, fiecare poziție pe care au ocupat-o vreodată (și asta se adaugă cu adevărat inginerilor de nivel superior) și fiecare responsabilitate (care de multe ori se întâmplă să fie aceeași în 2 sau 3 companii la care a lucrat o anumită persoană. Deci, 20 de minute mai târziu, încă nu știu nimic nou/în afara CV-ului despre candidat, suntem la 20 de minute și până atunci Cred că ar putea fi la fel de bine roboți (iar roboții tind să nu se potrivească foarte bine cu echipele dinamice).

Deci, face-te (și managerul de angajare) o favoare prin pregătirea unui pas lift 2min lung de fundal – păstrați-l simplu, concis și scurt, și apoi adăugați ceva personal la sfârșitul anului. Îți place să alergi? Antrenezi echipa de fotbal a fiicei tale? Die hard Star Wars fan? Adăugarea un pic de personalitate în este un spărgător de gheață mare, și va face pentru o tranziție uimitoare în partea mai profundă a interviului.

„descrieți o problemă interesantă și cum ați rezolvat-o.”

șansa ta de a-l auzi pe acesta este practic de 99%, așa că ar fi bine să ai un răspuns excelent pregătit pentru ei! Iată câteva sfaturi: gândiți-vă la un proiect deosebit de uimitor de care sunteți mândri. Ai înțeles? Grozav! Acum, luați o bucată de hârtie și rezumați-o în 5 puncte de glonț.
1st bullet point – foarte scurtă istorie a circumstanțelor din spatele proiectului
2nd bullet – natura proiectului în sine
3rd bullet – problemele pe care le – ați întâlnit în timp ce îl rezolvați/ei
4thbullet – cum ați rezolvat dificultățile de mai sus
5th bullet point-ce ați învățat din el.

acum, găsiți pe cineva care va asculta (un prieten, partener, coleg) și întrebați-l dacă povestea are sens (minus orice aspecte tehnice ale acesteia dacă persoana cu care vorbiți nu este colegul dvs.). Este o modalitate excelentă de a valida dacă povestea se ține împreună.

v-ar fi șocat de câte ori am auzit lucruri de genul „și apoi m-am dus la John, și el a folosit instrumentul el a creat pentru a elimina bug-ul critic care apoi……”. Cine este Tom? Managerul tău? Stagiar? Peer? De ce te-ai dus la el de toată lumea în compania ta? Ce este acel instrument magic pe care l-a pus împreună? Ce bug critic a eliminat exact și cum? Care a fost rezultatul?

ai prins ideea 😃

bonus suplimentar? Acum aveți 5 bullet points puteți utiliza ca o foaie de ieftin în timpul interviului fără a arata ca tipul care este citit CV-ul său cu voce tare.

acum, să trecem la întrebările ciudate pe care unii manageri de angajare le place să le arunce pentru a vă împiedica jocul.

  • cum ai testa un prăjitor de pâine?
  • câte pixuri poți încadra într-un avion?
  • câte ferestre sunt în San Francisco?
  • câte mingi de golf încap într-un autobuz școlar?
  • câte Big Mac-uri vinde McDonald ‘ s în fiecare an în SUA?

lista continuă și continuă. Deși nu are nimic de-a face cu abilitățile dvs. tehnice, face o treabă bună de a verifica modul în care vă ocupați de bilele curbe și de a vedea dacă sunteți capabil de rezolvarea logică a problemelor pas cu pas. În cele mai multe cazuri, nu există răspunsuri perfecte la aceste tipuri de întrebări (deși le puteți căuta pe google pentru liniștea dvs.). Este vorba despre modul în care vă explicați logica intervievatorului.

aici este răspunsul la întrebarea mingi de golf de Michael Beauchamp, astfel încât să obțineți ideea de ceea ce vorbesc despre:

m – am gândit un autobuz școlar standard este de aproximativ 8ft lățime de 6ft mare de 20 de metri lungime-aceasta este doar o presupunere bazată pe mii de ore am fost prins în spatele autobuzelor școlare în timp ce traficul în toate direcțiile este oprit.

asta înseamnă 960 de metri cubi și din moment ce există 1728 de centimetri cubi într-un picior cot, asta înseamnă aproximativ 1,6 milioane de centimetri cubi.

calculez volumul unei mingi de golf pentru a fi de aproximativ 2,5 inci cubi (4/3 * pi * .85) ca .85 inci este raza unei mingi de golf.

împărțiți cei 2,5 centimetri cubi în 1.6 milioane și ai venit cu 660.000 de mingi de golf. Cu toate acestea, din moment ce există locuri și rahat acolo ocupă spațiu și, de asemenea, deoarece forma sferică a unei mingi de golf înseamnă că va exista spațiu gol considerabil între ele atunci când stivuite, voi rotunji până la 500.000 de mingi de golf.

vezi? Pas cu pas. Și dintr-o dată este o întrebare relativ simplă, logică. Rămâi calm și, în loc să încerci să vii cu un număr instantaneu în cap, plimbă-l pe intervievator prin trenul tău de gânduri cu tine.

aveți nevoie de practică în viața reală? Simțiți-vă liber să programați un interviu fals cu Matt, care face interviuri tehnice de 12 ani și să cereți feedback-ul său!

Lasă un răspuns

Adresa ta de email nu va fi publicată.