- příprava na váš iOS interview
- technické otázky
- Otázka 1
- Otázka 2
- Otázka 3
- otázka 4
- otázka 5
- otázka 6
- otázka 7
- otázka 8
- otázka 9
- otázka 10
- otázka 11
- otázka 12
- otázka 13
- otázka 14
- otázka 15
- otázka 16
- otázka 17
- otázka 18
- otázka 19
- otázka 20
- standardní otázky
- “ Řekni mi něco o sobě.“
- “ popište zajímavý problém a jak jste ho vyřešili.“
příprava na váš iOS interview
velký den se blíží. Ať už je to Telefon, online nebo osobní rozhovor, je to vždy trochu stresující. Chcete-li zmírnit stres, udělali jste nějakou přípravnou práci-dokončili domácí úkoly ve společnosti, se kterou pohovorujete, sledovali manažera náboru a polovinu inženýrského týmu ve společnosti podle vašeho výběru na linkedin & github, oprášili jste některé dovednosti a znalosti, které jste už nějakou dobu nepoužili – jste připraveni jít.
ale po US Navy SEALs motto „dva je jeden a jeden není žádný“ pojďme projít další rychlé opakovací, které vám pomohou eso, že iOS rozhovor. Tak pojďme přímo do toho!
začněme některými základními otázkami, na které doufám, že jste již připraveni. Mohou se zdát zřejmé, ale byli byste šokováni, kolik inženýrů na ně nešťastně selhalo během 12 let, kdy dělám technické rozhovory.
technické otázky
Ok, Teď, když to máme pokryté, pojďme skočit do technických otázek.
podívejte se zde na slideshare pro všechny technické otázky rozhovor!
Otázka 1
na konstruktoru UITableViewCell:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
k čemu se reuseIdentifier
používá?
reuseIdentifier
se používá k označení, že buňka může být znovu použita v UITableView
. Například když buňka vypadá stejně, ale má jiný obsah. UITableView
bude udržovat vnitřní mezipaměť UITableViewCell
s reuseIdentifier
a umožní jejich opětovné použití při volání dequeueReusableCellWithIdentifier:
. Opětovným použitím tabulky buňky je výkon posouvání tableview je lepší, protože nové pohledy nemusí být vytvořeny.
Otázka 2
vysvětlete rozdíl mezi atomovými a neatomovými syntetizovanými vlastnostmi?
atomové a neatomové se vztahují k tomu, zda nastavovače / gettery pro vlastnost atomicky čtou a zapisují hodnoty do vlastnosti. Když je atomové Klíčové slovo použito na vlastnosti, jakýkoli přístup k němu bude „synchronizován“. Proto bude zaručeno, že volání na gettera vrátí platnou hodnotu, nicméně to přichází s malým trestem za výkon. Proto se v některých situacích používá nonatomic k zajištění rychlejšího přístupu k nemovitosti, ale existuje šance, že stav rasy způsobí, že vlastnost bude za vzácných okolností nulová (když je hodnota nastavena z jiného vlákna a stará hodnota byla uvolněna z paměti, ale nová hodnota ještě nebyla plně přiřazena umístění v paměti pro vlastnost).
Otázka 3
vysvětlete rozdíl mezi kopií a uchováním?
zachování objektu znamená zvýšení počtu zadržení o jednu. To znamená, že instance objektu bude uchováván v paměti, dokud to udržet počet klesne na nulu. Vlastnost uloží odkaz na tuto instanci a bude sdílet stejnou instanci s kýmkoli jiným, kdo si ji také ponechal. Kopírování znamená, že objekt bude klonován s duplicitními hodnotami. Není sdílena s nikým jiným.
chcete eso váš technický rozhovor? Naplánujte si nyní technický rozhovor s odborníkem!
otázka 4
co je metoda prskající v cíli C a proč byste ji použili?
metoda swizzling umožňuje přepnutí implementace existujícího selektoru za běhu pro jinou implementaci v tabulce odeslání tříd. Swizzling umožňuje psát kód, který lze provést před a / nebo po původní metodě. Například možná sledovat čas, který metoda vykonala, nebo vložit příkazy protokolu
#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
otázka 5
jaký je rozdíl mezi stavy neběží, neaktivní, aktivní, pozadí a pozastavené provádění?
- neběží: Aplikace nebyla spuštěna nebo byla spuštěna, ale systém ji ukončil.
- neaktivní: aplikace běží v popředí, ale v současné době nepřijímá události. (Může však provádět jiný kód.) Aplikace obvykle zůstane v tomto stavu jen krátce, jak to přechází do jiného stavu.
- aktivní: aplikace běží v popředí a přijímá události. Toto je normální režim pro aplikace v popředí.
- pozadí: aplikace je na pozadí a vykonává kód. Většina aplikací vstoupí do tohoto stavu krátce na cestě k pozastavení. Aplikace, která požaduje další dobu provádění, však může zůstat v tomto stavu po určitou dobu. Kromě toho aplikace spuštěná přímo na pozadí vstupuje do tohoto stavu místo neaktivního stavu.
- pozastaveno: aplikace je na pozadí, ale neprovádí kód. Systém automaticky přesune aplikace do tohoto stavu a před tím je neoznámí. Zatímco pozastavena, aplikace zůstává v paměti, ale neprovádí žádný kód. Pokud dojde ke stavu s nízkou pamětí, systém může bez předchozího upozornění vyčistit pozastavené aplikace, aby vytvořil více místa pro aplikaci v popředí.
otázka 6
co je kategorie a kdy se používá?
kategorie je způsob přidání dalších metod do třídy bez jejího rozšíření. Často se používá k přidání sbírky souvisejících metod. Běžným případem použití je přidání dalších metod do vestavěných tříd v rámcích Cocoa. Například přidání asynchronních metod stahování do třídy UIImage
.
otázka 7
můžete najít chybu v následujícím kódu a navrhnout, jak ji opravit:
@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
všechny aktualizace uživatelského rozhraní musí být provedeny v hlavním vlákně. Ve výše uvedeném kódu může nebo nemusí dojít k aktualizaci výstražného textu v hlavním vlákně, protože globální fronta odeslání neposkytuje žádné záruky . Proto by měl být kód upraven tak, aby vždy spouštěl aktualizaci uživatelského rozhraní na hlavním vlákně
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ sleep(10); dispatch_async(dispatch_get_main_queue(), ^{ self.alert.text = @"Waiting over"; });});
otázka 8
jaký je rozdíl mezi viewDidLoad
a viewDidAppear
?
které byste měli použít k načtení dat ze vzdáleného serveru pro zobrazení v zobrazení?
viewDidLoad
se volá při načtení zobrazení, ať už ze souboru Xib, scénáře nebo programově vytvořeného v loadView
. viewDidAppear
se volá pokaždé, když je zobrazení zobrazeno na zařízení. Které použití závisí na případu použití vašich dat. Pokud jsou data poměrně statická a pravděpodobně se nezmění, lze je načíst do viewDidLoad
a uložit do mezipaměti. Pokud se však data pravidelně mění, je lepší je načíst pomocí viewDidAppear
. V obou situacích by měla být data načtena asynchronně na podproces pozadí, aby nedošlo k blokování uživatelského rozhraní.
otázka 9
jaké úvahy potřebujete při psaní UITableViewController
, který zobrazuje obrázky stažené ze vzdáleného serveru?
Toto je velmi běžný úkol v iOS a dobrá odpověď zde může pokrýt celou řadu znalostí. Důležitou informací v otázce je, že obrázky jsou hostovány na dálku a stahování může nějakou dobu trvat, proto když se zeptá na „úvahy“, měli byste mluvit o:
- stahujte obrázek pouze při rolování buňky do zobrazení, tj. při volání
cellForRowAtIndexPath
. - stahování obrazu asynchronně na pozadí vlákno tak, aby nedošlo k zablokování uživatelského rozhraní, takže uživatel může pokračovat v rolování.
- Po stažení obrázku pro buňku musíme zkontrolovat, zda je tato buňka stále v zobrazení nebo zda byla znovu použita jiným kusem dat. Pokud byl znovu použit, měli bychom obrázek zahodit, jinak se musíme přepnout zpět na hlavní vlákno a změnit obrázek v buňce.
další dobré odpovědi budou dále hovořit o offline ukládání obrázků do mezipaměti pomocí zástupných obrázků při stahování obrázků.
otázka 10
co je protokol a jak definujete svůj vlastní a kdy se používá?
protokol je podobný rozhraní z Javy. Definuje seznam požadovaných a volitelných metod, které třída musí / může implementovat, pokud přijme protokol. Každá třída může implementovat protokol a další třídy pak mohou odesílat zprávy do této třídy na základě metod protokolu, aniž by znaly typ třídy.
@protocol MyCustomDataSource- (NSUInteger)numberOfRecords;- (NSDictionary *)recordAtIndex:(NSUInteger)index;@optional- (NSString *)titleForRecordAtIndex:(NSUInteger)index;@end
běžný případ použití poskytuje zdroj dat pro UITableView
nebo UICollectionView
.
otázka 11
co je KVC a KVO? Uveďte příklad použití KVC k nastavení hodnoty.
KVC znamená kódování klíčové hodnoty. Je to mechanismus, pomocí kterého vlastnosti objektu lze přistupovat pomocí řetězce za běhu, spíše než museli staticky znát názvy vlastností v době vývoje. KVO je zkratka pro Key-Value Observing a umožňuje řadiči nebo třídě sledovat změny hodnoty nemovitosti.
řekněme, že na třídě je vlastnost name
:
@property (nonatomic, copy) NSString *name;
můžeme k němu přistupovat pomocí KVC:
NSString *n =
a můžeme změnit jeho hodnotu zasláním zprávy:
otázka 12
co jsou bloky a jak se používají?
bloky jsou způsob, jak definovat jeden úkol nebo jednotku chování, aniž byste museli psát celou třídu Objective-C. Pod kryty jsou stále objektivní objekty C. Jedná se o funkci jazykové úrovně, která umožňuje podporu programovacích technik, jako jsou lambdy a uzávěry v Objective-C. vytvoření bloku se provádí pomocí syntaxe ^ { }
:
myBlock = ^{ NSLog(@"This is a block"); }
to může být vyvolána takto:
myBlock();
je to v podstatě ukazatel funkce, který má také podpis, který lze použít k vynucení bezpečnosti typu při kompilaci a běhu. Například můžete předat blok se specifickým podpisem takové metodě:
- (void)callMyBlock:(void (^)(void))callbackBlock;
pokud jste chtěli, aby blok dostal některá data, můžete změnit podpis tak, aby je zahrnoval:
- (void)callMyBlock:(void (^)(double, double))block { ... block(3.0, 2.0);}
otázka 13
jaké mechanismy poskytuje iOS pro podporu více závitů?
-
NSThread
vytvoří nový podproces nízké úrovně, který lze spustit voláním metodystart
.
NSThread* myThread = initWithTarget:self selector:@selector(myThreadMainMethod:) object:nil];;
-
NSOperationQueue
umožňuje vytvoření souboru podprocesů a jejich použití k paralelnímu spuštěníNSOperation
s.NSOperation
s lze také spustit na hlavním vlákně tím, že požádáteNSOperationQueue
omainQueue
.
NSOperationQueue* myQueue = init];; ;
- GCD nebo Grand Central Dispatch je moderní funkce Objective-C, která poskytuje bohatou sadu metod a API, které lze použít k podpoře běžných úkolů s více vlákny. GCD poskytuje způsob fronty úkolů pro odeslání na hlavním vlákně, souběžné frontě (úkoly jsou spuštěny paralelně) nebo sériové frontě(úkoly jsou spuštěny v pořadí FIFO).
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_async(myQueue, ^{ printf("Do some work here.\n");});
otázka 14
jaký je řetězec odpovědí?
když se událost stane v zobrazení, například v dotykové události, zobrazení spustí událost do řetězce UIResponder
objektů přidružených k UIView
. První UIResponder
je samotný UIView
, pokud událost nezpracovává, pokračuje v řetězci až do UIResponder
. Řetězec bude obsahovat UIViewController
s, rodič UIView
s a jejich přidružené UIViewController
s, pokud žádný z nich nezpracovává událost, pak se UIWindow
zeptá, zda to zvládne, a nakonec, pokud to nezpracovává událost, pak se zeptá UIApplicationDelegate
.
pokud máte příležitost vytáhnout tento, stojí za to udělat dojem na tazatele:
otázka 15
jaký je rozdíl mezi použitím delegáta a oznámení?
oba se používají pro odesílání hodnot a zpráv zúčastněným stranám. Delegát je pro individuální komunikaci a je vzorem podporovaným společností Apple. V delegaci budou mít akce na zvyšování třídy vlastnost pro delegáta a obvykle očekávají, že implementuje některé protocol
. Třída delegování pak může volat metody protokolu _delegate_s.
oznámení umožňuje třídě vysílat události v celé aplikaci všem zúčastněným stranám. Třída vysílání nemusí vědět nic o posluchačích pro tuto událost, proto oznámení je velmi užitečné při pomoci oddělit komponenty v aplikaci.
postNotificationName:@"TestNotification" object:self];
otázka 16
jaké jsou vaše preference při psaní UI? Soubory Xib, storyboardy nebo programové UIView
?
na to není správná nebo špatná odpověď, ale je to skvělý způsob, jak zjistit, zda rozumíte výhodám a výzvám s každým přístupem. Zde jsou společné odpovědi, které slyším:
- Storyboard a Xib jsou skvělé pro rychlou výrobu UI, které odpovídají specifikaci designu. Jsou také opravdu snadné pro produktové manažery vizuálně vidět, jak daleko podél obrazovky je.
- Storyboard ‚ s jsou také skvělé při představování toku aplikací a umožnění vizualizace celé aplikace na vysoké úrovni.
- Storyboard má nevýhody, že v týmovém prostředí je obtížné na nich spolupracovat, protože jsou jediným souborem a sloučení je obtížné spravovat.
- storyboardy a soubory Xib mohou také trpět duplikací a obtížně se aktualizovat. Například pokud je třeba všechny tlačítka vypadat identicky a najednou potřebují změnu barvy, pak to může být dlouhý / obtížný proces, jak to udělat přes storyboardy a XIB.
- programové konstruování
UIView
‚s může být upovídané a únavné, ale může umožnit větší kontrolu a také snadnější oddělení a sdílení kódu. Mohou být také snadněji testovány jednotkou.
většina vývojářů navrhne kombinaci všech 3, kde má smysl sdílet kód, pak znovu použitelné soubory UIView
s nebo Xib
.
otázka 17
jak byste bezpečně ukládali soukromá uživatelská data offline na zařízení? Jaké další bezpečnostní osvědčené postupy by měly být přijaty?
opět na to neexistuje správná odpověď, ale je to skvělý způsob, jak zjistit, kolik člověk vykopal do zabezpečení iOS. Pokud pohovorujete s bankou, téměř určitě bych očekával, že o tom někdo něco ví, ale všechny společnosti musí brát bezpečnost vážně, takže zde je ideální seznam témat, která bych očekával v odpovědi:
- pokud jsou data extrémně citlivá, nikdy by neměla být v zařízení uložena offline, protože všechna zařízení jsou praskatelná.
- klíčenka je jednou z možností bezpečného ukládání dat. Nicméně je to šifrování je založeno na pin kódu zařízení. Uživatelé nejsou nuceni nastavit pin, takže v některých situacích nemusí být data ani šifrována. Kromě toho uživatelé pin kód může být snadno hacknut.
- lepším řešením je použít něco jako SQLCipher, což je plně šifrovaná databáze SQLite. Šifrovací klíč může být vynucen aplikací a oddělen od PIN kódu uživatele.
další bezpečnostní osvědčené postupy jsou:
- komunikujte pouze se vzdálenými servery přes SSL / HTTPS.
- pokud je to možné, implementujte připnutí certifikátu do aplikace, abyste zabránili útokům typu man-in-the-middle na veřejné WiFi.
- vymažte citlivá data z paměti přepsáním.
- ujistěte se, že veškerá validace odeslaných dat je také spuštěna na straně serveru.
otázka 18
co je MVC a jak je implementován v systému iOS?
jaké úskalí jste s ním zažili? Existují nějaké alternativy k MVC?
MVC je zkratka pro Model, View, Controller. Jedná se o návrhový vzor, který definuje, jak oddělit logiku při implementaci uživatelských rozhraní. V systému iOS poskytuje Apple UIView
jako základní třídu pro všechny _View_s, UIViewController
je poskytován pro podporu řadiče, který může poslouchat události v zobrazení a aktualizovat zobrazení při změně dat. Model představuje data v aplikaci a může být implementován pomocí libovolného NSObject
, včetně sbírek dat jako NSArray
a NSDictionary
.
některé nástrahy, které lidé zasáhnou, jsou nafouklé UIViewController
a neoddělují kód do tříd mimo formát MVC. Vřele doporučuji přečíst si některá řešení:
- 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
pokud jde o alternativy, je to docela otevřené. Nejběžnější alternativou je MVVM pomocí Reaktivníchkakoa, ale jiné zahrnují VIPER a pomocí funkčního reaktivního kódu.
otázka 19
produktový manažer ve vaší společnosti hlásí, že aplikace havaruje. Co děláš?
to je skvělá otázka v jakémkoli programovacím jazyce a je skutečně navržena tak, aby viděla, jak problém vyřešíte. Nedostáváte mnoho informací, ale některé rozhovory vám během cesty uklouznou další podrobnosti o problému. Začněte jednoduše:
- Získejte přesné kroky k jeho reprodukci.
- zjistěte zařízení, verze iOS.
- mají nejnovější verzi?
- získejte protokoly zařízení, pokud je to možné.
jakmile je budete moci reprodukovat nebo získat více informací, začněte používat nástroje. Řekněme, že se zhroutí kvůli úniku paměti, očekával bych, že někdo navrhne použití nástroje únik nástroj. Opravdu působivý kandidát by začal mluvit o psaní jednotkového testu, který reprodukuje problém a ladí jej.
Mezi další varianty této otázky patří pomalé uživatelské rozhraní nebo zmrazení aplikace. Myšlenka je opět vidět, jak problém vyřešíte, jaké nástroje o tom víte, které by pomohly a víte, jak je správně používat.
otázka 20
co je AutoLayout? Co to znamená, když je omezení „přerušeno“ iOS?
AutoLayout je způsob rozložení UIView
s pomocí sady omezení, která určují umístění a velikost na základě vzhledem k jiným pohledům nebo na základě explicitních hodnot. AutoLayout usnadňuje navrhování obrazovek, které mění velikost a rozvržení jejich komponent lépe na základě velikosti a orientace obrazovky. _constraint_s patří:
- Nastavení vodorovné / svislé vzdálenosti mezi 2 pohledy
- nastavení výšky/šířky jako poměru vzhledem k jinému pohledu
- šířka/výška / rozteč může být explicitní statickou hodnotou
někdy se omezení vzájemně střetávají. Představte si například UIView
, který má 2 výšková omezení: jeden říká, aby UIView
200px vysoká, a druhý říká, aby výška dvojnásobek výšky tlačítka. Pokud běh iOS nemůže uspokojit obě tato omezení, musí vybrat pouze jedno. Druhý je pak hlášen jako „zlomený“ iOS.
standardní otázky
“ Řekni mi něco o sobě.“
to je opravdu složité! Tolik lidí čte svůj životopis nahlas (zapomínám, že se na to dívám přímo!), výpis každé třídy, kterou vzali na vysoké škole, každé pozice, kterou kdy zastávali (a to opravdu sčítá inženýry vyšší úrovně) a každou odpovědnost (která se často stává, že je stejná ve 2 nebo 3 společnostech, na kterých konkrétní osoba pracovala. Takže o 20 minut později stále nevím nic nového / mimo životopis o kandidátovi, jsme 20 minut a do té doby věřím,že by to mohli být také roboti (a roboti mají tendenci se k dynamickým týmům příliš nehodit).
tak se sami (a manažer najímání) laskavost tím, že připraví 2min dlouhý výtah rozteč vašeho pozadí – udržet to jednoduché, stručné a stručné, a pak přidat něco osobního na konci. Máte rádi běh? Trénujete fotbalový tým své dcery? Smrtonosný fanoušek Hvězdných válek? Přidání trochu osobnosti je skvělý ledoborec, a zajistí úžasný přechod do hlubší části rozhovoru.
“ popište zajímavý problém a jak jste ho vyřešili.“
vaše šance na slyšení tohoto je v podstatě 99%, takže byste měli mít pro ně připravenou skvělou odpověď! Zde je několik tipů: přemýšlejte o obzvláště úžasném projektu, na který jste hrdí. Máš to? Skvělé! Nyní uchopte kus papíru a shrňte jej do 5 odrážek.
1st bullet point – velmi stručný příběh o okolnostech projektu
2nd bullet – povaha samotného projektu
3rd bullet – problémy, se kterými jste se při řešení/jejich řešení setkali
4thbullet-jak jste vyřešili výše uvedené obtíže
5th bullet point-co jste se z toho naučili.
nyní najděte někoho, kdo bude poslouchat (přítele ,partnera, kolegu)a zeptejte se jich, zda má příběh smysl (mínus jakékoli technické aspekty, pokud osoba, se kterou mluvíte, není vaším vrstevníkem). Je to skvělý způsob, jak ověřit, zda se příběh drží pohromadě.
byli byste šokováni, kolikrát jsem slyšel věci jako „a pak jsem šel k Johnovi a použil nástroj, který vytvořil, aby odstranil kritickou chybu, která pak……“. Kdo je Tom? Váš manažer? Stážista? Peere? Proč jsi za ním šel ze všech ve vaší společnosti? Co je to magický nástroj, který dal dohromady? Která kritická chyba přesně odstranila a jak? Jaký byl výsledek?
dostanete nápad
další bonus? Nyní máte 5 odrážky, které můžete použít jako tahák během rozhovoru, aniž byste vypadali jako ten chlap, který nahlas čte svůj životopis.
Nyní pojďme skočit do podivné otázky, které někteří manažeři najímání chtěli hodit do tip vás z vaší hry.
- jak byste testovali toustovač?
- kolik per se vejde do letadla?
- kolik oken je v San Franciscu?
- kolik golfových míčků se vejde do školního autobusu?
- kolik Big Maců prodává McDonald ‚ s každý rok v USA?
seznam pokračuje dál a dál. I když to nemá nic společného s vašimi technickými dovednostmi, dělá dobrou práci při kontrole toho, jak se vypořádáte s křivkovými kuličkami, a zjistit, zda jste schopni logického řešení problémů krok za krokem. Ve většině případů neexistují dokonalé odpovědi na tyto typy otázek (i když je můžete vygooglit pro svůj klid). Je to všechno o tom, jak vysvětlíte svou logiku svému tazateli.
zde je odpověď na otázku golfové míčky Michael Beauchamp, takže máte představu o tom, co mluvím:
myslím, že standardní školní autobus je asi 8 stop široký 6 stop vysoký 20 stop dlouhý-to je jen odhad založený na tisících hodin, které jsem byl uvězněn za školními autobusy, zatímco provoz ve všech směrech je zastaven.
to znamená 960 kubických stop a protože existuje 1728 kubických palců v loketní stopě, to znamená asi 1,6 milionu kubických palců.
vypočítám objem golfového míčku asi 2.5 kubických palců (4/3 * pi * .85) as .85 palců je poloměr golfového míčku.
rozdělte 2,5 krychlových palců na 1.6 milionů a vy přijdete s 660 000 golfovými míčky. Nicméně, protože tam jsou sedadla a kecy tam zabírají prostor a také od sférického tvaru golfového míčku znamená, že bude značný prázdný prostor mezi nimi při stohování, budu zaokrouhlit dolů 500,000 golfové míčky.
vidíte? Krok za krokem. A najednou je to poměrně jednoduchá, logická otázka. Jen zůstaňte v klidu, a místo toho, abyste se pokusili přijít s okamžitým číslem v hlavě, projděte tazatele vlakem myšlenek s vámi.
potřebujete praxi v reálném životě? Neváhejte a naplánujte falešný rozhovor s Mattem, který dělá technické rozhovory pro 12 let, a požádejte o jeho zpětnou vazbu!