Правильный ответ: 2. Почему: это не многопоточная программа. Мы создаем объект типа
Что прочитать: у Шилдта про многопоточное программирование. Здесь я описывал его книгу https://yangx.top/java_developer/48
Что загуглить: запуск нового потока, synchronized на статическом методе
Thread
, но не запускаем его с помощью метода start
. Вместо этого основной поток вызывает метод run
экземпляра Thread
, который выполняется синхронно в основном потоке. Так как одному объекту разрешено повторно получать один и тот же монитор, основной поток получает монитор на BlackWhite.class
, когда метод run вызывает метод printBlack
. Чтобы запустить новый поток, нужно вызвать метод start
класса Thread
. Если в программе заменить t.run
на t.start
, то программа всегда будет печатать "WhiteBlack", так как новый поток не сможет приступить к выполнению, пока главный поток не завершится и не отпустит блокировку. Что прочитать: у Шилдта про многопоточное программирование. Здесь я описывал его книгу https://yangx.top/java_developer/48
Что загуглить: запуск нового потока, synchronized на статическом методе
Конструкторы
Для создания нового инстанса класса нужно написать new перед названием класса. Вот пример:
Конструктор – специальный метод, который создает новый объект. Создадим свой конструктор:
Два ключевых момента, которые нужно знать о конструкторах. Имя конструктора совпадает с именем класса. Возвращаемый тип у конструктора не указывается. То есть строка
Цель конструктора – инициализация полей. Но мы также можем присвоить значения полям. Здесь представлены оба способа:
Дефолтный конструктор – конструктор, который не имеет входных аргументов. Если мы не напишем в классе конструктор, то компилятор за нас создаст дефолтный.
Для создания нового инстанса класса нужно написать 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 примитивных типов. Целочисленные, числа с плавающей запятой, символьный и буленовский. Подробнее описал типы в прикрепленной таблице.
Числа, которые мы пишем в коде, называются литералами. Например в строке
Записываю в переменную типа long значение, которое превыщающает максимальное интовое
Для удобства большие числа можно разделять нижними подчёркиваниями
Целые числа можно записывать в десятичной, двоичной, восьмиричной и шестнадцатеричной системах счисления. Вот примеры:
В Джаве есть 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
Отличие 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
#чтопосмотреть
Евгений Борисов о 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
Неделю назад проходил первый этап собеседования на проект крупного банка. Держите новую пачку вопросов.
— 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.
Джава разрешает разработчикам давать нечитаемые имена переменным. По соглашениям такие имена нельзя давать методам, переменным или классам, но код будет компилироваться.
Примеры компилирующихся имен:
normname
НормИмя
$NORM2Name
_tozheNorm3Name
__EtoTozheNormName$
А эти имена не скомпилируются:
3DCircleClass
takSebe@Name
*$coffee
public
Три правила нейминга переменных, которые нужно знать:
— имена должны начинаться с буквы, знака нижнего подчеркивания «_» или знака доллара «$»;
— в имени могут присутствовать цифры;
— нельзя использовать в качестве имени зарезервированные слова. Например: abstract, private, static.
Ситуация. Вы руководитель проекта
Ваша команда работала над большой функциональностью в течение трех месяцев. Релиз через 2 недели, но вы не готовы к нему из-за ряда ошибок. Сейчас нет времени проводить анализ ошибок, нужно принимать решение. Возможные варианты:
1. Попытаться договориться с заказчиком и сдвинуть сроки на 2 месяца. По расчетам их достаточно для полной доработки.
2. Добавить ресурсов – взять разработчиков и тестировщиков из другой команды. И большей командой попробовать добить проект в срок.
3. Уменьшить функциональность. Убрать часть, которая еще не реализована, и выкатить только ту, которая готова и точно работает.
Ваша команда работала над большой функциональностью в течение трех месяцев. Релиз через 2 недели, но вы не готовы к нему из-за ряда ошибок. Сейчас нет времени проводить анализ ошибок, нужно принимать решение. Возможные варианты:
1. Попытаться договориться с заказчиком и сдвинуть сроки на 2 месяца. По расчетам их достаточно для полной доработки.
2. Добавить ресурсов – взять разработчиков и тестировщиков из другой команды. И большей командой попробовать добить проект в срок.
3. Уменьшить функциональность. Убрать часть, которая еще не реализована, и выкатить только ту, которая готова и точно работает.
Java Developer via @vote
Как вы поступите?
anonymous poll
Уменьшу функционал – 354
👍👍👍👍👍👍👍 68%
Сдвину сроки – 82
👍👍 16%
Добавлю ресурсов – 82
👍👍 16%
👥 518 people voted so far.
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
11 февраля 2001 года в США на горнолыжном курорте собрались 17 человек. Это были известные приверженцы разных методологий разработки: инженеры, разработчики и менеджеры. Некоторые из них были конкурентами. На встрече собравшиеся поняли, что у них много общего и выделили общие ценности, которым должны следовать успешные команды. Уже после встречи в течение двух месяцев шла бурная переписка между участниками. В её результате появилась страничка вики с 12 принципами айти команды. Так зародился Agile.
Agile – ценности и принципы, которыми руководствуются успешные команды. Их определяет Agile Manifesto. Манифест содержит 4 основные идеи и 12 принципов. Причем в нем нет практических советов.
Принципы Agile:
— Люди и взаимодействие важнее процессов и инструментов
— Работающий продукт важнее исчерпывающей документации
— Сотрудничество с заказчиком важнее согласования условий контракта
— Готовность к изменениям важнее следования первоначальному плану
И не отрицая важности того, что справа, мы всё-таки больше ценим то, что слева.
http://agilemanifesto.org
Модификаторы доступа
private – доступ открыт только внутри класса
default или package-private – класс, методы или переменные будут видны только внутри пакета
protected – члены класса доступны внутри пакета и в наследниках
public – доступны всем
В наследниках можно менять модификаторы доступа в сторону большей видимости. Например, метод
private – доступ открыт только внутри класса
default или package-private – класс, методы или переменные будут видны только внутри пакета
protected – члены класса доступны внутри пакета и в наследниках
public – доступны всем
В наследниках можно менять модификаторы доступа в сторону большей видимости. Например, метод
protected Object clone()
можно сделать public, но нельзя сделать default.Где взять примеры резюме
Регистрируемся на HeadHunter как работодатель, вводим нужный город, должность и просматриваем реальные резюме. Контактные данные в резюме скрыты, но зато можно подглядеть опыт и навыки.
Регистрируемся на HeadHunter как работодатель, вводим нужный город, должность и просматриваем реальные резюме. Контактные данные в резюме скрыты, но зато можно подглядеть опыт и навыки.
Зарплаты джавистов в 2018 году
Если на сайте «Мой круг» зарегестрироваться и указать свою зарплату, то можно посмотреть зп других айтишников: разработчиков, тестировщиков, аналитиков. Выбираешь город, навык, должность и получаешь выборку.
Вот средние зарплаты джава-разработчиков в Москве за первое полугодие
#компании #зп
Если на сайте «Мой круг» зарегестрироваться и указать свою зарплату, то можно посмотреть зп других айтишников: разработчиков, тестировщиков, аналитиков. Выбираешь город, навык, должность и получаешь выборку.
Вот средние зарплаты джава-разработчиков в Москве за первое полугодие
#компании #зп
Вопрос про ссылочные переменные. Какие из этих фраз верны?
A. Объекты имеют доступ только по ссылке
B. Если закастить объект к его суперклассу, то вы навсегда потеряете доступ к методам, которые описаны в подклассе
C. Тип объекта определяет, какие свойства объекта хранятся в памяти
D. Тип переменной определяет, какие методы и поля доступны в программе
E. С помощью кастинга к подклассу можно добавить атрибуты объекту в памяти
A. Объекты имеют доступ только по ссылке
B. Если закастить объект к его суперклассу, то вы навсегда потеряете доступ к методам, которые описаны в подклассе
C. Тип объекта определяет, какие свойства объекта хранятся в памяти
D. Тип переменной определяет, какие методы и поля доступны в программе
E. С помощью кастинга к подклассу можно добавить атрибуты объекту в памяти