#вопросы_с_собеседований
Какое начальное количество корзин в HashMap?
В конструкторе по умолчанию - 16, используя конструкторы с параметрами можно задавать произвольное начальное количество корзин.
Какое начальное количество корзин в HashMap?
В конструкторе по умолчанию - 16, используя конструкторы с параметрами можно задавать произвольное начальное количество корзин.
#вопросы_с_собеседований
Возможна ли ситуация, когда HashMap выродится в список даже с ключами имеющими разные hashCode()?
Это возможно в случае, если метод, определяющий номер корзины будет возвращать одинаковые значения.
Возможна ли ситуация, когда HashMap выродится в список даже с ключами имеющими разные hashCode()?
Это возможно в случае, если метод, определяющий номер корзины будет возвращать одинаковые значения.
В этом выпуске #JEPCafe José Paumard, которого мы что-то давно не видели, рассказывает про:
- что такое preview features (как их использовать)
- что такое Virtual Threads (для чего они нужны)
- многое другое про многопоточность
- что такое preview features (как их использовать)
- что такое Virtual Threads (для чего они нужны)
- многое другое про многопоточность
YouTube
Java 19 Virtual Threads - JEP Café #11
JavaOne is back! ➱ https://oracle.com/javaone
What are virtual threads, the new model for threads, added to the JDK 19 as a preview feature by the Loom project.
⎯⎯⎯⎯⎯⎯ Chapters ⎯⎯⎯⎯⎯⎯
0:00 Intro
0:42 What are preview features, and how you can use them…
What are virtual threads, the new model for threads, added to the JDK 19 as a preview feature by the Loom project.
⎯⎯⎯⎯⎯⎯ Chapters ⎯⎯⎯⎯⎯⎯
0:00 Intro
0:42 What are preview features, and how you can use them…
🌳 Деревья и графы: что это такое и почему их обязательно нужно знать каждому программисту
В этой части материала мы рассмотрим деревья и графы, а также теорию, которая стоит за ними. Выполним реализацию на языке Python и покажем, как можно использовать эти понятия на примере челленджей Leetcode.
https://proglib.io/sh/g5JNoak9mY
В этой части материала мы рассмотрим деревья и графы, а также теорию, которая стоит за ними. Выполним реализацию на языке Python и покажем, как можно использовать эти понятия на примере челленджей Leetcode.
https://proglib.io/sh/g5JNoak9mY
🔥 Как Java-разработчику решить задачу на собеседовании в FinTech компанию?
Разберем 21 июня на Live coding сессии, где в прямом эфире решим задачу, которую дают в международных FinTech компаниях.
В прямом эфире Роман Оборин, Senior Java Developer в BNP Paribas и преподаватель курса Middle Java Dev, проведет Live coding сессию по написанию объектно-ориентированного кода на Java, покрытого разными типами тестов: Unit, Integration, Stress.
На Live сoding ты сможешь понаблюдать, как пишет код Senior-разработчик, прокомментировать процесс и решить реальную задачу, которую дают на собеседованиях. Ну и конечно, прокачаешь свои hard skills:
— Структурируешь знания по принципам SOLID
— Прокачаешь знания по разным видам тестирования, в том числе многопоточных программ
— Подготовишься к техническому интервью с этапом Live coding
🚀 Стартуем 21 июня в 19:00 по мск
Регистрируйся бесплатно: https://cutt.ly/eJ8Sdvb
Разберем 21 июня на Live coding сессии, где в прямом эфире решим задачу, которую дают в международных FinTech компаниях.
В прямом эфире Роман Оборин, Senior Java Developer в BNP Paribas и преподаватель курса Middle Java Dev, проведет Live coding сессию по написанию объектно-ориентированного кода на Java, покрытого разными типами тестов: Unit, Integration, Stress.
На Live сoding ты сможешь понаблюдать, как пишет код Senior-разработчик, прокомментировать процесс и решить реальную задачу, которую дают на собеседованиях. Ну и конечно, прокачаешь свои hard skills:
— Структурируешь знания по принципам SOLID
— Прокачаешь знания по разным видам тестирования, в том числе многопоточных программ
— Подготовишься к техническому интервью с этапом Live coding
🚀 Стартуем 21 июня в 19:00 по мск
Регистрируйся бесплатно: https://cutt.ly/eJ8Sdvb
#вопросы_с_собеседований
Какова роль equals() и hashCode() в HashMap?
Какова роль equals() и hashCode() в HashMap?
hashCode
позволяет определить корзину для поиска элемента, а equals
используется для сравнения ключей элементов в списке корзины и искомого ключа.#вопросы_с_собеседований
Какое худшее время работы метода get(key) для ключа, который есть в HashMap?
Какое худшее время работы метода get(key) для ключа, который есть в HashMap?
O(N)
. Худший случай - это поиск ключа в HashMap
, вырожденного в список по причине совпадения ключей по hashCode()
и для выяснения хранится ли элемент с определённым ключом может потребоваться перебор всего списка.#вопросы_с_собеседований
Сколько переходов происходит в момент вызова HashMap.get(key) по ключу, который есть в таблице?
• ключ равен
• любой ключ отличный от
Сколько переходов происходит в момент вызова HashMap.get(key) по ключу, который есть в таблице?
• ключ равен
null: 1
- выполняется единственный метод getForNullKey()
.• любой ключ отличный от
null: 4
- вычисление хэш-кода ключа; определение номера корзины; поиск значения; возврат значения.📐 10 алгоритмов для работы с графами, которые должен знать каждый кодер
Знакомимся с десятью маст-хэв для каждого кодера алгоритмами, которые будут полезными для работы с графами (исходный код прилагается).
https://proglib.io/sh/LpZb98VWRM
Знакомимся с десятью маст-хэв для каждого кодера алгоритмами, которые будут полезными для работы с графами (исходный код прилагается).
https://proglib.io/sh/LpZb98VWRM
Конференция JPoint 2022 на день вернется в офлайн 24 июня.
Для всех, кто соскучился по живому общению с единомышленниками, команда JPoint сделала отдельный офлайн-день.
В теплом ламповом офлайне вас ждут:
✔ Доклады о фреймворках, тестировании на Java, архитектуре, многопоточности и не только.
✔ Дискуссии с участием спикеров после каждого доклада (вживую, а не в Zoom!).
✔ Круглые столы о JVM, Data Engineering в Java и собеседованиях разработчиков.
✔ Партнерские стенды с мини-докладами и возможностью получить мерч.
✔ Живое общение с единомышленниками.
📍Санкт-Петербург, Park Inn by Radisson Pulkovskaya, 24 июня
Вместе с билетом на офлайн-день вы получите доступ к записям более чем 30 докладов и других активностей с онлайн-части конференции.
Подробности, полную программу и билеты вы можете найти по ссылке.
Если покупаете билет за свой счет (а не за счет компании), то воспользуйтесь промокодом для получения скидки:
Для всех, кто соскучился по живому общению с единомышленниками, команда JPoint сделала отдельный офлайн-день.
В теплом ламповом офлайне вас ждут:
✔ Доклады о фреймворках, тестировании на Java, архитектуре, многопоточности и не только.
✔ Дискуссии с участием спикеров после каждого доклада (вживую, а не в Zoom!).
✔ Круглые столы о JVM, Data Engineering в Java и собеседованиях разработчиков.
✔ Партнерские стенды с мини-докладами и возможностью получить мерч.
✔ Живое общение с единомышленниками.
📍Санкт-Петербург, Park Inn by Radisson Pulkovskaya, 24 июня
Вместе с билетом на офлайн-день вы получите доступ к записям более чем 30 докладов и других активностей с онлайн-части конференции.
Подробности, полную программу и билеты вы можете найти по ссылке.
Если покупаете билет за свой счет (а не за счет компании), то воспользуйтесь промокодом для получения скидки:
javaproglib2022JRGpc
#вопросы_с_собеседований
Что такое busy spin?
Что такое busy spin?
busy spin
– это техника, которую программисты используют, чтобы заставить поток ожидать при определённом условии. В отличие от традиционных методов wait()
, sleep()
или yield()
, которые подразумевают уступку процессорного времени, этот метод вместо уступки выполняет пустой цикл. Это необходимо для того, чтобы сохранить кэш процессора, т.к. в многоядерных системах существует вероятность, что приостановленный поток продолжит своё выполнение уже на другом ядре, а это повлечет за собой перестройку состояния процессорного кэша, которая является достаточно затратной процедурой.#вопросы_с_собеседований
Что такое «денормализация»? Для чего она применяется?
Денормализация базы данных — это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных за счет увеличения избыточности данных.
Что такое «денормализация»? Для чего она применяется?
Денормализация базы данных — это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных за счет увеличения избыточности данных.
Telegram
Библиотека джависта
Нормализация - это процесс преобразования отношений базы данных к виду, отвечающему нормальным формам (пошаговый, обратимый процесс замены исходной схемы другой схемой, в которой наборы данных имеют более простую и логичную структуру).
Нормализация предназначена…
Нормализация предназначена…
#вопросы_с_собеседований
Как и когда происходит увеличение количества корзин в HashMap?
Помимо
Как и когда происходит увеличение количества корзин в HashMap?
Помимо
capacity
у HashMap
есть еще поле loadFactor
, на основании которого, вычисляется предельное количество занятых корзин capacity * loadFactor
. По умолчанию loadFactor = 0.75
. По достижению предельного значения, число корзин увеличивается в 2 раза и для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.#вопросы_с_собеседований
Объясните смысл параметров в конструкторе HashMap(int initialCapacity, float loadFactor).
• initialCapacity - исходный размер
• loadFactor - коэффициент заполнения
Объясните смысл параметров в конструкторе HashMap(int initialCapacity, float loadFactor).
• initialCapacity - исходный размер
HashMap
, количество корзин в хэш-таблице в момент её создания.• loadFactor - коэффициент заполнения
HashMap
, при превышении которого происходит увеличение количества корзин и автоматическое перехэширование. Равен отношению числа уже хранимых элементов в таблице к её размеру.#вопросы_с_собеседований
Сколько элементов будет пропущено, если Iterator.next() будет вызван после 10-ти вызовов Iterator.hasNext()?
Нисколько -
Сколько элементов будет пропущено, если Iterator.next() будет вызван после 10-ти вызовов Iterator.hasNext()?
Нисколько -
hasNext()
осуществляет только проверку наличия следующего элемента.#вопросы_с_собеседований
Будет ли работать HashMap, если все добавляемые ключи будут иметь одинаковый hashCode()?
Да, будет, но в этом случае HashMap вырождается в связный список и теряет свои преимущества.
Будет ли работать HashMap, если все добавляемые ключи будут иметь одинаковый hashCode()?
Да, будет, но в этом случае HashMap вырождается в связный список и теряет свои преимущества.
This media is not supported in your browser
VIEW IN TELEGRAM
❗Курс по алгоритмам и структурам данным начинается сегодня.
🚂 Запрыгиваем в уходящий поезд!
Информация для тех, кто еще думает:
• Разбираем все основные алгоритмы понятным языком;
• Тренируемся их применять и решаем задачи;
• Живые трансляции и общение в коммьюнити;
• Курс ведет разработчик Яндекс Go Степан Мацкевич;
• Ученики смогут пройти боевое тестовое собеседование с разработчиками Яндекс!
⚡Вы сможете успеть сегодня отправить заявку и записаться в группу!
👉 Записывайтесь: https://proglib.io/w/a6bd553e
🚂 Запрыгиваем в уходящий поезд!
Информация для тех, кто еще думает:
• Разбираем все основные алгоритмы понятным языком;
• Тренируемся их применять и решаем задачи;
• Живые трансляции и общение в коммьюнити;
• Курс ведет разработчик Яндекс Go Степан Мацкевич;
• Ученики смогут пройти боевое тестовое собеседование с разработчиками Яндекс!
⚡Вы сможете успеть сегодня отправить заявку и записаться в группу!
👉 Записывайтесь: https://proglib.io/w/a6bd553e
#вопросы_с_собеседований
Расскажите о методах жизненного цикла JSP.
Контейнер сервлетов (например,
•
•
•
Расскажите о методах жизненного цикла JSP.
Контейнер сервлетов (например,
Tomcat
, GlassFish
) создает из JSP-страницы
класс сервлета, наследующего свойства интерфейса javax.servlet.jsp.HttpJspBase
и включающего следующие методы:•
jspInit()
— метод объявлен в JSP
странице и реализуется с помощью контейнера. Этот метод вызывается один раз в жизненном цикле JSP
для того, чтобы инициализировать конфигурационные параметры указанные в дескрипторе развертывания. Этот метод можно переопределить с помощью определения элемента JSP scripting
и указания необходимых параметров для инициализации;•
jspService()
— метод переопределяется контейнером автоматически и соответствует непосредственно коду JSP
, описанному на странице. Этот метод определен в интерфейсе HttpJspPage
, его имя начинается с нижнего подчеркивания и он отличается от других методов жизненного цикла тем, что его невозможно переопределить;•
jspDestroy()
— метод вызывается контейнером для удаления объекта из памяти (на последней фазе жизненного цикла JSP
- Destroy
). Метод вызывается только один раз и доступен для переопределения, предоставляя возможность освободить ресурсы, которые были созданы в jspInit()
.#вопросы_с_собеседований
В чём заключается разница между IO и NIO?
• Java IO (input-output) является потокоориентированным, а
• Потоки ввода/вывода в
• В
В чём заключается разница между IO и NIO?
• Java IO (input-output) является потокоориентированным, а
Java NIO (new/non-blocking io)
– буфер-ориентированным. Потокоориентированный ввод/вывод подразумевает чтение/запись из потока/в поток одного или нескольких байт в единицу времени поочередно. Данная информация нигде не кэшируются. Таким образом, невозможно произвольно двигаться по потоку данных вперед или назад. В Java NIO
данные сначала считываются в буфер, что дает больше гибкости при обработке данных.• Потоки ввода/вывода в
Java IO
являются блокирующими. Это значит, что когда в потоке выполнения вызывается read()
или write()
метод любого класса из пакета java.io.*
, происходит блокировка до тех пор, пока данные не будут считаны или записаны. Поток выполнения в данный момент не может делать ничего другого. Неблокирующий режим Java NIO
позволяет запрашивать считанные данные из канала (channel) и получать только то, что доступно на данный момент, или вообще ничего, если доступных данных пока нет. Вместо того, чтобы оставаться заблокированным пока данные не станут доступными для считывания, поток выполнения может заняться чем-то другим. Тоже самое справедливо и для неблокирующего вывода. Поток выполнения может запросить запись в канал некоторых данных, но не дожидаться при этом пока они не будут полностью записаны.• В
Java NIO
имеются селекторы, которые позволяют одному потоку выполнения мониторить несколько каналов ввода. Т.е. существует возможность зарегистрировать несколько каналов с селектором, а потом использовать один поток выполнения для обслуживания каналов, имеющих доступные для обработки данные, или для выбора каналов, готовых для записи.🦠 Планете угрожает страшный вирус, и только разработчики могут все исправить
Наша реальность написана Создателем, и все, что происходит в мире – его кода дело, в том числе и неизвестный вирус. Он написал новый код, но допустил ошибки, и, если их не исправить, случится конец света.
Помогите Создателю и решите три задачи на языке Java или двух других. Каждая задача при этом разбита на блоки по грейдам. Кликайте на участок кода в задаче и выбирайте вариант его исправления. Успехов!
https://vk.cc/ceD1h5
Наша реальность написана Создателем, и все, что происходит в мире – его кода дело, в том числе и неизвестный вирус. Он написал новый код, но допустил ошибки, и, если их не исправить, случится конец света.
Помогите Создателю и решите три задачи на языке Java или двух других. Каждая задача при этом разбита на блоки по грейдам. Кликайте на участок кода в задаче и выбирайте вариант его исправления. Успехов!
https://vk.cc/ceD1h5
#вопросы_с_собеседований
Расскажите про приведение типов. Что такое понижение и повышение типа?
Java является строго типизированным языком программирования, а это означает, то что каждое выражение и каждая переменная имеет строго определенный тип уже на момент компиляции. Однако определен механизм приведения типов (casting) - способ преобразования значения переменной одного типа в значение другого типа.
В Java существуют несколько разновидностей приведения:
• Тождественное (identity). Преобразование выражения любого типа к точно такому же типу всегда допустимо и происходит автоматически.
• Расширение (повышение, upcasting) примитивного типа (widening primitive). Означает, что осуществляется переход от менее емкого типа к более ёмкому. Например, от типа byte (длина 1 байт) к типу int (длина 4 байта). Такие преобразование безопасны в том смысле, что новый тип всегда гарантировано вмещает в себя все данные, которые хранились в старом типе и таким образом не происходит потери данных. Этот тип приведения всегда допустим и происходит автоматически.
• Сужение (понижение, downcasting) примитивного типа (narrowing primitive). Означает, что переход осуществляется от более емкого типа к менее емкому. При таком преобразовании есть риск потерять данные. Например, если число типа int было больше 127, то при приведении его к byte значения битов старше восьмого будут потеряны. В Java такое преобразование должно совершаться явным образом, при этом все старшие биты, не умещающиеся в новом типе, просто отбрасываются - никакого округления или других действий для получения более корректного результата не производится.
• Расширение объектного типа (widening reference). Означает неявное восходящее приведение типов или переход от более конкретного типа к менее конкретному, т.е. переход от потомка к предку. Разрешено всегда и происходит автоматически.
• Сужение объектного типа (narrowing reference). Означает нисходящее приведение, то есть приведение от предка к потомку (подтипу). Возможно только если исходная переменная является подтипом приводимого типа. При несоответствии типов в момент выполнения выбрасывается исключение ClassCastException. Требует явного указания типа.
• Преобразование к строке (to String). Любой тип может быть приведен к строке, т.е. к экземпляру класса String.
• Запрещенные преобразования (forbidden). Не все приведения между произвольными типами допустимы. Например, к запрещенным преобразованиям относятся приведения от любого ссылочного типа к примитивному и наоборот (кроме преобразования к строке). Кроме того, невозможно привести друг к другу классы, находящиеся на разных ветвях дерева наследования и т.п.
При приведении ссылочных типов с самим объектом ничего не происходит - меняется лишь тип ссылки, через которую происходит обращение к объекту.
Для проверки возможности приведения нужно воспользоваться оператором
Расскажите про приведение типов. Что такое понижение и повышение типа?
Java является строго типизированным языком программирования, а это означает, то что каждое выражение и каждая переменная имеет строго определенный тип уже на момент компиляции. Однако определен механизм приведения типов (casting) - способ преобразования значения переменной одного типа в значение другого типа.
В Java существуют несколько разновидностей приведения:
• Тождественное (identity). Преобразование выражения любого типа к точно такому же типу всегда допустимо и происходит автоматически.
• Расширение (повышение, upcasting) примитивного типа (widening primitive). Означает, что осуществляется переход от менее емкого типа к более ёмкому. Например, от типа byte (длина 1 байт) к типу int (длина 4 байта). Такие преобразование безопасны в том смысле, что новый тип всегда гарантировано вмещает в себя все данные, которые хранились в старом типе и таким образом не происходит потери данных. Этот тип приведения всегда допустим и происходит автоматически.
• Сужение (понижение, downcasting) примитивного типа (narrowing primitive). Означает, что переход осуществляется от более емкого типа к менее емкому. При таком преобразовании есть риск потерять данные. Например, если число типа int было больше 127, то при приведении его к byte значения битов старше восьмого будут потеряны. В Java такое преобразование должно совершаться явным образом, при этом все старшие биты, не умещающиеся в новом типе, просто отбрасываются - никакого округления или других действий для получения более корректного результата не производится.
• Расширение объектного типа (widening reference). Означает неявное восходящее приведение типов или переход от более конкретного типа к менее конкретному, т.е. переход от потомка к предку. Разрешено всегда и происходит автоматически.
• Сужение объектного типа (narrowing reference). Означает нисходящее приведение, то есть приведение от предка к потомку (подтипу). Возможно только если исходная переменная является подтипом приводимого типа. При несоответствии типов в момент выполнения выбрасывается исключение ClassCastException. Требует явного указания типа.
• Преобразование к строке (to String). Любой тип может быть приведен к строке, т.е. к экземпляру класса String.
• Запрещенные преобразования (forbidden). Не все приведения между произвольными типами допустимы. Например, к запрещенным преобразованиям относятся приведения от любого ссылочного типа к примитивному и наоборот (кроме преобразования к строке). Кроме того, невозможно привести друг к другу классы, находящиеся на разных ветвях дерева наследования и т.п.
При приведении ссылочных типов с самим объектом ничего не происходит - меняется лишь тип ссылки, через которую происходит обращение к объекту.
Для проверки возможности приведения нужно воспользоваться оператором
instanceof
:Parent parent = new Child();
if (parent instanceof Child) {
Child child = (Child) parent;
}