Support

Nasz zespół gotowy do konceptowania, programowania i wsparcia Twojego projektu.

s f

Contact Info
Klecinska 182
54-412 Wroclaw, Poland
info@creedo.io
+48 792 440 137
Follow Us

CreedO Group - IT Outsourcing Services | Outsource Software Company

Wskazówki dla początkującego programisty Java. Przygotowanie do rozmowy kwalifikacyjnej - część 1

Wskazówki dla początkującego programisty Java od CreedO Group. Przygotowanie do rozmowy kwalifikacyjnej – część 1

Ta seria artykułów od CreedO Group jest skierowana do osób, które są na pierwszym etapie drabiny zwanej „Corporate Java Development”. Pierwsza część poświęcona jest planowaniu procesu uczenia się, a także identyfikacji tematów i pytań do samooceny. W poniższych artykułach krótko omówię proces rozmowy kwalifikacyjnej, wybór firmy i funkcje rozwoju kariery.

Doświadczeni programiści są proszeni o komentowanie dyskusji, uzupełnień i krytyki. Nie mogę udawać, że jestem skrajnie obiektywny, ale starałem się uwzględnić większość współczesnych trendów.

Kilka słów o moim doświadczeniu. Przez półtora roku pracowałem w firmie outsourcingowej, zdałem zarówno wywiady zewnętrzne przy dużych projektach, jak i wewnętrzne (kwalifikacyjne). W tej chwili opuścił outsourcing i pracował w firmie spożywczej.

 

CreedO Group – IT Outsourcing Services | Outsource Software Company oferuje najlepszych programistów na rynku IT

 

Planowanie i proces uczenia się

Jeśli wśród doświadczonych programistów przeprowadzimy ankietę na temat: „Czy uczysz się / stajesz profesjonalnym procesem optymalnym pod względem jakości i warunków”, to większość, jak mi się wydaje, odpowie „Nie”. Powód jest prosty: w ogromnym morzu informacji o składni, frameworkach, bazach danych, algorytmach i testach nie ma i nie może istnieć przejrzysta struktura uczenia się idealna dla wszystkich. Kolya ukończył dobre kursy algorytmów, pamięta trochę podstawy składni z uniwersytetu, ale słabo nauczył się bazy danych i prawie nic nie wie o testowaniu. Vasya doszedł do rozwoju od testowania, zna składnię języka, ale aby usunąć ogon tablicy, którą prowadzi do arkusza, nie przyjaźni się z Gitem i pracował z bazami danych z zupełnie innej perspektywy.

W rzeczywistości mamy dwóch początkujących programistów z dobrym podstawowym szkoleniem na początek i zupełnie innymi planami treningowymi.

Jednym z czynników decydujących o rozwoju umiejętności jest czas spędzony na procesie. Jeśli Kolya i Vasya wezmą za podstawę ogólny program treningowy stworzony przez Petyę, każdy z nich kilkakrotnie zwiększy wspomniane wydatki czasowe, płacąc za konsolidację już przebadanego materiału, nie zawsze rozsądną cenę.

Celem początkującego jest szybkie wejście do profesjonalnego środowiska i rozpoczęcie opracowywania praktycznych rozwiązań. I nie rób projektów domowych zgodnie z szablonem, biorąc pod uwagę ich pomysł. Nie umniejszam znaczenia projektów domowych dla samorozwoju i utrwalania praktycznych umiejętności, ale bądźmy szczerzy: patrząc na ich projekty dwa do trzech lat temu, tylko nieliczni uznają kodeks za godny pochwały. A jeśli nie ma doświadczenia w produkcji, nie należy wprowadzać linku do konta GitHub w CV. Chyba że został sprawdzony przez znanego programistę z doświadczeniem.

 

Tak więc doszliśmy do pewnych podstawowych, moim zdaniem, stwierdzeń:

  1. Długie kursy offline (6 miesięcy lub dłużej) są dobre, jeśli:
    – masz niski poziom zrozumienia większości tematów objętych kursem;
    – Opinie o szkole / kursach są naprawdę dobre lub jest osoba, która je ukończyła i dostała pracę, którą znasz osobiście.
  2. Kursy online w wąskich obszarach (dogłębne algorytmy lub bazy danych, testowanie aplikacji Java) należy odłożyć na okres po zatrudnieniu, aby nie odstąpić od głównego celu krótkoterminowego.
  3. Proces sporządzania wstępnego planu szkolenia jest o wiele ważniejszy niż ciężka praca i entuzjazm w rozwoju.
    Możesz być osobą o nieskończonej chęci uczenia się i osiągania, ale niewłaściwy wektor wysiłku zneutralizuje takie przydatne cechy.

 

Ukończenie szkoły

Aby uniknąć holiwarów na temat najlepszej książki lub zasadności znajomości konkretnego problemu, od razu zastrzegam, że wybór odpowiednich materiałów do nauki leży wyłącznie na barkach studenta. W telegramie i forach istnieją rosyjskojęzyczne kanały, na których każdy temat był już przed Tobą omawiany i zostanie ponownie omówiony, jeśli pytania nie zostaną zhackowane, a Google nie pomoże.

Podaję niepełną listę tematów i pytań, które są naprawdę omawiane podczas wywiadów ze mną lub współpracownikami.

Aby pogrupować pytania w niektórych tematach, jako podstawę przyjęto następujący system gradacji dla początkujących.

Nedojunior
Deweloper, który sam coś pisze, ale nie ma pojęcia, jak zły jest jego kod w skali od „nie pokazuj nikomu” do „wystarczająco dobrego dla twojego poziomu”. Nedojunov nie jest zatrudniony, ale zatrudniony na staż z późniejszym zatrudnieniem. Kolejne kryterium: nie ma sensu brać udziału w kursach ze względu na wielką stratę czasu, ale jest zbyt wcześnie, aby rozpocząć projekt.

Mladzy Junior
Wywiad na stanowisko Junior Developer może, ale nie musi, ale podstawowa wiedza jest dobra. Z łatwością porozmawia o urządzeniu HashMap i algorytmie wyszukiwania binarnego, ale będzie on opierał się na funkcjach frameworków, praktycznych zadaniach budowania zależności i zapytaniach do baz danych, które są nieco bardziej skomplikowane niż zwykle.

Silny Junior
Kiedy widzisz wakat „Szukamy młodszego programisty Java z doświadczeniem programistycznym wynoszącym co najmniej 1 rok”, to o nim. Możesz ominąć większość kandydatów na to stanowisko. Najczęściej kwestia zatrudnienia opiera się wyłącznie na wymogach płacowych: chce więcej niż może, ale rynek to trudna sprawa.

Nie widzę sensu w rozważaniu wszystkich dalszych poziomów w kontekście szkolenia dla początkujących, ponieważ wymagania są niewyraźne. W przypadku dwóch programistów z 2-3-letnim doświadczeniem umiejętności mogą być tak różne, że w dwóch różnych firmach po rozmowie kwalifikacyjnej z pewnością zostanie preferowany jeden w pierwszym przypadku, a drugi w drugim.

Chciałbym również dodać, że nawet nedojun może znaleźć dobrą pensję za pierwszym razem. Na przykład osoba ma doskonałą znajomość algorytmów i odpowiednie stanowisko w zespole zostało otwarte. Rozwój zostanie z czasem przeciągnięty nad nim, a konkretna wiedza, którą posiada, może zostać natychmiast wykorzystana.

Stopniowanie jest bardziej prawdopodobne dla osób, które błędnie uważają ogólnie przyjęte poziomy (młodszy, średni, starszy) w kontekście godzin pracy w branży, a nie w kontekście wiedzy. Pomimo pewnej korelacji tych czynników jest bardzo indywidualna. Ktoś w ciągu 4 lat może zdobyć wiedzę wyższego szczebla, a kolejny, a po 5 latach nadal pozostaje czerwcem.

 

Tematy, które warto znać na rozmowę kwalifikacyjną

  1. Podstawy języka i technologii.
  2. Pracuj z DB, JDBC.
  3. Hibernate
  4. Spring
  5. Algorytmy
  6. Logowanie, testowanie.
  7. Pattern projektowe.
  8. Systemy kontroli wersji.
  9. Montaż projektu.
  10. Metodologie programistyczne, technologie sieciowe, narzędzia do profilowania itp.

W tym artykule rozważymy pierwsze dwa punkty.

 

Podstawy języka i technologii JAVA

 

Nedojunior
Pytania są uporządkowane minimalnie:

  • Zasady OOP: abstrakcja, enkapsulacja, dziedziczenie, polimorfizm;
  • SOLIDNE zasady: umieć opowiadać na przykładach z Javy;
  • programowanie paradygmatów (imperatywny, deklaratywny i ich główne podtypy);
  • interfejsy, klasy, obiekty, znają różnicę i cechy aplikacji;
  • metody klasy Object, rozumiem obowiązki każdej metody i dlaczego została ona umieszczona na szczycie hierarchii obiektów;
  • typy danych, aby móc nawigować i używać (przykłady pytań: „Dlaczego potrzebujemy klas opakowań dla prymitywów? Opowiedz nam o rzutowaniu typów pierwotnych. I o rzutowaniu obiektów?”);
  • rodzaje klas (abstrakcyjne, zewnętrzne, wewnętrzne, zagnieżdżone itp.), modyfikatory dostępu;
  • kolekcje, ich hierarchia, cechy i różnice między sobą (LinkedList z ArrayList, HashMap z TreeMap), który znajduje się pod maską ArrayList, HashSet, na podstawie tego, co działają i jak są ustawione;
  • wyjątki, ich hierarchia i podstawa przetwarzania (po co, jak i gdzie);
  • stos, stos, sposób organizacji pracy z nimi (zasady ogólne);
  • wielowątkowość: koncepcje procesu i wątku, opcje tworzenia wątku, metody synchronizacji i słowa serwisowe w Javie (wymieniaj tylko te, o których możesz rozmawiać), ponieważ rozumiesz
  • bezpieczeństwo wątku, impas, zmienność, atomowość, wątek, uruchamialny i wywoływalny;
  • strumienie, lambdas, interfejsy funkcjonalne bez poważnego pogłębienia.

Natychmiast zastrzegaj, że badanie każdego tematu obejmuje zrozumienie, jak to wszystko działa w Javie.

Na przykład, jeśli wspomniane jest dziedziczenie, musisz znać zarówno nadpisywanie / przeciążanie metod, jak i różnicę między statycznymi / niestatycznymi metodami lub zmiennymi, a także jak pisać pożądaną hierarchię klas dla zadań elementarnych. Jeśli napisałeś i nie masz pojęcia, jak źle to wszystko jest, zwracamy się do społeczności.

 

Mladszy Junior
Pytania wymienione dla nedojun można zadać konkretnymi przykładami z praktycznej płaszczyzny.

Tematy:

  • cechy stosu i stosu: urządzenie wewnętrzne, prędkość dostępu, wykorzystanie pamięci, moduł wyrzucania elementów bezużytecznych;
  • niestandardowe wykorzystanie kolekcji i funkcje pracy z nimi: przetwarzanie wartości NULL w HashMap, TreeMap; Usuwanie zakresu z TreeMap dlaczego ciąg znaków jest dobrym wyborem dla klucza w HashMap. Ogólne i pracuj z nimi: jeśli metoda akceptuje List, co można tam przekazać; jak wyglądają leki generyczne w czasie wykonywania; czy mogą istnieć konstruktory w klasach abstrakcyjnych; jeśli klasy nie można zainicjować, to dlaczego?
  • Dziedziczenie i asocjacja IS-A (obejmuje kompozycję „HAS-A” i agregację „USES-A lub IMPLEMENTED-IN-TERMS-OF”) w kontekście Java;
  • interfejsy znaczników z przykładami: serializacja, klonowanie, konfigurowalna serializacja (interfejs zewnętrzny);
  • bardziej szczegółowo według typu danych: notacje głównych metod (w klasach opakowań, kod skrótu, równości zwracające dlaczego, jak przedefiniować), boxing-unboxing, inicjalizacja zmiennych lokalnych i klasowych, pula ciągów znaków (co to jest, gdzie jest przechowywana). Zna operacje bitowe AND, OR, XOR; bajt b = 127, b ++, jaki jest wynik i dlaczego (krok po kroku); int p1, długi p2, jaka jest różnica między operacjami p1 = p1 + p2 i p1 + = p2;
  • bardziej szczegółowe pytania na temat strumieni: podaj przykład przetwarzania z praktyki, prędkość strumienia, jakie są dwa rodzaje operacji, co wchodzi w operacje w strumieniu;
  • wielowątkowość jest bardziej szczegółowa: podaj przykład impasu (dziwne pytanie, ale zadają), jak stworzyć klasę bezpieczną dla wątków, dla której potrzebujesz CompletableFuture, czyli puli wątków;
  • bardziej szczegółowe wyjątki: jeśli wpadnie najpierw w próbie, a następnie w połowie, co się stanie; Czy można spróbować bez połowu, ale w końcu, gdzie pójdzie wyjątek; a jeśli zwrot będzie w połowie i na końcu, w jaki sposób zostanie przetworzony;
  • odbicie jest powierzchowne, co zwraca getClass i dlaczego jest potrzebne;
  • klassloader i ich hierarchia. Sytuacja: getClass dla dwóch klas zwraca jedną wartość, błąd występuje podczas rzutowania jednej na drugą. Dlaczego (Klasy ładowane z różnymi modułami ładującymi klasy).

 

Silny Junior

Wszystko jest takie samo jak młodsze, ale wszystkie pytania są na poziomie głębokiego zrozumienia. Dodano:

  • I / O vs NIO (zwykle pytane powierzchownie);
  • praca z datą i okresami;
  • jeszcze więcej wielowątkowości: atomics od wewnątrz (cas, faa), wszystkie główne klasy z pakietu Concurrent, aby wiedzieć (gdzie na przykład używa się BlockingQueue), równoległe strumienie i wady ich wykorzystania, pula forkJoin, wokół której odbywa się synchronizacja (klasy i obiekty), w jaki sposób, Jaka jest różnica między ConcurrentHashMap i SynchronizedMap, kluczowe różnice między wywoływalnymi i wykonalnymi (przetwarzanie sprawdzonych wyjątków), zdarzają się przed sytuacjami podczas pracy z wątkami;
  • rodzaje łączy w Javie, sposób i miejsce ich użycia;
  • strategie śmieciarek;
  • co zadeklarowano w try-with-resources (pytanie o możliwość automatycznego zamykania);
  • mówić o głównych interfejsach funkcjonalnych;
  • wyjątki: jak zachowują się w konstruktorze, jak w przypadku dziedziczenia i redefinicji metod;
  • jeszcze bardziej wyrafinowane pytania o kolekcje i klasy / interfejsy: jeśli mapa nie jest dziedziczona z Iterable, to w jaki sposób iterator idzie po niej? kiedy wystąpi wyjątek ConcurrentModificationException i jak tego uniknąć; HashMap przenosi wartości z koszyka do drzewa, aby zoptymalizować dostęp, zaczynając od określonej liczby kolizji, ale nie zawsze i pod jakim warunkiem; modyfikatory dostępu do pól i metod interfejsu; Czy można zastąpić metody statyczne w dziedziczeniu?
  • gdzie informacje o klasach i metodach są przechowywane w środowisku wykonawczym.

Ważne jest, aby wszystkie typy Juniorów zdawały sobie sprawę, że wymagania dotyczące dobrego zrozumienia podstaw języka wynikają z ich bezpośredniej odpowiedzialności – pisania kodu. Nic innego nie należy do obowiązków joonów i klasycznych środkowych. Wymagają większej niezależności od tych drugich i opiekują się tym pierwszym.

 

Praca z DB, JDBC

W tym temacie, zgodnie z moimi spostrzeżeniami, praktycznie nie ma gradacji pytań dla poziomów podstawowych.

Młodszego czerwca można zapytać, czy pracował z nierelacyjnymi bazami danych, i zadać kilka towarzyszących pytań, a osoby z niewielkim doświadczeniem nie można nawet wyprzeć przez przyłączenia. Dlatego zastanawiamy się nad tym, że każdy potrzebuje podstaw relacyjnych baz danych, a zrozumienie funkcji nierelacyjnych baz danych będzie dobrym plusem. JDBC jest prawie zawsze pytany, ponieważ temat ma fundamentalne znaczenie.

 

Pytania SQL:

  • podstawy: typy zapytań (DDL, DML, DCL, TCL), operacje CRUD, typy danych, klucze podstawowe i obce, ograniczenia, HAVING vs WHERE, wszystkie typy JOIN plus, aby móc zastosować w praktyce, UNION (który warunek do wykonania instrukcji dla dwóch tabel), sekwencja operacji w zapytaniu, wyzwalacze – reprezentacja teoretyczna, indeksy pojedyncze i złożone, klastrowe i nieklastrowane (ile indeksów klastrowych może być dla tabeli i ile indeksów klastrowych może być dla tabeli i ile, klastrów, dlaczego), kursory – co to jest i dlaczego, polecenie EXPLAIN;
  • normalizacja i denormalizacja, najbardziej skrupulatnie można zapytać o 3 klasyczne formy normalne;
  • transakcje, ich właściwości ACID, poziomy izolacji transakcji (wystarczą 4 klasyczne).

 

Proste zapytania nie powinny prowokować do myślenia. Przykład: pobierz dane użytkownika z bazy danych userinfo, której wynagrodzenie przekracza 5000. Wynagrodzenie znajduje się w osobnej tabeli. W sieci jest wystarczająco dużo typowych zadań, radzę więc poszukać i przećwiczyć przed rozmową kwalifikacyjną.

 

Pytania po JDBC:

  • jaka jest sekwencja kroków podczas łączenia i pracy z bazą danych za pomocą JDBC;
  • do czego służą: DriverManager, Driver, Connection, Statement, ResultSet;
  • jakie znasz rodzaje zapytań (Statement, PreparedStatement, CallableStatement), powiedz o każdym typie;
  • dzięki czemu PreparedStatement jest szybszy niż zwykłe Instrukcja (prekompilacja); jeśli wspomnimy o puli wstępnie skompilowanych żądań, jest to natychmiast plus w oczach rozmówcy;
  • Metody execute, executeUpdate, executeQuery zwracające, dlaczego są potrzebne.

Dzięki silnym joonom mogą powierzchownie dotykać tematu skalowania i replikacji w ramach sprawdzania ogólnej prezentacji architektonicznej bazy danych.

 

Podsumowanie
Mam nadzieję, że dostarczone informacje wystarczą do ustalenia, na jakim etapie jesteś. Dobra znajomość podstaw języka i praca z bazą danych czasami wystarcza, aby dostać się do świata rozwoju zawodowego. Udoskonalając te umiejętności, rozumiejąc działanie ram, algorytmów i innych podstawowych narzędzi programisty, gwarantujesz sobie szybkie zatrudnienie i awans.

Na tym zakończę pierwszą część. Pozostałe tematy ujawnię w poniższych artykułach. Przy wystarczającej liczbie osób, które chcą kontynuować!

Post a Comment