Articles

15 technicznych podstawowych pytań Java Interview odpowiedzi dla doświadczonych programistów

Kiedy doświadczenie programisty Java rośnie w latach, np. kiedy przechodzi od początkującego ( 2 do 4) do większego doświadczenia lub wyższego poziomu ( 5 do 7 lat), podstawowe pytania Java Interview również nieco się zmieniają. Oczywiście podstawy, takie jak struktura danych, algorytmy i programowanie obiektowe, pozostają takie same, ale rodzaje pytań staną się bardziej zaawansowane, a ich odpowiedzi na pewno będą musiały być bardziej szczegółowe i dokładne. Często otrzymuję pytania dotyczące podstawowych pytań Java zadawanych starszemu programiście z 5 do 6-letnim doświadczeniem, lub, czasami, idę na rozmowę kwalifikacyjną starszego programisty Java, jakiego rodzaju pytań powinienem się spodziewać. Czasami zastanawia mnie to, że po ukończeniu studiów automatycznie zaczynasz brać udział w rozmowie kwalifikacyjnej i powinieneś mieć pojęcie, czego się spodziewać na rozmowach kwalifikacyjnych, ale jednocześnie rozumiem, że posiadanie pomysłu na pytania przed wyjazdem na rozmowę kwalifikacyjną pomaga w przygotowaniu. Oczywiście nie otrzymasz pytania takiego jak to, z którym miałeś do czynienia na 2 do 3-letnich wywiadach Java, ale zależy to również od różnych rund wywiadów.
nie widziałem wielu zmian w pytaniach zadawanych w rundzie telefonicznej, która prawie pozostaje taka sama. Znajdziesz tu kilka pytań opartych na faktach, kilka pytań kodujących i kilka trudnych pytań. Z drugiej strony, rozmowy twarzą w twarz, stały się bardziej szczegółowe i bardziej skomplikowane, zwłaszcza z nieprzyjemnych obserwacji.
w tym artykule podzielę się 15 pytaniami technicznymi dotyczącymi Javy, które zadawałem starszym i doświadczonym programistom od 4 do 6 lat w różnych wywiadach, głównie w rundach telefonicznych. Na razie nie zamieszczam odpowiedzi, ale odpowiedzi na większość pytań można znaleźć tutaj lub na blogu Javarevisited.
jeśli spieszysz się i aktywnie szukasz pracy programisty Java, Możesz również skorzystać z dobrych książek napisanych w celu przygotowania Cię do rozmów Java J2EE. Książki takie jak, Java Programming Interview exposed obejmuje wszystkie ważne tematy zarówno dla rdzeni Java i Java EE wywiady, które obejmują podstawowe pytania Java, struktura danych i algorytmy, wewnętrzne JVM i GC tuning, Hibernate i Spring pytania wywiadowe, JUnit Ant pytania testowe jednostki i niektóre rzeczy Java 8.
obejmuje również znajomość innych języków JVM, takich jak Scala, Groovy i inne platformy, takie jak Android. Idealny towarzysz, aby dobrze radzić sobie w wywiadach Java.
Jeśli chcesz przygotować więcej na temat kodowania, możesz również sprawdzić Cracking the Coding Interview, który zawiera prawie 150 pytań programistycznych i rozwiązań z wywiadów technicznych dużych firm technologicznych, takich jak Amazon, Facebook, Google, Twitter i Microsoft.

15 podstawowych pytań Java od 5 do 6 lat doświadczenia

wszystkie te pytania zostały zebrane od dość starszych programistów, którzy mają co najmniej 5 lat doświadczenia. Widzieli te pytania w różnych rundach ich rdzeniowych wywiadów Java, w tym telefonicznych i twarzą w twarz rundy na różnych firmach, głównie w bankach inwestycyjnych, takich jak Barclays, Morgan, RBS i innych.

co to jest Busy Spinning? Dlaczego warto go używać w Javie?

jedno z ciekawszych wielowątkowych pytań do starszych programistów Javy, busy spinning to strategia oczekiwania, w której wątek po prostu czeka w pętli, nie zwalniając procesora na zasypianie. Jest to bardzo zaawansowana i wyspecjalizowana strategia oczekiwania stosowana w aplikacji handlu wysokiej częstotliwości, gdy czas oczekiwania między dwoma wiadomościami jest bardzo minimalny.
nie zwalniając PROCESORA lub nie zawieszając wątku, Twój wątek zachowuje wszystkie buforowane dane i instrukcje, które mogą zostać utracone, jeśli wątek został zawieszony i wznowiony z powrotem w innym rdzeniu procesora.
to pytanie jest dość popularne w dziedzinie programowania o niskich opóźnieniach wysokiej częstotliwości, gdzie programiści starają się o bardzo niskie opóźnienia w zakresie mikro do milisekund. Zobacz tutaj więcej ponad 50 zaawansowanych wątków pytania kwalifikacyjne dla doświadczonych programistów.

podstawowe pytania na temat Javy dla starszych programistów

co to jest blokada odczytu i zapisu? Czy ConcurrentHashMap w Javie używa blokady ReadWrite?

Blokada ReadWrite jest implementacją techniki usuwania blokady, w której do operacji odczytu i zapisu używane są dwie oddzielne blokady. Ponieważ operacja odczytu nie zmienia stanu obiektu, można bezpiecznie zezwolić na dostęp wielu wątków do udostępnionego obiektu do odczytu bez blokowania, a dzieląc jedną blokadę na blokadę odczytu i zapisu, można to łatwo zrobić.
Java dostarcza implementację blokady odczytu i zapisu w postaci klasy ReentrantReadWritLock w Javie.util.równoległe.blokada. Warto to sprawdzić zanim zdecydujesz się napisać własną implementację blokowania odczytu i zapisu.
również obecna implementacja Javy.util.ConcurrentHashMap nie używa blokady ReadWriteLock, zamiast tego dzieli mapę na kilka segmentów i blokuje je oddzielnie za pomocą różnych blokad. Oznacza to, że w danym czasie blokowana jest tylko część ConcurrentHashMap, a nie cała mapa. Zobacz, jak działa ConcurrentHashMap wewnętrznie w Javie, aby uzyskać więcej szczegółów.
to podstawowe pytanie Java jest również bardzo popularne na starszych i bardziej doświadczonych wywiadach Java, np. 4 do 6 lat, gdzie oczekujesz, że ankieter wejdzie w szczegóły, na przykład prosząc Cię o dostarczenie implementacji blokady odczytu i zapisu z różnymi zasadami. Jeśli jesteś doświadczonym programistą Javy, rozważ czytanie współbieżności Javy w praktyce, aby zyskać więcej pewności co do wielowątkowości i współbieżności w Javie.

Jak zrobić obiekt niezmienny w Javie? Dlaczego warto uczynić obiekt niezmiennym?

Cóż, niezmienność oferuje kilka zalet, w tym bezpieczeństwo wątków, możliwość buforowania i skutkować bardziej czytelnym kodem wielowątkowym. Zobacz tutaj, aby dowiedzieć się, jak uczynić Obiekty niezmiennymi. Po raz kolejny, to pytanie może również przejść do bardziej szczegółowych i w zależności od odpowiedzi, może przynieść kilka innych pytań, np. kiedy wspomnisz, że Spring jest niezmienny, przygotuj się na kilka powodów, dla których String jest niezmienny w Javie.

jakie wzorce projektowe wykorzystałeś w swoim projekcie Java?

zawsze oczekuj pewnych wzorców projektowych związanych z pytaniem o Core Java Interview of senior developer position. Jest to lepsza strategia, aby wspomnieć o dowolnym wzorze projektu GOF, a nie Singleton lub MVC, z których korzysta prawie każdy inny programista Java.
najlepszym rozwiązaniem może być wzór dekoratora, a może wzór iniekcji zależności, który jest dość popularny w Spring Framework. Warto również wspomnieć tylko o wzorcach projektowych, które faktycznie zostały wykorzystane w projekcie i wie, że jest to kompromis.
często zdarza się, że kiedy wspomnisz o konkretnym wzorcu projektowym, powiedzmy fabryce lub fabryce abstrakcji, następnym pytaniem ankietera będzie: czy użyłeś tego wzorca w swoim projekcie? Przygotuj się więc na odpowiednie przykłady i dlaczego wybierasz konkretny wzór. Ten artykuł zawiera również bardziej zaawansowane pytania dotyczące wzorców projektowych z wywiadów Java.

czy znasz zasadę otwartej konstrukcji zamkniętej lub zasadę podstawienia Liskowa?

wzorce projektowe opierają się na obiektowych zasadach projektowania, które według mnie każdy obiektowy programista i programista powinien znać, a przynajmniej mieć podstawowe pojęcie o tym, czym są te zasady i jak pomagają w pisaniu lepszego kodu obiektowego. Jeśli nie znasz odpowiedzi na to pytanie, możesz grzecznie powiedzieć nie, ponieważ nie oczekuje się od ciebie odpowiedzi na każde pytanie, ale odpowiadając na to pytanie, możesz wzmocnić swoje roszczenie, ponieważ wielu doświadczonych programistów nie odpowiada na podstawowe pytania takie jak to. Zobacz czysty kod dowiedz się więcej o obiektowych i solidnych zasadach projektowania.

jakiego wzorca projektowego użyjesz, aby chronić swój kod przed biblioteką stron trzecich, która prawdopodobnie zostanie zastąpiona przez inną za kilka miesięcy?

to tylko jeden z przykładów pytania na temat wzorca projektowego opartego na scenariuszu. Aby przetestować praktyczne doświadczenie programistów Java z ponad 5-letnim doświadczeniem, firmy zadają tego rodzaju pytania. Możesz spodziewać się więcej rzeczywistych problemów projektowych w różnych formatach, niektóre z bardziej szczegółowym wyjaśnieniem z kontekstem, lub niektóre z tylko intencją.

jednym ze sposobów ochrony kodu przed biblioteką innych firm jest kodowanie przed interfejsem, a nie implementacją, a następnie użycie wstrzykiwania zależności w celu zapewnienia konkretnej implementacji. Tego rodzaju pytania zadawane są również dość często doświadczonym i starszym programistom Java z 5-7-letnim doświadczeniem.

pytanie 7) Jak zapobiec SQL Injection w kodzie Java?

to pytanie jest bardziej zadawane programistom J2EE i Java EE niż rdzennym programistom Java, ale nadal dobrym pytaniem jest sprawdzenie umiejętności JDBC i bezpieczeństwa doświadczonych programistów Java.
możesz użyć PreparedStatement, aby uniknąć SQL injection w kodzie Javy. Wykorzystanie PreparedStatement do wykonywania zapytań SQL nie tylko zapewnia lepszą wydajność, ale także chroni Twoją aplikację Java i J2EE przed atakiem SQL Injection.
z podobną uwagą, jeśli pracujesz bardziej po stronie Java EE lub J2EE, powinieneś być zaznajomiony z innymi problemami bezpieczeństwa, w tym z atakami Fixation Session lub atakami Cross-Site Scripting i jak je rozwiązać. Oto niektóre pola i pytania, w których dobra odpowiedź może wiele zmienić w Twoim wyborze.

pytanie 8) Opowiedz mi o różnych typach referencji dostępnych w Javie, np. WeakReference, SoftReference czy PhantomReference? i dlaczego warto ich używać?

cóż, są to różne typy referencji pochodzące z Javy.lang.pakiet ref i dostarczony w celu pomocy Java Garbage Collector W przypadku problemów z niską pamięcią. Jeśli owiniesz obiekt słabą referencją, będzie on kwalifikował się do śmieci zebranych, jeśli istnieją silne odniesienia. Mogą być później odzyskane przez Garbage collector, jeśli JVM ma mało pamięci.
java.util.WeakHashMap jest specjalną implementacją Map, której klucze są obiektem WeakReference, więc jeśli tylko mapa zawiera odniesienie do dowolnego obiektu, a nie innego, obiekt ten może zostać usunięty, jeśli GC potrzebuje pamięci. Zobacz Java Performance The Definitive Guide Dowiedz się więcej o rozwiązywaniu problemów z wydajnością w środowisku Java.

podstawowe pytania i odpowiedzi dotyczące wywiadu technicznego w Javie dla doświadczonych

pytanie 9) Jak działa metoda get Z HashMap w Javie?

tak, nadal jest to jedno z najpopularniejszych podstawowych pytań Java dla starszych programistów. Możesz również spodziewać się tego pytania na rundzie telefonicznej, a następnie wiele pytań uzupełniających, jak omówiono w moim poście jak działa HashMap w Javie.
krótka odpowiedź na to pytanie jest taka, że HashMap opiera się na strukturze danych tabeli hash i używa metody hashCode() do obliczenia kodu hash w celu znalezienia lokalizacji Bucketa na tablicy bazowej oraz metody equals() do wyszukiwania obiektu w tym samym buckecie w przypadku kolizji. Zobacz tutaj, aby dowiedzieć się więcej o tym, jak działa metoda get() HashMap w Javie.

pytanie 10) które dwie metody HashMap key Object należy zaimplementować?

to jedno z pytań, o których mówiłem w poprzednich pytaniach. Ponieważ działanie HashMap opiera się na strukturze danych tabeli hash, każdy obiekt, którego chcesz użyć jako klucza do HashMap lub innej kolekcji opartej na hash, np. Hashtable lub ConcurrentHashMap, musi zaimplementować metodę equals() i hashCode ().
hashCode() służy do znalezienia lokalizacji Bucketa, tzn. indeks tablicy bazowej, a metoda equals() służy do znalezienia odpowiedniego obiektu na połączonej liście przechowywanej w buckecie w przypadku kolizji. Nawiasem mówiąc, od Javy 8, HashMap zaczęła również używać struktury danych drzewa do przechowywania obiektu w przypadku kolizji, aby zmniejszyć najgorszy przypadek wydajności HashMap Z O(n) Do O (logN). Zobacz artykuł, aby dowiedzieć się więcej o tym, jak HashMap handless kolizje w Javie.

pytanie 11) dlaczego obiekt używany jako klucz powinien być niezmienny?

jest to kolejna kontynuacja poprzednich podstawowych pytań wywiadowych Java. Dobrze jest sprawdzić głębię wiedzy technicznej kandydatów, zadając coraz więcej pytań na ten sam temat. Jeśli wiesz o niezmienności, możesz sam odpowiedzieć na to pytanie. Krótka odpowiedź na to pytanie to key powinna być niezmienna, tak aby metoda hashCode() zawsze zwracała tę samą wartość.

ponieważ kod hashowy zwracany przez metodę hashCode() zależy od zawartości obiektu, tzn. wartości zmiennych członkowskich. Jeśli obiekt jest zmienny, wartości te mogą się zmienić, podobnie jak kod skrótu. Jeśli ten sam obiekt zwróci inny kod hashowy po włożeniu wartości do HashMap, skończy się to wyszukiwaniem w różnych miejscach wiadra i nie będzie można pobrać obiektu. Dlatego obiekt key powinien być niezmienny. Nie jest to reguĹ 'a narzucana przez kompilator, ale naleĹźy o niÄ … zadbaÄ ‡ jako doĹ” wiadczony programista. Więcej zaawansowanych pytań z zakresu Java Collection można znaleźć w tym artykule.

pytanie 12) W Jaki Sposób ConcurrentHashMap osiąga swoją skalowalność?

czasami to wielowątkowe pytanie z wywiadem z kolekcją jest również zadawane jako różnica między ConcurrentHashMap a Hashtable w Javie. Problem z zsynchronizowaną mapą lub tabelą Hashm polegał na tym, że cała mapa jest zablokowana, gdy wątek wykonuje jakąkolwiek operację z mapą.
java.util.Klasa ConcurrentHashMap rozwiązuje ten problem przy użyciu techniki usuwania blokady, gdzie cała mapa jest blokowana w różnych segmentach i tylko określony segment jest blokowany podczas operacji zapisu, a nie cała mapa. ConcurrentHashMap osiąga również swoją skalowalność, umożliwiając odczyty bez blokad, ponieważ read jest operacją bezpieczną dla wątków. Więcej zaawansowanych pytań dotyczących wielowątkowości i współbieżności w Javie można znaleźć tutaj.

pytanie 13) Jak współdzielić obiekt między wątkami? lub jak przekazać obiekt z jednego wątku do drugiego?

jest na to wiele sposobów np. Kolejki, Wymiennik itp., Ale blokowanie za pomocą wzorca Producent-konsument jest najprostszym sposobem przekazania obiektu z wątku do drugiego.

pytanie 14) Jak znaleźć, jeśli twój program ma impas?

wykonując thread dump używając kill -3, używając Jconsole lub VisualVM), sugeruję bardziej szczegółowe przygotowanie tego podstawowego pytania w Javie, ponieważ ankieter zdecydowanie lubi go bardziej szczegółowo, np. naciśnie pytania typu, Czy naprawdę zrobiłeś to w swoim projekcie, czy nie?

pytanie 15) Jak uniknąć impasu podczas kodowania?

upewniając się, że zamki są nabywane i zwalniane w zamówiony sposób, zobacz tutaj, aby uzyskać szczegółową odpowiedź na to pytanie.
to wszystko na tej liście podstawowych pytań Java Wywiad dla starszych programistów i doświadczonych programistów. Nie zawarłem zbyt wielu pytań z innych ważnych tematów, takich jak obsługa wyjątków, tuning Garbage Collection i JVM Internals, który jest również bardzo popularny wśród programistów Java z 5 do 6 letnim doświadczeniem, może włączę je w następnej części.
przy okazji, jeśli nie znajdziesz odpowiedzi na którekolwiek z tych podstawowych pytań Java, daj mi znać. Mogę zaktualizować post o bardziej szczegółową opcję, na życzenie mojego czytelnika.
dalsza nauka
The Complete Java Masterclass
podstawy Javy: Język Java
powiązane pytania w Javie na inne tematy

  • pytania w Javie na ekranie telefonu wywiady (lista)
  • pytania wątkowe i współbieżne z wywiadów Java (lista)
  • Java Enum pytania i odpowiedzi w wywiadzie (lista)
  • pytania i odpowiedzi w wywiadzie Java OOP (lista)
  • Spring MVC pytania i odpowiedzi w wywiadzie (lista)
  • Hibernacja pytań z odpowiedziami (lista)
  • JDBC pytania i odpowiedzi (lista)
  • koncepcja tablicy pytania z odpowiedziami w Javie (lista)
  • RESTful Web Service Interview Questions (list)
  • Servlet i JSP Interview Questions and Answers (list)
  • Java Web Service Interview Questions and Answers (list)