Java Junior. Что нужно знать для успешного собеседования


Содержание

Java Junior. Что нужно знать для успешного собеседования?

Что нужно знать Junior Java Developer?

Как начать зарабатывать программированием на Java? Прочитать 100500 книг, посетить сотни семинаров? А как же опыт? Подобные вопросы всегда мучают новичков. Давайте разберем, как сделать шаг в профессию.

Что хочет работодатель?

Любая фирма, в которую вы отправляете резюме, хочет, чтобы сотрудники приносили ей пользу. Формула банальная, но в ней вся суть рынка: чтобы получить работу, нужно быть полезным фирме.

Вот есть, например, «Контора 1» и «Контора 2». «Контора 1» пишет в вакансии, что готова обучить начинающего программиста и потом взять на работу. «Контора 2» обучать не хочет, мол, приходите и сразу начинайте кодить (но перед этим покажите уже написанные проекты, конечно же). Какую фирму вы как новичок выберете?
Очень соблазнительно выглядит предложение «Конторы 1», но я бы советовал избегать таких вакансий: в этих фирмах набирают большую учебную группу кандидатов (20–30 человек) и выбирают лучшего. Все обучение сводится к самостоятельному поиску материала и решению задач, поскольку в реальности никто не заинтересован в получении вами знаний – фирме это просто не выгодно. В итоге, если вы не справляетесь с такой формой обучения, вы не получаете ни работу, ни знания, только потерянное время, которое могли бы потратить на подготовку в реальной работе. С этой точки зрения вакансия «Конторы 2» выглядит более честной.
Суммирая все сказанное, скорректирую нашу формулу: чтобы получить работу, нужно быть полезным фирме здесь и сейчас.

Хорошие новости

Ни одна компания не пишет проект с нуля, поэтому новичку на руку то, что создание современных программ основано на различных библиотеках и фреймворках. Это тот самый случай, когда готовые решения применять не зазорно, а очень даже необходимо. Кроме того, в начале карьеры нет необходимости глубоко разбираться, как работают популярные библиотеки, нужно только уметь подключать и собирать их вместе.
Если вы сделаете простые приложения с использованием фреймворков и зальете их на GitHub, этого будет достаточно, чтобы доказать свою полезность фирме и найти первую работу.

Необходимый минимум

Предлагаю вам список того, что нужно знать Junior Java Developer.

1. Базовый синтаксис языка Java
Без основ ничего не сделаешь, поэтому в первую очередь нужно освоить операторы условия, циклы, массивы, классы и объекты, исключения. Примеры заданий можно найти здесь.

Книга: «Изучаем Java» Кэти Сьерра.

2. Структуры данных и простые алгоритмы
Основной ценностью в программировании являются данные, причем они хранятся не хаотично, а в структурах. Поэтому нужно очень скрупулезно подойти к этой теме, выучив основные структуры и алгоритмы для работы с данными. Всегда держите в голове, что неправильно выбранная структура может на корню испортить программу.
Знание структур и алгоритмов здорово выручит вас и на собеседованиях, где любят давать задачки на применение того или иного алгоритма для работы со структурами, например, отсортировать связанный список.

Книга: «Алгоритмы. Построение и анализ» Томаса Кормена.

3. SQL (базы данных)
Трудно найти приложение, которое бы не использовало базу данных, поэтому этот инструмент программирования – must-have в арсенале любого разработчика. Поставьте сервер базы данных PostgreSQL и потренируйтесь писать запросы.

Книга: «Head First SQL» Линн Бейли.

4. Servlet, JSP
Основная область применения Java – корпоративный сектор, для которого разрабатывают серверные приложения. Основа серверного приложения – это Servlet + JSP.

Книга: «Head First Servlet and JSP».

5. Hibernate
Первый фреймворк в списке. Позволяет извлекать данные из базы. Используется повсеместно.

Книга: «Hibernate in Action» Гэвина Кинга и Кристиана Бауэра.

6. Spring
Этот фреймворк, как вирус, постоянно совершенствуется и адаптируется к любым бизнес-требованиям. На нем можно написать все, что делает его универсальным и в то же время гибким средством разработки. Начните со Spring Boot – этот инструмент будет вашим основным орудием труда.

Книга: «Pro Spring» Роба Харропа.

7. Maven
Мы программисты, поэтому все процессы должны быть автоматизированы по максимуму. Инструменты для сборки, тестирования и интеграции будут повседневными соратниками в вашей работе.

8. Git
Программы давно не пишут в одиночку, поэтому используйте этот гибкий инструмент для командной работы.

Вопросы и ответы к собеседованию на Java junior

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

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

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

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

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 компонентов?

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?

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

Цукерберг рекомендует:  Вакансии Game Dude

Общее

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)Как проще всего найти необходимый символ в строке?

Советы сеньоров: как прокачать знания junior Java

Советы сеньоров — новая рубрика, в рамках которой опытные специалисты делятся практическими советами с джуниорами — общие лайфхаки по обучению, какие книги и ресурсы читать, какие навыки осваивать и многое другое. В этом выпуске говорим о Java разработчиках.

Павел Желнов, Senior Java Developer, 18 лет опыта Java разработки:

Программист — волшебник, который в состоянии исполнить любые желания и капризы, используя при этом всего лишь одно средство — язык программирования.

Язык необходимо знать досконально. Это фундамент, на котором строится проект, от небольшого веб-сайта до банковского энтерпрайза. Без этих знаний сложно создать гибкую, масштабируемую и безопасную систему, работающую стабильно и эффективно. Где их можно получить?

Документация классов Java

Наиболее достоверный источник информации, для чего служит тот или иной класс, какие проблемы решает лучше всего. Создатели языка постарались на славу, существенно упростив нам жизнь!

Книги

Замечательное средство, откуда мы черпаем полезную информацию. Если позволяют финансы — лучше покупать бумажный вариант, его более приятно пролистывать, делать пометки. Книгу надо не просто читать, как художественный роман Стивена Кинга. С книгой требуется тщательно работать, практически экспериментируя, преодолевая все сложности и осмысливая каждый шаг.

На моем столе лежат всего четыре:

  • Effective Java (Josh Bloch);
  • Clean Code (Robert Martin);
  • Design Patterns (Head First, O’Reilly);
  • Refactoring (Kent Beck & Martin Fowler).

Для начинающих стоит пролистать Thinking in Java (Bruce Eckel)

Гуглите и найдете

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

Практика

Верный способ быстро изучить язык — практиковать его при написании реального проекта, за который вы можете получить деньги. Именно тогда встречаешься с жизненными ситуациями, требующими максимальной отдачи, поиска наиболее оптимальных решений. Именно в такие моменты начинаешь мыслить, как настоящий разработчик. И благодаря таким проектам, получаешь самое необходимое в жизни — бесценный опыт!

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

Ищите для начала возможность поработать на небольшом проекте, где у вас будет ограниченный круг обязанностей. Для того, чтобы попасть в команду разработчиков, придется пройти сложный этап собеседования. Здесь ценится не столько ваша теоретическая подкованность, сколько умение применить эту теорию на практике.

Рекомендую также перед собеседованием просмотреть ресурсы, похожие на этот и пролистать странички, касающиеся Java, Hibernate, Spring.

Ой, мне надо знать еще один язык?

Не все упирается в мастерское овладение языком Java. Ребром становится вопрос знания английского! Кратко, как можно прокачаться в этой сфере:

  • пополняйте свой словарный запас. Хоть техническую литературу не Чарльз Диккенc писал, все же вы себя будете чувствовать комфортнее, если вы знаете 3 тысячи слов, а не 200. Для этого нужно немного: книга уровня чуть выше вашего, словарик, ручка и тетрадка;
  • каждый день слушайте болтовню ребят с TED Talks, включайте новости BBC или просто старые записи Джорджа Карлина. Тренируйте свои способности слушать и понимать речь, это очень важно;
  • преодолевайте разговорный барьер: находите носителей языка и общайтесь с ними, не бойтесь ошибаться. Важно, чтобы вас понимали.

Помните, что вам часто придется делиться своими идеями, воспринимать идеи других — и все это на чистом английском.

Становление самурая

Я бы никогда не стал тем, кем сейчас являюсь, если бы не мои учителя. В самом начале я черпал всю информацию из книг, но код, который писал, был, как его еще называют, с душком. Я не знал, как писать лучше, красивее и более внятно. Меня этому научили коллеги.

Всегда ищите возможность общаться с людьми, которые знают больше вас. Идеальный вариант — поработать с этими людьми над общим проектом. Они могут вам открыть ту истину, которую ни в одной книге не напишут.

Даже если вы достигли звания Архитектор, не пренебрегайте возможностью общаться с более умными людьми.

Смахивайте ржавчину с мозга. Мозг — это оружие. И оно должно быть всегда заряжено. Держите это оружие в форме и оно вас не подведет:
www.codewars.com
www.codingame.com

Будьте проактивными и ваше развитие будет стремительным и уверенным!

Андрей Паславский, Team Lead, 13 лет опыта Java разработки:

Как «войти в ИТ» есть уже 100500 статей с кучей рекомендаций и советов, ссылок на курсы, школы и тому подобное. К сожалению, на данный момент сформировалась такая ситуация, когда программистов не хватает, но при этом у рекрутеров лежат стопочки с резюме потенциальных кандидатов, которые хотят «войти в ИТ». Грубо говоря, их три: те, кто хорошо прошли стажировку от компании или закончили школу и получили рекомендации; те, кто просто закончил школу, курсы, стажировку; и все остальные. В первую очередь, когда открывается позиция Junior, рекрутеры листают первую папочку, могут заглянуть во вторую, но до третьей практически никогда не добираются.

Мне кажется, основной вопрос не в том, как войти в ИТ. Основной вопрос: осознаю ли я, что это за работа и как выделиться на фоне всех остальных?

Я работал со студентами и просто с ребятами, которые хотят стать программистами. Но буквально единицы представляют, что такое быть разработчиком, что значит разрабатывать софт, а не писать лабораторную работу, что значит работать в команде?

В этом плане помогут курсы стажировки, разные workshops и workgroups. Нужно уметь работать в команде. Здесь волки-одиночки никому не нужны (если только вы не Линус Торвальдс, Бьёрн Страуструп, Мартин Фаулер). Попробуйте скооперироваться с вашим соседом и написать калькулятор вместе (не надо придумывать МЕГА проект, просто калькулятор). Это окажется в разы сложнее и дольше, чем вы бы это сделали сами. Это и будет маркер: вы эффективнее один, чем в группе. Работайте над собой, над своими навыками коммуникации и кооперации. Учитесь работать в команде.

Сколько бы вы не работали в ИТ — всегда будете учиться. Не получится пройти курсы «столяра» и пойти «работать на завод». У каждого мозги работают по-разному, поэтому вы должны сами найти форму обучения, которая для вас будет максимально эффективной (я не могу сказать, что для вас будет лучше: пробовать писать свои Pet projects или проходить online курсы один за другим). Учите учиться. Навык самообучения необходим в нашей индустрии, т. к. и через 10 лет вы будете продолжать учиться.

Ходите/ездите на конференции, они нужны в первую очередь для Junior. Да, может быть дорого, но это даст понимание того, что сейчас в тренде; сможете завести полезные знакомства и окунуться в мир людей, которые занимаются ИТ уже годы/десятилетия. Может быть где-то встретите человека, который скажет, что у него есть работа для вас. И вообще это fun, нужно получать удовольствие от того, чем вы занимаетесь.

Заведите свой аккаунт на GitHub и выкладывайте туда свои Pet projects. Это важно! Работодатель сможет оценить, с какими языками работаете, какие технологии изучаете и как развиваетесь. Он сможет запостить какие-то баги, придирки, рекомендации и посмотреть, как общаетесь, как реагируете и как работаете над ошибками. Вас могут намеренно спровоцировать — учитесь работать с клиентами, они бывают «разные». Здоровый юмор тут приветствуется.

Также очень важно понимать разницу между разработчиком и программистом. Погуглите об этом, в интернете уже написано много статей на эту тему. Но отдельно я хочу выделить навык «транспонирования своего опыта». Невозможно освоить и изучить всё, но можно научиться проводить аналогии и применять свой опыт в области, где никогда не работали. Нужно научиться анализировать и видеть общие идеи. Этому научиться сложно, но попробуйте начать с patterns: Java Patterns, Design Patterns, Enterprise Patterns. Это многолетний накопленный опыт, который разложили уже по полочкам для вас. Не пренебрегайте этим!

Сделайте ИТ своим хобби, работайте над собой в этой области факультативно. Да, компания и проект, где будете работать, определят уже конкретный стек технологий и будет понятно, что нужно изучать. Но не останавливайтесь на этом. Как только станете выполнять свою работу от «забора до забора» — в какой-то момент перестанете развиваться, а ИТ-индустрия не любит этого. Через некоторое время не будете котироваться на рынке и потеряете квалификацию.

Андрей Слободяник, Tech Lead, 11 лет опыта Java разработки:

Первое, чему должен научиться даже не разработчик, а вообще любой IT-специалист — это умению печатать вслепую. Да, большую часть времени программист читает спеку/код/доки, в перерывах думает, а не барабанит по клавишам, аки хакер в фильме. Да, в современных IDE есть автоподстановка. Но, как бы там ни было, айтишник, постоянно переводящий взгляд между клавиатурой и монитором, выглядит странно и вряд ли работает эффективно. Не все тренажеры одинаково полезны, главный принцип — положить правильно руки и осваивать всю клавиатуру сразу, рекомендую KeyTo/VerseQ.

Вторым условием роста я вижу процесс Code Review. Недостаточно, чтобы код просто работал, для джуниора (и не только) необходим взгляд со стороны по поводу подходов, компоновки кода, фреймворков и т. д. Иначе есть риск быстро поймать эффект Даннинга-Крюгера. Технически опасные места также помогут отловить статические анализаторы кода — FindBugs, Sonar etc.

Про Unit Test-ы. При написании метода весьма желательно держать в голове мысль: а как же его тестировать? Это позитивно влияет на архитектуру. Если тест написать не удается или удается, но тест громоздкий, это симптом о том, что код, скорее всего, плохой, и, даже если работает сейчас, то будут проблемы потом с его переиспользованием и модификацией.

Тут баг, но куда бОльшая проблема в том, что непонятно, как проверить этот метод. Другая крайность — это написание слишком «открытых» классов. Найти баланс должен помочь предыдущий и следующий пункт.

Четвертое. Не копипастить! А стараться переиспользовать код. Идеи, как разбить его на части, черпаем в шаблонах проектирования.

Пятое. Использовать существующие библиотеки. Задуматься и загуглить, что задача, например, склейки строк через запятую, возможно, уже где-то решена. И на скорую руку кешировать какие-либо результаты в Map тоже не лучшая идея.

Шестое. Не генерировать код с помощью IDE и аналогичных утилит. Безусловно, он нужен, но зачем же загромождать им исходники проекта? Скорее всего, эту генерацию можно включить в сборку. Например, для getters/setters и других фич подключаем Lombok.

В общем, стараемся писать поменьше, читать и думать побольше.

Андрей Белицкий, Software Architect, 7 лет опыта Java разработки:

Для начала хочу сказать, что позиция Senior Java developer имеет весьма условный характер, поскольку в разных компаниях и даже на разных проектах в одной компании люди на этой позиции могут иметь различный уровень квалификации, перечень обязанностей, зарплату и т. д. В данной заметке я хочу указать на общие направления развития и книги, которые помогут вырасти в профессиональном плане, а не получить тайтл «Senior». В связи с этим дальнейшие рекомендации будут носить общий характер.

Касательно знаний: существует матрица компетенций программиста, ее легко найти в интернете, например, здесь (1 часть, 2 часть). Эти таблицы помогут примерно понять, где вы находитесь и в каком направлении стоит работать. Список литературы по ссылке смотреть не стоит — он там, судя по всему, для примера.

Из литературы по Java я бы порекомендовал «Effective Java» Joshua Bloch — было много изданий, лучше брать последнее (вроде есть на русском) и «Java Concurrency in Practice» Brian Goetz — книга 2006 года, но, на мой взгляд, до сих пор наиболее актуальная книга по многопоточности в Java (насколько я знаю, не переводилась на русский). По OOP/OOD я бы рекомендовал почитать GoF (есть на русском) или Head First Design Patterns — поскольку считаю, что знание паттернов для Java-разработчика — это must have. А для общего развития — «The Pragmatic Programmer» Andy Hunt и Dave Thomas (есть на русском). В ней в формате небольших заметок и советов описаны принципы и типичные проблемы с решениями, которые в целом есть в индустрии (не смотря на то, что книга издана в 1999, большая часть все еще актуальна).

Цукерберг рекомендует:  Программа для создания видеоуроков - Camtasia Studio

Кейсы и полезные советы, на мой взгляд, не очень работают, поскольку невозможно получить опыт, самостоятельно не набив шишек. Единственное, что могу посоветовать, — читайте хорошие книжки и работайте по максимуму, любите то, что вы делаете, и тогда все получится. Это может звучать банально, но я встречал разработчиков с тремя годами опыта, у которых было больше знаний, чем у специалистов с годами опыта. Весь вопрос в желании и, соответственно, временных инвестициях, в том числе и вне работы. Удачи!

Евгений Хист, Java Tech Lead, 7 лет опыта Java разработки:

Сложность профессии разработчика заключается не только в том, что нужно знать множество библиотек и фреймворков, но и в том, что эти библиотеки и фреймворки постоянно меняются, устаревают и им на смену приходят новые. Это относится и к экосистеме Java. Но есть проекты, которые всерьез и надолго обосновались на рынке, ознакомиться с которыми я рекомендую каждому Java разработчику.

Одним из таких проектов является Docker, который за последние годы произвел революцию в сборке, тестировании и развертывании приложений. Docker позволяет «упаковать» приложение со всем окружением и зависимостями в контейнер. Этот контейнер может быть запущен на любой системе, поддерживающей Docker, в разы быстрее и потребляя намного меньше ресурсов чем системы виртуализации. Используя Docker, запуск контейнера с RabbitMQ или Redis для интеграционных тестов и его остановка после их выполнения становится тривиальной задачей. Начать знакомство с Docker и его экосистемой можно с бесплатных интерактивных браузерных курсов Katacoda. На этой площадке также можно найти интерактивные курсы по системе контроля версий Git, Continuous Integration и Continuous Delivery с использованием Jenkins и системой управления кластером контейнеров Kubernetes.

Spring Boot сегодня настолько популярен, что если вы до сих пор его не знаете, стоит ознакомиться. Официальная документация Spring Boot отлично подойдет для этого.

Помимо этих знаний квалифицированный разработчик должен владеть навыками проектирования ПО. Многие основные принципы и парадигмы сформулированы более 10 лет назад и до сих пор остаются актуальными.

Начать я рекомендую с основ объектно ориентированного дизайна (OOD). В блоге Роберта Мартина есть отличные статьи о принципах дизайна классов SOLID и принципах свя́зности (cohesion) и зацепления (coupling) пакетов. Подробнее эти вопросы Роберт Мартин раскрывает в книге «Agile Principles, Patterns, and Practices in C#». Несмотря на наличие C# в названии книги, она будет полезна и Java разработчикам.

С выходом Java 8, помимо объектно-ориентированного подхода, распространение получил функциональный подход. Lambda выражения, java.util.Optional, java.util.Stream, java.util.concurrent.CompletableFuture и Flow API (java.util.concurrent.Flow) в JDK 9. Чтобы разобраться с этой темой рекомендую цикл статей «An Introduction to Functional Programming in Java 8». Также популярность набирает связанное с функциональным подходом реактивное программирование (Reactive Streams, RxJava, Reactor). Начать знакомство с этой темой можно с бесплатной мини-книги от InfoQ «The InfoQ eMag: Reactive Programming with Java».

Domain-driven design — это еще один набор принципов и подходов к проектированию ПО, который заслуживает внимания Java разработчиков. Начать знакомство с этой темой можно также с бесплатной книги от InfoQ «Domain Driven Design Quickly». Более подробнее об этой теме можно почитать в мини-книге Эрика Эванса «Domain-Driven Design: Tackling Complexity in the Heart of Software».

Говоря о проектировании ПО нельзя не упомянуть Мартина Фаулера и его книги. В блоге Мартина можно найти множество полезных статей о проектировании ПО. Также рекомендую к прочтению его книги «Patterns of Enterprise Application Architecture» и «NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence».

Много полезных статей можно найти на IBM developerWorks. К таким можно отнести довольно старую, но все еще актуальную серию статей о стратегиях работы с транзакциями. Также о транзакциях в Java можно прочитать в бесплатной книге от InfoQ «Java Transaction Design Strategies».

«The Data Model Resource Book» — это серия книг в 3 частях о проектировании ПО, которая заслуживает внимания. «The Data Model Resource Book, Vol. 1: A Library of Universal Data Models for All Enterprises», «The Data Model Resource Book, Vol. 2: A Library of Data Models for Specific Industries», «The Data Model Resource Book, Volume 3: Universal Patterns for Data Modeling». Конечно, не обязательно один в один использовать модели данных, описанные в этих книгах. Знакомство с ними позволит лучше понять принципы проектирования модели данных, позаимствовать какие-то приемы и избежать ошибок.

Говоря о профессиональном развитии нельзя не упомянуть YouTube. Часто, пользуясь поиском, можно найти полезные видео с докладами и лекциями. Хочу порекомендовать 2 канала, на которых каждое видео заслуживает внимания: Devoxx Conferences и GOTO Conferences.

И, напоследок, лайфхак. Пользуйтесь шпаргалками DZone Refcardz, чтобы освежить в памяти библиотеки, фреймворки и подходы. Например, перед собеседованиями.

Евгений Годун, Senior Java Developer, 5 лет опыта Java разработки:

В карьере программиста я бы выделил три основных вектора развития, в сторону которых надо было начать работать еще вчера, так что после прочтения сразу приступай к делу!

Английский язык. Как и зачем?

Ну, во-первых, Java написана на английском языке. Если серьезней, то на stackoverflow, который будет вашим самым посещаемым сайтом на первых порах, гораздо больше ответов на английском. Плюс документация ко всем фреймворкам на английском. Плюс книги не так быстро переводятся, как хотелось бы. Плюс, если у вас распределенная команда, то ребята из Америки довольно редко общаются на русском (у меня есть такой знакомый американец, который заканчивает все митинги фразой «Dobriy vecher». Но это скорее исключение). Поэтому тут схалтурить не получится.

Во многих компаниях есть курсы английского для сотрудников (это хороший вопрос на собеседовании, когда hr-ы спрашивают, чего бы тебе хотелось узнать о нас). Из приложений я бы посоветовал Lingualeo, и так как самые лучшие инвестиции это в себя, я бы посоветовал купить премиум аккаунт, 22$ в год не такие большие деньги. Ну и после достижения определенного уровня — чтение книг в оригинале, а самый последний level — чтение профессиональных книг в оригинале. Дальше только Шекспир и Eminem в караоке.

Умение программировать. Как и зачем?

Может вам нужно будет съездить в командировку в Америку, и вы не будете знать что такое красно-черное дерево. Или (большая вероятность) на собеседовании вас будут спрашивать про алгоритм Дейкстры и его сложность. Или (маленькая вероятность) у вас будет проект, на котором вам понадобятся эти знания. В любом случае, решать подобные задачи, подбирать правильные структуры данных, это как кунг-фу, настоящий мастер должен знать, даже если никогда не применяет. Особенно это важно, если у вас нет профильного образования, а вы сразу начали изучать программирование с ООП.

По поводу алгоритмов недавно прочитал хорошую и не сложную книгу, в которой описываются основные алгоритмы и структуры данных: Грокаем алгоритмы. Ну и в принципе есть много курсов по данной теме на udemy и coursera.

Что касается практики — я бы посоветовал HackerRank, там есть довольно интересные задачи на разные алгоритмы, и для продвинутых: где требуется только ответ, но для того, чтобы ваша программа работала меньше пары часов придется потрудиться.

Практика, практика и еще раз практика. Как и зачем?

Читать книжки, смотреть видео и понимать, что происходит — это одно, написать работающий код — совсем другое. Не бойтесь «испачкать руки» и разбираться в технологиях, которые есть на вашем проекте, или востребованы по рынку, на маленьких проектах. Не обязательно поднимать громоздкие системы или рисовать красивый UI, чтобы понять, как работает autowiring или написать Restful API для своей сущности. Так вы наступите на полезные грабли, запомните, почему вот так, а не по-другому, и станете меньше верить в магию. Также очень полезно разбираться во всем пути запроса в системе: от клика или отправки формы до базы данных и обратно, понимание — залог успеха.

Берете и пишете:) Подумайте, какое приложение было бы вам полезно, составьте себе ТЗ, и вперед к работающему коду!

Можно еще долго растекаться мыслями по древу, но вот еще несколько пунктов, которые дополняют вышесказанное:

  1. Подготовьтесь к сертификации и сдайте ее. Это заполнит все пробелы в вашем понимании Java core и даст вам ощутимое преимущество.
  2. Не стесняйтесь задавать вопросы старшим товарищам, от вас не будут требовать многого, но вы должны уличить правильный момент, чтобы спросить — не сразу, как только что-то не получается, но и не спустя несколько дней после дедлайна.
  3. Книги: Чистый код и Java. Эффективное программирование. Также много чего можно искать в серии Heads first, если хотите попроще, будь то Javascript или Паттерны проектирования.
  4. Смотрите видео с конференций или ходите на конференции. Мой совет — ходите на докладчиков, а не на темы. Среди моих фаворитов — Николай Алименков, Евгений Борисов, Джош Лонг. А по итогу можно сделать еще и доклад внутри компании, чтобы лучше разобраться в теме.

Не прекращайте учиться и будет вам счастье!

/dev/energy

Сайт о том, как стать программистом и как с этим жить потом

Собеседование на позицию Junior-разработчика. К чему быть готовым?

Давно я не публиковал статьи для начинающих программистов. Сегодня будет материал как раз для них.
Мы поговорим о том, как и к чему готовиться, собираясь на своё первое собеседование.

Этот день настал. Ваше резюме понравилось потенциальному работодателю, и Вас приглашают на встречу. Эйфория, страх, торги, принятие, оффер ��
У каждого человека этот процесс происходит по-своему. Любопытный факт состоит в том, что подготовка к собеседованию начинается с сопроводительного письма для работодателя.

Как и во многих делах, здесь спешка совершенно не нужна. Разумеется, Вас будет захлёстывать желание поскорее ответить или отправить письмо в надежде на то, чтобы Ваше драгоценное место не занял кто-то другой. Нужно выдохнуть, выпить чашку чая и полюбоваться видом из окна. Вам надо быть во всеоружии для того, чтобы получить работу, к которой Вы так долго шли, изучая месяцами программирование.

Сопроводительное письмо
В ситуации, когда Вы откликаетесь на вакансию, работодатель находится в «позиции силы» — именно Вы проявляете заинтересованность в работе. Поэтому и письмо должно быть составлено максимально аккуратно.

Перед тем, как писать такое письмо, внимательно изучите описание компании, предлагаемый стек технологий, отзывы о ней. Убедитесь, что компания действительно Вам интересна, и Вы не отправляете резюме только для того, чтобы получить оффер, а через два месяца уволиться.

Вам не следует копировать всё содержимое своего резюме — это будет некрасиво и неудобно. Письмо — это то, что работодатель увидит в самую первую очередь. Так что нельзя перенасыщать его информацией. Но и недостаточная информация тоже испортит картину. Плохое письмо обычно выглядит примерно вот так:

Меня зовут Петр Иванов. Я очень целеустремленный и легкообучаемый программист.
Я бы очень хотел работать в вашей компании.

Здесь помимо недостатка информации имеют место шаблонные фразы. Рынок кишмя кишит целеустремленными и легкообучаемыми.
Все письмо построено от позиции «Я крутой, наймите меня». Оно кричит, а выскочки без опыта мало кому понравятся.
Поэтому давайте попробуем составить письмо, которое будет приятно для работодателя.

Опишите в письме свои наиболее интересные на Ваш взгляд проекты, точки заинтересованности в компании. Не старайтесь высасывать из пальца достижения.
Всем прекрасно понятно, что Вы Junior, и ожидать от Вас сверхспособностей никто не станет. Работодателю нужен человек, который заинтересован в том, чтобы обучаться и расти.
Вы написали игру «Крестики-нолики»? Выложите её на github! Покажите, как Вы строите код. Ещё лучше, если Вы покажите, что пользуетесь версионированием постоянно. Сейчас Ваш код говорит за Вас.

Стройте письмо от позиции сотрудничества. В первом примере письма кандидат напоминает рекламный баннер, который хочется поскорее закрыть, потому что он пестрит, но несет никакой пользы. Отвлекает одним словом. Поставьте себя на место работодателя. Чего Вы бы ждали от кандидата? Будьте предельно честны в этом ответе.

Давайте попробуем написать письмо, которое заинтересует работодателя.

Меня зовут Петр Иванов. Меня очень заинтересовала предложенная Вами вакансия на сайте xx.ru.
Мне интересно развиваться в компании, которая занимается %вписать необходимое%.

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

Подробную информацию о моей кандидатуре Вы сможете найти в прилагающемся к данному письму резюме.

Заранее спасибо!
С уважением,
П.Иванов
p.ivanov@somemail.com
+7 999 123 4567

Что мы улучшили в данном письме в сравнении с предыдущим помимо увеличения объема написанных слов?

  1. Мы убрали слова-паразиты
  2. Мы показали, что заинтересованы в работодателе. И это не просто слова ради лести, а обоснованный интерес
  3. Мы дали возможность посмотреть на код, созданный в процессе обучения
  4. Мы дали возможные контакты для связи. Вполне вероятно, что после этого работодатель и резюме читать не станет, а просто позвонит Вам и пригласит на встречу

Перед собеседованием
И вот, Вас пригласили. Время и дата назначены, отсчёт пошёл. Что же делать в это время Вам?
Однозначно, не стоит пытаться впихнуть в себя какие-то новые для Вас систему или подход к разработке. Это только породит хаос в Вашем сознании.
Работать нужно над имеющимися данными. Наверняка к этому времени Вы поймёте, где у Вас есть пробелы — старайтесь работать над их закрытием.

На многих популярных ресурсах очень часто выкладывают типовые вопросы к собеседованиям на различные позиции, связанные с тем или иным стеком технологий.
Неплохой пример списка вопросов к позиции Junior Java разработчика можно найти здесь. А вот здесь можно посмотреть примеры для Junior разработчика PHP. Разумеется, для каждого языка есть свой пул навыков для входа. При этом со временем этот пул меняется, поэтому нужно постоянно следить за современными тенденциями. Впрочем, об этом я уже писал в одной из моих предыдущих статей.

Теперь о банальном. Не опаздывайте на собеседование. Приезжайте минут за 10-15 до начала. Держитесь на связи. Если у Вас появляются непредвиденные обстоятельства, которые мешают Вам приехать на встречу, позвоните и предупредите о них своё контактное лицо. Но не играйте в молчанку. Уважайте чужое рабочее время!

На собеседовании
Непосредственно на встрече ход разговора может идти по-разному. Скорее всего, Вас встретит HR-специалист, который передаст Вам вводную информацию и задаст базовые вопросы. Общение здесь должно быть максимально открытым. Не сидите, скрестив руки, и не смотрите в сторону. Будьте спокойны и позитивно настроены. Это будет являться залогом успеха и одобрения Вашей кандидатуры со стороны HR.

Ни в коем случае не стоит врать или общаться агрессивно. Как было сказано выше, уважайте чужую работу. Однако я замечаю одну нехорошую тенденцию. Интервьюеры стали проверять кандидата на стрессоустойчивость, провоцируя на агрессию. Вам могут задавать неприятные вопросы, говорить неприятные вещи в духе: «Ну хорошо, давайте посмотрим, чем Вы нам можете быть полезны. Это что, всё? И вот Вы правда столько денег за это хотите?». И прочее. Я являюсь противником такого общения на собеседовании, так как всё, что оно может показать — это неадекватность интервьюера, которые прочитал про такой подход где-то в книжке и теперь самоутверждается за счёт этого. Но такие ситуации встречаются. Просто не обращайте на них внимания, если увидите, что другие участники процесса общаются спокойно. Это покажет Вас как стрессоустойчивового кандидата, что будет являться большим плюсом.

После этого Вам предстоит общение с кем-то из команды IT. Здесь общение будет идти на тему Вашего опыта. Задачи могут быть самые разные. Обычно в начале идут теоретические вопросы, а также вопросы, отстраненные от программирования и направленные на логику. Далее возможно будет сессия программирования.

В любой части собеседования ни в коем случае не запирайтесь в себе и не молчите. Думайте вслух, показывайте ход своих мыслей. В большинстве своём практические задачи на собеседовании не направлены на то, чтобы получить от Вас конечное решение. Интервьюеру интересен именно Ваш подход к решению задачи.

Цукерберг рекомендует:  Android - android проблема с Handler!

Если формализовать подход к ответу на вопрос, то можно вывести несложный алгоритм

1. Выслушайте задачу. При необходимости попросите повторить вопрос или перечитайте постановку задачи.
2. Возьмите 1-2 минуты на то, чтобы подумать над задачей. В это время подумайте над тем, что вызывает у Вас сомнения в этой задаче. Что Вам непонятно в ней? Что бы Вы уточнили?
3. Задайте уточняющие вопросы. Это крайне важный шаг. То, что Вы не броситесь на решение, уже будет для Вас большим плюсом! Задайте вопросы, которые возникли у Вас в пункте 2. После того, как на 100% поймёте постановку задачи, приступайте к решению.
4. Начинайте рассуждать. Рисуйте. Проектируйте. Код должен идти в последнюю очередь — здесь Вам надо показать Ваш стратегический и концептуальный подход. Это залог того, что решение будет реализовано не «в лоб», а с применением обдуманого алгоритма.
5. Если до этого дойдёт, начинайте программировать. Код должен быть «чистым» по определениям Роберта Мартина и соответствовать минимальным стандартам, если таковые установлены для выбранного Вами языка программирования.

Собеседование может длиться от 1 до 3 часов, но Junior-ов обычно долго не мучают. Однако, закладывайтесь на эти цифры. А ешё лучше — спросите о времени заранее, если Вам важно понимать, сколько Вы будете находиться на собеседовании.

После собеседования
Первое, к чему стоит быть готовым, это то, что результат Вам сообщат не сразу. Скорее всего, Вам скажут дежурную фразу «Мы свяжемся с Вами». Она совершенно не означает, что Вы «в пролете». Наоборот, многим компаниям требуется время на сбор обратной связи от интервьюеров и формирование ответа кандидату. Тем не менее, если Вы не получили ответа в течение рабочей недели, прошедшей с момента собеседования, Вы имеете полное право на то, чтобы написать HR-специалисту, который приглашал Вас на собеседование.

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

Даже в случае отказа постарайтесь узнать, что именно не устроило работодателя в Вашей кандидатуре. Это важно для Ваших следующих встреч — Вы сможете проработать это слабое место и закрыть его. Не бойтесь отказов — это нормальное состояние. Главное — понимать, к чему Вы движетесь.

Если делать всё правильно, что в очень скором времени Вас будет ожидать заветное письмо с темой «Job offer for Peter Ivanov»!

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

Все условия работы, социальных услуг (страхования, фитнеса, массажного кресла и т.п.) должны быть зафиксированы в предложении о работе.
После этого внимательно ознакомьтесь с вверяемыми Вам обязанностями. Программисту точно не стоит подписывать трудовой договор, в котором предполагается материальная ответственность за опоздания или ошибки в работе.

Java Junior. Что нужно знать для успешного собеседования?

Расскажите друзьям о событии

Рекомендуемые события

Извините, регистрация закрыта. Возможно, на событие уже зарегистрировалось слишком много человек, либо истек срок регистрации. Подробности Вы можете узнать у организаторов события.

Все, что нужно знать Java-разработчику для успешного собеседования

Расскажите друзьям о событии

Сегодня язык Java используется во многих областях, но требования к junior-разработчикам в них примерно одинаковы.

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

— основные пакеты библиотеки Java

— алгоритмы и структуры данных

— разбор вопросов и задач с реальных собеседований

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

Тема в разделе «Таверна», создана пользователем Smertb13, 27 May 2020 в 10:28 .

Оценить пост #

Smertb13

Собственно в программировании нифига не рублю вот купил книжку какую-то по джаве «Шилдта». Её хватит чтобы пройти собеседование на джуниора и что вообще там спрашивают ?

Make Me Suffer

лол
ты рили думаешь что тебя возьмут на работу когда ты ничерта не шаришь?
ты хоть логически подумай, как ты работать тогда будешь? 2 дня максимум посидишь в афкзатупе за компом и домой отправят

Гэтсби

Сейчас бы прочитать одну книжку и зарабатывать за это деньги. Кайф

LafkiMiscuzi

Я случайно взломал пентагон, этого хватит, чтобы меня взяли на работу?

SEREGA1995

javarush.ru советую пройти на этом сайте 10 первых бесплатных уровней обучения java. Ты просто поймешь что такое программирование, что такое ООП особенно в java и вообще что это за java и зачем оно тебе. (Это не реклама, так что не удаляйте ссылку, модеры). Думаю уйдет от 1 до 3 недель при ежедневных занятиях.

Вторым шагом уже начни читать книги и развивайся сам в этом направлении, ну или придется заплатить там еще за 30 лвлов если сам никак, и после этого думаю сможешь.

И вот еще почитав и пописав кода с пару месяцев, возможно создав пару своих приложений или приняв участие в opensource проектах ты можешь смело идти на junior java и просить 30-40к з/п а может и выше.

И советую параллельно с чтением и изучением java смотреть в сторону Andoid разработки. Думаю это самое востребованное на сегодня место куда можно попасть со знаниями java. Или Big Data проекты. Недавно видел кстати где-то стажировку от Mail.ru (тык) в их проект «одноклассники» по работе и оптимизации загрузки и показа потоков видео на портале. 29к в месяц за стажера. Если найд скину, там есть онлайн тесты и ты примерно поймешь что хотят от java разработчика в приличной фирме.

А еще как уже окунешься в мир java, и решишь посмотреть и пописать opensource проекты, тебе придется узнать что такое системы контроля версий. Посмотри про GIT, портал например github есть, можешь потрениться просто файлики заливать туда.

Java Junior. Что нужно знать для успешного собеседования?

Вопросы для собеседования на Java Developer

Потоки ввода/вывода в Java

Servlets, JSP, JSTL

  • © 2020 GitHub , Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

10 интересных вопросов по Java, которые вам могут задать на собеседовании

Мы собрали 10 каверзных примеров программ, которые выводят какую-либо информацию. Вы должны взглянуть на код и сказать, что же выведет программа. Не исключено, что программа даже не скомпилируется. В этом случае вам надо указать, что выведет компилятор.

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

Что выведет следующая программа?

  • Каждый раз, когда мы создаем объект какого-либо класса, первым вызывается конструктор и выделяется память для всех нестатических переменных.
  • Здесь B b = new B(); объекту класса B присваивается новый объект того же класса.
  • Запись B b = new B(); приводит к рекурсивному исполнению конструктора, что создает бесконечные объекты. Именно поэтому во время выполнения этого кода будет возбуждено исключение java.lang.StackOverFlowError в потоке "main".
  • Распространенной причиной появления такого рода исключений является плохая рекурсия. Обычно это происходит из-за неправильного условия завершения.

Что выведет следующая программа?

  • Мы можем вызвать статические методы, используя переменную, ссылающуюся на null. Дело в том, что статические методы находятся на уровне класса. Именно поэтому мы можем вызывать статические функции как при помощи самого класса, так и при помощи переменной, равной null.

Что выведет следующая программа?

Что выведет следующая программа?

Что выведет следующая программа?

Что выведет следующая программа?

  • Какая строчка программы вызовет ошибку compile time error?

Что выведет следующая программа?

Что выведет следующая программа?

Что выведет следующая программа?

Что происходит при написании System.out.println(null);?

Происходит, разумеется, ошибка компиляции. У метода println есть несколько вариаций. Он может принимать String, Object или char[]. При передаче в эту функцию аргумента null компилятор не может определиться, к какому из трех методов обращаться.

  • public void prinltln(String str) <
  • public void prinltln(char[] ch) <
  • public void prinltln(Object ch) <

Как пройти собеседование на Java разработчика

Привет! Сегодня мы поговорим о прохождении собеседования — неотъемлемой части карьеры любого разработчика. Прежде чем найти работу, соискатель, как правило, проходит достаточно большое количество собеседований, и не всегда удачно.

Итак, ты старательно учился, кодил, не покладая рук, имеешь один-два своих небольших проекта, ты чувствуешь, что готов искать свою первую работу разработчика, составляешь резюме, отправляешь в десяток компаний и … не получаешь в ответ ничего. Что пошло не так? Почему даже не позвали на собеседование?

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

Итак, если ты заинтересовал HR-a, то, вполне вероятно, после небольшого общения по телефону или скайпу тебя пригласят на интервью с рекрутером. Хороший HR — неплохой психолог, поэтому он сразу оценит твою адекватность, какой ты человек, насколько им подходишь, совпадают ли ваши цели, сможешь ли вписаться в коллектив. Если компания ориентирована на иностранного заказчика, то сразу проверят твой английский.

Будь уверен в себе, не волнуйся (хотя на первых порах это весьма сложно — нужно просто привыкнуть к этому процессу), говори уверенно и честно. Запомни, что собеседование — это, прежде всего, диалог, в ходе которого ты узнаешь о компании, а она — о тебе. Не бойся задавать вопросы, которые тебя интересуют. Расскажи о своем хобби, покажи, что ты — человек увлеченный, интересный, многосторонний, с которым интересно общаться и с которым хорошо и приятно будет работать в команде.

Если интервью с HR-ом прошло хорошо, то велики шансы, что тебя позовут на техническое собеседование. Тут-то и пригодятся все знания и навыки, что ты получил во время обучения, практики, работы над своим проектом.

Здесь ты познакомишься с людьми, с которыми, скорее всего, тебе придется работать на проекте. Запомни — ты не на экзамене, собеседующий ставит цель не завалить тебя вопросами, а оценить твою способность разобраться в проблеме, умение логически мыслить и рассуждать, какую пользу ты можешь принести проекту и компании. Если не знаешь ответ — попробуй описать, какие шаги ты предпринял бы для решения, в какую сторону бы копал. Записывай все вопросы и задачи, разбирай их после интервью! Даже если ты завалишь это техническое собеседование, то на следующем ты будешь знать ответ на похожее задание.

Если тебе ответили отказом после интервью — проси фидбек, чтобы понять причины, что нужно подтянуть, что пошло не так.

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

Это тот самый человек, который “заказывает музыку”, и, само собой, он хочет знать, кто же будет воплощать в жизнь его идеи, насколько ты готов к диалогу, будет ли между вами взаимопонимание. Естественно, если заказчик зарубежный, то общение будет проходить на английском языке, поэтому хороший английский — must have. Разговор, как правило, идет на общие темы, но он может проверить и технические моменты — например, может попросить рассказать про какой-нибудь паттерн.

Если ты с честью преодолел и эту часть, то… барабанная дробь… у тебя в руках — оффер разработчика! Но не спеши расслабляться и почивать на лаврах, ведь все только начинается. Ты должен доказать, что оказался здесь неслучайно, на тебя можно положиться и ты справишься с поставленным заданием.

На тебя свалится огромный поток информации, придется вливаться в новую команду, налаживать связи, многие вещи поначалу покажутся непонятными. Но, в конечном счете, ты получишь хороший опыт и заработаешь себе репутацию, что позволит тебе двигаться дальше в этом непростом, но увлекательном деле.

Хочешь узнать больше о подготовке к собеседованию Java-разработчика? Подписывайся и смотри вебинар Саши Баглая “10 помощников для твоего собеседования Junior Java Developer”, в котором он подробно разберет составляющие его успешного прохождения.

Java Junior. Что нужно знать для успешного собеседования?

В интернете уйма материала на тему собеседования на позицию Junior Java разработчика. Как общие советы, дополнительные, по процессу, так и технические.

Я же поделюсь своим мнением и опытом проведения собеседований при личной встрече.

У джунов на одну проблему больше, чем у более опытного разработчика. Помимо того, что у него нет (или практически нет) опыта коммерческой разработки, еще и нет опыта собеседования. Это вдвойне усложняет процесс.

Возьмем собеседование в компанию Luxoft.

Список тем, по которым вас будут «пытаться» спрашивать состоит из:

  1. Java basics
  2. Exceptions
  3. Collections
  4. Multithreading
  5. JDBC
  6. XML
  7. JMS
  8. Spring (Beans, MVC, DAO, AOP)
  9. Hibernate
  10. Servlets, JSP
  11. Design Patterns
  12. Core Oracle
  13. SQL (PL/SQL)
  14. UNIX/shell

Реже можно встретить вопросы на тему:

Для интервьюеров проводят инструктаж. Он выглядит примерно так.

Сначала обязательно спрашиваем первые три темы (basic, exceptions, collections), без вариантов. Начинаем прощупывать кандидата простыми вопросами. Если все идет живенько, то углубляется в тематику, понимаем насколько кандидат эксперт в данной области.

Если ответы получаем быстро и подробно, то при следующей теме, уже опускаем основы и спрашиваем сразу сложные вопросы. И так по всем темам.

Если все идет, ну совсем гладко, подозреваем что кандидат мухлюет. Начинаем выдумывать на ходу новые вопросы, которые никогда никому не задавали.

Для Junior разработчиков, как правило, все ограничиваеться темой 1-6, 10 и 13. Больше 1-2-х вопросов по Spring и Hibernate редко задают, обычно даже и на них не отвечают. Но если отвечают, то это уже вызывает живой интерес и уже можно отметить что соискатель хотя бы немного знает. С шаблонами и Linux тоже все печально, потому что без опыта им что-либо рассказать крайне сложно.

По каждой теме выставляется оценка от 0 до 5. Где 0 — не знает вообще, 5 — эксперт. У Junior больше 2 почти некогда не бывает, потому что 3 — это уже senior уровень.

Как же кандидат может понравиться интервьюеру?

Прежде всего — это отличное понимание JavaCore, обратите внимание на Multithreading.

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

Знание одной темы на экспертном уровне. Был у меня на собеседовании Junior, который отлично знал SQL, ну вот просто супер: любые запросы, любой сложности, транзакции, уровни изолированности, легко решает задачи. Конечно я его выделил из общей массы.

Отвечать четко и по теме. Не очень красиво выглядит игра в отгадалки. Вы на проекте тоже будете гадать?

Как готовиться к собеседованию?

Раз вы джун, то конечно от вас ожидают теорию. Но не просто сухие выкладки текста, а теорию своими словами, с пониманием в глазах.

Сможете ли вы так, просто прочитав книгу?

Чтобы этого достичь — нужно практиковать все то, что вы читаете. Отрабатывать навык, как спортсмен, до автоматизма.

После нескольких месяцев самостоятельно практики, и за 2–3 недели до начала первых интервью, освежаем в памяти всю теорию. И начинанием нон-стоп собеседования.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих