Вопросы на собеседовании java senior. Пособие для будущего Java разработчика

Осенью 2017 я окончательно решил уходить из EPAM, где работал более полутора лет, и идти развиваться куда-то дальше.

В связи с этим я обновил резюме, завысил немного зарплатные ожидания, и опубликовал его на HeadHunter. Я особо никуда не спешил, поэтому на вакансии сам почти и не откликался, за исключением пары интересных мест. К собеседованиям решил не готовиться и почти к ним ничего и не читал ибо зачем зубрить что-то бесполезное в работе. А полезное ты и так всё помнишь. Я понадеялся на адекватных интервьюеров, которые не будут спрашивать то, что без зубрёжа нормальные люди не помнят, так и вышло. Почти сразу мне начали приходить письма и звонки, и я забил собеседованиями ближайшие полторы недели, по 1-2 в день. Тут хочу рассказать об этом опыте. Всего я прошёл собеседования в 11-ти компаниях, 8 из которых прислали офер.

В резюме у меня был указан опыт PHP разработчика (1.5 года), затем Java (тоже 1.5 года). С Java стандартный стек: Spring и всё что около него. В сумме в резюме 4 года опыта работы и несколько своих проектов. Кажется, неплохое резюме)

Несколько заметных пунктов:

  • Для позиции middle java рынок кандидатов, судя по всему, почти пустой. Большая часть компаний проводила всего одно собеседование, и в течении 1-2 дней присылало фидбек. Тестовые задания или несколько собеседований позволяли себе только крупные компании с каким-то известным именем на рынке труда. Видимо, тем кто поменьше, приходится забирать кандидатов, не давая им времени думать и сравнивать оферы.
  • Судя по количеству оферов и тому, что ни в одном не предложили меньше запрашиваемой мною сумме, мне нужно было ещё сильнее повысить ожидаемую зп. Значил либо я быстро вырос, либо в епаме мне недоплачивали). Собираясь искать работу, смелее завышайте зп.
  • Условия все предлагают почти одинаковые — ДМС, белая зп, свободный график, всякие компенсации. Только одна компания звала на удалёнку. И только у одной (уже другой) компании была серая зп.
  • Примерно у половины компаний в работе использовался Spring , но по нему на собеседованиях, кажется, не спрашивали ни разу. Только общие вопросы — работал ли вовсе и что делал. В целом знания конкретных фреймворков и библиотек никто не ожидал.
  • Собеседования длились от 20 минут до 2-х часов. Обычно около часа. В две компании были собеседования по Skype.
  • Некоторые простейшие вопросы ставили меня в тупик. Например что-нибудь про ООП (я спутал полиморфизм и инкапсуляцию:)). Когда ты так привыкаешь к понятиям, что стопаришься когда о них расспрашивают. Довольно неприятные ощущения.

Теперь о вопросах на собеседованиях:

  • Вообще везде спрашивали разницу между ArrayList и LinkedList . При том в половине случаев со словами «ну этот вопрос вам уже много раз задавали, но всё же». Не знаю, то-ли по инерции, то-ли действительно бывают мидлы, которые не знают разницы, да ещё и не узнают её на первом же подобном собеседовании. В любом случае лучше помнить стандартные коллекции и то, как они работают.
  • Почти везде просили перечислить виды коллекций и то, как они работают. Чаще всего спрашивали про HashMap (после ArrayList, конечно).
  • Часто спрашивали про Object и какие методы в нём есть.
  • Часто спрашивали про SOLID и расшифровать эту аббревиатуру я как назло никогда не мог — всегда такое плохо у меня запоминается) Но общий смысл принципов конечно понятен и его объяснял.
  • Часто был вопрос про REST .
  • Периодически спрашивали про сборщик мусора, но без тонких деталей. Рассказа об одном алгоритме его работы на поколениях было достаточно.
  • Периодически спрашивали про ООП, принципы, из более менее интересного «объясни полиморфизм пятикласснику».
  • Задачи прямо на собеседовании дают редко, как и тестовые задания домой. В основном крупные и известные компании.
  • Периодически спрашивают про многопоточность, но судя по всему действительно она важна уже в вакансиях ближе к senior.
  • Часто, и это интереснее всего, идёт обсуждение каких-нибудь абстрактных задач, способы их решения, проблемы и подобное.

Об удачных собеседованиях рассказывать нет смысла, расскажу о неудачных:

  • Яндекс Деньги. Прошёл первое собеседование, после этого получил тестовое задание как раз на параллельность. Выполнил, но видимо недостаточно хорошо.
  • Deutsche Bank. Единственное собеседование, за которое мне именно стыдно. Не выспался или ещё что — но тупил страшно. Я на стажировки 5 лет назад лучше собеседования проходил. Там были вопросы по Java, потом задачки всякие посчитать какая где память, что лучше. В общем я ошибался на уровне таблицы умножения. Не удивлён что мне отказали)
  • JetBrains. Тут по требованиям в вакансии я сразу не подходил, но решил попробовать. Интересное собеседование, проводилось в офисе, но по видеосвязи с Мюнхеном. В целом отвечал вроде неплохо, но нужна была как раз тоже параллельность, в которой у меня только учебный опыт.

Больше всего понравился процесс найма в Петер-Сервис, несмотря на то, что от знакомых я получил много плохих отзывов о компании (объективности ради — были и хорошие, видимо как повезёт с отделом и командой). Там было сначала собеседование с парой разработчиков, общие вопросы, обсуждения. Затем меня пригласили в команду, куда я должен был выйти на работу, познакомиться, и я рассказал об одном своём проекте, как его делал, какие проблемы решал. Обсуждали это и некоторые подробности их проекта. И уже после этого получил офер. Таким образом, думая над офером, я уже был знаком со всей командой, примерно представлял где и с кем буду работать. Это круто, потому что примерно в половине собеседований я общался с 1-2 людьми, не знал ни с кем там работать, ни подробностей проекта, кроме общих фраз (или вовсе нескольких вариантов проектов). Но всё же пошёл работать я не к ним.

А в итоге я попал на работу во ВКонтакте, даже не на Java. Там было первое собеседование, тестовое задание и финальное собеседование.

Выводы? Ходите на собеседования почаще и завышайте ожидаемую зп.

Вопросы к собеседованию на должность Java Junior.

Подготовка к собеседованию на должность Java Junior является неотъемлемой частью пути начинающего разработчика. Перед тем как начать обход потенциальных работодателей необходимо основательно подготовиться к встрече с ними. Очень важно постараться предусмотреть вопросы, которые Вам будут заданы техническими специалистами. Очень часто так бывает, что юный соискатель прочёл несколько книг, прошёл какой-либо курс и даже, возможно, написал своё приложение для демонстрации возможностей, но волнение или отсутствие ясной картины об языке или технологии в целом не дают связать и пары слов на собеседовании. Он смотрит на потенциального работодателя, всё понимает, но не знает как правильно изложить свои мысли.

Я постарался собрать наиболее полный список вопросов к собеседованию на должность java junior , большинство из которых Вы точно услышите при поиске своего первого места работы в отрасли java разработчика.

1)
2)
3)
4)
5)
6)
7)

9)
10)
11)
12)
13)
14)
15)
16)
17)
18)
19)
20)
21)
22)
23)
24)
25)
26)
27)
28)
29)
30)
31)
32)
33)
34)
35)
36)
37)
38)
39)
40)
41)
42)
43)
44)
45)
46)
47)
48)
49)
50)
51)Что такое autoboxing?
52)Зачем используется autoboxing?
53)Альтернативы autoboxing?
54)Типы-обертки для примитивных типов mutable или immutable?
55)Как примитивные типы приводятся к непримитивным аналогам?
56)Как непримитивные типы приводятся к примитивным?
57)Как сравниваются примитивные и непримитивные типы?
58)Всегда ли создается новый объект при операции autoboxing?
59)Как работает кэширование при операции autoboxing?
60)Для каких типов и/или значений работает кэширование?
61)Какие приоритеты нитей бывают?
62)Можно ли остановить нить, снизив ее приоритет до 0?
63)Зачем нужен класс ThreadGroup?
64)В какой группе нитей состоит main-thread?
65)Что такое паттерн ThreadPool
66)Зачем нужен класс ThreadPoolExecutor?
67)Сколько способов создать нить вы знаете? (Thread, Runnable, Callable)
68)Для чего используется класс Future?
69)В чем преимущества Callable над Runnable?
70)Можно ли отменить выполнение задачи, если использовать класс Future?
71)Что такое дедлок?
72)Какие вы знаете стратегии, предотвращающие появление дедлоков?
73)Могут ли возникнуть дедлоки при использовании методов wait-notify?
74)Что чаще используется: notify или notifyAll?
75)Метод wait рекомендуется использовать с конструкциями if или while?
76)Что происходит после вызова метода notifyAll?
77)Какие выгоды получает объект, если он immutable?
78)Что такое «thread-safe»?
79)Что такое «happens-before»?
80)Что такое JMM?
81)Какое исключение вылетит, если вызвать wait не в блоке synchronized?
82)Как пользоваться интерфейсом Comparable?
83)Как пользоваться интерфейсом Comparator?
84)Какие методы есть у класса Collections?
85)Какие методы есть у класса Arrays?
86)Как называется сортировка, которая используется при вызове Collections.sort()?
87)Что такое канкаренси?
88)Какие классы из «канкаренси» ты знаешь?
89)Как устроен класс ConcurrentHashMap?
90)Что такое класс Lock?
91)Что такое итератор?
92)Что такое mutex?
93)Что такое монитор?

94)Как в java можно разделить вывод сообщений в системную консоль, а ошибок в файл?
95)Какая разница между интерфейсом и абстрактным классом?
96)Когда лучше использовать синхронизированный блок вместо синхронизированного метода?
97)Какое назначение у ключевого слова transient ?
98)Как можно запустить сборщик мусора?
99)В чём разница между конструкторами и другими методами?
100)Объясните в чём смысл использования пакетов в Java?
101)В чём разница между J2SDK 1.5 и J2SDK 5.0?
102)Имеет ли значение, в каком порядке отлавливаются исключения FileNotFoundException и IOException, и почему?
103)Что произойдёт, если заменить && на & в следующем коде:

Java

String a=null; if (a!=null && a.length()>10) {...}

String a = null ; if (a != null && a . length () > 10 ) { . . . }

104)В чём главная разница между Vector и ArrayList?
105)В чём разница между очередью и стеком?
106)Назовите все состояния объекта Thread?
107)В какие состояния может перейти нить, при входе в блок synchronized?
108)В какое состояние перейдет нить, при вызове метода wait()?
109)В какое состояние перейдет нить, при вызове метода wait(500)?
110)В какое состояние перейдет нить, при вызове метода notify()?
111)В какое состояние перейдет нить, при вызове метода notifyAll()?
112)Три нити в блоке synchronized вызвали wait() у объекта-мютекса.
113)В какое состояние перейдут эти нити, если четвертая нить вызовет notifyAll()?
114)Чем отличается join(500) от wait(500)?
115)Чем отличается wait(500) от sleep(500)?
116)В какое состояние перейдет нить при вызове метода yield()?
117)Можно ли объявлять внутренние классы private?
118)Можно ли объявлять анонимные внутренние классы private?
119)Сколько у класса максимально может быть внутренних классов?
120)В чём смысл ключевого слова super в Java?

Показать скрытое содержание

Переменные и методы суперкласса могут быть переопределены в классе-наследнике. В случае переопределения, подкласс определяет свои переменные и методы, используя имена переменных и методов суперкласса.
В результате переопределения подкласс больше не сможет обращаться к переменным и методам суперкласса напрямую, ведь они теперь оказываются скрытыми в пространстве имён подкласса. К счастью, в Java предусмотрен механизм доступа к переопределённым методам и переменным суперкласса — ключевое слово super . super может помочь при обращении к переменным, методам, конструкторам суперкласса.
Важный момент: при вызове конструктора суперкласса super должен быть первым выражением в конструкторе.

121)Какая разница между перегрузкой и переопределением методов в Java?
122)Благодаря чему приложения Java не зависят от платформы?
123)Что такое перегрузка(overloading) метода в Java?
124)Какие отличия между C++ и Java?
125)Что такое JIT компиляция?
126)Что такое байт-код?
127)Что такое класс(class)?
128)Что такое объект в Java?
129)Что такое метод в Java?
130)В чём смысл инкапсуляции?
131)Объясните почему у метода main() именно такая сигнатура (public, void, static)?
132)Что такое конструктор в Java?
133)В чём разница между length и length()?
134)Что такое ASCII?
135)Что такое Unicode?
136)Что такое и как используются константы в Java?
137)В чём разница между «>>» и «>>>» в Java?
138)Какие Вы знаете стандарты оформления кода?
139)Что такое «IS-A» отношение в Java?
140)Что такое «HAS-A» отношение в Java?
141)В чём разница между отношениями «HAS-A» и «IS-A»?
142)Объясните назначение оператора instanceof в java?
143)Что есть null в Java?
144)Можно ли иметь много классов одном файле?
145)Какие модификаторы доступа можно указывать для главного (top) класса?
146)Можно ли указывать более одного пакета в одном файле?
147)Можно ли объявлять пакет после объявления импорта файле?
148)Что такое ThreadGroup и зачем он нужен?
149)Что такое ThreadPool и зачем он нужен?
150)Что такое ThreadPoolExecutor и зачем он нужен?
151)Что такое Concurrency?
152)Что такое «атомарные типы» в Java?
153)Зачем нужен класс ThreadLocal?
154)Что такое модификатор volatile?
155)Что такое Executor?
156)Что такое ExecutorService?
157)Зачем нужен ScheduledExecutorService?
158)Назовите все состояния объекта Thread.
159)В какие состояния может перейти нить при входе в блок synchronized?
160)В какое состояние перейдёт нить при вызове метода wait()?
161)В какое состояние перейдёт нить при вызове метода wait(500)?
162)В какое состояние перейдёт нить при вызове метода notify()?
163)В какое состояние перейдёт нить при вызове метода notifyAll()?
164)Три нити в блоке synchronized вызвали метод wait() у объекта-мютекса. В какое состояние перейдут эти нити, если четвертая нить вызовет notifyAll()?
165)Чем отличается join(500) от wait(500)?
166)Чем отличается wait(500) от sleep(500)?
167)В какое состояние перейдёт нить при вызове метода yield()?
168)Какие модификаторы доступа могут использоваться с классами?
169)
170)Расскажите об абстрактных классах в Java.
171)Можно ли описать конструктор в абстрактном классе?
171)Что такое абстрактный метод?
172)Что такое исключения в Java?
173)Назовите несколько вариантов применения механизма исключений.
174)Что такое перехват исключений в Java?
175)Сколько способ обработки исключений Вы знаете?
176)Назовите 5 ключевых слов, относящихся к механизму Java.
177)Можно ли использовать блок try без блока catch?
178)В чём важность блока finally?
179)Можно ли писать код между блоками try … catch?
180)Можно ли отлавливать более одного исключения в одном блоке catch?
181)Что такое проверяемое (checked exceptions) исключение?
182)Расскажите о непроверяемых (unchecked exceptions) исключениях.
183)Для чего служит ключевое слово throw ?
184)Можно ли писать код после throw?
185)Для чего нужно ключевое слово throws ?
186)Может ли быть так, что блок finally не будет выполнен? Если да, то когда?
187)Можно ли блоке catch перехватить проверяемое (checked) исключение?
188)Как можно создать собственное исключение?
189)Можно ли выбросить исключение из блока catch?
190)Можно ли использовать вложенность для блоков try?
191)В каком случае можно получить ClassNotFoundException?
192)Поток и процесс — это одно и тоже? Если нет, в чём разница?
193)Что такое многопоточность в Java?
194)Какие есть преимущества у многопоточного программирования?
195)Сколько способов создания потока (thread) Вы знаете?
196)Какой лучший подход создания потока(thread)?
197)Что Вы знаете о планировщике задач в JVM?
198)Можно ли стартовать мёртвую нить в Java?
199)Можно ли перезапустить нить после запуска?
200)Какие способы синхронизации Вы знаете?
201)Что такое синхронизированный метод?
202)Могут ли зайти в синхронизированный метод потоки, если в нём уже находится один поток?
203)Что такое синхронизированный блок в Java?
204)Могут ли статические методы быть синхронизированны?
205)Как в Java используются приоритеты потоков?
206)Как можно задать или изменить приоритет нити?
207)Если две нити имеют одинаковый приоритет, какая начнёт выполнение первой?
208)Получит ли шанс на повторное выполнение уступившая (yielded) нить?
209)Объясните важность метода join()
210)Что является демоном (daemon) в Java?
211)Объект или ссылку уничтожает сборщик мусора?
212)Когда и кто может вызывать finalize() метод в Java?
213)Приведите пример перечислений (enumeration) в Java.
214)Есть ли разница между коллекцией, Collection и Collections в Java?
215)Какие классы реализуют интерфейс List?

Показать скрытое содержание

1) ArrayList
2) Vector
3) LinkedList


216)В чём разница между ArrayList и LinkedList?
217)Для чего нужен класс Iterator и какие у него есть методы?
218)Какая разница между Comparator и Comparable?
219)Какие есть альтернативы у сериализации в Java?
220)Как сделать объект сериализуемым?
221)Что такое serialVersionUID и обязательно ли его определять?
222)Какие 2 метода необходимы объекту для того, что бы он мог являться ключом в HashMap?

Показать скрытое содержание

Перед тем как использовать объект как ключ в HashMap, необходимо убедиться в том что у него реализованы (правильно ) методы equals и hashcode.


223)Что такое Java-апплет? Что вы о нём знаете?

Показать скрытое содержание

Java-апплет — это программа на языке Java, которая может встраиваться в HTML разметку и выполняться прямо в браузере на стороне клиента. Апплеты используются для создания динамичных и интерактивных страниц.


224)Расскажите о жизненном цикле java-апплета.

Показать скрытое содержание

Апплет может находиться в следующих состояниях:
Init: Апплет инициализируется каждый раз, когда запускается.
Start: Начинается выполнение апплета.
Stop: Останавливается выполнения апплета.
Destroy: Завершение и уборка за собой. Освобождение ресурсов, очистка.


225)Что происходит при загрузке апплета?
226)В чём разница между апплетом и Java-приложением?
227)Какие ограничения существуют у java-апплетов?
228)Что такое «ненадежный апплет»?
229)В чём разница между апплетом, загруженным через интернет и апплетом, загруженным из файловой системы?
230)Что из себя представляет загрузчик классов для апплетов?
231)Что такое и что обеспечивает менеджер безопасности апплетов?

SWING

232)В чём разница между Choice и List?
233)Для чего нужен layout manager?
234)В чём разница между Scrollbar и JScrollPane?
235)Какие есть потоко-защищённые метод в SWING?

Показать скрытое содержание

Всего 3 потоко-защищённых метода: repaint, revalidate, и invalidate.


236)Назовите 3 подкласса Component, поддерживающих рисование.

Показать скрытое содержание

Canvas, Frame, Panel


237)Что такое клиппинг (clipping)?
238)В чём разница между MenuItem и CheckboxMenuItem ?
239)По какому принципу выстраиваются элементы в BorderLayout?
240)По какому принципу выстраиваются элементы в GridBagLayout?
241)Какая разница между классами Window и Frame?
242)Может ли GUI компонент сам обрабатывать свои события?
243)Какой паттерн проектирования используется для всех Swing компонентов?

JDBC

244)Что такое JDBC?
245)Для чего используется драйвер JDBC?
246)Какое назначение у метода Class.forName?
247)Какие преимущества PreparedStatement над Statement ?

Remote Method Invocation (RMI)

248)Что такое RMI?
249)Какие базовые принципы архитектуры RMI Вы знаете?
250)Какие уровни составляют архитектуру RMI?
251)Какова роль удалённого интерфейса в RMI?
252)Для чего служит java.rmi.Naming Class?
253)Как вы понимаете связывание в RMI?
254)Какая разница между использованием bind() и rebind() методов?
255)Какие шаги необходимо выполнить для запуска RMI программы?
256)Что такое «заглушка» (stub) в RMI?
257)Что такое DGC и как это работает?
258)Какая цель использования RMISecurityManager в RMI?
259)Приведите примеры Marshalling и demarshalling.
260)Приведите примеры Serialization и Deserialization.

Servlets

261)Что такое сервлет?
262)Приведите пример архитектуры сервлетов.
263)В чём разница между Applet и Servlet?
264)В чём разница между GenericServlet и HttpServlet?
265)Расскажите о жизненном цикле сервлета.
266)В чём разница между doGet() и doPost()?
267)Что означает «Веб-приложение»?
268)Что такое Server Side Include (SSI)?
269)Что такое цепочка сервлетов?
270)Как вы узнаете что клиентская машина послала запрос вашему сервлету?
271)Какая структура у HTTP заголовка?
272)Что такое cookie?
273)По какому протоколу взаимодействуют браузер и сервлет?
274)Что вы знаете о HTTP Tunneling?
275)Что такое URL Encoding и URL Decoding?

JSP

276)Что такое JSP страница?
277)Как происходит обработка JSP запроса?
278)Какие есть преимущества использования JSP?
279)Что такое директивы? Чем различаются типы директив, доступных в JSP?
280)Что такое JSP действия?
281)Что такое сценарии (скриптлеты, Scriptlets) ?

Общее

282)В чём разница между JDK и JRE?
283)Что такое JVM?
284)Почему Java называется «платформо-независимым» языком?
285)Какие есть типы данных в Java?
286)Что такое Autoboxing и unboxing?
287)Какая разница между String и StringBuffer?
288)Какая разница между байтовым и символьным потоками?
289)Что такое FileInputStream и FileOutputStream?
290)Что такое FileReader и FileWriter?
291)Как работать с классом SimpleDateFormat?
292)Как из объекта типа Date получить строку «21 Aug 1992»?
293)Что такое ClassLoader?
294)Напишите программу, проверяющую число на четность/нечетность.
295)Приведите пример двойной проверки блокировки в синглтонею
296)Как создать потоко-безопасный синглтон?
297)Когда используются volatile переменные?
298)Когда используются transient переменные?
299)В чём разница между volatile и transient переменными?
300)Можно ли переопределить приватный метод?
301)Какая разница между List и Set?
302)В чём разница между PATH и Classpath в Java?
303)Может ли абстрактный класс иметь конструктор?
304)Как сделать класс Immutable?
305)Какие типы данных используются для представления денег?
306)Какой последний паттерн проектирования Вы использовали?
307)Сколько в java зарезервированных ключевых слов? Сколько из них используются?
308)Какие символы нельзя использовать в имени переменной?
309)На какие группы делятся типы данных в Java?
310)Какие значения присваиваются разным типам по умолчанию?
311)Какие есть циклические конструкции в java? Когда и какуую использовать?
312)Как Вы понимаете слово «класс»? Опишите термин своими словами.
313)Какие вы знаете блоки инициализаций?
314)Как правильно реализовывать hashcode объекта?
315)Есть ли смысл в добавлении private методу модификатора final?
316)Какие есть коллекции типа Queue?
317)Можно ли сделать коллекцию только для чтения? Если да, то для чего? Если нет, то почему?
318)Какие главные отличия между стеком и очередью?
319)Что означает термин «конкатенация»?
320)Как можно разбить строку на подстроки встроенными средствами java?
321)К чему приведёт выполнение одного и того же участка кода разными потоками?
322)Как можно получить ссылку на текущий поток?
323)Какие условия должны выполниться перед вызовом методов wait/notify?
324)Что является мьютексом в случае синхронизированного метода?
325)Что вы знаете об агрегатных функциях? Как они работают со значением null?
326)Опишите структуру, используемую в веб-проекте.
327)Что вы знаете о ServletConfig?
328)Методы, необходимые к определению при создании сервлетов.
329)Что такое WWW?
330)Какие методы передачи данных по HTTP вы знаете?
331)Что Вы знаете об ORM?
332)Какие Вы знаете принципы ООП? Откуда Вы их знаете? Используете ли?
333)Что входит в сигнатуру метода? Что не входит?
334)В чём особенность инициализации final static переменных?
335)Какие отличия и в чём сходства между внутренними и вложенными классами?
336)Какого предназначение модификаторов abstract и final в отношении методов и классов.
337)Могут ли быть перехвачены исключения из разных веток наследования в одном блоке catch?
338)Что такое Error? Для чего используется?
339)Какие есть особенности у коллекций типа Set?
340)Возможно ли получение синхронизированной коллекции из несинхронизированной?
341)Приведите пример выброса ConcurrentModificationException.
342)Можно ли наследоваться от строкового типа?
343)Каким методом можно вырезать подстроку?
344)Какие основные классы есть в механизме ввода-вывода в Java?
345)Какой символ используется в качестве разделителя при указании пути к элементам файловой системы в Java?
346)Когда стоит рассматривать использование многопоточности в приложении? Всегда ли многопоточность — это хорошо?
347)Для чего нужны потоки-демоны? Есть ли потоки-ангелы?
348)Где используется метод join?
349)Какие есть неявные, внутренние объекты JSP EL? Чем они отличаются от объектов jsp?
350)Какой у сервлета жизненный цикл? Какие методы вызываются на его этапах?
351)Какая разница между encodeUrl() и encodeRedirectUrl()?
352)В чём заключаются отличия между web server и application server?
353)Что Вы знаете об AJAX? Какие принципы лежат в основе данной технологии?
354)Какие есть примитивные типы и сколько места они занимают в памяти?
355)Какие есть логические операции в Java?
356)Что такое побитовый сдвиг? Какая математическая операции ему соответствует?
357)С помощью какого оператора можно немедленно оборвать выполнение цикла?
358)Может ли меняться количество передаваемых в метод аргументов?
359)Как правильно выполнять инициализацию статических и нестатических полей?
360)Может ли метод являться абстрактным и статическим одновременно?
361)Может ли класс быть статическим?
362)Какие модификаторы есть по умолчанию у полей и методов интерфейсов?
363)Какой метод возвращает строковое описание объекта?
364)С помощью чего можно добраться до приватных полей класса? Возможно ли это?
365)Может ли потомок расширить видимость приватного метода класса-родителя?
366)Что Вы знаете о MVC? Каков принцип его работы?
367)Есть ли смысл в обработке ошибок jvm?
368)Бывают ли ситуации, когда блок finally не выполняется?
369)Метод может выбросить IOException и FileNotFoundException. Какая очередность должна быть у блоков catch?
370)Какие есть коллекции типа List?
371)Какие Вы знаете реализации SortedSet?
372)Какие коллекции являются синхронизированными?
373)Какова реализация метода foreach?
374)Что такое fail-safe и fail-fast свойства?
375)Что Вы знаете об алгоритмах сортировки?
376)Как развернуть строку задом-наперёд?
377)Что Вы знаете о пуле строк?
378)Как проще всего найти необходимый символ в строке?

Уважаемые пользователи! Если у Вас есть интересные вопросы к собеседованию на java junior , присылайте мне на почту [email protected] или

Этот раздел посвящён вопросам, которые могут быть заданы при прохождении интервью на позицию Java программиста.

Цель — собрать не только вопросы (что-то их очень много в интернете), но и ответы на них в одном месте.

По поводу указания авторства читайте на главной странице раздела Interview

  1. Сколько ключевых слов зарезервировано языком, что это за слова, какие из них не используются?
  2. Из каких символов может состоять имя переменной (корректный идентификатор)?
  3. Что значит слово “инициализация”?
  4. На какие основные группы можно поделить типы данных?
  5. Какие примитивные типы вы знаете?
  6. Что вы знаете о преобразовании примитивных типов данных, есть ли потеря данных, можно ли преобразовать логический тип?
  7. Какими значениями инициализируются переменные по умолчанию?
  8. Как передается значение переменной (по ссылке/значению)?
  9. Что вы знаете о функции main, какие обязательные условия ее определения?
  10. Какие логические операции и операторы вы знаете?
  11. В чем разница краткой и полной схемы записи логических операторов?
  12. Что такое таблица истинности?
  13. Что такое тернарный оператор выбора?
  14. Какие унарные и бинарные арифметические операции вы знаете?
  15. Какие побитовые операции вы знаете?
  16. Какова роль и правила написания оператора выбора (switch)?
  17. Какие циклы вы знаете, в чем их отличия?
  18. Что такое “итерация цикла”?
  19. Какие параметры имеет цикл for, можно ли их не задать?
  20. Какой оператор используется для немедленной остановки цикла?
  21. Какой оператор используется для перехода к следующей итерации цикла?
  22. Что такое массив?
  23. Какие виды массивов вы знаете?
  24. Что вы знаете о классах оболочках?
  25. Что такое автоупаковка (boxing/unboxing)?

  1. Назовите принципы ООП и расскажите о каждом.
  2. Дайте определение понятию “класс”.
  3. Что такое поле/атрибут класса?
  4. Как правильно организовать доступ к полям класса?
  5. Дайте определение понятию “конструктор”.
  6. Чем отличаются конструкторы по-умолчанию, копирования и конструктор с параметрами?
  7. Какие модификации уровня доступа вы знаете, расскажите про каждый из них.
  8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.
  9. О чем говорят ключевые слова “this”, “super”, где и как их можно использовать?
  10. Дайте определение понятию “метод”.
  11. Что такое сигнатура метода?
  12. Какие методы называются перегруженными?
  13. Могут ли нестатические методы перегрузить статические?
  14. Расскажите про переопределение методов.
  15. Может ли метод принимать разное количество параметров (аргументы переменной длины)?
  16. Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
  17. Как получить доступ к переопределенным методам родительского класса?
  18. Какие преобразования называются нисходящими и восходящими?
  19. Чем отличается переопределение от перегрузки?
  20. Где можно инициализировать статические/нестатические поля?
  21. Зачем нужен оператор instanceof?
  22. Зачем нужны и какие бывают блоки инициализации?
  23. Каков порядок вызова конструкторов и блоков инициализации двух классов: потомка и его предка?
  24. Где и для чего используется модификатор abstract?
  25. Можно ли объявить метод абстрактным и статическим одновременно?
  26. Что означает ключевое слово static?
  27. К каким конструкциям Java применим модификатор static?
  28. Что будет, если в static блоке кода возникнет исключительная ситуация?
  29. Можно ли перегрузить static метод?
  30. Что такое статический класс, какие особенности его использования?
  31. Какие особенности инициализации final static переменных?
  32. Как влияет модификатор static на класс/метод/поле?
  33. О чем говорит ключевое слово final?
  34. Дайте определение понятию “интерфейс”.
  35. Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
  36. Почему нельзя объявить метод интерфейса с модификатором final или static?
  37. Какие типы классов бывают в java (вложенные… и.т.д.)
  38. Какие особенности создания вложенных классов: простых и статических.
  39. Что вы знаете о вложенных классах, зачем они используются? Классификация, варианты использования, о нарушении инкапсуляции.
  40. В чем разница вложенных и внутренних классов?
  41. Какие классы называются анонимными?
  42. Каким образом из вложенного класса получить доступ к полю внешнего класса?
  43. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
  44. Как связан любой пользовательский класс с классом Object?
  45. Расскажите про каждый из методов класса Object.
  46. Что такое метод equals(). Чем он отличается от операции ==.
  47. Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
  48. Если equals() переопределен, есть ли какие-либо другие методы, которые следует переопределить?
  49. В чем особенность работы методов hashCode и equals? Каким образом реализованы методы hashCode и equals в классе Object? Какие правила и соглашения существуют для реализации этих методов? Когда они применяются?
  50. Какой метод возвращает строковое представление объекта?
  51. Что будет, если переопределить equals не переопределяя hashCode? Какие могут возникнуть проблемы?
  52. Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode?
  53. Как вы думаете, будут ли какие-то проблемы, если у объекта, который используется в качестве ключа в hashMap изменится поле, которое участвует в определении hashCode?
  54. Чем отличается абстрактный класс от интерфейса, в каких случаях что вы будете использовать?
  55. Можно ли получить доступ к private переменным класса и если да, то каким образом?
  56. Что такое volatile и transient? Для чего и в каких случаях можно было бы использовать default?
  57. Расширение модификаторов при наследовании, переопределении и сокрытии методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость? А если protected? А сузить видимость?
  58. Имеет ли смысл объявлять метод private final?
  59. Какие особенности инициализации final переменных?
  60. Что будет, если единственный конструктор класса объявлен как final?
  61. Что такое finalize? Зачем он нужен? Что Вы можете рассказать о сборщике мусора и алгоритмах его работы.
  62. Почему метод clone объявлен как protected? Что необходимо для реализации клонирования?
  63. Знакомы ли Вам какие-либо паттерны проектирования?
  64. Напишите Singleton… А с ленивой загрузкой. А если он должен быть потоко-безопасным? А в каких случаях ленивая загрузка хуже?
  65. Что можете сказать про MVC? Нарисуйте диаграмму и объясните, как MVC работает.
  66. Напишите функцию вычисления факториала.
  67. Дана функция вычисления чисел Фибоначчи, известно, что она работает. Найдите логическую ошибку. Оцените сложность получившегося алгоритма.

  1. Дайте определение понятию “исключение”
  2. Какова иерархия исключений.
  3. Можно/нужно ли обрабатывать ошибки jvm?
  4. Какие существуют способы обработки исключений?
  5. О чем говорит ключевое слово throws?
  6. В чем особенность блока finally? Всегда ли он исполняется?
  7. Может ли не быть ни одного блока catch при отлавливании исключений?
  8. Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
  9. Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?
  10. Что вы знаете об обрабатываемых и не обрабатываемых (checked/unchecked) исключениях?
  11. В чем особенность RuntimeException?
  12. Как написать собственное (“пользовательское”) исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?
  13. Какой оператор позволяет принудительно выбросить исключение?
  14. Есть ли дополнительные условия к методу, который потенциально может выбросить исключение?
  15. Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
  16. Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”?
  17. Что вы знаете о OutOfMemoryError?
  18. Что вы знаете о SQLException? К какому типу checked или unchecked оно относится, почему?
  19. Что такое Error? В каком случае используется Error. Приведите пример Error’а.
  20. Какая конструкция используется в Java для обработки исключений?
  21. Предположим, есть блок try-finally. В блоке try возникло исключение и выполнение переместилось в блок finally. В блоке finally тоже возникло исключение. Какое из двух исключений “выпадет” из блока try-finally? Что случится со вторым исключением?
  22. Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?

  1. Дайте определение понятию “коллекция”.
  2. Назовите преимущества использования коллекций.
  3. Какие данные могут хранить коллекции?
  4. Какова иерархия коллекций?
  5. Что вы знаете о коллекциях типа List?
  6. Что вы знаете о коллекциях типа Set?
  7. Что вы знаете о коллекциях типа Queue?
  8. Что вы знаете о коллекциях типа Map, в чем их принципиальное отличие?
  9. Назовите основные реализации List, Set, Map.
  10. Какие реализации SortedSet вы знаете и в чем их особенность?
  11. В чем отличия/сходства List и Set?
  12. Что разного/общего у классов ArrayList и LinkedList, когда лучше использовать ArrayList, а когда LinkedList?
  13. В каких случаях разумно использовать массив, а не ArrayList?
  14. Чем отличается ArrayList от Vector?
  15. Что вы знаете о реализации классов HashSet и TreeSet?
  16. Чем отличаются HashMap и TreeMap? Как они устроены и работают? Что со временем доступа к объектам, какие зависимости?
  17. Что такое Hashtable, чем она отличается от HashMap? На сегодняшний день она deprecated, как все-таки использовать нужную функциональность?
  18. Что будет, если в Map положить два значения с одинаковым ключом?
  19. Как задается порядок следования объектов в коллекции, как отсортировать коллекцию?
  20. Дайте определение понятию “итератор”.
  21. Какую функциональность представляет класс Collections?
  22. Как получить не модифицируемую коллекцию?
  23. Какие коллекции синхронизированы?
  24. Как получить синхронизированную коллекцию из не синхронизированной?
  25. Как получить коллекцию только для чтения?
  26. Почему Map не наследуется от Collection?
  27. В чем разница между Iterator и Enumeration?
  28. Как реализован цикл foreach?
  29. Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?
  30. Почему в классе iterator нет метода для получения следующего элемента без передвижения курсора?
  31. В чем разница между Iterator и ListIterator?
  32. Какие есть способы перебора всех элементов List?
  33. В чем разница между fail-safe и fail-fast свойствами?
  34. Что делать, чтобы не возникло исключение ConcurrentModificationException?
  35. Что такое стек и очередь, расскажите в чем их отличия?
  36. В чем разница между интерфейсами Comparable и Comparator?
  37. Почему коллекции не наследуют интерфейсы Cloneable и Serializable?

  1. Какие “строковые” классы вы знаете?
  2. Какие основные свойства “строковых” классов (их особенности)?
  3. Можно ли наследовать строковый тип, почему?
  4. Дайте определение понятию конкатенация строк.
  5. Как преобразовать строку в число?
  6. Как сравнить значение двух строк?
  7. Как перевернуть строку?
  8. Как работает сравнение двух строк?
  9. Как обрезать пробелы в конце строки?
  10. Как заменить символ в строке?
  11. Как получить часть строки?
  12. Дайте определение понятию “пул строк”.
  13. Какой метод позволяет выделить подстроку в строке?
  14. Как разбить строку на подстроки по заданному разделителю?
  15. Какой метод вызывается для преобразования переменной в строку?
  16. Как узнать значение конкретного символа строки, зная его порядковый номер в строке?
  17. Как найти необходимый символ в строке?
  18. Можно ли синхронизировать доступ к строке?
  19. Что делает метод intern()?
  20. Чем отличаются и что общего у классов String, StringBuffer и StringBuilder?
  21. Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?
  22. Почему строка неизменная и финализированная в Java?
  23. Почему массив символов предпочтительнее строки для хранения пароля?
  24. Почему строка является популярным ключом в HashMap в Java?
  25. Напишите метод удаления данного символа из строки.

  1. Какие существуют виды потоков ввода/вывода?
  2. Назовите основные предки потоков ввода/вывода.
  3. Что общего и чем отличаются следующие потоки: InputStream, OutputStream, Reader, Writer?
  4. Что вы знаете о RandomAccessFile?
  5. Какие есть режимы доступа к файлу?
  6. В каких пакетах лежат классы-потоки?
  7. Что вы знаете о классах-надстройках?
  8. Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
  9. Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
  10. Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
  11. Какой класс предназначен для работы с элементами файловой системы (ЭФС)?
  12. Какой символ является разделителем при указании пути к ЭФС?
  13. Как выбрать все ЭФС определенного каталога по критерию (например, с определенным расширением)?
  14. Что вы знаете об интерфейсе FilenameFilter?
  15. Что такое сериализация?
  16. Какие условия “благополучной” сериализации объекта?
  17. Какие классы позволяют архивировать объекты?

  1. Дайте определение понятию “процесс”.
  2. Дайте определение понятию “поток”.
  3. Дайте определение понятию “синхронизация потоков”.
  4. Как взаимодействуют программы, процессы и потоки?
  5. В каких случаях целесообразно создавать несколько потоков?
  6. Что может произойти если два потока будут выполнять один и тот же код в программе?
  7. Что вы знаете о главном потоке программы?
  8. Какие есть способы создания и запуска потоков?
  9. Какой метод запускает поток на выполнение?
  10. Какой метод описывает действие потока во время выполнения?
  11. Когда поток завершает свое выполнение?
  12. Как синхронизировать метод?
  13. Как принудительно остановить поток?
  14. Дайте определение понятию “поток-демон”.
  15. Как создать поток-демон?
  16. Как получить текущий поток?
  17. Дайте определение понятию “монитор”.
  18. Как приостановить выполнение потока?
  19. В каких состояниях может пребывать поток?
  20. Что является монитором при вызове нестатического и статического метода?
  21. Что является монитором при выполнении участка кода метода?
  22. Какие методы позволяют синхронизировать выполнение потоков?
  23. Какой метод переводит поток в режим ожидания?
  24. Какова функциональность методов notify и notifyAll?
  25. Что позволяет сделать метод join?
  26. Каковы условия вызова метода wait/notify?
  27. Дайте определение понятию “взаимная блокировка”.
  28. Чем отличаются методы interrupt, interrupted, isInterrupted?
  29. В каком случае будет выброшено исключение InterruptedException, какие методы могут его выбросить?
  30. Модификаторы volatile и метод yield().
  31. Пакет java.util.concurrent
  32. Есть некоторый метод, который исполняет операцию i++. Переменная i типа int. Предполагается, что код будет исполнятся в многопоточной среде. Следует ли синхронизировать блок?
  33. Что используется в качестве mutex, если метод объявлен static synchronized? Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?
  34. Предположим в методе run возник RuntimeException, который не был пойман. Что случится с потоком? Есть ли способ узнать о том, что Exception произошел (не заключая все тело run в блок try-catch)? Есть ли способ восстановить работу потока после того как это произошло?
  35. Какие стандартные инструменты Java вы бы использовали для реализации пула потоков?
  36. Что такое ThreadGroup и зачем он нужен?
  37. Что такое ThreadPool и зачем он нужен?
  38. Что такое ThreadPoolExecutor и зачем он нужен?
  39. Что такое «атомарные типы» в Java?
  40. Зачем нужен класс ThreadLocal?
  41. Что такое Executor?
  42. Что такое ExecutorService?
  43. Зачем нужен ScheduledExecutorService?
Этот список из 300+ вопросов (без ответов) был найден на сайте http://becomejavasenior.com/ . Там же указаны другие авторы.

58489 Total Views 15 Views Today

Views: 38 283

Сила - это река, из которой могут пить многие, и обучение джедая - не единственная возможность зачерпнуть из неё». - Люк Скайуокер Все подборки книг остались позади. Что из них читать, что нет - решать только вам. Сейчас у вас осталась одна-единственная цель: устроиться на работу и построить карьеру, не наступая на грабли. Последняя статья разделена на разделы: - До работы - Собеседование - Во время работы В этой части очень много моего личного мнения, поэтому прошу не вырывать фразы из контекста и относиться к ней как к откровенному разговору со старым приятелем:).

До работы

Ниже - десяток самых популярных клише, которые возникают, когда душа тянется к программированию, но человеку мешают те или иные обстоятельства. Моя задача - попробовать остановить вашу мнительность и настроить вас на позитивный образ мышления. Если вы читаете эту статью - вы дальше, чем вы думаете! Ментально вы уже там, где нужно, а если прочитали уже некоторые книги, то полпути уже пройдено. Поэтому перестаньте сомневаться, - это удел слабых. Только вперед! Уже лучше? Тогда поехали! «У меня нет образования» Когда я совсем зеленый поступал в академию одной из крупных аутсорсинговых фирм, интервьюеры мне мягко намекнули, что диплом их вообще не интересует, поэтому вопросы были конкретные - по ООП и по базовой Java. Конечно, вы встретите вакансии, где наличие тех. образования будет четким требованием. Я лишь хочу сказать, что его отсутствие - это не препятствие в наши дни. Во многих зарубежных конторах просят BS/MS Computer Science или, внимание, relevant experience. Не убедительно? Возможно, вас воодушевит тот факт, что технического образование нет у меня;), но это абсолютно не помешало получить в опыт в крупных компаниях. Спросите меня сейчас, как я поступил бы, если бы можно было перемотать пленку назад? Конечно пошел бы в КПИ/НАУ, но не особо горевал бы, не поступив. Перестаньте париться по этому поводу. Пройдет время - можно и в 40 получить корочку, если вам захочется, - а пока сфокусируйтесь на том, чтобы стать junior разработчиком здесь и сейчас. «Там будут люди умнее меня» Всегда будут люди умнее, смышленее, гибче, талантливее, чем вы, и любая работа - не исключение. Этот факт абсолютно не дает вам права отходить от цели. Возможно, где-то на другом конце Земного шара сидит маленький мальчик из Японии, который умножает и делит числа быстрее вас, а какая-то бабушка из Чехии печатает на клавиатуре мобильного телефона быстрее любого тинейджера. Но вы же не задумываетесь об этом, верно? Так почему тогда вас должны волновать люди, с которыми вы будете работать, когда устроитесь? В чем-то ваши будущие коллеги будут вас превосходить, в чем-то будут вам проигрывать. Это нормально! Вычеркиваем. «Мне кажется, я не смогу» Ну, во-первых, никто не сказал, что будет легко, но это совершенно не означает, что ваша цель неосуществима. Вам ничего не мешает просто-напросто попробовать, даже если вы сейчас работаете бухгалтером или продавцом-консультантом. Приходите после рабочего дня и садитесь за учебу. Если через время вы видите какой-то прогресс - это знак, что вы движетесь в правильном направлении. Не останавливайтесь! Если вам это хоть немножко интересно и вам это дается, тогда я не знаю ни одного пункта, который мог бы переубедить меня в том, что вы не достойны этого. «Меня накрывает лень» Лень - это всего лишь отсутствие мотивации. Если вы замечаете, что большую часть свободного времени вместо того, чтобы учиться и не отбиваться от курса вы, тупо занимаетесь фигней - я спешу вас уведомить о том, что, скорее всего, работа программиста - это не ваше. По крайней мере, не сейчас. Некоторые называют лень грехом, болезнью, холерой современного века вместе с ожирением. Оставьте это дело карьерным истеричкам. На мой взгляд, всё вокруг в этой жизни пропитано иллюзией борьбы и конкуренции: кто выше, кто сильнее, кто богаче. У кого машина покруче, у кого в коллективе зарплата больше, кто в спортзале жмет штангу потяжелее, кто из девушек раньше вышел замуж и завел детей - от этого тошнит, как от вонючего фаст-фуда. Люди перестали жить и радоваться жизни, следуя своей мечте, променяв свою зону комфорта на выбор между Pepsi и Coca-Cola. Для меня лень - это хорошо, это просто замечательно. Это обыкновенная защитная функция вашего организма экономить силы и время на бесполезные для него вещи. Человек создан быть свободным, поэтому если вы ленитесь - перестаньте стараться поднимать вашу пятую точку с дивана - возможно, она сейчас на своем месте:). «Я иду туда из-за денег» Если собрать разработчиков и сказать: отныне ваша зарплата будет 3-4к гривен для любого уровня, а тестировщики как будут получать те же рейты, так и останутся, то вопрос будет в другом: не то, скольких бомбанет, а то, сколько программистов после этой новости останутся именно программистами. Много людей лезут в IТ из-за бабла. Зарплата в переводе с баксов, сыры и дорогая зеркалка. Сколько я ни работал с людьми, всегда проскальзывали разговоры по этому поводу. Я не говорю, что это плохо, я лишь хочу, чтобы вы не пытались себя уговаривать, что вы из чисто духовных целей идете, чтобы изменить мир к лучшему. Прежде чем устроиться джуниором, я знал, какие зарплаты у сеньоров, техлидов - да даже у миддла, - и эти мысли только воодушевляли: я в свое время до работы программистом о таких цифрах мог только мечтать. Называйте эти вещи своими именами и перестаньте этого стыдиться. «Мне кажется, это не мое» А чье тогда? Вы знаете, это легко проверить. Откройте первый том Хортсманна и начните читать, писать код из примеров. Если вам не нудно и вы не топчетесь на одной и той же главе вторую неделю - отбросьте сомнения. Изучение технических специальностей - штука последовательная. Нельзя перейти к B, не зная А, но у вас всегда будет шанс вернуться на главу назад и укрепить фундамент. Дерзайте. «Таких, как я, много» Всегда есть конкурс на место. Я не спорю, к примеру, сейчас тестировщиков без опыта эта цифра - 300-400, а то и больше на одно место. Да, это горькая правда, но, с другой стороны, я даже с такими показателями не могу найти достаточно серьезного пункта. Да хоть 100500 на место!! У вас всегда есть возможность наработать опыт на своих проектах: постройте какой-то сервис, десткоп-программу, используйте весь стек, который знаете - и вы уже набиваете шишки, а остальные, кроме рассылки своего резюме, больше ничего не делают. «На мое резюме никто не отвечает» В продолжение вышестоящего пункта. Скорее всего, для будущих айтишников без опыта уметь написать красивое резюме - это хорошо, но когда на одну вакансию очень много людей, многие резюме друг на друга очень похожи: ты, конечно, можешь прислать фотку с декольте (если девушка) или написать много технологий, которые сам знаешь только из википедии. И в том, и в другом случае HR’у будет попросту по барабану: если в вакансии проекта должен быть человек, который, к примеру, знает AWS, то будут искать в резюме именно AWS. Возьмите во внимание еще такой немаловажный момент, как рекомендации коллег. Это - боль любого человека, который не имеет подобных знакомых, потому как львиную долю junior’ов забирают именно оттуда (если человек по рекомендацияем - не идиот, конечно). Обычно на позицию junior берут, подчеркиваю, адекватного активного человека, который готов учиться, да даже за еду. И если такой кандидат провалится, то скорее следующим будете вы. Ну, а пока остальных собеседуют, у вас есть много направлений, где можно круто прокачаться: open source, задачки в интернете, а может, и фриланс. «Я не пройду собеседование/хочу в конкретную компанию» Да, скорее всего, первое собеседование будет провалом, но тот опыт, который вы получите, бесценен. С каждым последующим собеседованием вы будете уверенней и находчивей. Как сейчас помню свое первое... Боже, что за чушь я нес?! Как было стыдно уходить после него (я запомнил того упыря, который ухмылялся мне в лицо), но когда пришел домой и все обдумал, я понял, что это был прекрасный урок. После него все последующее подобные мероприятия были пропитаны легкостью и уверенностью. Никто не умер, ищут таких, как я, значит, я подойду. Верьте в себя! Если вы хотите конкретно в определенную компанию, то я думаю, что не открою вам популярный в нашей среде лайфхак, но все же: перед тем, как организовать встречу с этой конторой, пройдите перед этим интервью у конкурентов. Возможно, вам предложат то, от чего вы не откажетесь, или условия будут покруче. Знаю точно одно: вы не пожалеете. «Мне и на этой работе хорошо» Знаете, есть такое старое высказывание: Le mieux est I’enneini du bien («Лучшее - враг хорошего»). Возможно, ваша работа - не самое худшее место, ну да, начальник - козел, ну и что? Или, к примеру, третий год без премии, зато стабильная зарплата, тем более мне уже за 30. В какой-то мере оно, может, и так, только помните, что жизнь у вас одна, и ее не следует тратить на разочарования, на мнимый комфорт, когда вокруг столько всего интересного, и всей жизни не хватит, чтобы понять. Не бойтесь стать лучше, не бойтесь стать лучшим. Не слушайте никого, идите к цели настойчиво, если знаете, что это то, чем вы действительно хотите заниматься. Не бойтесь меняться!

Собеседование

По большому счету, вы можете найти это всё в интернете или поспрашивать у знакомых, но я считаю, что лишним не будет. Внизу пример собеседования на junior Java разработчика таким, каким был бы он сейчас, если бы интервьюером был я. Вопросы могут быть какими угодно, я лишь попробовал собрать что-то среднее по больнице. Представим, что вам повезло. Стандартная схема Шаг 1. Вам звонит рекрутер, и вы договариваетесь с ней об интервью, к примеру, завтра на 11:00. Шаг 2. Вы приходите раньше, так как 11:00 - скорее всего, время не для вас, а для разработчиков, у которых зарезервирована какая то комната, в которой вас будут пытать. Хорошим тоном любого рекрутера будет предупредить об этом. Шаг 3. На самом деле, начиная с шага 3, все пункты можно перемешивать, потому что собеседования могут проходить по-разному. К примеру, здесь вас могут спросить о базовых вещах, откуда вы родом, почему у нас, и так далее. Не исключено, что это может сделать сам HR, и конечно же, не исключено, что на английском. Право, это зависит от компании. Шаг 4. Вас приглашают в митинг-рум, где у вас будет разговор с одним, двумя, тремя людьми, один из которых будет либо сеньор, либо техлид, который в будущем будет работать с вами, среди остальных могут быть Scrum-мастер, другие разработчики либо HR’ы. Вас собеседуют какое-то время, затем жмут руку и отпускают. Шаг 5. Возможно, это будет на следующий день, а возможно, сразу же после шага 4 - у вас будет разговор с иностранным заказчиком (если такой имеется), а может, он сам и проведет интервью. Как видите, вариантов много. Где-то есть заказчики, где-то есть еще телефонное интервью. Это просто пример. Пример технического собеседования для Junior Java разработчика Мне очень жалко недоразработчиков, которые читают что-то умное с целью утопить/задавить/попонтоваться перед соискателем на интервью. Если вы видите, что перед вами такой человек, и чувствуете давление и напряжение с его стороны, незамедлительно посылайте его на три веселых, потому что после успешного прохождения с этим кретином придется работать. Не тратьте свои драгоценные нервы. Интервью, в первую очередь, должно проходить с целью узнать, что знает кандидат, а не то, чего он не знает. Естественно, если вам нужен человек, который знает что-то конкретное - спрашивайте его, не мучайте бесполезными вещами, которые не используете в проекте. Будьте людьми, в конце концов! Внизу приблизительные вопросы, которые могут попасться на интервью. По 5 вопросов для каждой технологии. OOP 1. Приведите пример полиморфизма из реальной жизни? В чем преимущества? Недостатки? Напишите простенький код. 2. Что такое интерфейс? Абстрактный класс? Зачем нужны интерфейсы, если можно тупо всё классами писать (немного провокации)?. То же самое - и про абстрактный класс. Что такое default методы в Java 8? 3. Постройте иерархию классов на конкретном примере воображаемой базы данных или программы (там список разных классов рабочих из базы данных) и взаимодействие между ними (aggregation, composition). 4. Чем composition отличиается от aggregation (is-a, has-a)? 5. Как можно обойти запрет на множественное наследование в Java? JDK/JRE 1. Чем JDK отличается от JRE? Что такое JVM? 2. Что такое classpath и для чего он нужен? Как, к примеру, загрузить другие классы в classpath? 3. Что вы знаете о classloader? 4. Расскажите о javadoc? Для чего он нужен? 5. Что такое JAR, WAR? Java Common 1. В чем отличие статических методов от не статических? Что такое final? 2. Что такое boxing-unboxing? byte b = 127, b++, какой результат и почему? 3. Что такое wrapper’ы, для чего это? 4. Что мне нужно сделать, чтобы создать свою аннотацию? Что такое overriding/overloading? 5. Почему класс String final? Что делает метод intern()? Data Structures 1. Расскажите о структуре Collections API в Java? Вы уже успели поработать с Stream API? 2. В чем отличие между ArrayList и LinkedList? Где лучше использовать ArrayList, а где LinkedList? 3. Расскажите как устроена HashMap? В чем особенности работы с TreeSet, HashSet? Имеете опыт с Guava коллекциями? 4. Массивы в Java, пример двумерного массива. 5. hashCode, equals на примере HashMap? Concurrency 1. Что такое процесс? Поток? Как создать поток? Что такое syncronized? Как понять этот или тот кусок кода thread-safe? 2. Что такое Thread.sleep, а также wait, notify, yield? 3. Приведите пример deadlock? 4. Коллекции при работе с многопоточностью. 5. ThreadLocal и Atomic операции SQL/JDBC 1. На конкретном примере достаньте из базы Users того, у которого salary больше, чем 5000. 2. Примеры INNER JOIN, OUTER JOIN, Order By, Group By. 3. Зачем нужен JDBC Driver? Примеры. 4. Расскажите всё, что знаете о ResultSet, парочка примеров. 5. Напишите простенькое DAO c применением RS. JPA/Hibernate 1. В чем недостатки и преимущества JPA? 2. Что такое EntityManager? Entity? 3. Критерии в JPA/Hibernate. 4. One-To-One, Many-To-Many в JPA/Hibernate 5. Как бы вы сделали JOIN в Hibernate? HQL? Spring 1. Что такое DI/IoC? Преимущества. 2. Что такое Application Context? Bean? 3. Как бывают типы IoC инициализации? 4. Singleton, Prototype в Spring? Annotation-based Spring? 5. Жизненный цикл бинов? Init-method, destroy-method? @PostConstruct, @PostDeploy? Maven 1. Основные фазы maven, жизненный цикл. 2. Как запускать maven с тестами, без тестов? Что такое archetype, mvn dependency? 3. Профайлы в maven, как создавать, как запускать. 4. Что такое snapshot в maven? Central/Remote репозитории? 5. Плагины в mvn, принцип работы, пару примеров. Algo 1. Понятие алгоритма, его скорость, Big-O-Notation. 2. Как найти средний елемент в LinkedList в один заход? 3. Напишите примитивный Stack? В чем разница между Stack и Queue? LIFO, FIFO? 4. Quick Sort, Merge Sort. 5. Напишите програмку, которая проверяет, является ли число палиндромом. Согласен, может, планка загнута чуть больше в сторону миддла, чем джуниора, но я думаю, что такая подготовочка вам точно не помешает. Старайтесь углубляться в каждый вопрос. Кстати, тут не указаны многие направления в Java, прошу учесть.

Во время работы

Здесь находятся маленькие рекомендации для тех junior/middle разработчиков, которые уже устроились. Эти простые советы могут пригодиться вам так же, как они помогли в свою очередь мне. Не будь упрямым Перестаньте доказывать свою точку зрения, даже если она соблазнительно близка к истине. Вы уже заметили, что находитесь в споре долго, а значит, по ту сторону баррикад - обычный осел, у которого в жизни только два мнения: его и неправильное. У нас невероятно много упрямых людей, которые стоят на своем до последнего, лишь бы их эго не пошатнулось. И это не только ваши коллеги, они просто повсюду - в маршрутке, в магазине, родственники, близкие друзья - от них не убежать и не скрыться. С ними нужно как-то взаимодействовать, даже если ты понимаешь, что человек несет открытую чушь. Более того, то же самое может случиться с вами. Согласен, простые вещи можно объяснить даже упрямому человеку, ну, а если речь идет об архитектурных вопросах в проекте или о личном мнении? Забудь про это барахло - будь гибче. Я очень уважаю людей, которые могут признать, что они ошиблись, у всех на глазах. Именно такое качество пригодится вам как младшему специалисту - с открытым человеком сложно вступать в конфронтацию, тем более когда он признает, что учится и имеет право ошибаться. Не опаздывай Не важно, это испытательный срок или просто пятница, на которую все забивают и приходят к 11. Важно другое: пунктуальность - это особенность профессионала, который зарабатывает себе лишние очки на ровном месте. А лишние баллы человеку без опыта не помешают, не правда ли? Старайтесь не опаздывать и уходить с работы, честно проработав 8 часов. Не злоупотребляй эстимейтами К сожалению, очень частая картина, в которую я в прошлом когда-то вляпался сам. Разработчик поставил себе 8-16 часов на выполнение задания и неожиданно справился за 3-4 часа. Остальные часы он тратит на свое личное время в виде настольного тенниса, как это было со мной, или просмотра youtube и прочей развлекаловки. С юридической точки зрения - вроде бы и договорились, но с человеческой вы лишаете себя очень важных вещей: 1.Вы стоите на месте, так как заполняете лишнее время ненужными вещами; 2. Вы не развиваетесь, так как не ставите руководство в известность о своем быстром прогрессе, никто и знать не знает, что вы справляетесь с заданиями быстрее, чем ожидали; 3. Вы начинаете постоянно завышать среднее количество времени на значения, это просто путь в никуда. Выделяй время на учебу Шанс отстать от паровоза нереально высокий, поэтому имей ввиду, что технологии и новые версии очень быстро развиваются. Подписывайся на Java евангелистов нашего дня, читай Java дайджесты и вообще интересуйся, учи новое. Это поможет тебе держать марку и развиваться. Помогай другим Не бойся помогать другим, даже если они такие же зеленые, как ты. Во-первых, ты здорово укрепишь свои знания, во-вторых, получишь уважение в глазах других, заодно помогут и тебе. В такой обстановке рождаются лучшие коллективы, а также очень быстрый технический и личностный рост. Занимайся спортом. Имей хобби Нет, серьезно. Мало того, что люди, занимающиеся спортом, выглядят и чувствуют себя лучше, так еще и работа мозга у них на высоте! Сколиоз, поясница, лишний вес, разные проблемы с внутренними органами - круглосуточные посиделки за компом даже за пределами работы способствуют этому. Если спортом заниматься не получается (в чем я сомневаюсь), используйте маленькие лайфхаки: работайте стоя время от времени, выходите на две остановки раньше и доходите до работы пешком. Да и вообще ходите больше пешком. Также есть риск перегореть, если программирование занимает гораздо больше вашего времени, чем 40 часов в неделю. На помощь придут личные увлечения - к примеру, фотография, музыка и т.д. Регулярно находите время для духовного. Балансируй в личной жизни Когда девушка/жена говорит: «ноутбук или я», нужно основательно призадуматься, какое место занимает в вашей жизни программирование. С другой стороны, начиная свой путь в IT, вам нужно доходчиво объяснить второй половинке, что сейчас вам нужно очень много учиться, чтобы добиться большего. Надеюсь, они поймут. Ну, а вы старайтесь балансировать и правильно распределять свое время. Выходи за пределы Будьте проактивными, если чувствуете, к примеру, что можете поделиться знаниями или у вас есть интересные темы, почему бы не организовать маленькие курсы внутри компании для других? Не бойтесь принимать участие в крупных open source проектах, если знаете, как можно помочь. Хотите написать игру, социальный проект или другую идею - делайте, делайте, делайте! Не стойте на месте, всегда ищите пути, где можно развиваться. Будь конкурентным Наблюдайте за новыми тенденциями, будьте в курсе трендов, которые происходят в Java сообществе. К примеру, не будет лишним, если вы изредка, время от времени, будете мониторить Java вакансии на DOU, но не для того, чтобы уйти от работы, а для того, чтобы знать, какие технологии остаются актуальными, а что потихоньку пропадает с рынка. Также старайтесь проходить курсы на Coursera, Udacity и т.д, изучайте новые горизонты. И даже английский: старайтесь смотреть любимые фильмы/сериалы в оригинале с субтитрами, чтобы подтянуть разговорный, скачайте пару-тройку интересных приложений для изучения языка (к примеру LinguaLeo), да и, в конце концов, сходите на курсы.

Заключение

Ну вот, мой маленький проект на DOU подходит в концу. Дорогие друзья, я искренне желаю вам устроиться на работу и надеюсь, что всё, что было описано мной за эти 7 статей, будет ценным пособием для вас, даже для тех, кто уже работает Java разработчиком. Будущие джуниоры, помните, что нет ничего невозможного, и если вы действительно поднажмете, у вас непременно всё получится. Я хочу, чтобы вы наконец определились, ваше это или не ваше, разработали подробный план обучения и хладнокровно ему следовали. Не расстраивайтесь, если взамен получаете тишину, - это всё временно, главное - верить и ни в коем случае не сбиваться с курса, а учиться, учиться и еще раз учиться. Огромную благодарность я хотел бы выразить команде DOU за редактирование большого количества материала и за предоставление мне главного эфирного времени по понедельникам. DOU - это классное комьюнити, которое уже перестало быть просто сайтом для украинских айтишников. Также я бы хотел сказать спасибо всем комментаторам, которые читали мои статьи по диагонали и вырывали фразы из контекста. Без вас статьи не выглядели бы так интересно:) Да прибудет с вами Сила!

Расскажу быстренько о себе. Мне 25 лет, родился в Крыму, г. Феодосия. Учился в техникуме городском, потом поступил в Харьков, получил диплом бакалавра и в 2014 году вернулся обратно домой. В 2014 поступил на заочное обучение на магистра (все специальности были кое-как связанны с программированием), и в 2015-м году поступил в армию на контрактную службу сроком на 3 года. После двух лет службы в армии я понял, что надо что-то менять в своей жизни... И вот мне попадается JavaRush в декабре 2017 года, и я начинаю упорно учить Java. Летом я попадаю на курсы Topjava к Григорию, начинаю проходить каждое его занятие, и к середине сентября должны были закончатся трехмесячные курсы. В общем, в начале сентября я переезжаю в Москву с женой для поиска работы Java программистом и на сегодняшний день прошел примерно 10 собеседований. Я вам напишу то, что постоянно спрашивают и вопросы, на которых я сыпался.

    Что такое JDK,JRE,JVM и компилятор. This is must have. Если вам зададут на собеседовании этот вопрос и вы не ответите на него, скорее всего, дальше ничего спрашивать не будут. Маленькое видео с youtube

    Объектно ориентированное программирование (ООП). Тут главное рассказать, что такое полиморфизм. Могут попросить перевести это слово, потом нужно рассказать его определение соответственно. Можно рассказывать все своими словами. Потом приводите свои примеры.

    Множественное наследование в Java. В Java запрещено множественное наследование классов, но разрешено множественное наследование интерфейсов. О наследовании

    Методы класса Object (желательно каждый метод посмотреть прямо в самом коде и обратить внимание на Equals и hashCode). Я называл так: getClass, finallize (прочитайте о нем, мало ли зададут вопрос, но запомните: как по мне - ЭТО КОСТЫЛЬ), wait (достаточно знать, что там 3 перегруженных метода) notify, notifyAll, equals и hashcode (обязательно!!! знать 4 правила equals и обязательно знать закон между equals и hashCode).

    JVM изнутри. Stack и Heap память.

    Что за ключевое слово new и как оно работает. Материал не нашел, но у меня спрашивали о нем, а точнее, когда мы пишем к примеру

    A a = new A ()
    что происходит перед равно и после равно?

    Работа Garbage Collection - не очень часто спрашивали, но когда спрашивали начинали копать, насколько я знаю данную тему. Отличная статья на

    Порядок инициализации полей классов родителя и потомка

    Коллекции: приходилось рассказывать абсолютно всю иерархию и работу каждой коллекции.

    Вопрос, чем отличается List от Set. Самое главное - сказать, что из себя представляет интерфейс List. Если вы ответите, что Set - коллекция с уникальными объектами, этого будет недостаточно.

    HashMap, HashSet - начальный размер; capacity, loadfactory, null допускается или нет? Как вычисляется ячейка для объекта при работе с Hash коллекцией? Отличие HashMap от TreeMap (недостаточно сказать, что TreeMap - отсортированная коллекция, по алгоритму красно-черное дерево). Знать алгоритмы вставки, удаления, поиска o каждой коллекции. Queue, Deque, Stack - редко задавали мне вопросы о них. Нужно знать, где интерфейс, а где классы в коллекциях.

    Обратите внимание на то, что у Collections есть родитель Iterable

    Java 8. Абсолютно по максимуму должны выжать из себя все что знаете о "нововведениях", выпущенных 4 года назад : вот вам источник Новое в Java 8

    У меня спрашивали о consumers, function и т.п., потом спрашивали о функциональных интерфейсах, потом спрашивали, как создать свою аннотацию, что означает например @SomeAnnotation (name = .... count =....), а именно, что тут name, count и как они работают при создании своей аннотации.

    Generics . Все о дженериках. Спрашивают везде.

    Потоки . Thread, Runnable, чем отличаются, как запустить поток. Все о синхронизации. Мьютексы, мониторы, класс Lock. Deadlock когда возникает, приведи те примеры.

    Иерархия исключений checked/unchecked, написать свой класс исключения.

    Final , finallize(опять), immutable , finally . Когда не отработает блок finally.

    Как запретить наследования классов (приватные конструкторы, финал класс...).

    IO / NIO потоки.

    ПАТТЕРНЫ . Выучите хотя бы 5 штук основных (mvc, factory, decorator, singleton, наблюдатель).

    Spring ioc, di, ioc - container. Вот вам ссылка на практическое понимание, мне очень помогло... SPRING . Я тут по спрингу прошел до 16 главы, писав вручную весь код. Советую и вам поступить так же.