Библиотека Java разработчика
10.8K subscribers
1.14K photos
563 videos
58 files
1.44K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
Вопросы с реального собеседования Senior Java Developer

00:00 Приветствие
01:34 Введение
02:23 Разбор вопросов и ответов
03:10 Может ли разработчик управлять памятью в Java?
03:40 Как потоки связаны с памятью?
07:28 Spring Context и зачем он нужен?
08:10 Как работает аннотация @ Transactional?
09:45 Как работает транзакция?
10:30 Как работает TDD?
14:17 Выводы

https://www.youtube.com/watch?v=sMGYAucH9yY

👉@BookJava
👍9
Что такое класс Object? Какие в нем есть методы?

Object это базовый класс для всех остальных объектов в Java. Любой класс наследуется от Object и, соответственно, наследуют его методы:

public boolean equals(Object obj) – служит для сравнения объектов по значению;

int hashCode() – возвращает hash код для объекта;

String toString() – возвращает строковое представление объекта;

Class getClass() – возвращает класс объекта во время выполнения;

protected Object clone() – создает и возвращает копию объекта;

void notify() – возобновляет поток, ожидающий монитор;

void notifyAll() – возобновляет все потоки, ожидающие монитор;

void wait() – остановка вызвавшего метод потока до момента пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;

void wait(long timeout) – остановка вызвавшего метод потока на определённое время или пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;

void wait(long timeout, int nanos) – остановка вызвавшего метод потока на определённое время или пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;

protected void finalize() – может вызываться сборщиком мусора в момент удаления объекта при сборке мусора.

👉@BookJava
Java. Многопоточность

Определение процессов и потоков. Роль операционной системы при работе с потоками. Интерфейс Runnable. Класс Thread. Доступ к объекту потока. Остановка выполнения и прерывание выполнения потока. Остановка текущего потока для окончания другого. Термины, связанные с многопоточностью. Критический участок кода. Семафор, Mutex. Мягкая и обязательная блокировки. Высокоуровневая конструкция Monitor. Взаимодействие потоков. Возможные ошибки одновременного доступа. Модель взаимодействия потоков через общую память. Синхронизация, её методы и состояния. Блокировка объектов. Ситуация Deadlock. Служба в отдельном потоке. Методы wait() и notify(). Контейнеры, безопасные для многопоточного доступа.

https://www.youtube.com/watch?v=dLDhB6SRXzw

👉@BookJava
👍9
Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?

Метод clone() объявлен в классе Object с указанием модификатора native, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException.

👉@BookJava
👍81
Интервью с создателем Java Джеймсом Гослингом

Джеймс Гослинг, более известный как отец языка программирования Java, — специалист в области Computer Science из Канады. Он придумал изначальную архитектуру языка программирования Java, написал для него первый компилятор и виртуальную машину. Наш DevRel, Григорий Петров, взял интервью у Джеймса, и мы приводим полный текст этого интервью в русском переводе. Приятного чтения!

https://evrone.ru/james-gosling-interview

👉@BookJava
👍9
Где и как вы можете использовать приватный конструктор?

Приватный (помеченный ключевым словом private, скрытый) конструктор может использоваться публичным статическим методом генерации объектов данного класса. Также доступ к нему разрешён вложенным классам и может использоваться для их нужд.

👉@BookJava
👍6
Не верьте ChatGPT и используйте KotUniL

В последние недели медиа и социальные сети захлеснул поток сообщений о диалогах с ChatGPT. Только на Хабре поиск по этому термину показывает сегодня полтора десятка статей.

Попробовал пообщаться с ChatGPT и я. Результат общения вынесен в заголовок.

Хотите узнать, почему ChatGPT верить нельзя и почему лучше использовать KotUniL - читайте дальше.

А если вы решили читать дальше, не воспринимайте заголовок буквально. Это все-таки ирония. К сожалению, я не предупредил об этом читателей в первом варианте этой статьи и получил в результате массу минусов.

Итак, как было дело.

Сначала я пообщался с ChatGPT (далее для простоты я буду иногда обозначать его ИИ) на английском, а потом на русском.

https://habr.com/ru/post/707548/

👉@BookJava
👍6
Какими свойствами обладает порождаемое equals() отношение эквивалентности?

Рефлексивность: для любой ссылки на значение x, x.equals(x) вернет true;

Симметричность: для любых ссылок на значения x и y, x.equals(y) должно вернуть true, тогда и только тогда, когда y.equals(x) возвращает true.

Транзитивность: для любых ссылок на значения x, y и z, если x.equals(y) и y.equals(z) возвращают true, тогда и x.equals(z) вернёт true;

Непротиворечивость: для любых ссылок на значения х и у, если несколько раз вызвать х.equals(y), постоянно будет возвращаться значение true либо постоянно будет возвращаться значение false при условии, что никакая информация, используемая при сравнении объектов, не поменялась.

Для любой ненулевой ссылки на значение х выражение х.equals(null) должно возвращать false.

👉@BookJava
👍6
Как написать на Java функцию, подобную sizeof в C

https://levelup.gitconnected.com/how-to-write-a-c-like-sizeof-function-in-java-9352e646d112

👉@BookJava
👍3👎2
Можно ли хранить null в стандартных коллекциях?

Все интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять null, она выбрасывает NullPointerException или ClassCastException.

Большинство списков (LinkedList, ArrayList) принимают null без проблем. Большинство очередей (Queue и Deque) не хранят null – возвращая из читающего метода null они сообщают пользователю о пустоте коллекции.

Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.

HashMap не может посчитать hash-сумму от null. Но вместо этого для таких ключей просто используется бакет номер 0.

Иногда этот вопрос дается как задача с подвохом про TreeMap. Nullability её ключей зависит от готовности к этому компаратора. Натуральный порядок (который работает для Comparable ключей) не поддерживает null. Раньше в реализации был баг, который позволял положить значение по ключу null в корень дерева без выброса исключения.

Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.

👉@BookJava
👍4
Один день из жизни JVM-инженера

Можно разрабатывать на Java, а можно разрабатывать Java. Есть люди, чей код исполняет виртуальная машина — а есть люди, чей код и есть виртуальная машина.
Вроде бы те и другие существуют в одной Java-экосистеме, но задачи совершенно разные.

https://habr.com/ru/company/jugru/blog/719614/

👉@BookJava
👍8🔥3
Media is too big
VIEW IN TELEGRAM
Собеседование Java Spring - Разбор вопросов с собеседований на Java Developer

Собрали самые интересные вопросы с собеседований на Java-разработчика. В видео две части. В первой рассказываем про Java: Коллекции, Hash Code & Equals Contract, Functional interfaces, Stream API, Garbage collector, устройство памяти, heap, concurrency.
Во второй — про Spring: Spring Beans, Spring Data Repository, Аннотации, Programmatic TM, Spring MVC

источник

👉@BookJava
👍13
Содержит множество проектов на Java, которые могут быть полезны при изучении языка

https://github.com/topics/java

👉@BookJava
👍7
Media is too big
VIEW IN TELEGRAM
Java. Распараллеливаем вычисления на пуле потоков

Разбираемся, как можно по простому ускорить вычисления с помощью параллельного выполнения на пуле потоков.

Исходный код

источник

👉@BookJava
👍6
Media is too big
VIEW IN TELEGRAM
Телеграм бот-игра на JAVA в 100 строк

Пишем телеграм бота, реализующего простую игру в стиле "камень-ножницы-бумага" на чистой джава + библиотека telegram api. Для пущей сложности я делаю это без БД и при этом пытаюсь выдернуть информацию о том, в каком чате происходит дело (может пригодиться для хранения какой-либо статистики)

Код из видео

Использованная библиотека

источник

👉@BookJava
👍8
Media is too big
VIEW IN TELEGRAM
Java. Лямбда-выражения

В этом видео я рассказываю о том, что такое лямбда-выражения в языке программирования Java. На примерах показываю, для чего нужны лябды, и какую роль они играют при написании кода в функциональном стиле.

источник

👉@BookJava