#вопросы_с_собеседований
Какие реализации SortedSet вы знаете и в чем их особенность?
В Java есть несколько реализаций интерфейса SortedSet:
— TreeSet — это реализация на основе красно-черного дерева. Элементы в TreeSet хранятся в отсортированном порядке согласно естественному порядку элементов или компаратору, переданному в конструктор.
Обеспечивает логарифмическую сложность для большинства операций.
— ConcurrentSkipListSet — потокобезопасная реализация, основанная на скип-листов.
Обеспечивает логарифмическую сложность операций и потокобезопасный доступ.
— EnumSet — высокопроизводительная реализация для элементов-перечислений.
Использует внутри битовые вектора для хранения.
— LinkedHashSet — реализация на основе хеш-таблицы и связанного списка.
Сохраняет порядок вставки элементов.
Механизм try-with-resources
Механизм try-with-resources — это способ автоматического закрытия ресурсов после их использования. Появился этот механизм в Java 7.
Он работает для классов, реализующих интерфейс AutoCloseable (например, потоки), уменьшает количество кода и упрощает обработку исключений.
Ресурсы объявляются в скобках после try и закрываются автоматически по завершении этого блока. Ресурсы закрываются в обратном порядке создания при нормальном или аварийном завершении.
По сравнению с блоком try-catch-finally этот механизм позволяет лаконичнее писать код с автозакрытием ресурсов.
В этом примере в блоке try создаются объекты FileReader и BufferedReader для чтения данных из файла.
После завершения блока try оба ресурса будут автоматически закрыты, даже если произойдет исключение.
#это_база
Программировали, программировали и переросли свои задачи? Работайте над масштабными ИТ-проектами в Тинькофф. Здесь тимлид хороший и задачи интересные. А работать можно прямо там, где живете: у Тинькофф есть ИТ-хабы в 25 городах России, в Беларуси, Армении и Казахстане. Вакансии тут
Читать полностью…#вопросы_с_собеседований
Что такое сериализация?
Сериализация — это процесс преобразования объекта в поток байтов для сохранения состояния объекта в файле или передачи по сети. Она выполняется потоками ObjectOutputStream и ObjectInputStream.
Сериализованный объект сохраняется в универсальном бинарном формате, независимом от платформы.
Сериализация позволяет сохранить состояние объекта между запусками программы и передавать объект через сеть.
Для сериализации класс должен имплементировать интерфейс Serializable. А если добавить полям класса модификатор transient, то такие поля не будут сериализованы.
Priority Queue
PriorityQueue - это коллекция, которая хранит элементы в соответствии с их приоритетом.
Реализует очередь на базе кучи (heap) и используется в ситуациях, когда необходимо обрабатывать или получать элементы в определенном порядке.
Элементы в очереди упорядочены по их естественному порядку (если элементы компарируемые) или согласно компаратору, переданному при создании очереди.
Первым всегда будет элемент с наивысшим приоритетом и извлечь можно только его.
PriorityQueue не поддерживает изменение приоритета элемента после добавления.
Метод equalsIgnoreCase()
Метод equalsIgnoreCase() используется для сравнения двух строк без учета регистра (заглавных и строчных букв).
Принимает в качестве аргумента вторую строку для сравнения, сравнивает две строки посимвольно после приведения их к одному регистру и возвращает boolean значение - true или false.
Работает намного быстрее, чем сравнение через toUpperCase/toLowerCase.
Полезен при сравнении пользовательских строк и лучше использовать его вместо ручного сравнения через equals.
#это_база
❗️ Что нужно уметь профессиональному Kotlin Backend разработчику?
Вам необходимо знать практики гибкой архитектуры, уметь создавать приложения для разных платформ даже в условиях жестких ограничений по времени и ресурсам, использовать инструменты Kotlin DSL, ООП и null-safety, а также применять наиболее передовые архитектурные шаблоны.
❇️ Эти навыки легче всего освоить с экспертами на онлайн-курсе «Kotlin Backend Developer. Professional» в Отус, который стартует 31 августа.
Присоединяйтесь к нам и станьте настоящим экспертом!
➡️ Пройдите вступительный тест и присоединяйтесь к группе по специальной цене: https://otus.pw/pFejM/
Курс доступен в рассрочку!
Нативная интеграция. Информация о продукте www.otus.ru
#вопросы_с_собеседований
В чем разница между Iterator и Enumeration?
— Iterator появился в JDK 1.2 и реализует интерфейс Iterable, в то время как Enumeration существовал в более ранних версиях JDK и не реализует Iterable.
— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.
— Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.
— Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.
ArrayUtils
ArrayUtils — это вспомогательный класс для работы с массивами из библиотеки Apache Commons Lang. Он содержит различные статические методы для манипуляций с массивами.
ArrayUtils широко используется в коде для упрощения работы с массивами, избавляя от рутинного написания циклов. Удобен при работе с параметрами и результатами методов в виде массивов.
Также может применяться для оптимизации кода, используя более эффективные реализации стандартных операций с массивами. Позволяет писать более чистый и читабельный код.
В этом примере мы импортируем класс ArrayUtils и создаем целочисленный массив. Затем используем метод indexOf() из ArrayUtils для поиска индекса элемента со значением 3.
Метод возвращает индекс найденного элемента в массиве или -1 если элемент не найден.
Класс FileReader
FileReader — это класс, который позволяет считывать символьные данные из файла. Читает файл посимвольно в виде кодов UTF-16, а для работы принимает объект File или путь к файлу в конструктор.
Использует потоковый доступ для чтения данных.
Должен использоваться в try-with-resources блоке, чтобы корректно закрывать поток. Часто используется совместно с BufferedReader для удобства чтения по строкам.
Здесь мы открываем поток FileReader для чтения файла data.txt.
В цикле посимвольно считываем данные методом read() пока не достигнут конец файла.
#это_база
BeanFactory
BeanFactory — это интерфейс, который предоставляет механизм для управления объектами bean в контейнере Inversion of Control (IoC).
BeanFactory является основой фреймворка Spring, где используется для создания приложений по принципу IoC и Dependency Injection. Он позволяет создавать гибкие, легко тестируемые приложения с инверсией управления и внедрением зависимостей.
💻 Открытый урок от архитектора AI/ML в Сбербанке
⁉️ Хотите разобраться в stream processing, batch processing, Kappa и Lambda архитектурах и обзоре технологического домена?
📌 Ждём вас 23 августа в 22:00 мск на открытом уроке Big Data и ML архитектуры пайплайнов в рамках курса «Software Architect» от OTUS!
🔥 От мощных инструментов хранения и обработки данных до инструментов для разработки и управления пайплайнами машинного обучения – вы получите полное представление о современных возможностях и инновациях в этой области.
💣 Регистрация здесь https://otus.pw/eQza/
⏳ Торопитесь, количество слотов для регистрации на урок ограничено.
Нативная интеграция. Информация о продукте www.otus.ru
Каждый разработчик ежедневно сталкивается с новыми челенджами, один из них — отказоустойчивость системы.
Поработаем над темой вместе?
Команда Яндекс Такси и ведущие специалисты IT отрасли делятся своим опытом. Регистрируйтесь сейчас и используйте в работе лучшие практики.
2 сентября. «Москва-Сити», башня «Око», с онлайн-трансляцией. Бесплатно
Подробнее
TreeSet
TreeSet — это реализация SortedSet интерфейса, представляющая собой сбалансированное дерево красно-черного типа.
Элементы в нем хранятся в отсортированном порядке согласно естественному порядку сортировки (natural ordering) или компаратору, если он указан при создании TreeSet.
Позволяет эффективно выполнять операции поиска, добавления и удаления за время O(log(n)).
Часто используется, когда нужно хранить элементы в отсортированном виде и не допускать дубликатов.
Может применяться для реализации таких структур данных, как сбалансированные деревья, приоритетные очереди и другие упорядоченные коллекции.
#вопросы_с_собеседований
Какие особенности инициализации final static переменных?
— Они могут инициализироваться только один раз. Это происходит либо непосредственно при объявлении переменной, либо в статическом блоке инициализации.
— Инициализация таких переменных происходит до вызова конструктора класса, поэтому к ним нельзя обращаться внутри конструктора.
— Они являются статическими, то есть принадлежат классу, а не отдельным объектам.
— Нельзя использовать не константные переменные для присваивания значений.
— Переменные инициализируются в порядке объявления в классе.
— Если класс с такими переменными загружается, то выполняется их статическая инициализация, а значение, присвоенное при инициализации, не может быть изменено.
Реклама. ООО «Ибс Инфинисофт». ИНН 7713605227
☕️ Пройдите сертификацию для Java-разработчиков от Учебного центра IBS, команды AxiomJDK и ИТ-кластера фонда «Сколково»!
2022 год изменил российский ИТ-рынок. После ухода западных вендоров российским Java-разработчикам стала недоступна сертификация от Oracle, а также услуги глобальных центров тестирования. Опираясь на международный опыт, была создана отечественная система сертификации, обогащенная прикладными аспектами.
Вы сможете:
✅ Повысить свою конкурентоспособность на рынке труда;
✅ Получить возможность карьерного роста и увеличения дохода;
✅ Систематизировать, актуализировать и расширить свои знания;
✅ Освоить новые навыки и повысить качество своей работы.
🎯На выбор предлагается 3 уровня сертификации: для junior, middle и senior-специалистов. Допуск к экзамену осуществляется по предварительной записи. Чтобы получить его, заполните форму на сайте.
👉Не упустите возможность доказать свою экспертность и стать одним из лучших в своей области. Подробности: https://cnrlink.com/ibsjava
Зубчатый массив в Java
Зубчатый массив (BitSet) — это специальная структура данных для эффективного хранения и манипулирования наборами битов.
Представляет собой массив битов, который увеличивается динамически по мере добавления элементов. Занимает меньше памяти, чем обычные структуры данных для хранения булевых значений.
Позволяет выполнять операции над битами: установка, сброс, инверсия, логические операции.
Зубчатый массив полезен при решении задач: поиск в множествах, хранение состояний и флагов, оптимизация расхода памяти и в целом при необходимости эффективно хранить и манипулировать большим количеством булевых значений.
#это_база
#вопросы_с_собеседований
Дайте определение понятию “поток-демон”.
Поток-демон (daemon thread) — это поток, который работает в фоновом режиме и не предотвращает завершение программы.
Потоки-демоны помечаются методом setDaemon(true) и обычно используются для выполнения фоновых задач — логгирование, мониторинг, очистка и т. д.
Однако, такие потоки не должны использоваться для критически важных операций, т. к. могут аварийно завершиться при выходе из приложения.
ConcurrentSkipListSet
ConcurrentSkipListSet - это thread-safe реализация отсортированного множества на основе skip list.
Элементы в нем хранятся в сбалансированной иерархии, похожей на связный список и дубликаты не допускаются, также поддерживает unicity элементов.
Автоматически сортирует элементы по естественному порядку или компаратору. Все основные методы потокобезопасны из коробки.
Подходит для частого добавления/удаления/поиска элементов из разных потоков. Масштабируется лучше чем synchronized Set при увеличении количества потоков.
ConcurrentSkipListSet используется в многопоточных приложениях для хранения уникальных элементов в отсортированном порядке, выполнения быстрых операций поиска, добавления, удаления за время O(log n), избежания проблем синхронизации.
🔥 Хардкорный тест для разработчиков, тимлидов и архитекторов!
👉 Ответьте на 11 вопросов и узнайте, достаточно ли у вас знаний, чтобы пройти онлайн-курс «Software Architect» в OTUS по спец.цене.
💻 Пройти тестирование - https://otus.pw/9Bmn/
🦾 Пройдите тест и получите:
— Доступ к настоящей проектной работе студента
— Живое общение с экспертами-практиками
— Лучшие открытые уроки прошлых наборов курса
— Продвинутые темы и практика на «боевых» задачах уровня Middle+
— Скидка на прохождение онлайн курса «Software Architect».
💎 А также доступ к 2 живым вебинарам курса «Software Architect» от OTUS:
— Big Data и ML архитектуры пайплайнов» - 23 августа в 20:00 мск.
— Масштабирование приложения и деление на сервисы» - 7 сентября в 20:00 мск.
🚀 Курс поможет прокачать весь арсенал навыков, необходимых архитектору ПО. Возможна рассрочка.
Нативная интеграция. Информация о продукте www.otus.ru
Метод Collections.shuffle
Метод shuffle() из класса Collections используется для перемешивания элементов коллекции в случайном порядке.
Он принимает в качестве аргумента список, элементы которого нужно перемешать и возвращает переданный список, но уже с измененным случайным порядком элементов. Сам список при этом не создается заново.
Использует алгоритм Фишера—Йетса для генерации случайной перестановки элементов, а также сам по себе является thread-safe - можно безопасно вызывать из разных потоков без синхронизации.
shuffle() не гарантирует уникальность создаваемых перестановок при многократном вызове. Работает за линейное время O(n).
#это_база
#вопросы_с_собеседований
В чем разница между Iterator и ListIterator?
— Iterator может итерироваться только вперед, а ListIterator может и вперед и назад.
— ListIterator имеет дополнительные методы previous(), hasPrevious(), add(), set().
— ListIterator позволяет получить индекс текущего элемента.
— ListIterator может начать итерацию с произвольного индекса списка, а Iterator только с начала.
— ListIterator можно получить только из объектов, реализующих List, а Iterator из любой коллекции.
— ListIterator является более функциональным и позволяет вносить изменения в список во время итерации, Iterator - только читать.
— Итераторы безопасны для использования в многопоточных приложениях, а ListIterator - нет.
При переходе на Scala из других языков знание традиционных и функциональных методов работы с ресурсами становится важным. Это облегчит выбор оптимальных подходов, позволит использовать функциональное программирование для создания более надежного и масштабируемого кода, а также ускорит адаптацию к новому языку.
Сделайте первый шаг в изучение Scala и получите возможность начать работать над высоконагруженными проектами в крупных корпорациях 🗓 29 августа в 20:00 на открытом уроке «Традиционные и функциональные подходы к работе с ресурсами» онлайн курса «Scala-разработчик» от OTUS. Занятие проведет 👨💻 Алексей Воронец, руководитель разработки в компании NAUMEN.
На открытом уроке мы:
- узнаем, что такое ресурсы и почему с ними важно корректно работать;
- рассмотрим стандартный подход к работе с ресурсами, его плюсы и минусы;
- узнаем, как используя "функциональные возможности" упростить себе жизнь;
- узнаем о проблемах и решениях в конкурентной работе с ресурсами.
Вебинар подойдет всем разработчикам, знакомым с языком Scala, или рассматривающим этот язык программирования для изучения.
👉 Регистрируйтесь на занятие — https://otus.pw/n72q/
Открытый урок приурочен к старту онлайн-курса «Scala-разработчик» в OTUS. После урока полный курс вы сможете приобрести удобным для вас способом.
Нативная интеграция. Информация на сайте www.otus.ru.
#вопросы_с_собеседований
Что будет, если единственный конструктор класса объявлен как final?
— Этот конструктор нельзя будет переопределить в подклассах.
— Невозможно создать наследников от данного класса, так как нельзя переопределить единственный конструктор.
— Попытка создания подкласса приведет к ошибке компиляции, так как компилятор не сможет сгенерировать конструктор по умолчанию для подкласса.
— Единственный способ наследоваться от такого класса - использовать агрегацию, композицию или делегирование вместо наследования.
Это полезный прием для предотвращения наследования, когда оно не требуется или нежелательно по архитектурным соображениям.
Не хочешь проср#ть собес по алгоритмам?
Если ты давно откладывал алгоритмы и не знаешь, с чего начать — это твой шанс⭐️
71% наших учеников уже получили офферы в крупные IT-компании. Хочешь стать следующим?
Помогаем заботать алгоритмы на задачах из собеседований в Яндекс, Тинькофф, ВК на курсе:
"АЛГОРИТМЫ: ROADMAP для получения офферов в IT!"
☝️Он лучше аналогов, и вот почему:
➡️Структурная подача материала. Информация собрана за вас, вам не нужно искать по всему интернету ответы на вопросы. Плюс есть куратор и препод, у которого можно спросить все, что не понятно.
➡️ Много практики. 100+ задач, которые вы решите сами. За счет постепенного роста сложности задач, вы выработаете большую уверенность в том, что сможете решать алгоритмы.
➡️Каждую неделю вы будете разбирать задачи из СОБЕСЕДОВАНИЙ. Научитесь уверенно решать задачки medium и hard на Leetcode и пройдете собеседования.
➡️У вас будет личный куратор-трекер, который напоминает о ДЗ. Вы получите МОТИВАЦИЮ изучить алгоритмы.
➡️Поддержка от сообщества единомышленников. Для участников будет групповой чат. Благодаря коммьюнити и общению вы получите удовольствие от процесса, а в этом состоянии вы максимально продуктивны.
Первому человеку, который пройдет весь курс до конца первым — полностью возместим деньги за обучение💲
🔥 До 20.08 можно присоединиться к 5 потоку с самой большой скидкой в году —20%.
✔️Оставляй заявку на бесплатную консультацию, где мы вместе с экспертом составим твой персональный RoadMap развития по алгоритмам:
🌐https://clck.ru/35NqXL
NavigableSet
NavigableSet — это интерфейс, который расширяет интерфейс SortedSet и добавляет навигационные методы для поиска элементов в отсортированном множестве.
NavigableSet поддерживает следующие дополнительные операции:
— Поиск ближайшего элемента к заданному.
— Поиск элементов в заданном диапазоне.
— Получение подмножества элементов сначала или конца набора.
Основное применение NavigableSet — это реализация структур данных, где важен упорядоченный доступ к элементам, таких как:
— Деревья (Red-Black, AVL и др.).
— Приоритетные очереди.
— Сортированные словари.
Основные реализации в Java — TreeSet и ConcurrentSkipListSet.
#вопросы_с_собеседований
Имеет ли смысл объявлять метод private final?
Объявление метода с модификаторами private и final имеет смысл, когда вы хотите:
— Скрыть детали реализации метода от других классов.
— Зафиксировать определенное поведение метода и не дать его переопределить.
— Сделать метод доступным только для использования внутри данного класса.
Метод repeat()
Метод repeat() принадлежит классу String и используется для повторения строки заданное количество раз.
Позволяет легко создавать повторяющиеся строки без использования циклов.
Удобно использовать для создания разделителей, оформления вывода и т.д.
#это_база
Начать заниматься IT можно, не дожидаясь выпускного! Так вы не только освоите уникальные скиллы, но и поймёте, какая профессия вам по-настоящему подходит.
А погружаясь в IT с Яндекс Лицеем, вы сможете попробовать себя в практических задачах и получите актуальные знания от опытных разработчиков.
Сейчас Яндекс Лицей предлагает бесплатное обучение по Python, Go, разработке игр, Machine Learning, Django, анализу данных и Big Data. Можно выбрать годовые офлайн- или онлайн-курсы. В программе — интенсивное погружение в IT, работа над групповыми проектами и много общения с единомышленниками.
В Лицее ждут школьников 8‒11-х классов и студентов ссузов 1-2-х курсов. Скорее переходите по ссылке и читайте подробности
👨💻 Хотите освоить лучшие инструменты по разработке микросервисной архитектуры?
Ответьте на 11 вопросов, чтобы проверить достаточно ли ваших навыков, чтобы строить архитектуру микросервисов и попасть на курс — «Microservice Architecture» от OTUS.
На полном курсе вы научитесь проектировать сложный бэкенд и работать с легаси-проектами, разбираться с трудными ситуациями и находить нестандартные решения. Все это на практике, с реальными кейсами и под руководством команды экспертов!
👉 Пройти тест — https://otus.pw/5bAg0/
💣 После прохождения у вас будет возможность записаться на курс по спец. цене и оформить рассрочку. А также вы получите доступ к записям 27 открытых уроков курса.
Нативная интеграция. Информация о продукте www.otus.ru