Вопросы с собеседований
Те, кто ещё в телеге, держите вопросы с собеседований. Их задают джунам почти в каждой компании.
— Перечислить основные принципы ООП.
— Привести пример применения полиморфизма.
— Какие есть модификаторы доступа?
— Что такое интерфейс?
— Какое отличие абстрактного класса от интерфейса?
— Перечислить методы, которые присутствуют во всех объектах java.
— Какие из них не public? Почему?
— Зачем нужен метод finalize?
— Какая связь между equals and hashcode?
— Рассказать иерархию исключений.
— Отличия между ArrayList и LinkedList.
Те, кто ещё в телеге, держите вопросы с собеседований. Их задают джунам почти в каждой компании.
— Перечислить основные принципы ООП.
— Привести пример применения полиморфизма.
— Какие есть модификаторы доступа?
— Что такое интерфейс?
— Какое отличие абстрактного класса от интерфейса?
— Перечислить методы, которые присутствуют во всех объектах java.
— Какие из них не public? Почему?
— Зачем нужен метод finalize?
— Какая связь между equals and hashcode?
— Рассказать иерархию исключений.
— Отличия между ArrayList и LinkedList.
Структуры данных в картинках
Для тех, кто изучает коллекции или хочет освежить знания, рекомендую серию статей с Хабра "Структуры данных в картинках". Автор подробно описывает внутренности ArrayList, LinkedList, HashMap, LinkedHashMap. Он пишет, как происходит создание объекта, вставка элемента в коллекцию, удаление. В конце статей приведены сложности и особенности каждой коллекции.
https://bit.ly/2HOIGK4 ArrayList
https://bit.ly/2vs53Cv LinkedList
https://bit.ly/2qLOZFS HashMap
https://bit.ly/2JaYFkK LinkedHashMap
#обучение
Для тех, кто изучает коллекции или хочет освежить знания, рекомендую серию статей с Хабра "Структуры данных в картинках". Автор подробно описывает внутренности ArrayList, LinkedList, HashMap, LinkedHashMap. Он пишет, как происходит создание объекта, вставка элемента в коллекцию, удаление. В конце статей приведены сложности и особенности каждой коллекции.
https://bit.ly/2HOIGK4 ArrayList
https://bit.ly/2vs53Cv LinkedList
https://bit.ly/2qLOZFS HashMap
https://bit.ly/2JaYFkK LinkedHashMap
#обучение
Сегодня буду выкладывать небольшие задачки с собеседований.
Первая. Найдите, где будет ошибка
Первая. Найдите, где будет ошибка
interface A {
void run();
}
interface B {
void run();
}
interface C {
String run();
}
class Test1 имплементирует A, B
class Test2 имплементирует A, C
Что произойдёт, когда запустим код?
Boolean b = null;
if (b) {
System.out.println("...");
}
Что будет написано в консоли?
public class Main {
psvm(String[] args) {
sout("...");
}
protected void finalize() {
sout("from Finalize");
}
}
Проблемы с Git
Список частых проблем при работе с Git и их решения. Вопросы разделены по категориям, а ответы написаны понятным языком. Плюс в конце линки на книги, туториалы и GUI-клиенты по Git.
https://bit.ly/1oKguJM #git
Список частых проблем при работе с Git и их решения. Вопросы разделены по категориям, а ответы написаны понятным языком. Плюс в конце линки на книги, туториалы и GUI-клиенты по Git.
https://bit.ly/1oKguJM #git
Ещё задачи с интервью
Что произойдёт, когда запустим код?
Что произойдёт, когда запустим код?
psvm(String[] args) {
char[] ch = null;
String s = null;
Object ob = null;
sout(ch);
sout(s);
sout(ob);
}
Вывести на экран надпись "Hello world" два раза. Метод main менять нельзя.
Сокращения:
psvm = public static void main
sout = System.out.println
public class Main {
psvm(String[] args) {
sout("Hello world");
}
}
Сокращения:
psvm = public static void main
sout = System.out.println
Написать многопоточную реализацию счётчика
public interface Counter {
int get();
void inc();
}
В чём разница между
и
synchronized void getS() {}
и
void getS() {
synchronized (this) {
}
}
Внедрение зависимостей
Плохо
Хорошо
Почему
https://habr.com/post/334636/
Плохо
@Autowired
private BeanA beanA;
@Autowired
private beanB beanB;
Хорошо
private BeanA beanA;
private BeanB beanB;
@Autowired
public DI(BeanA beanA, BeanB beanB) {
this.beanA = beanA;
this.beanB = beanB;
}
Почему
https://habr.com/post/334636/
Скрыть ненужные чаты в Telegram
Если используете Telegram Desktop, зайдите в настройки и наберите на клавиатуре "workmode". Приложение предложит перезапустить его. После перезагрузки над чатами появится кнопка для скрытия чатов, у которых вы отключили уведомления.
#telegram
Если используете Telegram Desktop, зайдите в настройки и наберите на клавиатуре "workmode". Приложение предложит перезапустить его. После перезагрузки над чатами появится кнопка для скрытия чатов, у которых вы отключили уведомления.
#telegram
Что такое "сделать"
В статье рассказывается, как правильно работать в проекте, оценивать сроки и никого не подводить.
https://ksoftware.livejournal.com/202173.html
В статье рассказывается, как правильно работать в проекте, оценивать сроки и никого не подводить.
https://ksoftware.livejournal.com/202173.html
Вопросы с собеседований
— виды циклов
— что такое рекурсия
— отличие final, finally, finalize
— что такое try-with-resource
— отличие wait(100) от sleep(100)
— что такое пул строк
— почему String является immutable
— какие виды деревьев существуют
— примеры применения деревьев
— рассказать, как работает HashMap
— что такое автобоксинг
— рассказать про алгоритмы сортировки и их сложности
— для чего нужны дженерики
— виды циклов
— что такое рекурсия
— отличие final, finally, finalize
— что такое try-with-resource
— отличие wait(100) от sleep(100)
— что такое пул строк
— почему String является immutable
— какие виды деревьев существуют
— примеры применения деревьев
— рассказать, как работает HashMap
— что такое автобоксинг
— рассказать про алгоритмы сортировки и их сложности
— для чего нужны дженерики
Code style. Naming
Пара рекомендаций по наименованиям с одного проекта.
— Переменные сервиса или репозитория следует называть просто "service" и "repository". Полное имя нужно давать, когда в классе используется несколько сервисов или репозиториев.
Плохо
Хорошо
— Если имя реквест параметра совпадает с именем параметра метода, то value для аннотации RequestParam указывать не обязательно.
Плохо
Хорошо
Пара рекомендаций по наименованиям с одного проекта.
— Переменные сервиса или репозитория следует называть просто "service" и "repository". Полное имя нужно давать, когда в классе используется несколько сервисов или репозиториев.
Плохо
@Autowired
FooFooBarBarRepository fooFooBarBarRepository;
Хорошо
@Autowired
FooFooBarBarRepository repository;
— Если имя реквест параметра совпадает с именем параметра метода, то value для аннотации RequestParam указывать не обязательно.
Плохо
public ResponseEntity<Void> foo(@RequestParam(value = "barType") String barType,
@RequestParam(value = "barUID") String barUID)
Хорошо
public ResponseEntity<Void> foo(@RequestParam String barType, @RequestParam String barUID)
Code style
Не нужно проверять, содержит ли коллекция элементы, когда нужно по ней итерироваться. Просто итерируйтесь.
Плохо
Хорошо
Не нужно проверять, содержит ли коллекция элементы, когда нужно по ней итерироваться. Просто итерируйтесь.
Плохо
if (!foos.isEmpty() {
for(Foo foo: foos) {
bar.delete(foo);
}
}
Хорошо
for(Foo foo: foos) {
bar.delete(foo);
}
Code style
Если блок if содержит в себе всю логику, то для лучшей читаемости инвертируйте if и переместите весь код из него.
Плохо
Хорошо
Если блок if содержит в себе всю логику, то для лучшей читаемости инвертируйте if и переместите весь код из него.
Плохо
public void foobar(List<Bar> bars) {
if (bars.isEmpty()) {
Bar bar = new Bar();
bar.setA();
bar.setB();
bar.setC();
bar.setD();
repository.save(bar);
}
}
Хорошо
public void foobar(List<Bar> bars) {
if (!bars.isEmpty()) {
return;
}
Bar bar = new Bar();
bar.setA();
bar.setB();
bar.setC();
bar.setD();
repository.save(bar);
}
Дисциплина важнее мотивации
Мотивация – временный порыв совершать задуманное. В один момент запал утихает и желание достигнуть цели уменьшается.
Дисциплина – систематическое прохождение шагов, которые вы наметили для достижения цели. Поэтому для долгосрочных задач дисциплина сильнее мотивация.
"Почему дисциплина важнее мотивации": https://vc.ru/6801-discipline
"Как дисциплинировать себя" с практическими советами: https://vc.ru/7933-practical-discipline
Мотивация – временный порыв совершать задуманное. В один момент запал утихает и желание достигнуть цели уменьшается.
Дисциплина – систематическое прохождение шагов, которые вы наметили для достижения цели. Поэтому для долгосрочных задач дисциплина сильнее мотивация.
"Почему дисциплина важнее мотивации": https://vc.ru/6801-discipline
"Как дисциплинировать себя" с практическими советами: https://vc.ru/7933-practical-discipline
Robert Martin – Clean code
Роберт Мартин в книге "Чистый код" описывает, как должен выглядеть идеальный код. Код в финальной стадии легкочитаем, понятен коллегам без комментариев и выглядит лаконично. Я бы каждый раз переживал за свой код, если бы моим ревьюером был Роберт. В книге много спорных моментов, но от этого она не становится менее крутой. А первые пять глав обязательны к прочтению каждому разработчику.
#книги
Роберт Мартин в книге "Чистый код" описывает, как должен выглядеть идеальный код. Код в финальной стадии легкочитаем, понятен коллегам без комментариев и выглядит лаконично. Я бы каждый раз переживал за свой код, если бы моим ревьюером был Роберт. В книге много спорных моментов, но от этого она не становится менее крутой. А первые пять глав обязательны к прочтению каждому разработчику.
#книги