Java Developer via @vote
Ситуация. Вы ходили по собеседованиям и получили три оффера. У каждой компании свой плюс: тимлид, зарплата, технологии. Что повлияет на ваш выбор?
anonymous poll
Крутые технологии – 223
👍👍👍👍👍👍👍 44%
Опытный тимлид – 171
👍👍👍👍👍 34%
Высокая зарплата – 113
👍👍👍👍 22%
👥 507 people voted so far.
anonymous poll
Крутые технологии – 223
👍👍👍👍👍👍👍 44%
Опытный тимлид – 171
👍👍👍👍👍 34%
Высокая зарплата – 113
👍👍👍👍 22%
👥 507 people voted so far.
5 принципов хорошего программиста
Два года назад прочитал крутую статью "как повысить продуктивность" [https://habr.com/post/299/]. Я переформулировал её в "5 принципов хорошего программиста", которым стараюсь постоянно следовать. Вот эти принципы:
1. Использовать поиск. Не ищите глазами нужный файл, текст, строку. Пользуйтесь функциями поиска везде, где это возможно.
2. Автоматизировать. Если какое-то действие повторяете больше 10 раз, его стоит автоматизировать.
3. Учить скриптовые языки. Python, Perl, Bash - эти парни облегчают жизнь программистам, если умеешь ими пользоваться.
4. Освоить IDE. IDE или среда разработки - оружие разработчика. А чтобы владеть ею мастерски, изучайте горячие клавиши.
5. Саморазвиваться. Выделять каждый день время на изучение новых технологий. Когда я не развиваюсь, то чувствую, что деградирую.
Хороший программист пишет код за минимальное время, отлично знает свою IDE, развивается и автоматизирует то, что приходится часто повторять.
Два года назад прочитал крутую статью "как повысить продуктивность" [https://habr.com/post/299/]. Я переформулировал её в "5 принципов хорошего программиста", которым стараюсь постоянно следовать. Вот эти принципы:
1. Использовать поиск. Не ищите глазами нужный файл, текст, строку. Пользуйтесь функциями поиска везде, где это возможно.
2. Автоматизировать. Если какое-то действие повторяете больше 10 раз, его стоит автоматизировать.
3. Учить скриптовые языки. Python, Perl, Bash - эти парни облегчают жизнь программистам, если умеешь ими пользоваться.
4. Освоить IDE. IDE или среда разработки - оружие разработчика. А чтобы владеть ею мастерски, изучайте горячие клавиши.
5. Саморазвиваться. Выделять каждый день время на изучение новых технологий. Когда я не развиваюсь, то чувствую, что деградирую.
Хороший программист пишет код за минимальное время, отлично знает свою IDE, развивается и автоматизирует то, что приходится часто повторять.
Code Conventions
Code convetions или соглашения по написанию кода нужны для его читаемости. Любую строчку кода можно написать по-разному. Code conventions приводят проект к единому стилю, который известен каждому программисту. Не должно получиться так, что человек переходя с одного проекта на другой страдал, привыкая к новому стилю написания.
Для каждого языка программирования разработчики используют свои соглашения. На большинстве Java-проекта часто принимают за основу Google Java Style Guide https://google.github.io/styleguide/javaguide.html
IntelliJ IDEA умеет сама поправлять код по Code Style. Для этого используйте комбинацию
Code convetions или соглашения по написанию кода нужны для его читаемости. Любую строчку кода можно написать по-разному. Code conventions приводят проект к единому стилю, который известен каждому программисту. Не должно получиться так, что человек переходя с одного проекта на другой страдал, привыкая к новому стилю написания.
Для каждого языка программирования разработчики используют свои соглашения. На большинстве Java-проекта часто принимают за основу Google Java Style Guide https://google.github.io/styleguide/javaguide.html
IntelliJ IDEA умеет сама поправлять код по Code Style. Для этого используйте комбинацию
CTRL+ALT+L
#CleanCodeТехнический лидер
Есть множество терминов, которые обозначают технического руководителя разработчиков: Team Lead, Tech Lead, Lead Developer. Люди на этих должностях в зависимости от компании выполняют разные обязанности. Технический лидер всё это обобщает.
Технический лидер – это старший товарищ на проекте с большим опытом разработки. Часто он лучше всех знает проект и дольше всех на нём работают.
Чем техлид занимается:
- ведет техническую часть проекта
- принимает технические решения
- ответственен за качество кода, но не за продукт
- ревьюит код
- менторит джунов
- управляет кодом, который пишут участники проекта
Чем не занимается:
- не вмешивается в процесс создания продукта
- не занимается руководством командой
- не отвечает за сам продукт
Есть множество терминов, которые обозначают технического руководителя разработчиков: Team Lead, Tech Lead, Lead Developer. Люди на этих должностях в зависимости от компании выполняют разные обязанности. Технический лидер всё это обобщает.
Технический лидер – это старший товарищ на проекте с большим опытом разработки. Часто он лучше всех знает проект и дольше всех на нём работают.
Чем техлид занимается:
- ведет техническую часть проекта
- принимает технические решения
- ответственен за качество кода, но не за продукт
- ревьюит код
- менторит джунов
- управляет кодом, который пишут участники проекта
Чем не занимается:
- не вмешивается в процесс создания продукта
- не занимается руководством командой
- не отвечает за сам продукт
Олег Мохов @olegmokhov (руководитель службы разработки интерфейсов Яндекса) писал в своём канале о частой ошибке в компаниях – назначении техлида руководителем. Он называет её «убийство разработчика».
Многие считают это логичным продолжением карьеры: разработчик –> старший разработчик –> техлид -> руководитель. Техлид не занимается руководством командой. Многие техлиды не хотят руководить, им нравится писать код и они эффективны именно в этом, но будут не эффективны как руководители или могут вообще уволиться через полгода, после «долгожданного повышения».
Многие считают это логичным продолжением карьеры: разработчик –> старший разработчик –> техлид -> руководитель. Техлид не занимается руководством командой. Многие техлиды не хотят руководить, им нравится писать код и они эффективны именно в этом, но будут не эффективны как руководители или могут вообще уволиться через полгода, после «долгожданного повышения».
Сегодня буду выкладывать задания из тестирования на OCA. OCA - Oracle Certified Associate.
Ответ — false. В классе Name не переопределен метод hashCode. Соответственно не соблюдён контракт для equals и hashCode, который необходим для нормальной работы HashSet.
Про hashCode и equals подробно на примерах написано тут: https://habr.com/post/168195/
Про hashCode и equals подробно на примерах написано тут: https://habr.com/post/168195/
Контракт 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)