Что должен знать java middle

Что должен знать java middle

Java Middle – это соль земли от мира информационных технологий. В статье самые полезные материалы, которые помогут прокачать навыки.

Помните правило Парето? Так вот, Middle-разработчики – это люди, которые сделали те самые 20% усилий, и теперь имеют 80% результата. Это не переджуниоры и не недосеньоры. Это отдельная категория программистов.

Что должен знать Java Middle программист?

Начать нужно с анализа требований к мидлу. Для этого подойдет семинар от Александра Марченко. Тут хорошо разграничены требования к Middle и Junior. По-крайней мере, с наиболее распространенной точки зрения. Для самопроверки полезно познакомиться с рынком: посмотреть на требования в вакансиях Java Middle и походить на собеседования.

Фреймворки

Очевидно, что Java Middle-разработчики используют какой-либо фреймворк. Например, Spring или что-то из Java EE. Полезно иметь свой pet project на непривычном для себя стеке и прокачиваться в нем.

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

Spring

Микросервисы, SpringOne, облачные решения и многое другое в формате лекций, вебинаров и proof-of-concept-ов от лучших зарубежных разработчиков, команды SpringSourceDev.

Java EE

Канал от разработчика Adam Bien, который, согласно его блогу, является Java Champion, NetBeans Dream Team Founding Member, Oracle ACE Director, Java Developer of the Year 2010. Человек фрилансит на стеках Java EE с 1995-го года и до сих пор не уехал кукухой. Заслуживает уважения, тем более что и материал на его канале емкий и наглядный. Адам демонстрирует в формате скринкастов, каким симпатичным и легким для понимания может быть код на Java EE.

Hibernate и JPA

Взаимодействие с данными – важная область, в которой постоянно будет вариться любой Java Middle. Канал «Thoughts of Java» несколько раз в неделю публикует короткие видео. В каждом дается готовый рецепт по той или иной проблеме, связанной с persistence level вашего приложения. Как мапить “Y” и “N” в булевы значения в БД? Как запилить кастомный генератор идентификаторов? Можно ли распарсить EntityGraph из строкового представления? Все это и многое другое расширит опыт и пополнит ваш арсенал программиста трюками на каждый день.

Конференции

Чтобы постоянно качать свой скилл в программировании, нужно держать руку на пульсе. В этом помогут конференции. Они исключительно полезны и как источник знаний, и как компас в мире языка Java. Разработчик, который смотрит исключительно в свой проект, открытый в IDE на рабочем компьютере – умирает как профессионал.

Есть также хорошие зарубежные каналы такой же тематики, один из лучших – Devoxxx.

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

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

Классика шаблонов проектирования от "банды четырех". Есть и другие отличные книги по паттернам, но эта — основной мастрид. Важно погружаться в подобные архитектурные штуки уже сейчас, потому что мидл – это самостоятельный программист. Ему рано или поздно придется писать что-то с нуля. И тогда навыки хорошего стиля в архитектуре поспособствуют более эффективной работе с полученным заданием.

Библия программной инженерии, книга от опытнейшего разработчика компании IBM. В ней в виде очерков раскрываются важные нюансы управления проектами. Это как "Совершенный код" Макконнела, только про проекты. И это куда важнее кода. Мидл-программист должен уметь трезво смотреть на окружение, в котором он работает. Потому что понимание процессов и проблем, с которыми сталкиваются команды разработчиков каждый день, позволит генерировать правильные идеи и стать ценным сотрудником.

Книги по сертификации

Сертификация Oracle – важный майлстоун для каждого Java Middle developer’а. Не потому, что важна какая-то корочка. На самом деле на нее редко кто смотрит, это скорее имиджевая штука. Хотя, бывает, без нее и на крутой проект не попасть. Но крайне редко.

Просто важно уметь аккумулировать знания и получать их объективную оценку. Да и книги, посвященные подготовке к сертификации, раскрывают важные нюансы Java Core. Ещё они предлагают практику в виде примеров тестов с разбором ошибок. На таком стыке углубленной теории и интересной практики изучение Java пойдет как по маслу. Ну и бумажку красивую получите, заламинируете и маме покажете 🙂

Читайте также:  Как получить настройки интернета на йоте

Многопоточность

Если вы Java Middle и конкретно встряли, то встряли вы на многопоточности – к гадалке не ходи. Если еще не встряли, то не мидл еще встрянете. Чтобы избежать таких неприятных ситуаций, нужно учить матчасть по многопоточности на берегу. Для этого пригодится любая специализированная книга по Java Concurrency. Наш выбор остановился на представленной, Java 9 Concurrency Cookbook от Хавьера Гонсалеса как на более свежей. Но можете обратиться и к классике.

12 января 2012 г.

Подготовка к собеседованию на java-программиста (уровень Middle)

Продолжим тему собеседований. В этот раз рассмотрим что вы обязаны знать, если претендуете на должность middle (staff) java developer (описание для уровня junior смотри тут).
Отдельные части текста нагло взяты из википедии, необъятных просторов интернета и, что самое страшное, головы.

Что такое ORM
ORM (англ. Object-relational mapping, рус. Объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».

Что такое JPA?
JPA – это технология, обеспечивающая объектно-реляционное отображение простых JAVA объектов и предоставляющая API для сохранения, получения и управления такими объектами.

JPA – это спецификация (документ, утвержденный как стандарт, описывающий все аспекты технологии), часть EJB3 спецификации.

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

  • Hibernate
  • Oracle TopLink
  • Apache OpenJPA

JPA состоит из трех основных пунктов:

  1. API – интерфейсы в пакете javax.persistance. Набор интерфейсов, которые позволяют организовать взаимодействие с ORM провайдером.
  2. JPQL – объектный язык запросов. Очень похож на SQL, но запросы выполняются к объектам.
  3. Metadata – аннотации над объектами. Набор аннотаций, которыми мы описываем метаданные отображения. Тогда уже JPA знает какой объект в какую таблицу нужно сохранить. Метаданные можно описывать двумя способами: XML-файлом или через аннотации.

Паттерны GoF
За абревиатурой GoF кроются паттерны "банды четырех". Рассказать о них вкраце едва ли возможно, хотя и повторить на скорую руку тоже очень сложно. Могу разве что порекомендовать найти какой-либо cheat sheet, распечатать и периодически пробегаться глазами по основным паттернам.

Различие unit и integration тестинга
Модульное тестирование, или юнит-тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы.
Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.

Интеграционное тестирование (англ. Integration testing, иногда называется англ. Integration and Testing, аббревиатура англ. I&T) — одна из фаз тестирования программного обеспечения, при котором отдельные программные модули объединяются и тестируются в группе. Обычно интеграционное тестирование проводится после модульного тестирования и предшествует системному тестированию.
Интеграционное тестирование в качестве входных данных использует модули, над которыми было проведено модульное тестирование, группирует их в более крупные множества, выполняет тесты, определённые в плане тестирования для этих множеств, и представляет их в качестве выходных данных и входных для последующего системного тестирования.
Целью интеграционного тестирования является проверка соответствия проектируемых единиц функциональным, приёмным и требованиям надежности. Тестирование этих проектируемых единиц — объединения, множества или группа модулей — выполняются через их интерфейс, используя тестирование «чёрного ящика».

TDD
Разработка через тестирование (test-driven development, TDD) — техника разработки программного обеспечения, которая основывается на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест и под конец проводится рефакторинг нового кода к соответствующим стандартам.

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

Читайте также:  Программы для слежения за жестким диском

SQL
Повторите SQL! Например хороший мануал по основам лежит тут

Связанность и связность
Связанность модулей (coupling), часто называемую зацеплением, характеризует степень независимости модулей. При проектировании систем необходимо стремиться, чтобы модули имели минимальную зависимость друг от друга, т.е. были минимально «сцеплены» между собой (отсюда и термин «сцепление» или связанность). Это требование вытекает из одного из основных принципов системного подхода, требующего минимизации информационных потоков между подсистемами.

Связность (cohesion) характеризует целостность, «плотность» модуля, т.е. насколько модуль является простым с точки зрения его использования. В идеале модуль должен выполнять одну единственную функцию и иметь минимальное число «ручек управления». Примером модуля имеющего максимальную связность является модуль проверки орфографии. Если связанность является характеристикой системы, то связность характеризует отдельно взятый модуль.

SOLID
Вы должны знать что такое SOLID. Вкраце об этом тут.

SVN
Надеюсь что такое svn вы знаете. Не лишним было бы помнить такие основные комманды как:
svn checkout — создать рабочую копию, получив текущую ревизию с сервера.
svn update — обновить рабочую копию с сервера (получить изменения). Помним про автоматический мердж и конфликты.
svn diff — посмотреть внесённые изменения в вашу рабочую копию.
svn commit — отправить изменения на сервер, при этом будет создана новая ревизия.

svn add — добавить файл в рабочую копию. При commit файл будет отправлен на сервер.
svn rm — удалить файл из рабочей копии. При commit файл будет удалён из текущей ревизии на сервере.
svn mv — переместить файл внутри репозитория.
svn revert — откатить изменения в файле из рабочей копии.

Maven
Вы должны знать стандартные настройки мавена, основные плагины и принцип работы как таковой. Так же следует помнить про жизненный цикл сборки:
1. Валидация — проверяет корректность проекта
2. Компиляция — компилирует исходный код
3. Тест — тестирует полученый код используя доступный unit testing фреймворк. Эти тесты не должны требовать упаковки или деплоя.
4. Упаковка — создается архив (например, JAR или EAR)
5. Интеграционные тесты — если это необходимо приложение деплоится в окружение, где могут быть выполнено интеграционное тестирование
6. Верификация — выполняет проверки пакета на валидность и соответствие указаным требованиям
7. Инсталяция — копирует пакет с приложением в локальный репозиторий
8. Деплой — собственно деплой.

Serialization
Сериализация это процесс сохранения состояния объекта в последовательность байт; десериализация это процесс восстановления объекта, из этих байт. Java Serialization API предоставляет стандартный механизм для создания сериализуемых объектов.
Сохранение объекта:
Восстановление объекта:

Dated, Numbers and Currency
Едва ли можно рассказать лучше, чем тут.


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

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

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

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

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

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

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

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

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

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

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

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

Ссылка на основную публикацию
Через какое время отключают сим карту мегафон
Часто можно слышать, что некоторые люди вместо одной сим-карты предпочитают пользоваться двумя или сразу несколькими. Это объясняется лояльной политикой компании...
Утилиты асус для ноутбука
Драйверы и утилиты от производителя для ноутбуков и нетбуков ASUS под операционную систему Windows 10 / 8.1 / 8 /...
Утилиты для виндовс 10 64 бит
Скачать антивирус NOD32 на компьютер Windows 10 бесплатно на русском языке для защиты ноутбука или ПК от вирусов и потенциального...
Через прямую l провести плоскость перпендикулярно данной
Не будет преувеличением утверждать, что построение взаимно перпендикулярных прямых и плоскостей наряду с определением расстояния между двумя точками являются основными...
Adblock detector