Java Developer
6.45K subscribers
235 photos
8 videos
12 files
279 links
MAKE JAVA GREAT AGAIN

Мемы: @java_memes
加入频道
Есть несколько способов сделать так, чтобы класс мог использоваться, а переменная нет. Нужно создать специальный синтаксический контекст.

1 способ
Привести null к нужному типу и обратиться к статической переменной класса
System.out.println(((X.Y) null).Z);

2 способ
Создать класс, который наследуется от нужного класса
static class XY extends X.Y {};
И вывести на экран переменную
System.out.println(XY.Z);

3 способ
Использовать в методе main дженерики
 public static <T extends X.Y> void main(String[] args) {
System.out.println(T.Z)
}
Работа в Германии ч.1

Взял интервью у Джава-разработчика Александра, которому 26 лет. Он родился на Украине, последние два года работает в Германии.

— Расскажи, как начинал свой путь разработчика?

Увлёкся программированием в 8 классе. Два раза в неделю занимался с учителем Паскалем. Выиграл городскую олимпиаду.

После школы учился на инженера в ХНУРЭ, код почти не писал, да и учился как попало. Уже заканчивая магистратуру, обсуждал с ребятами будущее, узнал какие ЗП в IT, и сразу же подал заявку на бесплатные курсы EPAM. Основным критерием отбора был английский язык, и базовые знания программирования.

Обучение проходило пол года 8 часов в неделю. Мы изучали Java с нуля после пар. Я прошел несколько отборов, выполнил тестовые проекты и попал в офис.

В офисе год работали над тестовыми проектами на маленькой ЗП. Под конец проектов нас собеседовали и отбирали на различные фреймворки. Мне достался Adobe Experience Manager, на котором работаю и сейчас.

— Про курсы EPAM интересно. Что изучали на курсе?

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

Когда стали учиться в офисе, больше внимания уделяли клин коду, паттернам, работе в команде, презентациям, связанным технологиям: Git, JS, SQL, Maven, JUnit, Jenkins, Jira. Код проверяли ребята из продакшна с огромным опытом работы. Нам можно было спорить, поэтому code review были очень продуктивными.

Книги особо никто не читал, пользовались более конкретными материалами.

— Класс! Думаю, было крутое время. Ты работал в Епам в Харькове?

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

— В какой момент решил уволиться?

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

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

— Как выбор пал на Европу?

Читал форумы и сравнивал условия жизни, цены, зарплаты.

Самый очевидный выбор – США. Но там, кроме ЗП, всё плохо. Мало отпускных дней, плохое страхование, преступность, ограниченная виза для жены, нужна машина.

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

Третий вариант – соц. страна в ЕС. Плюсы – все кругом счастливы, хорошая ЗП, сервис, инфраструктура, низкая преступность, 30 дней отпуска + больше 10 праздничных дней, отличные визовые условия.

Минусы – дефицит жилья, и зп меньше чем в США из-за налогов и страховок. Но иметь своё жильё – не всегда удобно, а налоги по сути идут на страхование и пенсионные накопления.

— Чем зацепила Германия по сравнению с остальными европейскими странами?

Страховки (В Швейцарии похуже), умеренный климат (Скандинавия – холодно, Испания/Италия – жарко), месторасположение (центр Европы), распространнёный в ЕС немецкий язык, довольно просто получить ПМЖ и затем гражданство, куча мероприятий и пива.

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

К тому же Мюнхен – интернациональный город, 99% людей говорят по-английски, да и русских много. Например, можно найти врача любой специальности, говорящего по-русски, что довольно важно, как мне кажется.

После 2-х лет проживания объездил почти все страны ЕС, и всё больше понимаю, что сделал правильный выбор.

Часть 2 https://yangx.top/java_developer/146
Часть 3 https://yangx.top/java_developer/149

#интервью #Германия #переезд
В АйТи каналах тоже должны быть лайки
Работа в Германии ч.2

Часть 1 https://yangx.top/java_developer/144
Часть 3 https://yangx.top/java_developer/149

— Расскажи, как искал работу в Мюнхене?

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

Потом со мной связалась через LinkedIn знакомая одного из разработчиков в моей нынешней компании. Он так же начинал в Харьковском ЭПАМ, и знал что там есть люди с опытом в АЕМ фреймворке и с хорошей базой. Свела меня с HRом, быстро поговорили на стандартные темы, какая хорошая фирма, и как я хочу в ней расти.

Техническое интервью по скайпу проводили после работы. Я и интервьюеры были уставшие. Плюс не подключил веб-камеру, поэтому интервью прошло неважно.

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

Через пару дней сказали что я прошёл интервью. Хоть я был мидлом в Епам, предложили должность джуниора, т.к. у меня был год опыта в продакшене. Здесь разработчики получают должность мидла после 3-х лет работы, сеньора - к восьми годам.

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

— Тяжело было на джуниора перейти после Епама?

Сначала - нет. Была куча забот по переезду и обустройству, поэтому комфортно работал без особой ответственности над не самыми сложными задачами.

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

— Что самое сложное было при трудоустройстве и поиске работы?

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

— На что стоит обращать внимание при выборе компании?

Если рекрутеры косячат с самого начала, прерывай общение сразу.

В Германии стоит идти в фирмы, где большинство немцы или европейцы.

Стоит изучить офис и его обитателей. Там будешь проводить 40 часов в неделю. Если люди довольны жизнью и работой, это заметишь сразу.

Контракты простые и короткие, т.к. всё регламентируется законом. Но стоит уделить внимание бенефитам, которые предоставляет компания. Например, если фирма организует курсы немецкого, то это экономит 300 евро/месяц. Большая фирма и жёнам оплачивает. Каждая подобная плюшка экономит много денег.

— Расскажи немного о самой компании

Компании 5 лет, 500 сотрудников. Работаем по системе Holacracy - маленькие группки ответственны сами за себя, и сами принимают решения.

— Какие задачи выполняешь на работе?

Ничего сверхъестественного - делаем новые фичи, расширяя готовые решения. Сложной логики практически нет. Задания после бизнес-аналитиков уже готовые спускаются, так что особой свободы тоже нет.

Всё происходит гораздо спокойнее, чем в Епам: больше свободного времени, а работа как хобби воспринимается.

— Какие технологии используете кроме AEM?

Другие продукты из Adobe Marketing Cloud, частью которого является AEM. Это что-то вроде фотошопа, но для разработчиков - очень мощная, дорогая и массивная платформа. Практически все из Fortune Global 500 с её помощью внутренние и внешние порталы создают. АЕМ по сути состоит из множества технологий: Sling, OSGI, JCR + 2 UI фреймворка: touch и классический.

Часть 1 https://yangx.top/java_developer/144
Часть 3 https://yangx.top/java_developer/149

#интервью #переезд #компании
Вопрос про исключения. Какие из этих фраз верны?

A. Checked исключения могут быть обработаны или проброшены.
B. Checked исключения должны быть обработаны или проброшены.
C. Errors могут быть обработаны или проброшены.
D. Errors исключения должны быть обработаны или проброшены.
E. Runtime исключения могут быть обработаны или проброшены.
F. Runtime исключения должны быть обработаны или проброшены.
Правильные ответы: A, B, C, E. Checked исключения обязательно должны быть обработаны в try-catch или проброшены выше, то есть объявлены в сигнатуре метода с помощью ключевого слова throws. Runtime исключения, как и любые unchecked исключения, можно обрабатывать или пробрасывать. Error можно обработать или пробросить, но это считается бэд практис.
Работа в Германии ч.3

Заключительная часть интервью с Александром, Джава-разработчиком, который перебрался с женой в Мюнхен. Последняя часть состоит из двух постов. В ней Саша рассказывает про то, как работает и как отдыхает, сколько тратит и сколько зарабатывает.

Часть 1 https://yangx.top/java_developer/144
Часть 2 https://yangx.top/java_developer/146

— Что нравится на твоей работе?

Всё практически. Разница с Епам колоссальна. У нас, например, полностью гибкое время и место работы. Т.е. можно работать из дома, или из любого другого места и не обязательно 8 часов. Все понимают, что не всегда есть настроение или достаточное количество задач. А иногда нужно наоборот задержаться, чтобы доделать задачу, или поучаствовать в ивенте.

Зимой фирма оплачивает пару дней покатушек на лыжах в Альпах, весной вся фирма собирается дней на 5 на саммит в гостинничный комплекс, летом - один день на природе, осенью - 4 дня на яхтах по морю и рождественский ужин.

Еще командировки, локальные мини-ивенты, проектные тимбилдинги, походы в биргартен, беслпатное пиво в офисах и многое другое.

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

К тому же у нас есть немало гуру, которые знают очень много, и сами развивают технологии, а не просто ими пользуются (например у нас есть несколько Apache Committers).

Ну и за счёт Holacracy нету ощущения что над тобой есть начальник, 95% организационных задач решаются самостоятельно.

— Вот это очень круто! Есть то, что хочется улучшить? Чего не хватает в работе?

Иногда жёсткого и прямолинейного начальника таки не хватает)

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

Не все могут сами себя мотивировать хорошо и ответственно работать. Но совсем лентяев, естественно, увольняют со временем. Выплачивая зарплату за 3 месяца 😂

— Нужно ли знать немецкий язык?

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

Для жизни немецкий практически не нужен, поэтому можно учить без спешки. Я вот хочу остаться жить здесь, а с немецким можно быстрее получить ПМЖ и паспорт.

— Ты с начала года Java Middle. Как у вас происходит повышение?

У нас в фирме ввели систему баджей. И для повышения нужно собрать определённые баджи разного уровня. Для миддла их около 30 штук. 1 бадж - это 1 навык или технология, например: Git, HTML, JS.

Некоторые можно получить с помощью сертификатов, например: английский В2 и выше, Oracle Certified Professional Java SE 8 Programmer, Adobe Certified Expert - AEM Lead Developer и т.д. Можно прочитать короткую лекцию для коллег, предоставить ссылку на сделанную задачу в Jira или на написанную документацию.

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

— Как изменилась зарплата?

Была 47к€ в год. Стала 57к€.

Часть 1 https://yangx.top/java_developer/144
Часть 2 https://yangx.top/java_developer/146

#интервью #Германия #компании #зп
— Допустим, у меня 2 года разработки. На какой контракт я могу рассчитывать, если буду аплаиться?

В зависимости от компании 40к - 50к. Немцу после ВУЗа и практики могут 50к дать. В идеале можно получить и 60к. Но многие переезжают на любую зарплату, а потом ищут новую работу. 6 месяцев испытательный срок. Если хочешь уйти на испытательном, нужно уведомлять за 2 недели, после испытательного – за 6 месяцев.

— А если у меня нет профильного образования?

Некоторые требуют. У меня знакомый с Украины работал без. Основной минус – без профильного ВО не получишь Blue Card.

— Расскажи для тех, кто не в теме, что такое Blue Card.

Это программа для привлечения cпециалистов в ЕС. Если есть контракт с ЗП от 42к в год (для программиста) и профильное высшее образование, то гораздо проще переехать. Можешь раньше получить ПМЖ Германии и европейский ПМЖ. Жена получает возможность работать и переехать с тобой.

— Что будешь делать, когда получишь ПМЖ?

Ну, какая-то ведь стабильность будет. Кредит на жильё смогу получить. Плюс с ПМЖ уже из страны не выгонят, даже если перестать работать.

— Как вы проводите свободное время?

Летом гриллим, ходим в горы, ездим на озера. Природа кругом шикарная! Зимой стараемся улететь в тёплые края либо собираемся с друзьями: играем в настолки, пьём глинтвейн, ходим в сауну.

В целом, много путешествуем, благо всё рядом и куча лоукостеров летает. За 2 года посетили 23 страны. Могу сказать, что эти 2 года лучшие в нашей жизни. До переезда как будто и не жили совсем.

— Сколько тратишь в месяц? Съем жилья, еда, курсы, слетать отдохнуть

Квартира 1150€, еда 400, обед с коллегами 6-13, интернет 35, електричество 70, радио 17, проездной 65, инет+звонки 10, тренажёрка 20.

Курсы 300€ за 1 подуровень (А1.1, А1.2, А2.1 и т.д.), длятся в 2 месяца. Но что-то фирма компенсирует, что-то государство. Плюс в конце года можно вернуть неплохую сумму с налогов. Мы за 1-ый год из-за переезда вернули 3000€.

Отдых по-разному. 2 недели за 2-их 1500€ в среднем, если не лететь через океан.

— О, расскажи ещё, как рассчитывается налог в Германии

Есть несколько налоговых классов. Без жены – 1-ый класс и 41% налога. Если с женой и у неё зп меньше, то 3-ий класс и 33% налога. Всё зависит от самой зарплаты, плюс много тонкостей и нюансов.

Вот здесь можно посчитать точно и глянуть, на что идут налоги https://www.brutto-netto-rechner.info/gehalt/gross_net_calculator_germany.php

— Можешь дать совет начинающим? Тем, кто хочет переехать, но ещё сомневается?

Советую всем попробовать, всегда ведь можно вернуться назад. Да, дома или в США можно быстрее заработать денег и купить дом, но это не самое главное в жизни.
Слайд про область видимости переменных. Взял из презентации, которую проводил студентам в конце прошлого года
Что посмотреть на выходных

Мини-курс по основам Spring от Юрия Ткача
https://www.youtube.com/playlist?list=PL6jg6AGdCNaWF-sUH2QDudBRXo54zuN1t

Доклад Вячеслава Круглова «Введение в Hibernate»
https://youtu.be/C-wEZjEOhWc

Интервью с девушкой-программистом о том, чему учат в американских университетах на Computer Science
https://youtu.be/_6fI4f26O14

#чтопосмотреть
​​Что сделает программа, которая представлена на скрине, когда её запустишь?

1️⃣ Не скомпилируется
2️⃣ Напечатает "BlackWhite"
3️⃣ Напечатает "WhiteBlack"
4️⃣ Напечатает либо "BlackWhite" либо "WhiteBlack"
5️⃣ Произойдёт deadlock
Правильный ответ: 2. Почему: это не многопоточная программа. Мы создаем объект типа Thread, но не запускаем его с помощью метода start. Вместо этого основной поток вызывает метод run экземпляра Thread, который выполняется синхронно в основном потоке. Так как одному объекту разрешено повторно получать один и тот же монитор, основной поток получает монитор на BlackWhite.class, когда метод run вызывает метод printBlack. Чтобы запустить новый поток, нужно вызвать метод start класса Thread. Если в программе заменить t.run на t.start, то программа всегда будет печатать "WhiteBlack", так как новый поток не сможет приступить к выполнению, пока главный поток не завершится и не отпустит блокировку.

Что прочитать: у Шилдта про многопоточное программирование. Здесь я описывал его книгу https://yangx.top/java_developer/48

Что загуглить: запуск нового потока, synchronized на статическом методе
Конструкторы

Для создания нового инстанса класса нужно написать new перед названием класса. Вот пример: Random r = new Random(); Переменная r ссылается на новый объект типа Random. Запись Random(), которая используется вместе с ключевым словом new, выглядит как метод и является конструктором.

Конструктор – специальный метод, который создает новый объект. Создадим свой конструктор:
public class JavaDev {
public JavaDev() {
// constructor
}
}


Два ключевых момента, которые нужно знать о конструкторах. Имя конструктора совпадает с именем класса. Возвращаемый тип у конструктора не указывается. То есть строка public void JavaDev() { } является методом, но не конструктором. И такой метод не вызовется, если написать new JavaDev().

Цель конструктора – инициализация полей. Но мы также можем присвоить значения полям. Здесь представлены оба способа:
class Student {
int age = 16;
String name;
public Student(String name) {
this.name = name;
}
}


Дефолтный конструктор – конструктор, который не имеет входных аргументов. Если мы не напишем в классе конструктор, то компилятор за нас создаст дефолтный.
​​Примитивные типы

В Джаве есть 8 примитивных типов. Целочисленные, числа с плавающей запятой, символьный и буленовский. Подробнее описал типы в прикрепленной таблице.

Числа, которые мы пишем в коде, называются литералами. Например в строке int i = 123; литералом будет число 123. По умолчанию целочисленные литералы в Джаве определены типом int. Поэтому нужно быть аккуратным при записи чисел, которые выходят за диапазоны int. Например, максимальное значение int равно 2,147,483,647. Проверить это можно следующей строкой System.out.println(Integer.MAX_VALUE);

Записываю в переменную типа long значение, которое превыщающает максимальное интовое long max = 3123456789; И получаю ошибку компиляции. Чтобы Джава поняла, что литерал не int, а long, нужно в конце числа написать дописать букву L: long max = 3123456789L;

Для удобства большие числа можно разделять нижними подчёркиваниями long max = 3_123_456_789L;

Целые числа можно записывать в десятичной, двоичной, восьмиричной и шестнадцатеричной системах счисления. Вот примеры:
System.out.println(56); // 56
System.out.println(0b11); // 3
System.out.println(017); // 15
System.out.println(0x1F); // 31
Вопросы с собеседований

Отличие HashMap от TreeMap
Кэширование в Hibernate
Наследование в Hibernate
Скоупы Spring бинов
Отличие singletone от prototype
Жизненный цикл в Maven
Отличие install от deploy
Минусы TDD
Что посмотреть на выходных

Евгений Борисов о Spring на JPoint 2017
https://youtu.be/nGfeSo52_8A

Два сильных вопроса, которые может задать разработчик на собеседовании
https://youtu.be/ebaDjwr0lw8

Орел и решка в Сан-Франциско. Про силиконовую долину начинается на 30:38
https://youtu.be/r8GFqmbopE4

#чтопосмотреть
Вопросы с собеседований

Неделю назад проходил первый этап собеседования на проект крупного банка. Держите новую пачку вопросов.

— Collection – основные интерфейсы
— Зачем нужно красно-черное дерево в Джаве
— Есть одна таблица в БД и три сущности. Как осуществить маппинг с помощью JPA/Hibernate
— Уровни кэширования в Hibernate. Чем они отличаются
— Какие есть сторонние решения для кэширования
— Рассказать про Inversion of Control Containers и Dependency Injection
— Spring – какие есть скоупы и для чего используются
— TDD и BDD
— Для чего нужен Mockito
— Отличие Mock от Spy
— Этапы сборки проекта

Присылайте задачи и вопросы с собеседований в личку, буду публиковать @zybkin
Дикие имена

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

Примеры компилирующихся имен:
normname
НормИмя
$NORM2Name
_tozheNorm3Name
__EtoTozheNormName$


А эти имена не скомпилируются:
3DCircleClass
takSebe@Name
*$coffee
public


Три правила нейминга переменных, которые нужно знать:
— имена должны начинаться с буквы, знака нижнего подчеркивания «_» или знака доллара «$»;
— в имени могут присутствовать цифры;
— нельзя использовать в качестве имени зарезервированные слова. Например: abstract, private, static.
Ситуация. Вы руководитель проекта

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

1. Попытаться договориться с заказчиком и сдвинуть сроки на 2 месяца. По расчетам их достаточно для полной доработки.

2. Добавить ресурсов – взять разработчиков и тестировщиков из другой команды. И большей командой попробовать добить проект в срок.

3. Уменьшить функциональность. Убрать часть, которая еще не реализована, и выкатить только ту, которая готова и точно работает.
Как вы поступите?
anonymous poll

Уменьшу функционал – 354
👍👍👍👍👍👍👍 68%

Сдвину сроки – 82
👍👍 16%

Добавлю ресурсов – 82
👍👍 16%

👥 518 people voted so far.
​​Продукт vs. Проект

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