Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
Метод main может выбросить исключение. Это исключение будет передано в JVM (виртуальную машину Java). JVM отловит это исключение и завершит выполнение программы, выведя stack trace (трассировку стека) исключения.
Таким образом, исключение из main приведет к аварийному завершению программы.
Чтобы избежать этого, лучшей практикой является перехватывать исключения внутри main и обрабатывать их, не допуская выброса за его пределы.
Метод main может выбросить исключение. Это исключение будет передано в JVM (виртуальную машину Java). JVM отловит это исключение и завершит выполнение программы, выведя stack trace (трассировку стека) исключения.
Таким образом, исключение из main приведет к аварийному завершению программы.
Чтобы избежать этого, лучшей практикой является перехватывать исключения внутри main и обрабатывать их, не допуская выброса за его пределы.
Почему нежелательно использовать Thread.stop()?
Thread.stop() считается нежелательным для использования, потому что он не является безопасным. Остановка потока приводит к разблокированию всех мониторов, которые он заблокировал. Если какие-либо объекты, ранее защищенные этими мониторами, находились в несогласованном состоянии, другие потоки могут видеть эти объекты в несогласованном состоянии. Такие объекты называются поврежденными. Когда потоки работают с поврежденными объектами, может возникнуть произвольное поведение.
Вместо использования Thread.stop() рекомендуется использовать согласованный механизм, такой как interrupt.
Thread.stop() считается нежелательным для использования, потому что он не является безопасным. Остановка потока приводит к разблокированию всех мониторов, которые он заблокировал. Если какие-либо объекты, ранее защищенные этими мониторами, находились в несогласованном состоянии, другие потоки могут видеть эти объекты в несогласованном состоянии. Такие объекты называются поврежденными. Когда потоки работают с поврежденными объектами, может возникнуть произвольное поведение.
Вместо использования Thread.stop() рекомендуется использовать согласованный механизм, такой как interrupt.
Поддерживает ли язык Java множественное наследование?
Это очень хитрый вопрос. Интервьюеры часто говорят: если язык C++ может поддерживать непосредственное множественное наследование, то почему Java не может?
Ответ несколько более сложен, чем может показаться на первый взгляд, поскольку Java поддерживает множественное наследование типов, ведь интерфейс в нём может расширять другие интерфейсы. Но множественное наследование реализаций язык Java не поддерживает.
Это очень хитрый вопрос. Интервьюеры часто говорят: если язык C++ может поддерживать непосредственное множественное наследование, то почему Java не может?
Ответ несколько более сложен, чем может показаться на первый взгляд, поскольку Java поддерживает множественное наследование типов, ведь интерфейс в нём может расширять другие интерфейсы. Но множественное наследование реализаций язык Java не поддерживает.
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Для чего в JUnit используется аннотация @Ignore?
Ответ: Аннотация указывает JUnit на необходимость пропустить данный тестовый метод.
Ответ: Аннотация указывает JUnit на необходимость пропустить данный тестовый метод.
Чем отличается Lambda от анонимного класса?
Хотя в некоторых случаях они и могут быть использованы взаимозаменяемо, Lambda-выражения и анонимные классы имеют различия.
Разберем основные из них:
1. Синтаксис: Lambda-выражения имеют более краткий и лаконичный синтаксис по сравнению с анонимными классами.
2. Область применения: Lambda-выражения могут быть использованы только для функциональных интерфейсов, в то время как анонимные классы могут быть использованы для любых интерфейсов и абстрактных классов.
3. Ключевое слово this: В анонимных классах ключевое слово this ссылается на сам анонимный класс, в то время как в lambda-выражениях this ссылается на объемлющий.
4. Производительность: Lambda-выражения обычно имеют лучшую производительность по сравнению с анонимными классами, так как они компилируются в приватные методы и используют инструкцию invokedynamic.
Хотя в некоторых случаях они и могут быть использованы взаимозаменяемо, Lambda-выражения и анонимные классы имеют различия.
Разберем основные из них:
1. Синтаксис: Lambda-выражения имеют более краткий и лаконичный синтаксис по сравнению с анонимными классами.
2. Область применения: Lambda-выражения могут быть использованы только для функциональных интерфейсов, в то время как анонимные классы могут быть использованы для любых интерфейсов и абстрактных классов.
3. Ключевое слово this: В анонимных классах ключевое слово this ссылается на сам анонимный класс, в то время как в lambda-выражениях this ссылается на объемлющий.
4. Производительность: Lambda-выражения обычно имеют лучшую производительность по сравнению с анонимными классами, так как они компилируются в приватные методы и используют инструкцию invokedynamic.
Какие коллекции синхронизированы?
Vector — синхронизированный аналог ArrayList.
Hashtable — синхронизированный аналог HashMap.
Stack — синхронизированный стек на основе Vector.
Collections.synchronizedList() — возвращает синхронизированный список на основе переданного в нее списка.
Collections.synchronizedSet() — то же самое для множества.
Collections.synchronizedMap() — для отображения.
Синхронизация в этих коллекциях реализована с помощью внутренних блокировок, которые упорядочивает доступ к коллекции из разных потоков.
Обычно предпочтительнее использовать несинхронизированные коллекции и синхронизировать доступ к ним самостоятельно при необходимости, чтобы не терять производительность.
Это можно сделать с помощью методов synchronizedCollection(), synchronizedList(), synchronizedSet(), synchronizedMap().
Vector — синхронизированный аналог ArrayList.
Hashtable — синхронизированный аналог HashMap.
Stack — синхронизированный стек на основе Vector.
Collections.synchronizedList() — возвращает синхронизированный список на основе переданного в нее списка.
Collections.synchronizedSet() — то же самое для множества.
Collections.synchronizedMap() — для отображения.
Синхронизация в этих коллекциях реализована с помощью внутренних блокировок, которые упорядочивает доступ к коллекции из разных потоков.
Обычно предпочтительнее использовать несинхронизированные коллекции и синхронизировать доступ к ним самостоятельно при необходимости, чтобы не терять производительность.
Это можно сделать с помощью методов synchronizedCollection(), synchronizedList(), synchronizedSet(), synchronizedMap().
Курсы для тех, кто хочет получить новые скиллы или перейти в другую компанию на грейд выше.
У вас есть возможность начать любой курс с бесплатных вводных занятий, чтобы познакомиться с преподавателями и форматом обучения.
Какой курс выбрать?
🔹 Математика для Data Science
Наш cамый популярный, самый хардкорный курс по вышмату! На этом курсе вы получите все необходимые знания по математике для старта карьеры в DS или аналитике.
🔹 Алгоритмы и структуры данных
Курс, который на практике познакомит со сложными алгоритмами и научит писать более короткий и эффективный код.
🔹 Основы программирования на Python
Если вы только хотите начать свою карьеру в IT, то этот курс точно для вас. Вы сможете получить новую профессию за 13 990 рублей, поймете, насколько вам подходит работа с кодом.
Если вы не знаете, какой курс вам подойдет, оставляйте заявку, и наш менеджер поможет с этим и любым другим вопросом – https://proglib.io/w/155a301f
У вас есть возможность начать любой курс с бесплатных вводных занятий, чтобы познакомиться с преподавателями и форматом обучения.
Какой курс выбрать?
🔹 Математика для Data Science
Наш cамый популярный, самый хардкорный курс по вышмату! На этом курсе вы получите все необходимые знания по математике для старта карьеры в DS или аналитике.
🔹 Алгоритмы и структуры данных
Курс, который на практике познакомит со сложными алгоритмами и научит писать более короткий и эффективный код.
🔹 Основы программирования на Python
Если вы только хотите начать свою карьеру в IT, то этот курс точно для вас. Вы сможете получить новую профессию за 13 990 рублей, поймете, насколько вам подходит работа с кодом.
Если вы не знаете, какой курс вам подойдет, оставляйте заявку, и наш менеджер поможет с этим и любым другим вопросом – https://proglib.io/w/155a301f
Чем отличается абстрактный класс от интерфейса?
Ниже представлены основные отличия:
— Абстрактный класс может содержать как абстрактные, так и неабстрактные методы. Интерфейс содержит только сигнатуры методов, которые по умолчанию абстрактные.
— Абстрактный класс может содержать поля и реализованный код. В интерфейсе может быть только объявление констант.
— Класс может расширять только один класс (абстрактный или нет) и реализовывать множество интерфейсов.
— Объект абстрактного класса не может быть создан, тогда как интерфейс не является классом и его экземпляры создавать нельзя в принципе.
— Абстрактные классы используются для общих частично реализованных решений, интерфейсы — для определения зависимостей.
Ниже представлены основные отличия:
— Абстрактный класс может содержать как абстрактные, так и неабстрактные методы. Интерфейс содержит только сигнатуры методов, которые по умолчанию абстрактные.
— Абстрактный класс может содержать поля и реализованный код. В интерфейсе может быть только объявление констант.
— Класс может расширять только один класс (абстрактный или нет) и реализовывать множество интерфейсов.
— Объект абстрактного класса не может быть создан, тогда как интерфейс не является классом и его экземпляры создавать нельзя в принципе.
— Абстрактные классы используются для общих частично реализованных решений, интерфейсы — для определения зависимостей.
Как хранятся соотношения one-to-one, one-to-many и many-to-many в виде таблиц?
Соотношения one-to-one, one-to-many и many-to-many в таблицах баз данных хранятся следующим образом:
Соотношение one-to-one — в одном primary key одной таблицы хранятся значения, связанные с другой одиночной таблицей во внешнем ключе (foreign key).
Соотношение one-to-many — в таблице, которая «one», в качестве primary key используется идентификатор объекта, который распространяется на все связанные объекты в таблице, которая «many». Так, одно значение может ссылаться на несколько значений в другой таблице.
Соотношение many-to-many — необходимо создать дополнительную таблицу, которая связывает связанные таблицы. Так, в этой дополнительной таблице устанавливается соответствие между primary key одной таблицы и primary key другой таблицы.
Соотношения one-to-one, one-to-many и many-to-many в таблицах баз данных хранятся следующим образом:
Соотношение one-to-one — в одном primary key одной таблицы хранятся значения, связанные с другой одиночной таблицей во внешнем ключе (foreign key).
Соотношение one-to-many — в таблице, которая «one», в качестве primary key используется идентификатор объекта, который распространяется на все связанные объекты в таблице, которая «many». Так, одно значение может ссылаться на несколько значений в другой таблице.
Соотношение many-to-many — необходимо создать дополнительную таблицу, которая связывает связанные таблицы. Так, в этой дополнительной таблице устанавливается соответствие между primary key одной таблицы и primary key другой таблицы.
Что делает метод flatMap?
Метод flatMap используется в контексте работы с потоками (streams) в пакете java.util.stream. Он представлен в интерфейсе Stream и предназначен для преобразования элементов потока, когда каждый элемент может быть преобразован в ноль или один элемент другого потока.
Метод flatMap применяет функцию mapper к каждому элементу исходного потока и «разворачивает» (сплющивает) поток элементов в один объединенный поток, игнорируя нулевые потоки, которые могут быть результатом преобразования.
Метод flatMap используется в контексте работы с потоками (streams) в пакете java.util.stream. Он представлен в интерфейсе Stream и предназначен для преобразования элементов потока, когда каждый элемент может быть преобразован в ноль или один элемент другого потока.
Метод flatMap применяет функцию mapper к каждому элементу исходного потока и «разворачивает» (сплющивает) поток элементов в один объединенный поток, игнорируя нулевые потоки, которые могут быть результатом преобразования.
Что такое ковариантность типов?
Ковариантность типов — это вариантность типов в системе типов языка программирования. Ковариантность означает, что типы могут быть связаны отношением «родитель-потомок» в иерархии классов или интерфейсов, и этот относительный порядок сохраняется при передаче аргументов методам или возвращении значений из методов. Другими словами, ковариантность позволяет использовать подтип (потомок) вместо его родителя без необходимости явного приведения типов.
Ковариантность типов — это вариантность типов в системе типов языка программирования. Ковариантность означает, что типы могут быть связаны отношением «родитель-потомок» в иерархии классов или интерфейсов, и этот относительный порядок сохраняется при передаче аргументов методам или возвращении значений из методов. Другими словами, ковариантность позволяет использовать подтип (потомок) вместо его родителя без необходимости явного приведения типов.
Можно ли объявить несколько main-методов в коде Java-приложения?
Ответ: Метод main() — точка входа в программу. В приложении может быть несколько таких методов. Если метод отсутствует, то компиляция возможна, но при запуске будет получена ошибка Error: Main method not found.
Ответ: Метод main() — точка входа в программу. В приложении может быть несколько таких методов. Если метод отсутствует, то компиляция возможна, но при запуске будет получена ошибка Error: Main method not found.
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Библиотека шарписта
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘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++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Библиотека шарписта
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘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++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Что такое «потокобезопасность»?
Ответ: Свойство объекта или кода, гарантирующее правильное поведение кода при его исполнении или использовании несколькими потоками. Например, потокобезопасный счётчик не пропустит ни один счёт, даже если один и тот же экземпляр этого счётчика будет использоваться несколькими потоками.
Ответ: Свойство объекта или кода, гарантирующее правильное поведение кода при его исполнении или использовании несколькими потоками. Например, потокобезопасный счётчик не пропустит ни один счёт, даже если один и тот же экземпляр этого счётчика будет использоваться несколькими потоками.
В чем разница между notify() и notifyAll()?
Ответ: Метод notify() пробуждает только один поток в пуле ожидания, в то время как метод notifyAll() пробуждает все потоки.
Ответ: Метод notify() пробуждает только один поток в пуле ожидания, в то время как метод notifyAll() пробуждает все потоки.
Как исключить поля из сериализации?
Ответ: Для управления сериализацией при определении полей можно использовать ключевое слово transient, таким образом исключив поля из общего процесса сериализации.
Ответ: Для управления сериализацией при определении полей можно использовать ключевое слово transient, таким образом исключив поля из общего процесса сериализации.
Поддерживается ли в Java множественное наследование?
Ответ: Java не поддерживает множественное наследование классов, т.е. наследование от нескольких классов одновременно. Однако, можно использовать интерфейсы для реализации множественного наследования.
Ответ: Java не поддерживает множественное наследование классов, т.е. наследование от нескольких классов одновременно. Однако, можно использовать интерфейсы для реализации множественного наследования.