Zadania rekrutacyjne i rozmowa są stresujące nawet dla doświadczonych specjalistów, a co dopiero dla osób, które dopiero rozpoczynają swoje doświadczenia w branży IT. Jakie zadania na rozmowie kwalifikacyjnej mogą się pojawić w trakcie aplikacji na stanowisko juniora? Popularne testy rekrutacyjne to obróbka danych i operacje na stringach. Zobaczmy na konkretnych przykładach, czego oczekują od kandydatów rekruterzy i jakie zadanie rekrutacyjne możesz dostać w trakcie rozmowy kwalifikacyjnej.
1. Przekształcenie adresu IP
Jednym z zadań dla początkujących programistów Pythona jest odpowiednie przekształcenie prawidłowego adresu IPv4 i zwrócenie zapisu, w którym znak .
jest zastąpiony przez [.]
. Jeśli znasz ciągi znaków w Pythonie to pierwszą rzeczą, która przyjdzie Ci do głowy, będzie traktowanie kropki jako separatora i podzielenie ciągu. Następnie, ponownie połączysz pusty ciąg, stosując „[.]” jako separator.
def defang_IP(address):
new_address = ""
split_address = address.split(".")
separator = "[.]"
new_address = separator.join(split_address) # mind the order: it's separator join a list (split_address)
return new_address
Nie jest to jednak rozwiązanie optymalne. Rozwiązanie, które sprawi, że zapunktujesz u rekruterów, jest użycie metody replace()
do bezpośredniej zmiany kropki na kropkę z nawiasami prostokątnymi:
def defang_IP(address):
return address.replace(".", "[.]")
2. Fuzz buzz
Innym poleceniem jest napisanie przykładowego programu w Pythonie, który wypisze liczby od 1 do 50. Dla liczb będących wielokrotnością 2 program wypisze jednak zamiast danej liczby słowo „fuzz” a dla liczb stanowiących wielokrotność 3 program wypisze słowo „buzz”. Wreszcie, dla liczb, które są jednocześnie wielokrotnością 2 i 3 program wyświetli komunikat: „fuzzbuzz”.
W tym zadaniu można zastosować wiele komend „if…then”. W szczególności można zastosować coś takiego: „jeśli warunek A zostanie spełniony, wyprowadź wynik A…”.
for i in range(1,51):
if i%2==0 and i%3==0:
print('fizzbuzz')
elif i%2==0:
print('fizz')
elif i%3==0:
print('buzz')
else:
print(i)
Jest tylko jeden haczyk: istnieją liczby, które są wielokrotnościami 2 i 3, o tym w pierwszej kolejności (przed innymi „ifami”). Osoba rekrutująca może poprosić Cię o użycie innych komend niż „if...then”. Mając to na uwadze, tworzymy dwa warunki i mnożymy słowa kluczowe „fizz” i „buzz”, jeśli jeden lub oba warunki są spełnione:
def fizz_buzz_func(num):
condition_1 = (num % 2 == 0)# fizz
condition_2 = (num % 3 == 0)# buzz
if (condition_1 or condition_2):
return (condition_1 * 'Fizz') + (condition_2 * 'Buzz')
return str(num)
print('\n'.join([fizz_buzz_func(i) for i in range(1,51)]))
3. Zwróć pierwszy niepowtarzający się znak
W tym zadaniu kandydat na juniora musi napisać fragment kodu, który zwróci indeks pierwszego, niepowtarzającego się znaku. Jeżeli taki nie występuje, powinieneś zwrócić wartość -1. W łańcuchach możemy obliczyć wystąpienia podciągów za pomocą metody count — przykładowe rozwiązanie tego zadania poniżej:
def first_unique_character(string):
for i in range(len(string)): # create a range item
c = string[i] # create a new object for each element in string
if string.count(c)==1: # this is the tricky part: for each element within the string, if the count is 1.
return i # return i;
# we can also use the index method: return string.index(c)
return -1
string = "I am a data scientist."
first_unique_character(string)
Sprawdź oferty pracy na TeamQuest
4. Ustalenie celu podróży
W tym zadaniu będziesz mieć do wyboru różne tablice, gdzie tablica[i] = [cityAi, cityBi] oznacza, że istnieje bezpośrednia ścieżka prowadząca z cityAi do cityBi. Na tej podstawie trzeba zwrócić wartość miasta docelowego, czyli takiego, który nie ma żadnej ścieżki prowadzącej do innego miasta. Pamiętaj o tym, że wykres ścieżek tworzy linię bez żadnej pętli, dlatego zawsze będzie to dokładnie jedno miasto docelowe.
Kluczem poprawnego rozwiązania jest dokładne zrozumienie definicji miasta docelowego: czyli takiego bez miasta wylotu. Innymi słowy, wartość miasta docelowego powinna pojawić się tylko w drugiej kolumnie tablic, ale nigdy w pierwszej.
def destination_city(paths):
return (set(path[1] for path in paths)- set(path[0] for path in paths)).pop()
# test case
paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
destination_city(paths)
5. Dekoratory Python, czego możesz się spodziewać na rozmowie kwalifikacyjnej?
Dekorator Python to funkcja, bez której język programowania stałby się nieczytelny. Dekoratory wykorzystywane są w trakcie pracy z funkcjami wyższego rzędu (za pomocą dekoratorów można zagnieździć nowe funkcje w istniejących już funkcjach). Co więcej, znacznie skracają czas wykonania niektórych funkcji. Czy początkujący programista Pythona powinien je znać? Oczywiście! Osoby przeprowadzające rozmowę rekrutacyjną z pewnością sprawdzą Twoją znajomość dekoratorów.
W trakcie rozmowy możesz dostać polecenie napisania dekoratorów, które podniosą do kwadratu funkcję, jaką dekorują lub wypiszą czas wejścia/wyjścia z funkcji. Wariantów na wykorzystanie dekoratorów pythona jest wiele, dlatego warto je sobie utrwalić przed rozmową.
6. Debugowanie kodu, ile błędów znajdziesz?
Czy jesteś gotowy na znajdowanie błędów w losowych fragmentach kodu? Wbrew pozorom, w takich zadaniach nie liczą się jedynie umiejętności, ale także sposób, w jaki podejdziesz do rozwiązania zadania. Jeżeli potrafisz korzystać z debuggerów, Twoje szanse na otrzymanie pracy na wymarzonym stanowisku znacznie wzrosną. Co więcej, w tym przypadku nie tylko rekrutujący mogą pozwolić sobie na popuszczenie wodzy wyobraźni, przygotowując temat zadania rekrutacyjnego, ale i Ty możesz wykazać się kreatywnością i analitycznym myśleniem w trakcie rozwiązywania go.To, w jaki sposób podejdziesz do tego zadania, sprawdzi Twój zmysł analityczny, obserwację i umiejętność szybkiego reagowania. Nie zapominaj o tym, że umiejętność wychwytywania nieprawidłowości w oprogramowaniu jest kluczowa dla wykonywania efektywnej i satysfakcjonującej pracy.
7. Zadania wymagające odwrócenia lub sortowania list
Zadania wymagające napisania funkcji do odwrócenia lub sortowania list, również nie są rzadkością. Sortowanie bąbelkowe Python to jedna z podstawowych umiejętności juniora, którą rekrutujący lubią sprawdzać w trakcie rozmowy kwalifikacyjnej. To, jakich funkcji użyjesz, by odpowiednio posortować lub odwrócić listę, zależy tylko od Twoich umiejętności, ale rodzaj funkcji, której użyjesz (np. funkcji reverse do odwrócenia listy), może mieć wpływ na dalsze zadania rekrutacyjne. Warto pamiętać, że listy w Pythonie będą dużo bardziej czytelne, jeśli użyjesz iteratorów.
8. Podstawowa znajomość biblioteki
Biblioteki stanowią zbiór funkcji i struktur danych, które umożliwiają realizację konkretnych zadań. Głównym założeniem bibliotek jest unikanie powtarzania kodu zwracającego te same wartości w wielu miejscach oprogramowania. Nawet początkujący programista Python powinien się orientować, gdzie szukać i jak wykorzystać podstawowe elementy stdliba, np. logging czy random. Na stanowisku juniora nie jest wymagana biegła znajomość bibliotek, ani pamiętanie konkretnych argumentów funkcji, ale niektóre z nich warto znać, gdyż mogą się przydać przy rozwiązywaniu testów rekrutacyjnych (np. jak napisać funkcję generującą ciągu Fibonacciego, tutaj przyda Ci się podstawowa znajomość generatorów)
9. Pytanie o najlepszy projekt, przy którym pracowałeś do tej pory oraz o Twoją motywację do pracy na tym stanowisku
Chociaż nie jest to pytanie techniczne, możesz być pewien, że pojawi się na rozmowie o pracę. Oczywiście, Twój najlepszy projekt jest zdecydowanie Twoim atutem, dlatego będziesz miał okazję o nim opowiedzieć, ale to, w jaki sposób to zrobisz, będzie miało wpływ na ewentualne zatrudnienie Cię na tym stanowisku. Opowiadając o projekcie, nie zapomnij wspomnieć o roli, jaką pełniłeś w zespole, o tym, jak podchodziliście do rozwiązywania problemów, jak wyglądał Twój udział w pracy nad projektem.
Jeżeli jesteś osobą, która swój pierwszy poważny projekt ma jeszcze przed sobą, opowiedz o swojej motywacji do pracy na stanowisku młodszego programisty. Co sprawiło, że aplikowałeś na to stanowisko? Co możesz wnieść do firmy dzięki Twojej pracy i dlaczego chcesz się rozwijać w tym kierunku? W jaki sposób podszedłbyś do rozwiązania problemów z pracą w zespole? W tym pytaniu zdecydowanie postaw na szczerość i autentyczność, a rekruterzy na pewno Cię docenią.
10. Zanim pójdziesz na rozmowę: Czy stanowisko Junior Python Developer jest dla Ciebie?
Zanim wyślesz swoją pierwszą aplikację na stanowisko młodszego programisty Python, zadaj sobie pytanie, czy to na pewno jest kierunek, w którym chcesz rozwijać swoją drogę zawodową. Python jest jednym z prostszych języków programowania do przyswojenia, ze względu na czytelną i nieskomplikowaną składnię, jest więc atrakcyjną opcją dla osób, które wcześniej z branża IT nie miały wiele wspólnego. To, że jest łatwiej przyswajalny niż inne języki programowania, nie znaczy, że będzie wymagał od Ciebie mniej pracy i wysiłku w trakcie nauki.
Aplikacja na juniora to pierwszy krok na nowej, zawodowej ścieżce. Czy jesteś na nią gotowy?