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

Мемы: @java_memes
加入频道
Какие из перечисленных переменных являются ссылочными?

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
Уровни сертификации на сайте Oracle
MapStruct

Крутая библиотека, которая генерирует умные маперы. Такие маперы переводят объекты из одного типа в другой. Например, сущность в DTO и наоборот. Перед конвертацией они проверяют объекты на null, отсутствующие поля пропускают, умеют сами переводить Enum в строку и многое другое.
Вот пример с официального сайта. Есть сущность и её ДТОшка.

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");
}
Ситуация. Вы team lead. Выбираете себе разработчика на проект из двух кандидатов, которые понравились на собеседованиях. Первый знает нужные технологии, но дорого стоит. Второй знает только основы, но жаждит изучать новое. Кого выберете?
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/
Продолжаю публиковать вопросы из книги по подготовке к 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
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. Приняли на работу молодого сотрудника. Как организуете его первую рабочую неделю?

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 прекращает билд. Часто бывает нужно собрать проект, пропустив тесты. Вот пара команд для этого:

mvn package -Dmaven.test.skip=true
Пропускает компиляцию тестов и их запуск

mvn package -DskipTests
Компилирует тесты, но не запускает их

#Maven #Cheat
Что подходит и для интерфейса и для абстрактного класса? Выбрать все возможные варианты.

A. Методы должны быть абстрактными
B. Может содержать public static final переменные
C. Может использовать ключевое слово extends
D. Может содержать default методы
E. Может содержать static методы
F. Нельзя создать инстанс
G. Наследуется от класса Object
Правильные ответы: B, C, E, F

Вариант A не подходит. Абстрактный класс может содержать реализацию метода, а интерфейс с восьмой Джавы может содержать статический и дефолтный метод.

Вариант B верный. В интерфейсе все переменные public static final, а абстрактный класс тоже может их содержать.

Вариант C верный. И абстрактный класс и интерфейс могут использовать extends. Но в отличие от класса, интерфейс поддерживает множественное наследование.

Вариант D не подходит. Только интерфейс может иметь default метод.

Вариант E верный. И абстрактный класс и интерфейс могут содержать static методы.

Вариант F верный. Нужно иметь конкретную реализацию абстрактного класса или интерфейса, чтобы создать объект такого типа.

Вариант G не подходит. Инстанс класса, который реализует интерфейс, наследник класса Object, но сам интерфейс нет.