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

Мемы: @java_memes
加入频道
Структуры данных в картинках

Для тех, кто изучает коллекции или хочет освежить знания, рекомендую серию статей с Хабра "Структуры данных в картинках". Автор подробно описывает внутренности 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
Ещё задачи с интервью

Что произойдёт, когда запустим код?
psvm(String[] args) {
char[] ch = null;
String s = null;
Object ob = null;
sout(ch);
sout(s);
sout(ob);
}
Вывести на экран надпись "Hello world" два раза. Метод main менять нельзя.

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) {
}
}
Внедрение зависимостей

Плохо
@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
Что такое "сделать"

В статье рассказывается, как правильно работать в проекте, оценивать сроки и никого не подводить.

https://ksoftware.livejournal.com/202173.html
Вопросы с собеседований

— виды циклов
— что такое рекурсия
— отличие final, finally, finalize
— что такое try-with-resource
— отличие wait(100) от sleep(100)
— что такое пул строк
— почему String является immutable
— какие виды деревьев существуют
— примеры применения деревьев
— рассказать, как работает HashMap
— что такое автобоксинг
— рассказать про алгоритмы сортировки и их сложности
— для чего нужны дженерики
Code style. Naming
Пара рекомендаций по наименованиям с одного проекта.

— Переменные сервиса или репозитория следует называть просто "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 и переместите весь код из него.

Плохо
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
Robert Martin – Clean code

Роберт Мартин в книге "Чистый код" описывает, как должен выглядеть идеальный код. Код в финальной стадии легкочитаем, понятен коллегам без комментариев и выглядит лаконично. Я бы каждый раз переживал за свой код, если бы моим ревьюером был Роберт. В книге много спорных моментов, но от этого она не становится менее крутой. А первые пять глав обязательны к прочтению каждому разработчику.

#книги
Как учить SQL

Читать книгу "SQL за 24 часа"
Каждый час в книге - отдельная глава. Первые главы рассказывают, что такое база данных, что такое SQL, какие типы данных существуют. Дальше по нарастающей. Последние главы - о создании/изменении вьюх, расширениях стандарта языка. Вся теория сопровождается примерами для MySQL, Oracle, MS SQL. После каждой главы тесты и задания.

Решать упражнения sql-ex.ru
Задачи от самых простых до просто диких. Решайте их в связке с ресурсом sql-tutorial.ru. Для каждой задачи есть линки по нужной теме. Подучив Джаву и решив сотню задач на sql-ex, можно смело идти на собесы.

Проходить тесты quizful.net/test/sql_basic
Случайно выбираются 20 вопросов из 86 и даётся 20 минут на их решение. Примеры вопросов: "Что делает order by", "Какой будет результат запроса", "Сколько записей будет выбрано", "Сколько записей будет удалено".

#sql #книги #обучение