niedziela, 7 sierpnia 2016

Zadanie 1 [Facebook][JS]

Źródło: https://www.careercup.com/question?id=5152893422272512

Masz słownik, który jest listą wyrazów oraz listę zdań

Napisz dwie funkcje:

1. Przygotuj zdanie tak aby łatwo było je sprawdzić
2. Sprawdź czy zdanie zawiera wszystkie poprawne wyrazy

Bierzemy dowolne dwie tablie np:

var wordList = ["You","have","a","dictionary","which","is","an","array","of","words","and","strings"]

var phraseList = ["You have a dictionary which is an array of words and array of strings.",
"1. Prepare the array of strings to be searched in the dictionary",
"2. Check if the string contains all valid words or not."]

Zamiast iterować się za każdym razem przez listę słów w słowniku przydałaby nam się tablica asocjacyjna. Javascript niestety ich nie posiada ale można do tego typu zadań używać obiektów. Dla wygody będę ją nazywał mapą tak jak to robi Java.

var wordMap = {}

wordList.forEach(
   function(word) {
       wordMap[word] = true
   }
)

powstały obiekt będzie wyglądał tak

{ You: true, have: true, a: true, dictionary: true, which: true…}


Ad 1

Należy wyczyścić zdanie z wszelakich zbędnych znaków jak np. kropki i liczby. To co chcemy żeby zostało to litery i spacje. Posłużymy się tutaj wyrażeniem regularnym, które szuka wszystkiego co nie jest literą albo spacja. Modyfikator "g" pozwala znaleźć wszystkie wystąpienia a nie jak to normalnie bywa tylko pierwsze.

function removeRedundantCharacters(phrase) {
  return phrase.replace(/[^A-Za-z ]/g, '').trim()
}


Ad 2

Zdanie będzie trzeba rozdzielić po spacjach a następnie przeiterować się po każdym słowie i sprawdzić czy istnieje w słowniku. Wystarczy ze znajdziemy pierwsze nieprawidłowe słowo i możemy uznać zdanie za nieprawidłowe.

function checkPhraseByDictionary(phrase, dictionary) {
  phrase = removeRedundantCharacters(phrase)
  wordList = phrase.split(" ")
  for(var index in wordList) {
    var word = wordList[index]
    if(!dictionary[word]) {
      return false
    }
  }

  return true
}

Rekrutacja w Google

Na co kładą nacisk?


- Umiejętności pisania softu na tablicy suchościeralnej (!?)
- Sprawdzają jak reagujesz na ciekawe (według nich) pytania.
- Metody optymalizacji napisanych przez Ciebie algorytmów

Jak wyglądała rozmowa?

10 minut - przedstawienie się
40 minut - rozwiązywanie problemu technicznego
10 minut - wrap up

Google ma specjalny team rekrutujący znany jako "recruiters comitee". W odróżnieniu od firmy Microsoft, która rekrutuje pod projekt, wujek rekrutuje z myślą o całej firmie. Lettvin kilka razy wspomniał o tym że lubią ludzi którzy są komunikatywni i entuzjastycznie podchodzą do rozwiązywania problemów. Pozytywna opinia rekrutera jednak nie wystarczy. Każda rozmowa przechodzi jeszcze tzw "executive review" czyli krótko mówiąc na twój wynik musi popatrzeć jakiś menadżer. Jako ciekawostkę dodam że w ramach eksperymentu ośmiu nieświadomym rekruterom dano ich własne wyniki rekrutacyjne z podmienionymi danymi kontaktowymi. Wszyscy zgodnie odrzucili swoje kandydatury. Nie przejmuj się więc jeśli odniesiesz wrażenie że się nie spodobałeś. 

Zadania:

1. Zadany jest grid składający się z literek. Znajdź w nim wyrazy. Rozwiązanie wymaga również zaimplementowanie słownika wyrazów.

dobre rozwiązanie: Jeden z algorytmów przeszukiwania grafu do grida plus drzewo trie do słownika.

optymalne: Optymalizacja wyżej wymienionych tak żeby wykonywały się równolegle. Lettvin wspominał coś o rekurencji.

2. Algorytm rysujący koło

dobre rozwiązanie: Sam algorytm jest prosty. Rekruter poprosił o zastosowanie algorytmu optymalizującego. Tutaj został podany przykład algorytmu Basenhama.


dobre rozwiązanie: Jak powyżej.


Pierwszy etap to napisanie prostego algorytmu. Drugie pytanie to optymalizacja. Zapunktujesz jeśli przyznasz się że znasz odpowiedź na zadane pytanie. Podobno da się to wywnioskować po sposobie w jaki rozwiążesz problem więc rekruter i tak się zorientuje.

Pytania:

Niestety podał tylko jedno

-Dlaczego chcesz u nas pracować?
Preferowana odpowiedź - Lubię kulturę waszej firmy (Spodziewaj się że będą drążyć temat)


sobota, 6 sierpnia 2016

Nie taki diabeł straszny...

Swoja pierwszą rozmowę kwalifikacyjną odbyłem niespełna trzy lata temu. Pamiętam że bardzo się wtedy denerwowałem i nie byłem zadowolony z efektu. Pracę oczywiście dostałem ale niesmak pozostał. Nadszedł w moim życiu czas zmian. Ofert w IT nie brakuje ale dobrych pracodawców można policzyć na palcach jednej ręki. Żeby dostać się do porządnej firmy na godziwych warunkach trzeba się dobrze sprzedać.

Zamierzam wypaść  koncertowo!

Co tu będzie?

Będę tutaj zamieszczał między innymi

- Fragmenty takich książek jak Cracking the Coding Interview i Clean Code
- Rozwiązania pytań z Career Cup,
- Wnioski i pytania z rozmów w których będę uczestniczył

i wszystko co uda mi się znaleźć na temat rozmów kwalifikacyjnych w naszej branży.

Jakie języki/technologie?

Java / Spring, Hibernate
Javascript / Angular.js, Node.js
HTML 5
CSS 3
Git


Na rozgrzewkę polecam posłuchać co ma do powiedzienia pan Lee
'How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft' by Sean Lee