20 pytań kwalifikacyjnych dla programistów iOS

przygotowywanie się do wywiadu z iOS

zbliża się wielki dzień. Niezależnie od tego, czy jest to rozmowa przez telefon, online czy osobiście, zawsze jest to trochę stresujące. Tak więc, aby złagodzić stres, wykonałeś trochę pracy przygotowawczej – odrobiłeś pracę domową na temat firmy, z którą rozmawiasz, śledziłeś zatrudniającego menedżera i połowę zespołu inżynierów w wybranej firmie na linkedin & github, odświeżyłeś niektóre umiejętności i wiedzę, których nie używałeś od jakiegoś czasu – jesteś gotowy do pracy.

ale idąc za mottem US Navy Seals „dwa to jeden, a jeden to żaden” przejdźmy przez kolejne szybkie odświeżanie, które pomoże Ci przejść ten wywiad. Więc przejdźmy od razu do rzeczy!

Zacznijmy od kilku podstawowych pytań, na które mam nadzieję jesteś już gotowy. Mogą wydawać się oczywiste, ale byłbyś zszokowany, jak wielu inżynierów zawiodło w nich w ciągu 12 lat, w których przeprowadzałem wywiady techniczne.

pytania techniczne

Ok, skoro już to omówiliśmy, przejdźmy do pytań technicznych.

zobacz tutaj slideshare dla wszystkich pytań technicznych Wywiad!

Pytanie 1

dotyczące konstruktora UITableViewCell:

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

do czego służy reuseIdentifier?

reuseIdentifier służy do wskazania, że komórka może być ponownie wykorzystana w UITableView. Na przykład, gdy komórka wygląda tak samo, ale ma inną zawartość. UITableView zachowa wewnętrzny bufor UITableViewCell z reuseIdentifier i pozwoli na ich ponowne użycie, gdy dequeueReusableCellWithIdentifier: jest wywoływany. Dzięki ponownemu użyciu komórki tabeli wydajność przewijania widoku tabeli jest lepsza, ponieważ nie trzeba tworzyć nowych widoków.

Pytanie 2

wyjaśnij różnicę między atomowymi i nieatomowymi właściwościami syntetycznymi?

Atomic i non-Atomic odnosi się do tego, czy settery/gettery dla właściwości będą atomowo odczytywać i zapisywać wartości do właściwości. Gdy słowo kluczowe atomic jest używane w danej właściwości, każdy dostęp do niej będzie „zsynchronizowany”. W związku z tym wezwanie do gettera będzie gwarantowane, aby zwrócić prawidłową wartość, jednak wiąże się to z niewielką karą za wydajność. Stąd w niektórych sytuacjach nonatomic jest używany do zapewnienia szybszego dostępu do właściwości, ale istnieje szansa, że warunek rasy spowoduje, że właściwość będzie zerowa w rzadkich okolicznościach (gdy wartość jest ustawiana z innego wątku i Stara wartość została zwolniona z pamięci, ale nowa wartość nie została jeszcze w pełni przypisana do lokalizacji w pamięci dla właściwości).

pytanie 3

wyjaśnij różnicę między kopiowaniem a przechowywaniem?

zachowanie obiektu oznacza zwiększenie liczby zatrzymań o jeden. Oznacza to, że instancja obiektu będzie przechowywana w pamięci, dopóki liczba zatrzymań nie spadnie do zera. Właściwość będzie przechowywać odniesienie do tej instancji i będzie współdzielić tę samą instancję z każdym, kto ją zachował. Kopiowanie oznacza, że obiekt zostanie sklonowany z zduplikowanymi wartościami. Nie jest on udostępniany nikomu innemu.

chcesz przeprowadzić wywiad techniczny? Umów się na rozmowę kwalifikacyjną z ekspertem już teraz!

Pytanie 4

co to jest metoda swizzling w Objective C i dlaczego jej używasz?

metoda swizzling pozwala na przełączanie implementacji istniejącego selektora w czasie wykonywania dla innej implementacji w tabeli wysyłkowej klas. Swizzling pozwala na pisanie kodu, który może być wykonany przed i / lub po oryginalnej metodzie. Na przykład, aby śledzić czas wykonania metody lub wstawić polecenia dziennika

#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

Pytanie 5

Jaka jest różnica między Stanami niedziałającymi, nieaktywnymi, aktywnymi, wykonującymi w tle i zawieszonymi?

  • nie działa: Aplikacja nie została uruchomiona lub była uruchomiona, ale została zakończona przez system.
  • nieaktywny: aplikacja działa na pierwszym planie, ale obecnie nie odbiera zdarzeń. (Może jednak wykonywać inny kod.) Aplikacja zwykle pozostaje w tym stanie tylko na krótko, ponieważ przechodzi do innego stanu.
  • aktywny: aplikacja działa na pierwszym planie i odbiera zdarzenia. Jest to tryb normalny dla aplikacji pierwszoplanowych.
  • tło: aplikacja jest w tle i wykonuje kod. Większość aplikacji wchodzi w ten stan na krótko w drodze do zawieszenia. Jednak aplikacja, która żąda dodatkowego czasu wykonania, może pozostać w tym stanie przez pewien czas. Ponadto aplikacja uruchamiana bezpośrednio w tle przechodzi w ten stan, a nie w stan nieaktywny.
  • zawieszone: aplikacja jest w tle, ale nie wykonuje kodu. System automatycznie przenosi aplikacje do tego stanu i nie powiadamia ich o tym wcześniej. Podczas zawieszania aplikacja pozostaje w pamięci, ale nie wykonuje żadnego kodu. Gdy wystąpi stan niskiego poziomu pamięci, system może wyczyścić zawieszone aplikacje bez powiadomienia, aby uzyskać więcej miejsca dla aplikacji pierwszoplanowej.

pytanie 6

co to jest kategoria i kiedy jest używana?

kategoria jest sposobem dodawania dodatkowych metod do klasy bez rozszerzania jej. Jest często używany do dodawania kolekcji powiązanych metod. Częstym przypadkiem użycia jest dodanie dodatkowych metod do wbudowanych klas w frameworkach Cocoa. Na przykład dodanie metod pobierania asynchronicznego do klasy UIImage.

pytanie 7

czy możesz zauważyć błąd w poniższym kodzie i zasugerować, jak go naprawić:

@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 

wszystkie aktualizacje interfejsu użytkownika muszą być wykonane w głównym wątku. W powyższym kodzie aktualizacja tekstu alertu może, ale nie musi, nastąpić w głównym wątku, ponieważ globalna Kolejka wysyłek nie daje żadnych gwarancji . Dlatego kod powinien być zmodyfikowany, aby zawsze uruchamiać aktualizację interfejsu użytkownika w głównym wątku

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

pytanie 8

Jaka jest różnica między viewDidLoada viewDidAppear?
którego należy użyć do załadowania danych ze zdalnego serwera do wyświetlenia w widoku?

viewDidLoad jest wywoływany, gdy widok jest ładowany, czy to z pliku Xib, storyboard, czy programowo utworzonego w loadView. viewDidAppear jest wywoływany za każdym razem, gdy widok jest prezentowany na urządzeniu. Których użyć zależy od przypadku użycia danych. Jeśli dane są dość statyczne i nie mogą się zmienić, można je załadować w viewDidLoad i buforować. Jeśli jednak DANE zmieniają się regularnie, lepiej jest użyć viewDidAppear do załadowania. W obu sytuacjach dane powinny być ładowane asynchronicznie na wątek w tle, aby uniknąć blokowania interfejsu użytkownika.

pytanie 9

jakie względy potrzebujesz pisząc UITableViewController, który pokazuje obrazy pobrane ze zdalnego serwera?

jest to bardzo powszechne zadanie w iOS i dobra odpowiedź tutaj może obejmować cały szereg wiedzy. Ważną informacją w pytaniu jest to, że obrazy są hostowane zdalnie i mogą zająć trochę czasu, aby pobrać, dlatego gdy prosi o „rozważania”, powinieneś mówić o:

  • pobiera obraz tylko wtedy, gdy komórka jest przewijana do widoku, tzn. gdy wywoływana jest cellForRowAtIndexPath.
  • Pobieranie obrazu asynchronicznie na wątku w tle, aby nie blokować interfejsu użytkownika, aby użytkownik mógł nadal przewijać.
  • gdy obraz został pobrany dla komórki, musimy sprawdzić, czy ta komórka jest nadal w widoku lub czy została ponownie wykorzystana przez inny fragment danych. Jeśli został ponownie użyty, powinniśmy odrzucić obraz, w przeciwnym razie musimy przełączyć się z powrotem do głównego wątku, aby zmienić obraz w komórce.

inne dobre odpowiedzi będą mówić o buforowaniu obrazów w trybie offline, używając obrazów zastępczych podczas pobierania obrazów.

pytanie 10

co to jest protokół i jak zdefiniować własny i kiedy jest używany?

protokół jest podobny do interfejsu Javy. Definiuje listę wymaganych i opcjonalnych metod, które klasa musi/może zaimplementować, jeśli przyjmuje protokół. Każda klasa może zaimplementować protokół, a inne klasy mogą wysyłać wiadomości do tej klasy w oparciu o metody protokołu bez znajomości typu klasy.

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

powszechnym przypadkiem użycia jest dostarczanie źródła danych dla UITableView lub UICollectionView.

pytanie 11

co to jest KVC i KVO? Podaj przykład użycia KVC do ustawienia wartości.

KVC oznacza kodowanie wartości klucza. Jest to mechanizm, za pomocą którego można uzyskać dostęp do Właściwości obiektu za pomocą łańcuchów znaków w czasie wykonywania, zamiast statycznie znać nazwy właściwości w czasie programowania. KVO oznacza obserwację wartości klucza i pozwala kontrolerowi lub klasie obserwować zmiany wartości właściwości.

powiedzmy, że na klasie jest właściwość name :

@property (nonatomic, copy) NSString *name;

możemy uzyskać do niego dostęp za pomocą KVC:

NSString *n = 

i możemy zmodyfikować jego wartość wysyłając do niego wiadomość:

pytanie 12

co to są bloki i jak są używane?

bloki są sposobem definiowania pojedynczego zadania lub jednostki zachowania bez konieczności pisania całej klasy Objective-C. Pod osłonami nadal znajdują się obiekty Objective C. Są to funkcje na poziomie języka, które pozwalają na obsługę technik programowania takich jak lambda i closures w Objective-C. Tworzenie bloku odbywa się przy użyciu składni ^ { } :

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

może być wywoływany w ten sposób:

myBlock();

zasadniczo jest to wskaźnik funkcji, który ma również podpis, który może być użyty do wymuszenia bezpieczeństwa typów podczas kompilacji i wykonywania. Na przykład możesz przekazać blok z określonym podpisem do takiej metody:

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

jeśli chcesz, aby blok otrzymał pewne dane, możesz zmienić podpis, aby je uwzględnić:

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

pytanie 13

jakie mechanizmy zapewnia iOS do obsługi wielowątkowości?

  • NSThread tworzy nowy niskopoziomowy wątek, który można uruchomić wywołując metodę start.
NSThread* myThread = initWithTarget:self selector:@selector(myThreadMainMethod:) object:nil];; 
  • NSOperationQueue pozwala na utworzenie puli wątków i użycie ich do równoległego wykonywania NSOperationS. NSOperation s można również uruchomić na głównym wątku, pytając NSOperationQueueo mainQueue.
NSOperationQueue* myQueue = init];; ;
  • GCD lub Grand Central Dispatch to nowoczesna funkcja Objective-C, która zapewnia bogaty zestaw metod i API do wykorzystania w celu obsługi typowych zadań wielowątkowych. GCD zapewnia sposób kolejkowania zadań do wysłania w wątku głównym, kolejce równoległej (zadania są uruchamiane równolegle) lub kolejce szeregowej (zadania są uruchamiane w kolejności FIFO).
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_async(myQueue, ^{ printf("Do some work here.\n");});

pytanie 14

co to jest łańcuch odpowiedzi?

gdy zdarzenie wystąpi w widoku, na przykład zdarzenie dotykowe, widok wywoła zdarzenie do łańcucha UIResponder obiektów powiązanych z UIView. Pierwszy UIResponder to sam UIView, jeśli nie obsługuje zdarzenia, to kontynuuje łańcuch do momentu, gdy UIResponder zajmie się tym zdarzeniem. Łańcuch będzie zawierał UIViewControllers, rodzic UIViews i powiązane z nimi UIViewControllers, jeśli żaden z nich nie obsługuje zdarzenia, to UIWindow jest pytany, czy może to obsłużyć, a na koniec, jeśli to nie obsługuje zdarzenia, to UIApplicationDelegate jest pytany.

jeśli masz okazję to narysować to warto zrobić żeby zaimponować rozmówcy:

wpisz opis obrazka tutaj

pytanie 15

Jaka jest różnica między używaniem delegata a powiadomieniem?

oba są używane do wysyłania wartości i wiadomości do zainteresowanych stron. Delegat służy do komunikacji indywidualnej i jest wzorem promowanym przez Apple. W delegowaniu zdarzenia podnoszące klasę będą miały właściwość dla delegata i zazwyczaj oczekują, że zaimplementuje ona niektóre protocol. Klasa delegująca może następnie wywoływać metody protokołu _delegate_s.

powiadomienie pozwala klasie transmitować zdarzenia w całej aplikacji do wszystkich zainteresowanych stron. Klasa broadcasting nie musi nic wiedzieć o słuchaczach dla tego zdarzenia, dlatego powiadomienie jest bardzo przydatne w pomaganiu w oddzielaniu komponentów w aplikacji.

 postNotificationName:@"TestNotification" object:self];

pytanie 16

jakie są Twoje preferencje podczas pisania interfejsu użytkownika? Pliki Xib, storyboardy czy programmatic UIView?

nie ma na to dobrej ani złej odpowiedzi, ale to świetny sposób na sprawdzenie, czy rozumiesz korzyści i wyzwania związane z każdym podejściem. Oto najczęstsze odpowiedzi, które słyszę:

  • Storyboard 'S I Xib’ S są świetne do szybkiego tworzenia interfejsów użytkownika, które pasują do specyfikacji projektowej. Są one również bardzo łatwe dla menedżerów produktu, aby wizualnie zobaczyć, jak daleko znajduje się ekran.
  • storyboardy są również świetne w reprezentowaniu przepływu przez aplikację i umożliwiają wizualizację całej aplikacji na wysokim poziomie.
  • wady storyboardu polegają na tym, że w środowisku zespołowym trudno jest nad nimi współpracować, ponieważ są pojedynczym plikiem, a scalanie staje się trudne do zarządzania.
  • storyboardy i pliki Xib mogą również cierpieć z powodu duplikacji i stają się trudne do aktualizacji. Na przykład, jeśli wszystkie przyciski muszą wyglądać identycznie i nagle wymagają zmiany koloru, może to być długi/trudny proces w storyboardach i xibs.
  • programowo konstruowanie UIView’s może być gadatliwe i żmudne, ale może pozwolić na większą kontrolę, a także łatwiejsze oddzielenie i dzielenie kodu. Można je również łatwiej przetestować jednostkowo.

większość programistów zaproponuje kombinację wszystkich 3, w których warto udostępnić kod, a następnie ponownie użyć plików UIViews lub Xib.

pytanie 17

jak bezpiecznie przechowywać prywatne dane użytkownika w trybie offline na urządzeniu? Jakie inne najlepsze praktyki w zakresie bezpieczeństwa należy stosować?

znowu nie ma na to właściwej odpowiedzi, ale jest to świetny sposób, aby zobaczyć, jak bardzo dana osoba zagłębiła się w bezpieczeństwo iOS. Jeśli rozmawiasz z bankiem, prawie na pewno oczekuję, że ktoś coś o tym wie, ale wszystkie firmy muszą poważnie traktować bezpieczeństwo, więc oto idealna lista tematów, które chciałbym usłyszeć w odpowiedzi:

  • jeśli dane są bardzo wrażliwe, nigdy nie powinny być przechowywane w trybie offline na urządzeniu, ponieważ wszystkie urządzenia są do złamania.
  • pęk kluczy jest jedną z opcji bezpiecznego przechowywania danych. Jednak jego szyfrowanie opiera się na kodzie pin urządzenia. Użytkownicy nie są zmuszeni do ustawiania kodu pin, więc w niektórych sytuacjach dane mogą nie być nawet szyfrowane. Ponadto kod PIN użytkowników może być łatwo zhakowany.
  • lepszym rozwiązaniem jest użycie czegoś w rodzaju SQLCipher, który jest w pełni zaszyfrowaną bazą danych SQLite. Klucz szyfrowania może być wymuszony przez aplikację i oddzielony od kodu pin użytkownika.

Inne najlepsze praktyki w zakresie bezpieczeństwa to:

  • komunikuj się tylko ze zdalnymi serwerami przez SSL/HTTPS.
  • jeśli to możliwe, zaimplementuj przypinanie certyfikatu w aplikacji, aby zapobiec atakom typu man-in-the-middle na publiczne WiFi.
  • Usuń poufne dane z pamięci, nadpisując je.
  • upewnij się, że wszystkie walidacje przesyłanych danych są również uruchamiane po stronie serwera.

pytanie 18

co to jest MVC i jak jest zaimplementowany w iOS?
jakie są pułapki, których doświadczyłeś? Czy są jakieś alternatywy dla MVC?

MVC oznacza Model, widok, kontroler. Jest to wzorzec projektowy, który określa sposób oddzielania logiki podczas implementacji interfejsów użytkownika. W systemie iOS Apple zapewnia UIView jako klasę bazową dla wszystkich _View_s, UIViewController jest dostarczana do obsługi kontrolera, który może nasłuchiwać zdarzeń w widoku i aktualizować Widok po zmianie danych. Model reprezentuje dane w aplikacji i może być zaimplementowany przy użyciu dowolnego NSObject, w tym zbiorów danych, takich jak NSArrayi NSDictionary.

niektóre pułapki, na które trafiają ludzie, są nadęte UIViewController i nie rozdzielają kodu na klasy poza formatem MVC. Gorąco polecam zapoznanie się z niektórymi rozwiązaniami tego:

  • 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

jeśli chodzi o alternatywy, jest to dość otwarte zakończenie. Najczęstszą alternatywą jest MVVM wykorzystujący ReactiveCocoa, ale inne to VIPER i wykorzystujący funkcjonalny Kod reaktywny.

pytanie 19

menedżer produktu w Twojej firmie zgłasza awarię aplikacji. Czym się zajmujesz?

to jest świetne pytanie w każdym języku programowania i jest naprawdę zaprojektowane, aby zobaczyć, jak rozwiązać problem. Nie otrzymujesz zbyt wielu informacji, ale niektóre wywiady podadzą ci więcej szczegółów na ten temat w miarę postępów. Start prosty:

  • uzyskaj dokładne kroki, aby go odtworzyć.
  • dowiedz się urządzenie, wersja iOS.
  • czy mają najnowszą wersję?
  • Pobierz logi urządzeń, jeśli to możliwe.

gdy możesz go odtworzyć lub uzyskać więcej informacji, zacznij używać narzędzi. Powiedzmy, że zawiesza się z powodu wycieku pamięci, spodziewałbym się, że ktoś zasugeruje użycie narzędzia do wycieku instrumentów. Naprawdę imponujący kandydat zacząłby mówić o napisaniu testu jednostkowego, który odtwarza problem i debuguje go.

inne odmiany tego pytania obejmują powolny interfejs użytkownika lub zamrażanie aplikacji. Ponownie chodzi o to, aby zobaczyć, jak rozwiązujesz problem, jakie narzędzia o tym wiesz, które pomogłyby i czy wiesz, jak z nich korzystać poprawnie.

pytanie 20

co to jest AutoLayout? Co to znaczy, gdy ograniczenie jest „złamane” przez iOS?

AutoLayout jest sposobem układania UIViews przy użyciu zestawu ograniczeń, które określają lokalizację i rozmiar w oparciu o inne widoki lub na podstawie jawnych wartości. AutoLayout ułatwia projektowanie ekranów, które lepiej zmieniają rozmiar i układ ich komponentów w oparciu o rozmiar i orientację ekranu. _constraint_s include:

  • ustawienie odległości poziomej/pionowej między 2 widokami
  • ustawienie wysokości/szerokości jako stosunku do innego widoku
  • szerokość/wysokość/odstęp może być wyraźną wartością statyczną

czasami ograniczenia są ze sobą sprzeczne. Na przykład wyobraź sobie UIView, który ma 2 ograniczenia wysokości: jeden mówi, aby UIView 200px wysoki, a drugi mówi, aby wysokość dwa razy wysokość przycisku. Jeśli środowisko wykonawcze iOS nie może spełnić obu tych ograniczeń, musi wybrać tylko jeden. Drugi jest następnie zgłaszany jako „zepsuty” przez iOS.

standardowe pytania

” Opowiedz mi o sobie.”

to jest naprawdę trudne! Tak wiele osób czyta ich CV na głos (zapominając, że patrzę właśnie na to!), wymieniając wszystkie zajęcia, które podjęli w college ’ u, każde stanowisko, które kiedykolwiek zajmowali (a to naprawdę sumuje się dla starszych inżynierów) i każdą odpowiedzialność (która często zdarza się być taka sama w 2 lub 3 firmach, w których dana osoba pracowała. Tak więc, 20 minut później, Nadal Nie wiem nic nowego / poza CV o kandydacie, jesteśmy 20 minut w, I do tego czasu wierzę, że równie dobrze mogą być robotami (a roboty zwykle nie pasują bardzo dobrze do dynamicznych zespołów).

więc zrób sobie (i menedżerowi ds. zatrudniania) przysługę, przygotowując skok windy o długości 2 minut-zachowaj to proste, zwięzłe i krótkie, a następnie dodaj coś osobistego na końcu. Kochasz biegać? Trenujesz drużynę piłkarską swojej córki? Szklana pułapka fan Gwiezdnych Wojen? Dodanie odrobiny osobowości jest świetnym łamaczem lodów i pozwoli na niesamowite przejście do głębszej części wywiadu.

„opisz interesujący problem i jak go rozwiązałeś .”

Twoja szansa na wysłuchanie tego to w zasadzie 99%, więc lepiej miej dla nich świetną odpowiedź! Oto kilka wskazówek: pomyśl o szczególnie niesamowitym projekcie, z którego jesteś dumny. Rozumiesz? Świetnie! Teraz weź kawałek papieru i podsumuj go w 5 punktach.
1. bullet point – bardzo krótka historia okoliczności stojących za projektem
2. bullet-charakter samego projektu
3. bullet-problemy, które napotkałeś podczas rozwiązywania go / ich
4.Bullet – jak rozwiązałeś powyższe trudności
5. bullet point – czego się z niego nauczyłeś.

teraz znajdź kogoś, kto posłucha (przyjaciela, partnera, kolegę) i zapytaj go, czy historia ma sens (pomijając wszelkie techniczne aspekty, jeśli osoba, z którą rozmawiasz, nie jest Twoim rówieśnikiem). To świetny sposób, aby potwierdzić, czy historia trzyma się razem.

byłbyś w szoku, ile razy słyszałem takie rzeczy jak „a potem poszedłem do Johna, a on użył narzędzia, które stworzył, aby usunąć krytyczny błąd, który następnie……”. Kim jest Tom? Twój menadżer? Stażystka? Peer? Dlaczego poszedłeś do niego ze wszystkich w Twojej firmie? Co to za magiczne narzędzie? Który krytyczny błąd dokładnie usunął i jak? Jaki był rezultat?

masz pomysł 😃

dodatkowy bonus? Masz teraz 5 punktów, które możesz wykorzystać jako ściągawkę podczas rozmowy kwalifikacyjnej, nie wyglądając jak ten facet, który czyta swoje CV na głos.

przejdźmy teraz do dziwnych pytań, które niektórzy menedżerowie zatrudniający lubią rzucać, aby dać ci cynk.

  • jak przetestować toster?
  • ile długopisów zmieścisz w samolocie?
  • ile okien jest w San Francisco?
  • ile piłek golfowych zmieści się w szkolnym autobusie?
  • ile Big Maców McDonald ’ s sprzedaje rocznie w USA?

lista jest długa. Chociaż nie ma to nic wspólnego z twoimi umiejętnościami technicznymi, dobrze sprawdza, jak radzisz sobie z krzywymi kulami i sprawdza, czy jesteś w stanie logicznie krok po kroku rozwiązywać problemy. W większości przypadków nie ma doskonałych odpowiedzi na tego typu pytania (chociaż możesz je wygooglować dla spokoju ducha). Chodzi o to, jak wyjaśnisz swoją logikę swojemu rozmówcy.

oto odpowiedź na pytanie o piłeczki golfowe Michaela Beauchampa, więc masz pojęcie o czym mówię:

domyślam się, że standardowy autobus szkolny ma około 8 Stóp szerokości, 6 stóp wysokości i 20 stóp długości – to tylko przypuszczenie oparte na tysiącach godzin, w których byłem uwięziony za autobusami szkolnymi, podczas gdy ruch we wszystkich kierunkach jest zatrzymany.

oznacza to 960 stóp sześciennych, a ponieważ w stopie łokciowej znajduje się 1728 cali sześciennych, oznacza to około 1,6 miliona cali sześciennych.

obliczam objętość piłki golfowej na około 2,5 cala sześciennego (4/3 * pi*.85) as .85 cali to promień piłki golfowej.

Podziel to 2,5 cala sześciennego na 1.6 milionów i masz 660 tysięcy piłek golfowych. Jednak, ponieważ są siedzenia i gówno tam zajmuje miejsce, a także ponieważ kulisty kształt piłki golfowej oznacza, że będzie znaczna pusta przestrzeń między nimi po ułożeniu, będę zaokrąglać w dół do 500,000 piłek golfowych.

widzisz? Krok po kroku. I nagle jest to stosunkowo proste, logiczne pytanie. Po prostu zachowaj spokój i zamiast próbować wymyślić natychmiastowy numer w głowie, przeprowadź rozmówcę przez swój pociąg myśli.

potrzebujesz prawdziwej praktyki? Zachęcamy do zaplanowania pozorowanego wywiadu z Mattem, który od 12 lat przeprowadza wywiady techniczne i poproszenia o jego opinię!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.