#вопросы_с_собеседования
Каков порядок вызова конструкторов и блоков инициализации с учётом иерархии классов?
Сначала вызываются все статические блоки в очередности от первого статического блока корневого предка и выше по цепочке иерархии до статических блоков самого класса.
Затем вызываются нестатические блоки инициализации корневого предка, конструктор корневого предка и так далее вплоть до нестатических блоков и конструктора самого класса.
🔹 Parent static block(s) →
🔹 Child static block(s) →
🔹 Grandchild static block(s) →
🔹 Parent non-static block(s) →
🔹 Parent constructor →
🔹 Child non-static block(s) →
🔹 Child constructor →
🔹 Grandchild non-static block(s) →
🔹 Grandchild constructor
Результат выполнения:
Каков порядок вызова конструкторов и блоков инициализации с учётом иерархии классов?
Сначала вызываются все статические блоки в очередности от первого статического блока корневого предка и выше по цепочке иерархии до статических блоков самого класса.
Затем вызываются нестатические блоки инициализации корневого предка, конструктор корневого предка и так далее вплоть до нестатических блоков и конструктора самого класса.
🔹 Parent static block(s) →
🔹 Child static block(s) →
🔹 Grandchild static block(s) →
🔹 Parent non-static block(s) →
🔹 Parent constructor →
🔹 Child non-static block(s) →
🔹 Child constructor →
🔹 Grandchild non-static block(s) →
🔹 Grandchild constructor
public class MainClass {
public static void main(String args[]) {
System.out.println(TestClass.v);
new TestClass().a();
}
}
public class TestClass {
public static String v = "Some val"; {
System.out.println("!!! Non-static initializer");
}
static {
System.out.println("!!! Static initializer");
}
public void a() {
System.out.println("!!! a() called");
}
}
Результат выполнения:
!!! Static initializer
Some val
!!! Non-static initializer
!!! a() called
🤔 Очередной #дайджест инструментов, материалов и новостей
➖ Nes4j — Nintendo симулятор
➖ Не используйте Singleton в своих проектах — принципы SOLID на страже порядка
➖ Микросервисы Java — в руководстве показано, как создать архитектуру микросервисов с помощью Spring Boot и Spring Cloud
➖ Байт-код — это просто — как сделать DI по-настоящему быстрым
➖ Введение в Apache Flink — осваиваем фреймворк на реальных примерах
➖ Nes4j — Nintendo симулятор
➖ Не используйте Singleton в своих проектах — принципы SOLID на страже порядка
➖ Микросервисы Java — в руководстве показано, как создать архитектуру микросервисов с помощью Spring Boot и Spring Cloud
➖ Байт-код — это просто — как сделать DI по-настоящему быстрым
➖ Введение в Apache Flink — осваиваем фреймворк на реальных примерах
🧠⚙️ Как научиться критически мыслить: 6 эффективных способов
Критическое мышление позволяет принимать решения в условиях неопределённости, доносить свои идеи до команды, видеть ошибки в логике, замечать манипуляции. В статье рассказываем, откуда пошло это понятие и как можно развить критическое мышление.
💬Считаете ли вы, что у вас развито критическое мышление?
👍 — да, и это очень помогает мне в жизни и работе
🤔 — да, но оно ничем не помогает
🥱 — нет
Критическое мышление позволяет принимать решения в условиях неопределённости, доносить свои идеи до команды, видеть ошибки в логике, замечать манипуляции. В статье рассказываем, откуда пошло это понятие и как можно развить критическое мышление.
💬Считаете ли вы, что у вас развито критическое мышление?
👍 — да, и это очень помогает мне в жизни и работе
🤔 — да, но оно ничем не помогает
🥱 — нет
💥🗣️ Моментальная аналитика с помощью Spring + Redis
В каждой крупной компании есть аналитические сервисы, и компания спикера — не исключение.
Он вкратце расскажет об одном из аналитических сервисов своего проекта и о некоторых сложностях, с которыми его команда столкнулась в процессе разработки. Сломает стереотип о том, что Redis — это просто база для кэша. Поговорит о возможностях Redis в качестве БД для аналитики, а также о том, как с ним работать на стеке Java + Spring. Покажет схему работы с двумя БД, примеры кода и демо проекта.
В заключении спикер расскажет о том, что в команде получили на выходе (производительность), и о подводных камнях, с которыми столкнулись.
Смотреть
#видео
В каждой крупной компании есть аналитические сервисы, и компания спикера — не исключение.
Он вкратце расскажет об одном из аналитических сервисов своего проекта и о некоторых сложностях, с которыми его команда столкнулась в процессе разработки. Сломает стереотип о том, что Redis — это просто база для кэша. Поговорит о возможностях Redis в качестве БД для аналитики, а также о том, как с ним работать на стеке Java + Spring. Покажет схему работы с двумя БД, примеры кода и демо проекта.
В заключении спикер расскажет о том, что в команде получили на выходе (производительность), и о подводных камнях, с которыми столкнулись.
Смотреть
#видео
🎙️ТОП-14 подкастов о карьере в ИТ
Делимся подкастами, которые помогут вам подготовиться к собеседованиям и лучше понять, как устроен процесс найма в ИТ. Ниже — небольшая подборка, остальные читайте в статье.
👉 NEWHR и СОБЕС — два подкаста от Киры Кузьменко, рекрутера с 20-летним опытом
👉 Хочу в айти — подкаст для новичков, в котором не так много выпусков, но они короткие, ёмкие и интересные.
👉 Выхожу с понедельника — подкаст про разные направления в ИТ
👉 Moscow Python — подкаст о карьере, личном опыте и не только
👉 Podlodka Podcast — популярный подкаст с очень разнообразными и интересными темами, связанными с карьерой в ИТ и другими айтишными направлениями
#подкасты
Делимся подкастами, которые помогут вам подготовиться к собеседованиям и лучше понять, как устроен процесс найма в ИТ. Ниже — небольшая подборка, остальные читайте в статье.
👉 NEWHR и СОБЕС — два подкаста от Киры Кузьменко, рекрутера с 20-летним опытом
👉 Хочу в айти — подкаст для новичков, в котором не так много выпусков, но они короткие, ёмкие и интересные.
👉 Выхожу с понедельника — подкаст про разные направления в ИТ
👉 Moscow Python — подкаст о карьере, личном опыте и не только
👉 Podlodka Podcast — популярный подкаст с очень разнообразными и интересными темами, связанными с карьерой в ИТ и другими айтишными направлениями
#подкасты
🤔🤔 Познавательный разбор задач с решениями по мотивам Yandex Cup 2023.
В соревновании в каждом из 6 направлений присутствует 5 задач и повышением уровня сложности.
Первая задача рассматривается в материале.
Крутой способ потренить логику, понимание ТЗ и языковые скиллы, а также, вкладывание в сроки т. к. время ограничено.
Изучить
#туториал
В соревновании в каждом из 6 направлений присутствует 5 задач и повышением уровня сложности.
Первая задача рассматривается в материале.
Крутой способ потренить логику, понимание ТЗ и языковые скиллы, а также, вкладывание в сроки т. к. время ограничено.
Изучить
#туториал
Подборка лучших статей «Библиотеки джависта» за октябрь: сохраняй в заметки, чтобы не пропустить #самыйсок
☁️🧩 ТОП-10 бессерверных фреймворков
🗺️ Дорожная карта: что это, как ее составить и почему она обязательно нужна разработчику
🎮 Идеальный подарок геймеру: Xbox vs PlayStation vs Nintendo Switch vs Steam Deck
💪 6 сервисов для подготовки к техническим собеседованиям
👨💻 9 трендов в найме айтишников в 2023 году
☁️🧩 ТОП-10 бессерверных фреймворков
🗺️ Дорожная карта: что это, как ее составить и почему она обязательно нужна разработчику
🎮 Идеальный подарок геймеру: Xbox vs PlayStation vs Nintendo Switch vs Steam Deck
💪 6 сервисов для подготовки к техническим собеседованиям
👨💻 9 трендов в найме айтишников в 2023 году
Класс java.lang
Класс java.lang — это базовый пакет, который автоматически импортируется в любую программу на Java.
Содержит фундаментальные классы, как Object, String, Integer и т. д., определяет общие классы-исключения, такие как NullPointerException, ArithmeticException, класс Math с математическими функциями, System для взаимодействия с системой.
Также включает класс Thread для многопоточного программирования, интерфейсы Cloneable, Runnable, Comparable, определяет класс Class, представляющий классы времени выполнения.
#код
Класс java.lang — это базовый пакет, который автоматически импортируется в любую программу на Java.
Содержит фундаментальные классы, как Object, String, Integer и т. д., определяет общие классы-исключения, такие как NullPointerException, ArithmeticException, класс Math с математическими функциями, System для взаимодействия с системой.
Также включает класс Thread для многопоточного программирования, интерфейсы Cloneable, Runnable, Comparable, определяет класс Class, представляющий классы времени выполнения.
#код
Итератор
Итератор — это объект, который предоставляет доступ к элементам коллекции (например, списку, множеству или массиву) и позволяет последовательно перебирать эти элементы без необходимости знать внутреннюю структуру коллекции. Итераторы используются для упрощения работы с коллекциями и обеспечивают абстракцию доступа к элементам.
#код
Итератор — это объект, который предоставляет доступ к элементам коллекции (например, списку, множеству или массиву) и позволяет последовательно перебирать эти элементы без необходимости знать внутреннюю структуру коллекции. Итераторы используются для упрощения работы с коллекциями и обеспечивают абстракцию доступа к элементам.
#код
В чем разница между Iterator и ListIterator?
— Iterator может итерироваться только вперед, а ListIterator может и вперед и назад.
— ListIterator имеет дополнительные методы previous(), hasPrevious(), add(), set().
— ListIterator позволяет получить индекс текущего элемента.
— ListIterator может начать итерацию с произвольного индекса списка, а Iterator только с начала.
— ListIterator можно получить только из объектов, реализующих List, а Iterator из любой коллекции.
— ListIterator является более функциональным и позволяет вносить изменения в список во время итерации, Iterator — только читать.
— Итераторы безопасны для использования в многопоточных приложениях, а ListIterator — нет.
#вопросы_с_собеседований
— Iterator может итерироваться только вперед, а ListIterator может и вперед и назад.
— ListIterator имеет дополнительные методы previous(), hasPrevious(), add(), set().
— ListIterator позволяет получить индекс текущего элемента.
— ListIterator может начать итерацию с произвольного индекса списка, а Iterator только с начала.
— ListIterator можно получить только из объектов, реализующих List, а Iterator из любой коллекции.
— ListIterator является более функциональным и позволяет вносить изменения в список во время итерации, Iterator — только читать.
— Итераторы безопасны для использования в многопоточных приложениях, а ListIterator — нет.
#вопросы_с_собеседований
Java varargs
Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.
Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.
#код
Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.
Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.
#код
Как используется класс Future?
Класс Future является частью пакета java.util.concurrent, и он используется для представления результата асинхронной операции или задачи, которая выполняется в фоновом потоке. Future позволяет вам управлять и получать результаты выполнения задачи в будущем, даже если она еще не завершилась.
#вопросы_с_собеседований
Класс Future является частью пакета java.util.concurrent, и он используется для представления результата асинхронной операции или задачи, которая выполняется в фоновом потоке. Future позволяет вам управлять и получать результаты выполнения задачи в будущем, даже если она еще не завершилась.
#вопросы_с_собеседований
Метод before()
Метод before() используется для сравнения порядка двух объектов типа Date.
Он позволяет проверить, идет ли одна дата перед другой.
Метод before() определен в классе java.util.Date и имеет следующий формат:
boolean before(Date date)
Он сравнивает текущий объект Date с датой, переданной в качестве параметра, и возвращает:
— true, если текущая дата идет раньше переданной даты.
— false, если текущая дата идет позже переданной даты или эти даты равны.
Этот метод часто используется для сравнения и сортировки дат, например:
— Проверить, было ли какое-то событие до определенной даты.
— Отсортировать список дат по возрастанию или убыванию.
— Найти самую раннюю или самую позднюю дату в наборе.
В этом примере создаются две даты, с помощью метода before() мы проверяем, идет ли date1 раньше date2.
Так как date1 содержит более раннюю дату, то метод before() возвращает true.
#код
Метод before() используется для сравнения порядка двух объектов типа Date.
Он позволяет проверить, идет ли одна дата перед другой.
Метод before() определен в классе java.util.Date и имеет следующий формат:
boolean before(Date date)
Он сравнивает текущий объект Date с датой, переданной в качестве параметра, и возвращает:
— true, если текущая дата идет раньше переданной даты.
— false, если текущая дата идет позже переданной даты или эти даты равны.
Этот метод часто используется для сравнения и сортировки дат, например:
— Проверить, было ли какое-то событие до определенной даты.
— Отсортировать список дат по возрастанию или убыванию.
— Найти самую раннюю или самую позднюю дату в наборе.
В этом примере создаются две даты, с помощью метода before() мы проверяем, идет ли date1 раньше date2.
Так как date1 содержит более раннюю дату, то метод before() возвращает true.
#код
Какие реализации SortedSet вы знаете и в чем их особенность?
В Java есть несколько реализаций интерфейса SortedSet:
— TreeSet — это реализация на основе красно-черного дерева. Элементы в TreeSet хранятся в отсортированном порядке согласно естественному порядку элементов или компаратору, переданному в конструктор.
Обеспечивает логарифмическую сложность для большинства операций.
— ConcurrentSkipListSet — потокобезопасная реализация, основанная на скип-листов.
Обеспечивает логарифмическую сложность операций и потокобезопасный доступ.
— EnumSet — высокопроизводительная реализация для элементов-перечислений.
Использует внутри битовые вектора для хранения.
— LinkedHashSet — реализация на основе хеш-таблицы и связанного списка.
Сохраняет порядок вставки элементов.
В Java есть несколько реализаций интерфейса SortedSet:
— TreeSet — это реализация на основе красно-черного дерева. Элементы в TreeSet хранятся в отсортированном порядке согласно естественному порядку элементов или компаратору, переданному в конструктор.
Обеспечивает логарифмическую сложность для большинства операций.
— ConcurrentSkipListSet — потокобезопасная реализация, основанная на скип-листов.
Обеспечивает логарифмическую сложность операций и потокобезопасный доступ.
— EnumSet — высокопроизводительная реализация для элементов-перечислений.
Использует внутри битовые вектора для хранения.
— LinkedHashSet — реализация на основе хеш-таблицы и связанного списка.
Сохраняет порядок вставки элементов.
Класс StringJoiner
Класс StringJoiner предназначен для построения строки путем соединения элементов из коллекции.
Он позволяет указать разделитель, префикс и суффикс результирующей строки.
StringJoiner часто используется при необходимости преобразовать коллекцию объектов в строку.
В примере StringJoiner используется как раз для объединения имен в строку с разделителем и добавлением префикса/суффикса.
#код
Класс StringJoiner предназначен для построения строки путем соединения элементов из коллекции.
Он позволяет указать разделитель, префикс и суффикс результирующей строки.
StringJoiner часто используется при необходимости преобразовать коллекцию объектов в строку.
В примере StringJoiner используется как раз для объединения имен в строку с разделителем и добавлением префикса/суффикса.
#код
🐼 Что такое Git?
Сейчас без знания Git вас не возьмут ни в одну серьёзную компанию, ведь это инструмент, который помогает синхронизировать проекты между его участниками.
Поэтому учить его стоит начать как можно раньше. Хотя сперва стоит определиться с тем, что такое Git и зачем он вообще нужен. Это видео, предназначенное для новичков, как раз вам в этом поможет.
Смотреть видео
Сейчас без знания Git вас не возьмут ни в одну серьёзную компанию, ведь это инструмент, который помогает синхронизировать проекты между его участниками.
Поэтому учить его стоит начать как можно раньше. Хотя сперва стоит определиться с тем, что такое Git и зачем он вообще нужен. Это видео, предназначенное для новичков, как раз вам в этом поможет.
Смотреть видео
Интерфейс UnaryOperator
Интерфейс UnaryOperator предназначен для представления функций, которые принимают один аргумент и возвращают результат того же типа, что и аргумент.
Он является специализированным функциональным интерфейсом, входящим в пакет java.util.function.
UnaryOperator часто используется в stream API для применения функций к элементам потока.
В примере UnaryOperator используется для преобразования строк в верхний регистр с помощью метода map().
#код
Интерфейс UnaryOperator предназначен для представления функций, которые принимают один аргумент и возвращают результат того же типа, что и аргумент.
Он является специализированным функциональным интерфейсом, входящим в пакет java.util.function.
UnaryOperator часто используется в stream API для применения функций к элементам потока.
В примере UnaryOperator используется для преобразования строк в верхний регистр с помощью метода map().
#код
Что такое Run-Time Data Areas?
Run-Time Data Areas — это области памяти, используемые Java Virtual Machine во время выполнения программы. Они отвечают за предоставление памяти для хранения байт-кода, объектов, параметров, локальных переменных, возвращаемых значений и промежуточных результатов вычислений. Некоторые из этих областей данных создаются при запуске Java Virtual Machine и уничтожаются только при выходе из Java Virtual Machine.
Например, существуют такие области данных как:
1. Class Area — область хранения для структуры элементов класса, таких как поля, данные методов, код метода и т. д.
2. Heap — выделение памяти во время выполнения для объектов.
3. Stack — хранение для локальных переменных и частичных результатов. Стек содержит кадры и выделяет по одному для каждого потока.
4. PC Registers — регистры счетчика программ содержат адрес инструкции, которую JVM в настоящее время выполняет.
#вопросы_с_собеседований
Run-Time Data Areas — это области памяти, используемые Java Virtual Machine во время выполнения программы. Они отвечают за предоставление памяти для хранения байт-кода, объектов, параметров, локальных переменных, возвращаемых значений и промежуточных результатов вычислений. Некоторые из этих областей данных создаются при запуске Java Virtual Machine и уничтожаются только при выходе из Java Virtual Machine.
Например, существуют такие области данных как:
1. Class Area — область хранения для структуры элементов класса, таких как поля, данные методов, код метода и т. д.
2. Heap — выделение памяти во время выполнения для объектов.
3. Stack — хранение для локальных переменных и частичных результатов. Стек содержит кадры и выделяет по одному для каждого потока.
4. PC Registers — регистры счетчика программ содержат адрес инструкции, которую JVM в настоящее время выполняет.
#вопросы_с_собеседований