Можно ли создать Enum без экземпляров объектов?
Ответ: да, можно создать перечисление (enum) без экземпляров объектов. Для этого нужно создать пустой список аргументов в определении перечисления, но у этого перечисления всё равно будет один экземпляр, INSTANCE. Этот подход используется часто при реализации паттерна Singleton.
Ответ: да, можно создать перечисление (enum) без экземпляров объектов. Для этого нужно создать пустой список аргументов в определении перечисления, но у этого перечисления всё равно будет один экземпляр, INSTANCE. Этот подход используется часто при реализации паттерна Singleton.
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
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 запрещена на территории РФ
Сортировка Шелла
Если простыми словами, то сортировка Шелла это алгоритм сортировки массива, который улучшает производительность сортировки вставками.
Он основан на сравнении элементов, находящихся не только рядом, но и на определенном расстоянии друг от друга.
Суть алгоритма заключается в том, что на каждом шаге расстояние между элементами уменьшается вдвое, что позволяет ускорить сортировку.
Если простыми словами, то сортировка Шелла это алгоритм сортировки массива, который улучшает производительность сортировки вставками.
Он основан на сравнении элементов, находящихся не только рядом, но и на определенном расстоянии друг от друга.
Суть алгоритма заключается в том, что на каждом шаге расстояние между элементами уменьшается вдвое, что позволяет ускорить сортировку.
Ссылочные типы
В Java все типы данных делятся на две категории: примитивные типы и ссылочные типы. Ссылочные типы данных представляют собой объекты, которые содержат данные и методы для работы с ними. В отличие от примитивных типов, переменные ссылочных типов хранят ссылку на объект, а не его значение.
В Java все типы данных делятся на две категории: примитивные типы и ссылочные типы. Ссылочные типы данных представляют собой объекты, которые содержат данные и методы для работы с ними. В отличие от примитивных типов, переменные ссылочных типов хранят ссылку на объект, а не его значение.
Memory Model
Memory Model (модель памяти) в Java определяет взаимодействие потоков с разделяемой памятью. Она гарантирует видимость изменений в памяти и порядок операций.
Java Memory Model (JMM) устанавливает правила для этого взаимодействия. JMM обеспечивает видимость изменений через синхронизацию и волатильные переменные. Она также определяет порядок операций и гарантирует атомарность для некоторых операций.
Memory Model (модель памяти) в Java определяет взаимодействие потоков с разделяемой памятью. Она гарантирует видимость изменений в памяти и порядок операций.
Java Memory Model (JMM) устанавливает правила для этого взаимодействия. JMM обеспечивает видимость изменений через синхронизацию и волатильные переменные. Она также определяет порядок операций и гарантирует атомарность для некоторых операций.
Как вызвать один конструктор из другого?
В Java, вы можете вызвать один конструктор из другого с использованием ключевого слова this. Это делается с целью избежать дублирования кода в разных конструкторах класса.
В приведенном выше примере конструктор по умолчанию вызывает конструктор с параметром, передавая ему значение 0.
Обратите внимание, что вызов другого конструктора должен быть первым оператором в теле конструктора. Это обязательное правило.
В Java, вы можете вызвать один конструктор из другого с использованием ключевого слова this. Это делается с целью избежать дублирования кода в разных конструкторах класса.
В приведенном выше примере конструктор по умолчанию вызывает конструктор с параметром, передавая ему значение 0.
Обратите внимание, что вызов другого конструктора должен быть первым оператором в теле конструктора. Это обязательное правило.
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Класс AbstractSet
AbstractSet — это абстрактный класс, который предоставляет базовую реализацию интерфейса Set. Он входит в java.util пакет.
AbstractSet реализует большинство методов интерфейса Set, оставляя для подклассов только методы size() и iterator(). Это позволяет создавать подклассы с минимальным кодом.
Для хранения элементов AbstractSet использует объект Collection, передаваемый в конструктор.
Методы add(), remove(), contains() делегируют работу соответствующим методам внутренней коллекции.
Методы size(), isEmpty(), clear() и другие используют объект коллекции для реализации.
AbstractSet — это абстрактный класс, который предоставляет базовую реализацию интерфейса Set. Он входит в java.util пакет.
AbstractSet реализует большинство методов интерфейса Set, оставляя для подклассов только методы size() и iterator(). Это позволяет создавать подклассы с минимальным кодом.
Для хранения элементов AbstractSet использует объект Collection, передаваемый в конструктор.
Методы add(), remove(), contains() делегируют работу соответствующим методам внутренней коллекции.
Методы size(), isEmpty(), clear() и другие используют объект коллекции для реализации.
Блочная область видимости
Блочная область видимости (block scope) в Java — это область видимости, определенная фигурными скобками внутри метода, конструктора или другого блока кода, такого как условный оператор, цикл или блок try-catch.
Переменные, объявленные в блочной области видимости, могут использоваться только в этой области видимости и любых вложенных областях видимости. Когда управление программой покидает блок кода, переменные, объявленные в этом блоке, выходят из области видимости, и их значения больше не доступны.
Блочная область видимости (block scope) в Java — это область видимости, определенная фигурными скобками внутри метода, конструктора или другого блока кода, такого как условный оператор, цикл или блок try-catch.
Переменные, объявленные в блочной области видимости, могут использоваться только в этой области видимости и любых вложенных областях видимости. Когда управление программой покидает блок кода, переменные, объявленные в этом блоке, выходят из области видимости, и их значения больше не доступны.
Метод ensureCapacity
Метод ensureCapacity() используется для выделения заранее зарезервированной емкости (capacity) для ArrayList и Vector.
Основные моменты:
— Позволяет оптимизировать производительность за счет предварительного выделения памяти.
— Принимает в качестве аргумента желаемый минимальный размер capacity.
— Реальный размер выделяемой памяти может быть больше указанного.
— Метод безопасен для использования — если не нужно, то просто ничего не делает.
Метод ensureCapacity() используется для выделения заранее зарезервированной емкости (capacity) для ArrayList и Vector.
Основные моменты:
— Позволяет оптимизировать производительность за счет предварительного выделения памяти.
— Принимает в качестве аргумента желаемый минимальный размер capacity.
— Реальный размер выделяемой памяти может быть больше указанного.
— Метод безопасен для использования — если не нужно, то просто ничего не делает.
Чем отличается переопределение от перегрузки?
Перегрузка происходит в пределах одного класса, переопределение — в рамках иерархии классов.
Перегруженные методы должны отличаться сигнатурой, переопределенные — иметь одинаковую.
Перегрузка не нарушает инкапсуляцию, при переопределении может нарушаться.
Перегруженные методы не связаны с полиморфизмом, переопределенные позволяют реализовать полиморфное поведение.
В целом, перегрузка связана с компиляцией, а переопределение — с выполнением кода.
Перегрузка происходит в пределах одного класса, переопределение — в рамках иерархии классов.
Перегруженные методы должны отличаться сигнатурой, переопределенные — иметь одинаковую.
Перегрузка не нарушает инкапсуляцию, при переопределении может нарушаться.
Перегруженные методы не связаны с полиморфизмом, переопределенные позволяют реализовать полиморфное поведение.
В целом, перегрузка связана с компиляцией, а переопределение — с выполнением кода.
Интерфейс Comparator
Интерфейс Comparator используется для реализации произвольной сортировки элементов коллекции.
В отличие от Comparable, где порядок сравнения «встроен» в класс, Comparator позволяет задавать нужный порядок сортировки вне класса.
Comparator содержит единственный метод compare, который принимает два объекта и возвращает целое число, показывающее соотношение объектов.
Чтобы задать свой порядок сортировки, нужно создать класс, реализующий Comparator, и переопределить метод compare.
Comparator часто используется для сортировки объектов в коллекциях как альтернатива их естественному порядку.
В примере мы определили компаратор LastNameComparator, который сравнивает студентов по фамилии.
При сортировке списка передали этот компаратор, и студенты отсортировались по фамилии, а не по среднему баллу.
Интерфейс Comparator используется для реализации произвольной сортировки элементов коллекции.
В отличие от Comparable, где порядок сравнения «встроен» в класс, Comparator позволяет задавать нужный порядок сортировки вне класса.
Comparator содержит единственный метод compare, который принимает два объекта и возвращает целое число, показывающее соотношение объектов.
Чтобы задать свой порядок сортировки, нужно создать класс, реализующий Comparator, и переопределить метод compare.
Comparator часто используется для сортировки объектов в коллекциях как альтернатива их естественному порядку.
В примере мы определили компаратор LastNameComparator, который сравнивает студентов по фамилии.
При сортировке списка передали этот компаратор, и студенты отсортировались по фамилии, а не по среднему баллу.
Буферизованные потоки
Буферизованные потоки — это классы, которые обеспечивают буферизацию потоковых данных, что может улучшить производительность при чтении и записи больших объемов данных.
Преимущества использования буферизованных потоков включают более эффективную работу с файлами и сетевыми соединениями за счет уменьшения количества операций ввода-вывода. Также буферизация может уменьшить количество запросов к диску или сети, что может улучшить производительность при работе с большими объемами данных.
Буферизованные потоки — это классы, которые обеспечивают буферизацию потоковых данных, что может улучшить производительность при чтении и записи больших объемов данных.
Преимущества использования буферизованных потоков включают более эффективную работу с файлами и сетевыми соединениями за счет уменьшения количества операций ввода-вывода. Также буферизация может уменьшить количество запросов к диску или сети, что может улучшить производительность при работе с большими объемами данных.
ConcurrentSkipListSet
ConcurrentSkipListSet — это thread-safe реализация отсортированного множества на основе skip list.
Элементы в нем хранятся в сбалансированной иерархии, похожей на связный список и дубликаты не допускаются, также поддерживает unicity элементов.
Автоматически сортирует элементы по естественному порядку или компаратору. Все основные методы потокобезопасны из коробки.
Подходит для частого добавления/удаления/поиска элементов из разных потоков. Масштабируется лучше чем synchronized Set при увеличении количества потоков.
ConcurrentSkipListSet используется в многопоточных приложениях для хранения уникальных элементов в отсортированном порядке, выполнения быстрых операций поиска, добавления, удаления за время O(log n), избежания проблем синхронизации.
ConcurrentSkipListSet — это thread-safe реализация отсортированного множества на основе skip list.
Элементы в нем хранятся в сбалансированной иерархии, похожей на связный список и дубликаты не допускаются, также поддерживает unicity элементов.
Автоматически сортирует элементы по естественному порядку или компаратору. Все основные методы потокобезопасны из коробки.
Подходит для частого добавления/удаления/поиска элементов из разных потоков. Масштабируется лучше чем synchronized Set при увеличении количества потоков.
ConcurrentSkipListSet используется в многопоточных приложениях для хранения уникальных элементов в отсортированном порядке, выполнения быстрых операций поиска, добавления, удаления за время O(log n), избежания проблем синхронизации.
Что будет, если в Map положить два значения с одинаковым ключом?
Если в Map положить два значения с одинаковым ключом, то произойдет следующее:
— При добавлении второго значения с уже существующим ключом, первое значение, связанное с этим ключом, будет перезаписано.
— Map может содержать только уникальные ключи. При попытке добавить дублирующийся ключ, старое связанное значение будет заменено новым.
— Конкретная реализация Map (например, HashMap) может бросить исключение, если попытаться добавить дублирующийся ключ.
Таким образом, поведение в такой ситуации зависит от конкретной реализации интерфейса Map, но в целом дублирующиеся ключи в Map запрещены.
Если в Map положить два значения с одинаковым ключом, то произойдет следующее:
— При добавлении второго значения с уже существующим ключом, первое значение, связанное с этим ключом, будет перезаписано.
— Map может содержать только уникальные ключи. При попытке добавить дублирующийся ключ, старое связанное значение будет заменено новым.
— Конкретная реализация Map (например, HashMap) может бросить исключение, если попытаться добавить дублирующийся ключ.
Таким образом, поведение в такой ситуации зависит от конкретной реализации интерфейса Map, но в целом дублирующиеся ключи в Map запрещены.
Можно ли в конструкторе использовать return?
Ответ: можно, но без возвращаемого значения справа от return. То есть можно использовать return как вспомогательную конструкцию при вычислениях в конструкторе, чтобы срочно закончить (прервать) выполнение дальнейшего кода и завершить инициализацию объекта.
Ответ: можно, но без возвращаемого значения справа от return. То есть можно использовать return как вспомогательную конструкцию при вычислениях в конструкторе, чтобы срочно закончить (прервать) выполнение дальнейшего кода и завершить инициализацию объекта.
Какой метод HTTP не является неизменяемым?
Ответ: HTTP метод называется неизменяемым, если он на один и тот же запрос всегда возвращает одинаковый результат. HTTP методы GET, PUT, DELETE, HEAD и OPTIONS являются неизменяемыми, поэтому необходимо реализовывать приложение так, чтобы эти методы возвращали одинаковый результат постоянно.
Ответ: HTTP метод называется неизменяемым, если он на один и тот же запрос всегда возвращает одинаковый результат. HTTP методы GET, PUT, DELETE, HEAD и OPTIONS являются неизменяемыми, поэтому необходимо реализовывать приложение так, чтобы эти методы возвращали одинаковый результат постоянно.
Маркер Remote
Маркер удаленности — это модификатор доступа, используемый для обозначения класса, интерфейса или метода как доступного только для удаленных объектов. Это означает, что объекты этого типа могут быть доступны только через удаленный вызов процедуры (RPC).
Класс MyRemoteClass теперь является удаленным классом, и его методы могут вызываться только удаленными объектами.
Чтобы вызвать метод удаленного класса, необходимо использовать класс RemoteStub. RemoteStub предоставляет набор методов для вызова методов удаленных классов.
Маркер удаленности — это модификатор доступа, используемый для обозначения класса, интерфейса или метода как доступного только для удаленных объектов. Это означает, что объекты этого типа могут быть доступны только через удаленный вызов процедуры (RPC).
Класс MyRemoteClass теперь является удаленным классом, и его методы могут вызываться только удаленными объектами.
Чтобы вызвать метод удаленного класса, необходимо использовать класс RemoteStub. RemoteStub предоставляет набор методов для вызова методов удаленных классов.
Статический инициализатор
Статический инициализатор — блок кода, который выполняется при первой загрузке класса или при первом обращении к статическому члену класса (переменной или методу). Статический инициализатор обычно используется для инициализации статических переменных или выполнения других действий, которые требуются только один раз, при загрузке класса.
Статический инициализатор — блок кода, который выполняется при первой загрузке класса или при первом обращении к статическому члену класса (переменной или методу). Статический инициализатор обычно используется для инициализации статических переменных или выполнения других действий, которые требуются только один раз, при загрузке класса.