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

Мемы: @java_memes
加入频道
​​Что сделает программа, которая представлена на скрине, когда её запустишь?

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 как работодатель, вводим нужный город, должность и просматриваем реальные резюме. Контактные данные в резюме скрыты, но зато можно подглядеть опыт и навыки.
Зарплаты джавистов в 2018 году

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

Вот средние зарплаты джава-разработчиков в Москве за первое полугодие

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

A. Объекты имеют доступ только по ссылке
B. Если закастить объект к его суперклассу, то вы навсегда потеряете доступ к методам, которые описаны в подклассе
C. Тип объекта определяет, какие свойства объекта хранятся в памяти
D. Тип переменной определяет, какие методы и поля доступны в программе
E. С помощью кастинга к подклассу можно добавить атрибуты объекту в памяти