#вопросы_с_собеседований
Как из одного сервлета вызвать другой сервлет?
Для вызова сервлета из того же приложения необходимо использовать механизм внутренней коммуникации сервлетов (inter-servlet communication mechanisms) через вызовы методов RequestDispatcher:
☕️ forward() - передаёт выполнение запроса в другой сервлет;
☕️ include() - предоставляет возможность включить результат работы другого сервлета в возвращаемый ответ.
Если необходимо вызывать сервлет, принадлежащий другому приложению, то использовать RequestDispatcher уже не получится, т.к. он определен только для текущего приложения. Для подобных целей необходимо использовать метод ServletResponse - sendRedirect() которому предоставляется полный URL другого сервлета. Для передачи данных между сервлетами можно использовать cookies.
Как из одного сервлета вызвать другой сервлет?
Для вызова сервлета из того же приложения необходимо использовать механизм внутренней коммуникации сервлетов (inter-servlet communication mechanisms) через вызовы методов RequestDispatcher:
☕️ forward() - передаёт выполнение запроса в другой сервлет;
☕️ include() - предоставляет возможность включить результат работы другого сервлета в возвращаемый ответ.
Если необходимо вызывать сервлет, принадлежащий другому приложению, то использовать RequestDispatcher уже не получится, т.к. он определен только для текущего приложения. Для подобных целей необходимо использовать метод ServletResponse - sendRedirect() которому предоставляется полный URL другого сервлета. Для передачи данных между сервлетами можно использовать cookies.
⛓ Уже не будущее: о технологии Blockchain простыми словами
Много было сказано о блокчейне. Попробуем еще раз – проще и лаконичнее.
https://proglib.io/sh/x3jGcCTVWU
Много было сказано о блокчейне. Попробуем еще раз – проще и лаконичнее.
https://proglib.io/sh/x3jGcCTVWU
#вопросы_с_собеседований
Что такое «ссылка на метод»?
Если существующий в классе метод уже делает все, что необходимо, то можно воспользоваться механизмом method reference (ссылка на метод) для непосредственной передачи этого метода. Такая ссылка передается в виде:
☕️ имя_класса::имя_статического_метода для статического метода;
☕️ объект_класса::имя_метода для метода экземпляра;
☕️ название_класса::new для конструктора.
Результат будет в точности таким же, как в случае определения лямбда-выражения, которое вызывает этот метод.
Ссылки на методы потенциально более эффективны, чем использование лямбда-выражений. Кроме того, они предоставляют компилятору более качественную информацию о типе и при возможности выбора между использованием ссылки на существующий метод и использованием лямбда-выражения, следует всегда предпочитать использование ссылки на метод.
Что такое «ссылка на метод»?
Если существующий в классе метод уже делает все, что необходимо, то можно воспользоваться механизмом method reference (ссылка на метод) для непосредственной передачи этого метода. Такая ссылка передается в виде:
☕️ имя_класса::имя_статического_метода для статического метода;
☕️ объект_класса::имя_метода для метода экземпляра;
☕️ название_класса::new для конструктора.
Результат будет в точности таким же, как в случае определения лямбда-выражения, которое вызывает этот метод.
Ссылки на методы потенциально более эффективны, чем использование лямбда-выражений. Кроме того, они предоставляют компилятору более качественную информацию о типе и при возможности выбора между использованием ссылки на существующий метод и использованием лямбда-выражения, следует всегда предпочитать использование ссылки на метод.
#вопросы_с_собеседований
Как перебрать элементы LinkedList в обратном порядке, не используя медленный get(index)?
Для этого в
Как перебрать элементы LinkedList в обратном порядке, не используя медленный get(index)?
Для этого в
LinkedList
есть обратный итератор, который можно получить вызва метод descendingIterator()
.#вопросы_с_собеседований
Зачем нужен HashMap, если есть Hashtable?
• Методы класса
•
•
Hashtable — это устаревший класс, и его использование не рекомендовано.
Зачем нужен HashMap, если есть Hashtable?
• Методы класса
Hashtable
синхронизированы, что приводит к снижению производительности, а HashMap
- нет;•
HashTable
не может содержать элементы null
, тогда как HashMap
может содержать один ключ null
и любое количество значений null
;•
Iterator
у HashMap
, в отличие от Enumeration
у HashTable
, работает по принципу «fail-fast»
(выдает исключение при любой несогласованности данных).Hashtable — это устаревший класс, и его использование не рекомендовано.
#вопросы_с_собеседований
В чем разница между HashMap и WeakHashMap? Для чего используется WeakHashMap?
В
В качестве примера использования такой структуры данных можно привести следующую ситуацию: допустим имеются объекты, которые необходимо расширить дополнительной информацией, при этом изменение класса этих объектов нежелательно либо невозможно. В этом случае добавляем каждый объект в
В чем разница между HashMap и WeakHashMap? Для чего используется WeakHashMap?
В
Java
существует 4 типа ссылок: сильные (strong reference)
, мягкие (SoftReference)
, слабые (WeakReference)
и фантомные (PhantomReference)
. Особенности каждого типа ссылок связаны с работой Garbage Collector
. Если объект можно достичь только с помощью цепочки WeakReference
(то есть на него отсутствуют сильные и мягкие ссылки), то данный объект будет помечен на удаление.WeakHashMap
- это структура данных, реализующая интерфейс Map
и основанная на использовании WeakReference
для хранения ключей. Таким образом, пара «ключ-значение»
будет удалена из WeakHashMap
, если на объект-ключ более не имеется сильных ссылок.В качестве примера использования такой структуры данных можно привести следующую ситуацию: допустим имеются объекты, которые необходимо расширить дополнительной информацией, при этом изменение класса этих объектов нежелательно либо невозможно. В этом случае добавляем каждый объект в
WeakHashMap
в качестве ключа, а в качестве значения - нужную информацию. Таким образом, пока на объект имеется сильная ссылка (либо мягкая), можно проверять хэш-таблицу и извлекать информацию. Как только объект будет удален, то WeakReference
для этого ключа будет помещен в ReferenceQueue
и затем соответствующая запись для этой слабой ссылки будет удалена из WeakHashMap
.#вопросы_с_собеседований
Чем LinkedHashSet отличается от HashSet?
LinkedHashSet отличается от HashSet только тем, что в его основе лежит LinkedHashMap вместо HashMap. Благодаря этому порядок элементов при обходе коллекции является идентичным порядку добавления элементов (insertion-order). При добавлении элемента, который уже присутствует в LinkedHashSet (т.е. с одинаковым ключом), порядок обхода элементов не изменяется.
Чем LinkedHashSet отличается от HashSet?
LinkedHashSet отличается от HashSet только тем, что в его основе лежит LinkedHashMap вместо HashMap. Благодаря этому порядок элементов при обходе коллекции является идентичным порядку добавления элементов (insertion-order). При добавлении элемента, который уже присутствует в LinkedHashSet (т.е. с одинаковым ключом), порядок обхода элементов не изменяется.
Одна из многих причина нежелания идти учиться на курсы по разработке — отсутствие гарантий, что деньги за курс не будут выброшены на ветер.
В Kata Academy эти гарантии предоставляют.
В договоре с Kata четко прописано, что вам не нужно платить за обучение до тех пор, пока вы не устроитесь на работу в IT. То есть во время обучения вы ничего не платите.
Также в договоре указывается, что Kata гарантирует минимальную зарплату от 100 тысяч рублей в месяц.
Если вы вдруг не смогли устроиться на работу, то за обучение платить не нужно. Связано это с тем, что цель Kata — ваше трудоустройство разработчиком, а если вам не удалось, значит на курсе вас не смогли подготовить должным образом.
Записывайтесь на курс и получайте тестовое задание: https://clck.ru/hLfpy
Если не уверены в своих силах — не переживайте, Kata дадут неплохой FAQ, который поможет с выполнением тестового!
В Kata Academy эти гарантии предоставляют.
В договоре с Kata четко прописано, что вам не нужно платить за обучение до тех пор, пока вы не устроитесь на работу в IT. То есть во время обучения вы ничего не платите.
Также в договоре указывается, что Kata гарантирует минимальную зарплату от 100 тысяч рублей в месяц.
Если вы вдруг не смогли устроиться на работу, то за обучение платить не нужно. Связано это с тем, что цель Kata — ваше трудоустройство разработчиком, а если вам не удалось, значит на курсе вас не смогли подготовить должным образом.
Записывайтесь на курс и получайте тестовое задание: https://clck.ru/hLfpy
Если не уверены в своих силах — не переживайте, Kata дадут неплохой FAQ, который поможет с выполнением тестового!
#вопросы_с_собеседований
Даны 3 потока: Т1, Т2 и Т3. Как реализовать выполнение в последовательности Т1, Т2, Т3?
Такой последовательности выполнения можно достичь многими способами, например, просто воспользоваться методом join(), чтобы запустить поток в момент, когда другой уже закончит своё выполнение. Для реализации заданной последовательности, нужно запустить последний поток первым, и затем вызывать метод join() в обратном порядке, то есть Т3 вызывает Т2.join, а Т2 вызывает Т1.join, таким образом Т1 закончит выполнение первым, а Т3 последним.
Даны 3 потока: Т1, Т2 и Т3. Как реализовать выполнение в последовательности Т1, Т2, Т3?
Такой последовательности выполнения можно достичь многими способами, например, просто воспользоваться методом join(), чтобы запустить поток в момент, когда другой уже закончит своё выполнение. Для реализации заданной последовательности, нужно запустить последний поток первым, и затем вызывать метод join() в обратном порядке, то есть Т3 вызывает Т2.join, а Т2 вызывает Т1.join, таким образом Т1 закончит выполнение первым, а Т3 последним.
👽 Синдром самозванца: 5 способов преодоления чувства «незаслуженного успеха»
Быть самозванцем на работе – чувство не из легких. Но ты такой не один. Разберемся, как определить синдром и как с ним бороться.
https://proglib.io/sh/xs50XmbiUE
Быть самозванцем на работе – чувство не из легких. Но ты такой не один. Разберемся, как определить синдром и как с ним бороться.
https://proglib.io/sh/xs50XmbiUE
#вопросы_с_собеседований
Перечислите принципы, которым вы следуете в многопоточном программировании?
При написании многопоточных программ следует придерживаться определённых правил, которые помогают обеспечить достойную производительность приложения в сочетании с удобной отладкой и простотой дальнейшей поддержки кода.
☕️ Всегда давайте значимые имена своим потокам. Процесс отладки, нахождения ошибок или отслеживание исключения в многопоточном коде – довольно сложная задача. OrderProcessor, QuoteProcessor или TradeProcessor намного информативнее, чем Thread1, Thread2 и Thread3. Имя должно отражать задачу, выполняемую данным потоком.
☕️ Избегайте блокировок или старайтесь уменьшить масштабы синхронизации. Блокировка затратна, а переключение контекста ещё более ресурсоёмко. Пытайтесь избегать синхронизации и блокировки насколько это возможно, и организуйте критическую секцию в минимально необходимом объёме. Поэтому синхронизированный блок всегда предпочительней синхронизированного метода, дополнительно наделяя возможностью абсолютного контроля над масштабом блокировки.
☕️ Обрабатывайте прерывание потока с особой тщательностью. Нет ничего хуже оставшегося заблокированным ресурса или системы в неконстистентном, по причине неподтверждённой транзакции, состоянии.
☕️ Помните об обработке исключений. Выброшенные InterruptedException должны быть адекватно обработаны, а не просто подавлены. Так же не стоит пренебрегать Thread.UncaughtExceptionHandler. При использовании пула потоков необходимо помнить, что он зачастую просто «проглатывает» исключения. Так, если вы отправили на выполнение Runnable нужно обязательно поместить код выполнения задачи внутрь блока try-catch. Если в очередь пула помещается Callable, необходимо удостоверится, что результат выполнения всегда изымается с помощью блокирующего get(), чтобы в случае возникновения существовала возможность заново выбросить произошедшее исключение.
☕️ Почти всегда использование Concurrent сollection выгоднее использования Synchronized сollection, т.к. первые более современны (используют все доступные на момент их написания новшества языка) и масштабируемы, чем их синхронизированные аналоги.
Перечислите принципы, которым вы следуете в многопоточном программировании?
При написании многопоточных программ следует придерживаться определённых правил, которые помогают обеспечить достойную производительность приложения в сочетании с удобной отладкой и простотой дальнейшей поддержки кода.
☕️ Всегда давайте значимые имена своим потокам. Процесс отладки, нахождения ошибок или отслеживание исключения в многопоточном коде – довольно сложная задача. OrderProcessor, QuoteProcessor или TradeProcessor намного информативнее, чем Thread1, Thread2 и Thread3. Имя должно отражать задачу, выполняемую данным потоком.
☕️ Избегайте блокировок или старайтесь уменьшить масштабы синхронизации. Блокировка затратна, а переключение контекста ещё более ресурсоёмко. Пытайтесь избегать синхронизации и блокировки насколько это возможно, и организуйте критическую секцию в минимально необходимом объёме. Поэтому синхронизированный блок всегда предпочительней синхронизированного метода, дополнительно наделяя возможностью абсолютного контроля над масштабом блокировки.
☕️ Обрабатывайте прерывание потока с особой тщательностью. Нет ничего хуже оставшегося заблокированным ресурса или системы в неконстистентном, по причине неподтверждённой транзакции, состоянии.
☕️ Помните об обработке исключений. Выброшенные InterruptedException должны быть адекватно обработаны, а не просто подавлены. Так же не стоит пренебрегать Thread.UncaughtExceptionHandler. При использовании пула потоков необходимо помнить, что он зачастую просто «проглатывает» исключения. Так, если вы отправили на выполнение Runnable нужно обязательно поместить код выполнения задачи внутрь блока try-catch. Если в очередь пула помещается Callable, необходимо удостоверится, что результат выполнения всегда изымается с помощью блокирующего get(), чтобы в случае возникновения существовала возможность заново выбросить произошедшее исключение.
☕️ Почти всегда использование Concurrent сollection выгоднее использования Synchronized сollection, т.к. первые более современны (используют все доступные на момент их написания новшества языка) и масштабируемы, чем их синхронизированные аналоги.
👔 Senior Java Developer
⛳️ Teza Capital
💼🥁 Работа в офисе
💵 от $4000
Подробнее: https://proglib.io/vacancies/senior-java-developer-takeprofit-technology-2022-06-03
⛳️ Teza Capital
💼🥁 Работа в офисе
💵 от $4000
Подробнее: https://proglib.io/vacancies/senior-java-developer-takeprofit-technology-2022-06-03
Библиотека программиста
Вакансия Senior Java Developer в Teza Capital оплата по результатам собеседования, Полная занятость, Офис
Teza Capital is a quantitative asset management firm that strives to develop innovative, high-Sharpe investment products for its clients.
Originally founded in 2009 as a science and technology-driven global quantitative trading business, Teza derives…
Originally founded in 2009 as a science and technology-driven global quantitative trading business, Teza derives…
#вопросы_с_собеседований
В WeakHashMap используются WeakReferences. А почему бы не создать PhantomHashMap на PhantomReferences?
В WeakHashMap используются WeakReferences. А почему бы не создать PhantomHashMap на PhantomReferences?
PhantomReference
при вызове метода get()
возвращает всегда null
, поэтому тяжело представить назначение такой структуры данных.#вопросы_с_собеседований
Как из одного сервлета вызвать другой сервлет?
Для вызова сервлета из того же приложения необходимо использовать механизм внутренней коммуникации сервлетов (inter-servlet communication mechanisms) через вызовы методов RequestDispatcher:
☕️ forward() - передаёт выполнение запроса в другой сервлет;
☕️ include() - предоставляет возможность включить результат работы другого сервлета в возвращаемый ответ.
Если необходимо вызывать сервлет принадлежащий другому приложению, то использовать RequestDispatcher уже не получится, т.к. он определен только для текущего приложения. Для подобных целей необходимо использовать метод ServletResponse - sendRedirect() которому предоставляется полный URL другого сервлета. Для передачи данных между сервлетами можно использовать cookies.
Как из одного сервлета вызвать другой сервлет?
Для вызова сервлета из того же приложения необходимо использовать механизм внутренней коммуникации сервлетов (inter-servlet communication mechanisms) через вызовы методов RequestDispatcher:
☕️ forward() - передаёт выполнение запроса в другой сервлет;
☕️ include() - предоставляет возможность включить результат работы другого сервлета в возвращаемый ответ.
Если необходимо вызывать сервлет принадлежащий другому приложению, то использовать RequestDispatcher уже не получится, т.к. он определен только для текущего приложения. Для подобных целей необходимо использовать метод ServletResponse - sendRedirect() которому предоставляется полный URL другого сервлета. Для передачи данных между сервлетами можно использовать cookies.
Всё, что вы хотели узнать о релокации, и не побоялись спросить😎
❓ Можно ли получить работу за рубежом без знания английского или со слабым уровнем?
❓ Какой стек востребован за рубежом?
❓ Какие перспективы трудоустройства у джунов?
❓ В каких странах легче всего получить ВНЖ?
❓ Как жить с рублями за границей?
Собрали топчик вопросов о релокации айтишников и жизни за границей. Совместно с каналом RelocationDEV узнали лайфхаки от тех, кто уже переехал, дополнили информацией от экспертов и написали целую статью.
Гоу читать!🚀
❓ Можно ли получить работу за рубежом без знания английского или со слабым уровнем?
❓ Какой стек востребован за рубежом?
❓ Какие перспективы трудоустройства у джунов?
❓ В каких странах легче всего получить ВНЖ?
❓ Как жить с рублями за границей?
Собрали топчик вопросов о релокации айтишников и жизни за границей. Совместно с каналом RelocationDEV узнали лайфхаки от тех, кто уже переехал, дополнили информацией от экспертов и написали целую статью.
Гоу читать!🚀
#вопросы_с_собеседований
LinkedHashMap - что в нем от LinkedList, а что от HashMap?
Реализация
При добавлении элемента, который уже присутствует в
LinkedHashMap - что в нем от LinkedList, а что от HashMap?
Реализация
LinkedHashMap
отличается от HashMap
поддержкой двухсвязанного списка, определяющего порядок итерации по элементам структуры данных. По умолчанию элементы списка упорядочены согласно их порядку добавления в LinkedHashMap
(insertion-order)
. Однако порядок итерации можно изменить, установив параметр конструктора accessOrder
в значение true
. В этом случае доступ осуществляется по порядку последнего обращения к элементу (access-order)
. Это означает, что при вызове методов get()
или put()
элемент, к которому обращаемся, перемещается в конец списка.При добавлении элемента, который уже присутствует в
LinkedHashMap
(т.е. с одинаковым ключом), порядок итерации по элементам не изменяется.#вопросы_с_собеседований
Как устроен HashMap?
Как устроен HashMap?
HashMap
состоит из «корзин» (bucket)
. С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары «ключ-значение», вычисляет хэш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент. Если корзина пустая, то в нее сохраняется ссылка на вновь добавляемый элемент, если же там уже есть элемент, то происходит последовательный переход по ссылкам между элементами в цепочке, в поисках последнего элемента, от которого и ставится ссылка на вновь добавленный элемент. Если в списке был найден элемент с таким же ключом, то он заменяется.👨🏻🎓📅 Работа на лето: куда устроиться студенту. Стажировки и не только
Лето – пора не только отдохнуть, но и немного подзаработать. Рассказываем о самых интересных вариантах для студентов.
https://proglib.io/sh/tUySmaKHWz
Лето – пора не только отдохнуть, но и немного подзаработать. Рассказываем о самых интересных вариантах для студентов.
https://proglib.io/sh/tUySmaKHWz
❓ Пройди тест на знание алгоритмов и структур данных
Давай проверим, насколько хорошо ты разбираешься в алгоритмах, и не пора ли подтянуть знания. Всего 10 несложных вопросов 😉
https://proglib.io/w/788fb64b
Давай проверим, насколько хорошо ты разбираешься в алгоритмах, и не пора ли подтянуть знания. Всего 10 несложных вопросов 😉
https://proglib.io/w/788fb64b
❓ Зачем разработчику знать алгоритмы и структуры данных?
Рассказываем о преимуществах, которые дает хорошее знание алгоритмов, о том, что именно нужно изучить в первую очередь, и как проходит алгоритмическая секция в техническом собеседовании.
https://proglib.io/sh/OviLp0g4qz
Рассказываем о преимуществах, которые дает хорошее знание алгоритмов, о том, что именно нужно изучить в первую очередь, и как проходит алгоритмическая секция в техническом собеседовании.
https://proglib.io/sh/OviLp0g4qz