Контракт equals и hashCode
1. Если объекты равны, то их хэшкоды тоже должны быть равны
2. Если хэшкоды равны, то объекты не обязательно равны
1. Если объекты равны, то их хэшкоды тоже должны быть равны
2. Если хэшкоды равны, то объекты не обязательно равны
Java Developer
Что произойдёт после старта приложения?
На 4 строчке будет брошено исключение
NullPointerException
, блок catch
не обработает данное исключение, выполнение перейдёт в блок finally
. В итоге на экране будет написано c
, иключение пробросится выше и программа завершит выполнение, выведя стэк трейс с NullPointerException
.Какие из перечисленных переменных являются ссылочными?
int[] ints;
long[] longs;
String[] strings;
Object[] objects;
Java Developer
Какие из перечисленных переменных являются ссылочными? int[] ints; long[] longs; String[] strings; Object[] objects;
Все типы массивов являются ссылочными переменными. Хоть
int
и long
примитивные типы, но int[]
и long[]
всё равно ссылочные типы.Сертификация по Джаве
Сертификацию по Java проводит Oracle, как компания, которой принадлежат права на язык программирования. Есть два уровня сертификатов: Associate и Professional. Professional сложнее, для его сдачи нужно знать больше тем и предварительно получить Associate. Сами сертификаты называются Oracle Certification Associate (OCA) и Oracle Certification Professional(OCP).
Для каждой версии Джавы есть отдельный сертификат: OCA Java SE 8, SE 7, SE 6... Плюс сертификаты на повышение. Например, если у вас есть OCP Java SE 7, то можете сдать экзамен, который содержит вопросы только по 8 Джаве. Если до этого не получали сертификат, то имеет смысл сдавать на OCA Java SE 8 и OCP Java SE 8, так как по Java 9 и 10 нет сертификации.
Зачем нужны сертификаты. Три плюса: сертификат структурирует знания во время подготовки к нему, делает профиль в LinkedIn более приятным и просматриваемым, избавляет от простейших вопросов на собеседовании.
Для получения OCA и OCP по 8 Джаве нужно сдать экзамены Java SE 8 Programmer I и Java SE 8 Programmer II. Цена каждого экзамена 245$.
Темы, по которым будут вопросы на Java SE 8 Programmer I:
— Запуск программ
— Принципы ООП
— Типы в Джаве
— Условные операторы и циклы
— Массивы и коллекции
— Исключения
— Лямбда-выражения
Темы по Java SE 8 Programmer II:
— Устройство класса
— Дженерики и коллекции
— Лямбды и функциональные интерфейсы
— Стримы
— Работа с датами
— Основы I/O
— NIO.2
— Многопоточность
— JDBC
Сертификацию по Java проводит Oracle, как компания, которой принадлежат права на язык программирования. Есть два уровня сертификатов: Associate и Professional. Professional сложнее, для его сдачи нужно знать больше тем и предварительно получить Associate. Сами сертификаты называются Oracle Certification Associate (OCA) и Oracle Certification Professional(OCP).
Для каждой версии Джавы есть отдельный сертификат: OCA Java SE 8, SE 7, SE 6... Плюс сертификаты на повышение. Например, если у вас есть OCP Java SE 7, то можете сдать экзамен, который содержит вопросы только по 8 Джаве. Если до этого не получали сертификат, то имеет смысл сдавать на OCA Java SE 8 и OCP Java SE 8, так как по Java 9 и 10 нет сертификации.
Зачем нужны сертификаты. Три плюса: сертификат структурирует знания во время подготовки к нему, делает профиль в LinkedIn более приятным и просматриваемым, избавляет от простейших вопросов на собеседовании.
Для получения OCA и OCP по 8 Джаве нужно сдать экзамены Java SE 8 Programmer I и Java SE 8 Programmer II. Цена каждого экзамена 245$.
Темы, по которым будут вопросы на Java SE 8 Programmer I:
— Запуск программ
— Принципы ООП
— Типы в Джаве
— Условные операторы и циклы
— Массивы и коллекции
— Исключения
— Лямбда-выражения
Темы по Java SE 8 Programmer II:
— Устройство класса
— Дженерики и коллекции
— Лямбды и функциональные интерфейсы
— Стримы
— Работа с датами
— Основы I/O
— NIO.2
— Многопоточность
— JDBC
MapStruct
Крутая библиотека, которая генерирует умные маперы. Такие маперы переводят объекты из одного типа в другой. Например, сущность в DTO и наоборот. Перед конвертацией они проверяют объекты на null, отсутствующие поля пропускают, умеют сами переводить Enum в строку и многое другое.
Крутая библиотека, которая генерирует умные маперы. Такие маперы переводят объекты из одного типа в другой. Например, сущность в DTO и наоборот. Перед конвертацией они проверяют объекты на null, отсутствующие поля пропускают, умеют сами переводить Enum в строку и многое другое.
Вот пример с официального сайта. Есть сущность и её ДТОшка.
Нужно написать мапер, который будет переводить Car в CarDto.
public class Car {
private String make;
private int numberOfSeats;
private CarType type; // Enum
//getters, setters etc.
}
public class CarDto {
private String make;
private int seatCount;
private String type;
//getters, setters etc.
}
Нужно написать мапер, который будет переводить Car в CarDto.
Вот такой мапер можем написать с помощью MapStruct:
Аннотация
@Mapper
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper(CarMapper.class);
@Mapping(source = "numberOfSeats", target = "seatCount")
CarDto carToCarDto(Car car);
}
Аннотация
@Mapper
указывает, что нужно сгенерировать нужный нам мапер. Аннотация @Mapping
- что на что мапить. Если имена полей одинаковые, то их указывать не обязательно. Если нужно проигнорировать поля, то пишем @Mapping(target='...', ignore=true)
Тесты с созданным мапером:
@Test
public void shouldMapCarToDto() {
//given
Car car = new Car("Morris", 5, CarType.SEDAN);
//when
CarDto carDto = CarMapper.INSTANCE.carToCarDto(car);
//then
assertThat(carDto).isNotNull();
assertThat(carDto.getMake()).isEqualTo("Morris");
assertThat(carDto.getSeatCount()).isEqualTo(5);
assertThat(carDto.getType()).isEqualTo("SEDAN");
}
Java Developer via @vote
Ситуация. Вы team lead. Выбираете себе разработчика на проект из двух кандидатов, которые понравились на собеседованиях. Первый знает нужные технологии, но дорого стоит. Второй знает только основы, но жаждит изучать новое. Кого выберете?
anonymous poll
Молодой с горящими глазами – 274
👍👍👍👍👍👍👍 68%
Опытный разработчик – 131
👍👍👍 32%
👥 405 people voted so far. Poll closed.
anonymous poll
Молодой с горящими глазами – 274
👍👍👍👍👍👍👍 68%
Опытный разработчик – 131
👍👍👍 32%
👥 405 people voted so far. Poll closed.
История Java
В 1990 году перед разработчиками Sun стояла задача - разработать систему, которую можно внедрять в любую бытовую технику. А для этого программа должна уметь работать под любыми микропроцессорами. Тогда основной язык разработки был C++.
Программу, написанную на C++, можно запустить на процессоре почти любого типа. Но нужно скомпилировать код под конкретный процессор. А вот создание компилятора - сложный процесс. Поэтому команда разработчиков Sun во главе с Джеймсом Гослингом решила разработать язык, код которого можно будет скомпилировать в команды, понятные любому процессору. Через 5 лет они презентовали Java.
Когда программисты Sun уточняли детали нового языка программирования, интернет быстро развивался. Интернет появился у миллионов людей, и появилась проблема переносимости программ. Например, одна и та же программа должна работать на компьютерах с разнотипными процессорами, в разных операционных системах и с различными браузерами. Что и было реализовано в Джава-аплетах. В итоге интернет способствовал широкому распространению Джавы.
Я расписал коротко очень важную и интересную историю развития языка. Здесь же можно посмотреть подробную хронологию и особенности Джавы: https://habr.com/post/306476/
В 1990 году перед разработчиками Sun стояла задача - разработать систему, которую можно внедрять в любую бытовую технику. А для этого программа должна уметь работать под любыми микропроцессорами. Тогда основной язык разработки был C++.
Программу, написанную на C++, можно запустить на процессоре почти любого типа. Но нужно скомпилировать код под конкретный процессор. А вот создание компилятора - сложный процесс. Поэтому команда разработчиков Sun во главе с Джеймсом Гослингом решила разработать язык, код которого можно будет скомпилировать в команды, понятные любому процессору. Через 5 лет они презентовали Java.
Когда программисты Sun уточняли детали нового языка программирования, интернет быстро развивался. Интернет появился у миллионов людей, и появилась проблема переносимости программ. Например, одна и та же программа должна работать на компьютерах с разнотипными процессорами, в разных операционных системах и с различными браузерами. Что и было реализовано в Джава-аплетах. В итоге интернет способствовал широкому распространению Джавы.
Я расписал коротко очень важную и интересную историю развития языка. Здесь же можно посмотреть подробную хронологию и особенности Джавы: https://habr.com/post/306476/
Продолжаю публиковать вопросы из книги по подготовке к OCA.
Какой будет результат выполнения кода?
1: public class _C {
2: private static int $;
3: public static void main(String[] main) {
4: String a_b;
5: System.out.print($);
6: System.out.print(a_b);
7: } }
Варианты ответов:
1️⃣ Compiler error on line 1.
2️⃣ Compiler error on line 2.
3️⃣ Compiler error on line 4.
4️⃣ Compiler error on line 5.
5️⃣ Compiler error on line 6.
6️⃣ 0null
Какой будет результат выполнения кода?
1: public class _C {
2: private static int $;
3: public static void main(String[] main) {
4: String a_b;
5: System.out.print($);
6: System.out.print(a_b);
7: } }
Варианты ответов:
1️⃣ Compiler error on line 1.
2️⃣ Compiler error on line 2.
3️⃣ Compiler error on line 4.
4️⃣ Compiler error on line 5.
5️⃣ Compiler error on line 6.
6️⃣ 0null
Java Developer
Продолжаю публиковать вопросы из книги по подготовке к OCA. Какой будет результат выполнения кода? 1: public class _C { 2: private static int $; 3: public static void main(String[] main) { 4: String a_b; 5: System.out.print($); 6: System.out.print(a_b); 7:…
Правильный ответ номер 5. Локальная переменная должна быть обязательно инициализирована перед её использованием. 4-й ответ неверный, потому что статические и инстанс переменные имеют дефолтные значения и позволяют использовать себя. Переменная
$
имеет значение по умолчанию 0
. Варианты 1, 2, 3 не подходят, потому что имена переменных могут начинаться с буквы, знака нижнего подчёркивания или знака доллара. 6-й не подходит, потому что код не скомпилируется. Если бы переменная a_b
была статическим полем класса _C
, код скомпилировался бы, и программа вывела 0null
.
Java Developer via @vote
Ситуация. Вы team lead. Выбираете себе разработчика на проект из двух кандидатов, которые понравились на собеседованиях. Первый знает нужные технологии, но дорого стоит. Второй знает только основы, но жаждит изучать новое. Кого выберете? anonymous poll Молодой…
По итогам опроса 30% проголосовало за опытного и 70% - за молодого. Отпишите, пожалуйста, в личку @zybkin почему выбрали тот или иной вариант. Интересно будет сделать анализ по ответам и поделиться потом со всеми.
Через два часа продолжим ситуацию с team lead’ом. Будем решать, какие задачи ставить новому junior-разработчику.
Через два часа продолжим ситуацию с team lead’ом. Будем решать, какие задачи ставить новому junior-разработчику.
Ситуация (продолжение). Вы team lead. Приняли на работу молодого сотрудника. Как организуете его первую рабочую неделю?
1. Обучение сотрудника. Расскажете о компании, кто за что отвечает в команде, подробно о проекте, отдельно про каждую используемую технологию.
2. Небольшие задачи. Расскажете суть проекта и дадите десяток простых задач для ознакомления - рефакторинг, обновление документации, фиксы багов.
3. Боевая задача. Дадите ссылку на репозиторий, линки на документацию, а после - большую боевую задачу, чтобы сам начал разбираться в проекте.
1. Обучение сотрудника. Расскажете о компании, кто за что отвечает в команде, подробно о проекте, отдельно про каждую используемую технологию.
2. Небольшие задачи. Расскажете суть проекта и дадите десяток простых задач для ознакомления - рефакторинг, обновление документации, фиксы багов.
3. Боевая задача. Дадите ссылку на репозиторий, линки на документацию, а после - большую боевую задачу, чтобы сам начал разбираться в проекте.
Задача с собеседования
Написать метод, который принимает
Написать метод, который принимает
List
элементов и возвращает List
, который содержит элементы в том же порядке, но без дубликатов. Например, передаем исходный List[1,0,1,1,2,1,4,2]
в метод и получаем List[1,0,2,4]