Какая разница между абстрактным классом и интерфейсом?
Абстрактный класс:
☕ абстрактные классы имеют дефолтный конструктор; он вызывается каждый раз, когда создается потомок этого абстрактного класса;
☕ содержит как абстрактные методы, так и не абстрактные. По большому счету может и не содержать абстрактных методов, но все равно быть абстрактным классом;
☕ класс, который наследуется от абстрактного, должен реализовать только абстрактные методы;
☕ абстрактный класс может содержать Instance Variable.
Интерфейс:
☕ не имеет никакого конструктора и не может быть инициализирован;
☕ только абстрактные методы должны быть добавлены (не считая default methods);
☕ классы, реализующие интерфейс, должны реализовать все методы (не считая default methods);
☕ интерфейсы могут содержать только константы.
Абстрактный класс:
☕ абстрактные классы имеют дефолтный конструктор; он вызывается каждый раз, когда создается потомок этого абстрактного класса;
☕ содержит как абстрактные методы, так и не абстрактные. По большому счету может и не содержать абстрактных методов, но все равно быть абстрактным классом;
☕ класс, который наследуется от абстрактного, должен реализовать только абстрактные методы;
☕ абстрактный класс может содержать Instance Variable.
Интерфейс:
☕ не имеет никакого конструктора и не может быть инициализирован;
☕ только абстрактные методы должны быть добавлены (не считая default methods);
☕ классы, реализующие интерфейс, должны реализовать все методы (не считая default methods);
☕ интерфейсы могут содержать только константы.
Что такое «поток-демон» (daemon thread)?
Потоками-демонами называются потоки, работающие в фоновом режиме для нашей программы.
В Java процесс завершается тогда, когда завершается последний его поток. Даже если метод main() уже завершился, но еще выполняются порожденные им потоки, система будет ждать их завершения.
Однако это правило не относится к особому виду потоков — демонам. Если завершился последний обычный поток процесса, и остались только потоки-демоны, то они будут принудительно завершены и выполнение процесса закончится. Чаще всего потоки-демоны используются для выполнения фоновых задач, обслуживающих процесс в течение его жизни.
Потоками-демонами называются потоки, работающие в фоновом режиме для нашей программы.
В Java процесс завершается тогда, когда завершается последний его поток. Даже если метод main() уже завершился, но еще выполняются порожденные им потоки, система будет ждать их завершения.
Однако это правило не относится к особому виду потоков — демонам. Если завершился последний обычный поток процесса, и остались только потоки-демоны, то они будут принудительно завершены и выполнение процесса закончится. Чаще всего потоки-демоны используются для выполнения фоновых задач, обслуживающих процесс в течение его жизни.
Как перебрать все пары «ключ-значение» в Map?
Использовать метод entrySet(), который возвращает множество Set пар «ключ-значение».
Использовать метод entrySet(), который возвращает множество Set пар «ключ-значение».
Зачем добавили ArrayList, если уже был Vector?
☕ Методы класса Vector синхронизированы, а ArrayList — нет;
☕ По умолчанию Vector удваивает свой размер, когда заканчивается выделенная под элементы память. ArrayList же увеличивает свой размер только на половину.
Vector это устаревший класс и его использование не рекомендовано.
☕ Методы класса Vector синхронизированы, а ArrayList — нет;
☕ По умолчанию Vector удваивает свой размер, когда заканчивается выделенная под элементы память. ArrayList же увеличивает свой размер только на половину.
Vector это устаревший класс и его использование не рекомендовано.
Чем Hashtable отличается от Hashmap?
Синхронизация:
Hashtable является синхронизированным, т. е. потокобезопасным. HashMap не синхронизирован и не является потокобезопасным.
null ключи и значения:
В HashMap можно использовать null в качестве ключа или значения. В Hashtable null в качестве ключа или значения вызовет ошибку.
Порядок элементов:
HashMap не гарантирует порядок элементов. Hashtable хранит элементы в том порядке, в котором они были вставлены.
Производительность:
Из-за синхронизации Hashtable работает медленнее, чем HashMap.
Размер таблицы:
В HashMap он динамически увеличивается, а в Hashtable изначально задается фиксированным.
Итерирование:
Hashtable использует Enumerator, а HashMap — Iterator.
Синхронизация:
Hashtable является синхронизированным, т. е. потокобезопасным. HashMap не синхронизирован и не является потокобезопасным.
null ключи и значения:
В HashMap можно использовать null в качестве ключа или значения. В Hashtable null в качестве ключа или значения вызовет ошибку.
Порядок элементов:
HashMap не гарантирует порядок элементов. Hashtable хранит элементы в том порядке, в котором они были вставлены.
Производительность:
Из-за синхронизации Hashtable работает медленнее, чем HashMap.
Размер таблицы:
В HashMap он динамически увеличивается, а в Hashtable изначально задается фиксированным.
Итерирование:
Hashtable использует Enumerator, а HashMap — Iterator.
Как и когда происходит увеличение количества корзин в HashMap?
Помимо capacity у HashMap есть еще поле loadFactor, на основании которого, вычисляется предельное количество занятых корзин capacity * loadFactor. По умолчанию loadFactor = 0.75. По достижению предельного значения, число корзин увеличивается в 2 раза и для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.
Помимо capacity у HashMap есть еще поле loadFactor, на основании которого, вычисляется предельное количество занятых корзин capacity * loadFactor. По умолчанию loadFactor = 0.75. По достижению предельного значения, число корзин увеличивается в 2 раза и для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.
Что такое JDBC?
JDBC, Java DataBase Connectivity (соединение с базами данных на Java) — промышленный стандарт взаимодействия Java-приложений с различными СУБД. Реализован в виде пакета java.sql, входящего в состав Java SE.
JDBC основан на концепции драйверов, которые позволяют получать соединение с базой данных по специально описанному URL. При загрузке драйвер регистрирует себя в системе и в дальнейшем автоматически вызывается, когда программа требует URL, содержащий протокол, за который этот драйвер отвечает.
JDBC, Java DataBase Connectivity (соединение с базами данных на Java) — промышленный стандарт взаимодействия Java-приложений с различными СУБД. Реализован в виде пакета java.sql, входящего в состав Java SE.
JDBC основан на концепции драйверов, которые позволяют получать соединение с базой данных по специально описанному URL. При загрузке драйвер регистрирует себя в системе и в дальнейшем автоматически вызывается, когда программа требует URL, содержащий протокол, за который этот драйвер отвечает.
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Каковы особенности многопоточности в Java EE и Spring?
Одной из особенностей многопоточности в Java EE и Spring является использование синхронизации и примитивов синхронизации, таких как блокировки и семафоры, для предотвращения конфликтов между потоками.
Ещё одна важная особенность — использование пулов потоков для более эффективного использования ресурсов и увеличение производительности.
Также в Spring есть возможность использования асинхронных методов, что позволяет не блокировать основной поток выполнения и ускорять обработку запросов.
Одной из особенностей многопоточности в Java EE и Spring является использование синхронизации и примитивов синхронизации, таких как блокировки и семафоры, для предотвращения конфликтов между потоками.
Ещё одна важная особенность — использование пулов потоков для более эффективного использования ресурсов и увеличение производительности.
Также в Spring есть возможность использования асинхронных методов, что позволяет не блокировать основной поток выполнения и ускорять обработку запросов.
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
🐘PHP
Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека шарписта
Библиотека мобильного разработчика
Библиотека хакера
Библиотека devops’a
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
Вакансии по DevOps & SRE
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook
🔸Instagram
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
🐘PHP
Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека шарписта
Библиотека мобильного разработчика
Библиотека хакера
Библиотека devops’a
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
Вакансии по DevOps & SRE
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
Для чего нужен Component Scan?
Если вы понимаете как работает Component Scan, то вы понимаете Spring.
Первый шаг для описания Spring Beans это добавление аннотации — @Component, или @Service, или @Repository.
Однако Spring ничего не знает об этих бинах, если он не знает где искать их. То, что скажет Spring, где искать эти бины, и называется Component Scan. В @ComponentScan вы указываете пакеты, которые должны сканироваться.
Spring будет искать бины не только в пакетах для сканирования, но и в их подпакетах.
Если вы понимаете как работает Component Scan, то вы понимаете Spring.
Первый шаг для описания Spring Beans это добавление аннотации — @Component, или @Service, или @Repository.
Однако Spring ничего не знает об этих бинах, если он не знает где искать их. То, что скажет Spring, где искать эти бины, и называется Component Scan. В @ComponentScan вы указываете пакеты, которые должны сканироваться.
Spring будет искать бины не только в пакетах для сканирования, но и в их подпакетах.
Что подразумевается под статическим блоком в Java?
Ответ:cтатический блок используется для инициализации статических переменных класса. Он выполняется только один раз: при первой загрузке класса в память.
Ответ:
Как можно заранее выйти из цикла?
Используя оператор break мы можем немедленно прекратить выполнение цикла:
for (int i = 0; ; i++) {
if (i > 10) {
break;
}
}
Используя оператор break мы можем немедленно прекратить выполнение цикла:
for (int i = 0; ; i++) {
if (i > 10) {
break;
}
}
Что выведет эта программа?
Ответ:
Программа напечатает String method. Прежде всего стоит отметить, что null не является объектом в Java. Но null можно присвоить любой ссылке. Java String является объектом класса java.lang.String. В этой программе компилятор Java выбирает вызов перегруженного метода с наиболее конкретными параметрами. Это будет String, потому что класс String более конкретен, чем класс Object.
#код
Ответ:
Программа напечатает String method. Прежде всего стоит отметить, что null не является объектом в Java. Но null можно присвоить любой ссылке. Java String является объектом класса java.lang.String. В этой программе компилятор Java выбирает вызов перегруженного метода с наиболее конкретными параметрами. Это будет String, потому что класс String более конкретен, чем класс Object.
#код
Перечислите все конструкции, к которым применим модификатор static.
☕ поля;
☕ методы;
☕ вложенные классы;
☕ члены секции import;
☕ статический блок инициализации.
☕ поля;
☕ методы;
☕ вложенные классы;
☕ члены секции import;
☕ статический блок инициализации.
В чем разница между классами java.util.Collection и java.util.Collections?
java.util.Collections — набор статических методов для работы с коллекциями.
java.util.Collection — один из основных интерфейсов Java Collections Framework.
java.util.Collections — набор статических методов для работы с коллекциями.
java.util.Collection — один из основных интерфейсов Java Collections Framework.
Может ли не быть ни одного блока catch при отлавливании исключений?
Да, возможен вариант без блока catch при работе с исключениями.
Достаточно использовать только блок try и finally. В этом случае исключение, возникшее в блоке try, просто будет выброшено дальше, без обработки в данном месте.
Такой подход может быть оправдан, если нет необходимости обрабатывать исключение непосредственно там, где оно возникло. Например, достаточно просто закрыть использованные ресурсы в блоке finally.
То есть использование конструкции без catch вполне допустимо и имеет свои применения в зависимости от логики программы.
Да, возможен вариант без блока catch при работе с исключениями.
Достаточно использовать только блок try и finally. В этом случае исключение, возникшее в блоке try, просто будет выброшено дальше, без обработки в данном месте.
Такой подход может быть оправдан, если нет необходимости обрабатывать исключение непосредственно там, где оно возникло. Например, достаточно просто закрыть использованные ресурсы в блоке finally.
То есть использование конструкции без catch вполне допустимо и имеет свои применения в зависимости от логики программы.
Что будет, если единственный конструктор класса объявлен как final?
— Этот конструктор нельзя будет переопределить в подклассах.
— Невозможно создать наследников от данного класса, так как нельзя переопределить единственный конструктор.
— Попытка создания подкласса приведет к ошибке компиляции, так как компилятор не сможет сгенерировать конструктор по умолчанию для подкласса.
— Единственный способ наследоваться от такого класса — использовать агрегацию, композицию или делегирование вместо наследования.
Это полезный прием для предотвращения наследования, когда оно не требуется или нежелательно по архитектурным соображениям.
#вопросы_с_собеседований
— Этот конструктор нельзя будет переопределить в подклассах.
— Невозможно создать наследников от данного класса, так как нельзя переопределить единственный конструктор.
— Попытка создания подкласса приведет к ошибке компиляции, так как компилятор не сможет сгенерировать конструктор по умолчанию для подкласса.
— Единственный способ наследоваться от такого класса — использовать агрегацию, композицию или делегирование вместо наследования.
Это полезный прием для предотвращения наследования, когда оно не требуется или нежелательно по архитектурным соображениям.
#вопросы_с_собеседований