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

Мемы: @java_memes
加入频道
Правильные ответы: 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. Проект

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

11 февраля 2001 года в США на горнолыжном курорте собрались 17 человек. Это были известные приверженцы разных методологий разработки: инженеры, разработчики и менеджеры. Некоторые из них были конкурентами. На встрече собравшиеся поняли, что у них много общего и выделили общие ценности, которым должны следовать успешные команды. Уже после встречи в течение двух месяцев шла бурная переписка между участниками. В её результате появилась страничка вики с 12 принципами айти команды. Так зародился Agile.

Agile – ценности и принципы, которыми руководствуются успешные команды. Их определяет Agile Manifesto. Манифест содержит 4 основные идеи и 12 принципов. Причем в нем нет практических советов.

Принципы Agile:
— Люди и взаимодействие важнее процессов и инструментов
— Работающий продукт важнее исчерпывающей документации
— Сотрудничество с заказчиком важнее согласования условий контракта
— Готовность к изменениям важнее следования первоначальному плану

И не отрицая важности того, что справа, мы всё-таки больше ценим то, что слева.

http://agilemanifesto.org
​​Принципы Agile
​​Модификаторы доступа

private – доступ открыт только внутри класса

default или package-private – класс, методы или переменные будут видны только внутри пакета

protected – члены класса доступны внутри пакета и в наследниках

public – доступны всем

В наследниках можно менять модификаторы доступа в сторону большей видимости. Например, метод protected Object clone() можно сделать public, но нельзя сделать default.
Где взять примеры резюме

Регистрируемся на HeadHunter как работодатель, вводим нужный город, должность и просматриваем реальные резюме. Контактные данные в резюме скрыты, но зато можно подглядеть опыт и навыки.