Вот такой мапер можем написать с помощью 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]
Выключить тесты в Maven
По умолчанию, когда разработчик запускает билд проекта, Maven автоматически стартует юнит-тесты. Если некоторые тесты валятся, то Maven прекращает билд. Часто бывает нужно собрать проект, пропустив тесты. Вот пара команд для этого:
Пропускает компиляцию тестов и их запуск
Компилирует тесты, но не запускает их
#Maven #Cheat
По умолчанию, когда разработчик запускает билд проекта, Maven автоматически стартует юнит-тесты. Если некоторые тесты валятся, то Maven прекращает билд. Часто бывает нужно собрать проект, пропустив тесты. Вот пара команд для этого:
mvn package -Dmaven.test.skip=true
Пропускает компиляцию тестов и их запуск
mvn package -DskipTests
Компилирует тесты, но не запускает их
#Maven #Cheat
Что подходит и для интерфейса и для абстрактного класса? Выбрать все возможные варианты.
A. Методы должны быть абстрактными
B. Может содержать
C. Может использовать ключевое слово
D. Может содержать
E. Может содержать
F. Нельзя создать инстанс
G. Наследуется от класса
A. Методы должны быть абстрактными
B. Может содержать
public static final
переменныеC. Может использовать ключевое слово
extends
D. Может содержать
default
методыE. Может содержать
static
методыF. Нельзя создать инстанс
G. Наследуется от класса
Object
Правильные ответы: B, C, E, F
Вариант A не подходит. Абстрактный класс может содержать реализацию метода, а интерфейс с восьмой Джавы может содержать статический и дефолтный метод.
Вариант B верный. В интерфейсе все переменные
Вариант C верный. И абстрактный класс и интерфейс могут использовать
Вариант D не подходит. Только интерфейс может иметь
Вариант E верный. И абстрактный класс и интерфейс могут содержать
Вариант F верный. Нужно иметь конкретную реализацию абстрактного класса или интерфейса, чтобы создать объект такого типа.
Вариант G не подходит. Инстанс класса, который реализует интерфейс, наследник класса
Вариант A не подходит. Абстрактный класс может содержать реализацию метода, а интерфейс с восьмой Джавы может содержать статический и дефолтный метод.
Вариант B верный. В интерфейсе все переменные
public static final
, а абстрактный класс тоже может их содержать.Вариант C верный. И абстрактный класс и интерфейс могут использовать
extends
. Но в отличие от класса, интерфейс поддерживает множественное наследование.Вариант D не подходит. Только интерфейс может иметь
default
метод.Вариант E верный. И абстрактный класс и интерфейс могут содержать
static
методы.Вариант F верный. Нужно иметь конкретную реализацию абстрактного класса или интерфейса, чтобы создать объект такого типа.
Вариант G не подходит. Инстанс класса, который реализует интерфейс, наследник класса
Object
, но сам интерфейс нет.Посты о Git
Пока все обсуждают, что Microsoft купила GitHub, сделал подборку постов о Git.
Что такое Git
https://yangx.top/java_developer/15
Жизненный цикл файлов
https://yangx.top/java_developer/19
Состояния файлов
https://yangx.top/java_developer/20
Ресурсы для изучения
https://yangx.top/java_developer/21
Популярные команды
https://yangx.top/java_developer/30
Частые проблемы и их решения
https://yangx.top/java_developer/56
#git
Пока все обсуждают, что Microsoft купила GitHub, сделал подборку постов о Git.
Что такое Git
https://yangx.top/java_developer/15
Жизненный цикл файлов
https://yangx.top/java_developer/19
Состояния файлов
https://yangx.top/java_developer/20
Ресурсы для изучения
https://yangx.top/java_developer/21
Популярные команды
https://yangx.top/java_developer/30
Частые проблемы и их решения
https://yangx.top/java_developer/56
#git
Молодой против опытного
Проводил опрос "Если бы вы были Тим лидом, кого бы выбрали к себе в команду" https://yangx.top/java_developer/112. Выбрать можно было одного из двух кандидатов. Первый - молодой разработчика с горящими глазами, который знает только основы. Второй - опытный дорогостоящий разработчик. Голоса в процентах распределелились 70 на 30. Публикую ответы ребят, почему они выбрали свой вариант.
Молодой разработчик
— приносит свежие идеи в проект
— как воспитаешь, так и будет кодить
— стремится стать хорошим спецом и не бежит за зарплатой
— не нужно переубеждать в правильности решения
— в перспективе принесет реальную отдачу, если не жмут сроки проекта и есть кому обучать
Опытный разработчик
— начинает приносить пользу сразу
— быстрее и правильнее решает задачи
— когда горит проект, уменьшает риски срыва проекта
— уже знает необходимые технологии
— сложно находить общую точку зрения
Проводил опрос "Если бы вы были Тим лидом, кого бы выбрали к себе в команду" https://yangx.top/java_developer/112. Выбрать можно было одного из двух кандидатов. Первый - молодой разработчика с горящими глазами, который знает только основы. Второй - опытный дорогостоящий разработчик. Голоса в процентах распределелились 70 на 30. Публикую ответы ребят, почему они выбрали свой вариант.
Молодой разработчик
— приносит свежие идеи в проект
— как воспитаешь, так и будет кодить
— стремится стать хорошим спецом и не бежит за зарплатой
— не нужно переубеждать в правильности решения
— в перспективе принесет реальную отдачу, если не жмут сроки проекта и есть кому обучать
Опытный разработчик
— начинает приносить пользу сразу
— быстрее и правильнее решает задачи
— когда горит проект, уменьшает риски срыва проекта
— уже знает необходимые технологии
— сложно находить общую точку зрения
Что посмотреть на выходных
Курс по Джаве для начинающих от Вячеслава Ковалевского
https://www.youtube.com/playlist?list=PLsQAG1V_t58AKvV5v4NVXxo68OyLdNX3j
Интервью разработчика, который родился в Краснодарском крае, а сейчас переехал в Америку и работает в Tesla
https://youtu.be/QXjzP-zndrE
Доклад Евгения Борисова о Spring Data
https://youtu.be/nwM7A4TwU3M
#чтопосмотреть
Курс по Джаве для начинающих от Вячеслава Ковалевского
https://www.youtube.com/playlist?list=PLsQAG1V_t58AKvV5v4NVXxo68OyLdNX3j
Интервью разработчика, который родился в Краснодарском крае, а сейчас переехал в Америку и работает в Tesla
https://youtu.be/QXjzP-zndrE
Доклад Евгения Борисова о Spring Data
https://youtu.be/nwM7A4TwU3M
#чтопосмотреть
Effective Java
Книга рассказывает тонкости базовых принципов Джавы. Её написал один из авторов языка Джошуа Блох. Подходит тем, кто изучил синтаксис, написал пару мини-проектов и хочет глубже изучить Джаву. Также отличная книга для желающих укрепить знания и перейти с позиции Джуниор на позицию Мидл.
Второе издание состоит из 77 полезных правил и тонкостей. Автор описал решение ежедневных задач разработчика. На примерах подробно объясняет, как нужно и не нужно кодить, чтобы получился надёжный и эффективный код.
Ниже публикую скрины содержания и саму книгу в формате djvu.
#книги
Книга рассказывает тонкости базовых принципов Джавы. Её написал один из авторов языка Джошуа Блох. Подходит тем, кто изучил синтаксис, написал пару мини-проектов и хочет глубже изучить Джаву. Также отличная книга для желающих укрепить знания и перейти с позиции Джуниор на позицию Мидл.
Второе издание состоит из 77 полезных правил и тонкостей. Автор описал решение ежедневных задач разработчика. На примерах подробно объясняет, как нужно и не нужно кодить, чтобы получился надёжный и эффективный код.
Ниже публикую скрины содержания и саму книгу в формате djvu.
#книги