👋 Мы — команда айтишников. В текущих условиях компания не может работать как работала, и мы решили переехать всей командой.
💬 Создали канал для таких же, как мы, — тех, кто хочет уехать. Собираем всё самое полезное про релокацию. Рассказываем, с чем столкнулись сами, ищем лайфхаки и способы похачить систему (например, нашли несколько способов, как жить за границей на рубли).
Присоединяйся и узнаешь, как сделать так, чтобы твой котик не остался за бортом самолёта😉
💬 Создали канал для таких же, как мы, — тех, кто хочет уехать. Собираем всё самое полезное про релокацию. Рассказываем, с чем столкнулись сами, ищем лайфхаки и способы похачить систему (например, нашли несколько способов, как жить за границей на рубли).
Присоединяйся и узнаешь, как сделать так, чтобы твой котик не остался за бортом самолёта😉
#вопросы_с_собеседований
Что такое «сервлет»?
Сервлет является интерфейсом, реализация которого расширяет функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ. Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов.
Большинство необходимых для создания сервлетов классов и интерфейсов содержатся в пакетах javax.servlet и javax.servlet.http.
Основные методы сервлета:
☕️ public void init(ServletConfig config) throws ServletException запускается сразу после загрузки сервлета в память;
☕️ public ServletConfig getServletConfig() возвращает ссылку на объект, который предоставляет доступ к информации о конфигурации сервлета;
☕️ public String getServletInfo() возвращает строку, содержащую информацию о сервлете, например: автор и версия сервлета;
☕️ public void service(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException вызывается для обработки каждого запроса;
☕️ public void destroy() выполняется перед выгрузкой сервлета из памяти.
Что такое «сервлет»?
Сервлет является интерфейсом, реализация которого расширяет функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ. Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов.
Большинство необходимых для создания сервлетов классов и интерфейсов содержатся в пакетах javax.servlet и javax.servlet.http.
Основные методы сервлета:
☕️ public void init(ServletConfig config) throws ServletException запускается сразу после загрузки сервлета в память;
☕️ public ServletConfig getServletConfig() возвращает ссылку на объект, который предоставляет доступ к информации о конфигурации сервлета;
☕️ public String getServletInfo() возвращает строку, содержащую информацию о сервлете, например: автор и версия сервлета;
☕️ public void service(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException вызывается для обработки каждого запроса;
☕️ public void destroy() выполняется перед выгрузкой сервлета из памяти.
❓ Почему нельзя соглашаться на тестовый кодинг во время собеседования
Собеседования по программной инженерии часто включают в себя какое-то тестовое задание по программированию, и это не очень хорошо. Объясним, почему.
https://proglib.io/sh/2kaXGotdi0
Собеседования по программной инженерии часто включают в себя какое-то тестовое задание по программированию, и это не очень хорошо. Объясним, почему.
https://proglib.io/sh/2kaXGotdi0
Становимся гуру Кафки! Бэкенд-разработчик рано или поздно столкнется с Кафкой. Обучение поможет встретиться с ней как со старым другом, а не встречным автомобилем.
20 мая нас ждёт интенсив «Кафка для разработчиков». Начинаем с основ, забираемся в самые недра!
Программа:
1. Введение
2. Определение терминов
3. Архитектура Кафки
4. Основы использования Кафки
5. Алгоритмы на Кафке
6. Транзакции с использованием Кафки
7. Событийно-ориентированная архитектура
8. Изнасилование Кафки (Kafka как база данных)
Будем использовать Golang и Java.
Всё удовольствие стоит 60 000 ₽.
Записаться: https://slurm.club/3uyqU6p
20 мая нас ждёт интенсив «Кафка для разработчиков». Начинаем с основ, забираемся в самые недра!
Программа:
1. Введение
2. Определение терминов
3. Архитектура Кафки
4. Основы использования Кафки
5. Алгоритмы на Кафке
6. Транзакции с использованием Кафки
7. Событийно-ориентированная архитектура
8. Изнасилование Кафки (Kafka как база данных)
Будем использовать Golang и Java.
Всё удовольствие стоит 60 000 ₽.
Записаться: https://slurm.club/3uyqU6p
Для чего используется оператор assert?
Assert (Утверждение) — это специальная конструкция, позволяющая проверять предположения о значениях произвольных данных в произвольном месте программы. Утверждение может автоматически сигнализировать об обнаружении некорректных данных, что обычно приводит к аварийному завершению программы с указанием места обнаружения некорректных данных.
Утверждения существенно упрощают локализацию ошибок в коде. Даже проверка результатов выполнения очевидного кода может оказаться полезной при последующем рефакторинге, после которого код может стать не настолько очевидным и в него может закрасться ошибка.
Обычно утверждения оставляют включенными во время разработки и тестирования программ, но отключают в релиз-версиях программ.
Т.к. утверждения могут быть удалены на этапе компиляции либо во время исполнения программы, они не должны менять поведение программы. Если в результате удаления утверждения поведение программы может измениться, то это явный признак неправильного использования assert. Таким образом, внутри assert нельзя вызывать методы, изменяющие состояние программы, либо внешнего окружения программы.
В Java проверка утверждений реализована с помощью оператора
Assert (Утверждение) — это специальная конструкция, позволяющая проверять предположения о значениях произвольных данных в произвольном месте программы. Утверждение может автоматически сигнализировать об обнаружении некорректных данных, что обычно приводит к аварийному завершению программы с указанием места обнаружения некорректных данных.
Утверждения существенно упрощают локализацию ошибок в коде. Даже проверка результатов выполнения очевидного кода может оказаться полезной при последующем рефакторинге, после которого код может стать не настолько очевидным и в него может закрасться ошибка.
Обычно утверждения оставляют включенными во время разработки и тестирования программ, но отключают в релиз-версиях программ.
Т.к. утверждения могут быть удалены на этапе компиляции либо во время исполнения программы, они не должны менять поведение программы. Если в результате удаления утверждения поведение программы может измениться, то это явный признак неправильного использования assert. Таким образом, внутри assert нельзя вызывать методы, изменяющие состояние программы, либо внешнего окружения программы.
В Java проверка утверждений реализована с помощью оператора
assert
, который имеет форму:[Выражение типа boolean];или
assert [Выражение типа boolean] : [Выражение любого типа, кроме void];Во время выполнения программы в том случае, если поверка утверждений включена, вычисляется значение булевского выражения, и если его результат
false
, то генерируется исключение java.lang.AssertionError
. В случае использования второй формы оператора assert выражение после двоеточия задаёт детальное сообщение о произошедшей ошибке (вычисленное выражение будет преобразовано в строку и передано конструктору AssertionError
).#вопросы_с_собеседований
В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?
Cтек – участок памяти, тесно связанный с потоками. У каждого потока есть свой стек, которые хранит локальные переменные, параметры методов и стек вызовов. Переменная, хранящаяся в стеке одного потока, не видна для другого.
Куча – общий участок памяти, который делится между всеми потоками. Объекты, неважно локальные или любого другого уровня, создаются в куче. Для улучшения производительности, поток обычно кэширует значения из кучи в свой стек, в этом случае для того, чтобы указать потоку, что переменную следует читать из кучи, используется ключевое слово volatile.
В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?
Cтек – участок памяти, тесно связанный с потоками. У каждого потока есть свой стек, которые хранит локальные переменные, параметры методов и стек вызовов. Переменная, хранящаяся в стеке одного потока, не видна для другого.
Куча – общий участок памяти, который делится между всеми потоками. Объекты, неважно локальные или любого другого уровня, создаются в куче. Для улучшения производительности, поток обычно кэширует значения из кучи в свой стек, в этом случае для того, чтобы указать потоку, что переменную следует читать из кучи, используется ключевое слово volatile.
Forwarded from Java jobs — вакансии для java-разработчиков
👔 Senior Java Dev
⛳️ СберМаркет
💼🥁 Удаленка\офис Мск\гибрид — выбирай
💵 от 300 т.р. на руки
Делаем Core Services в eCom. Давай с нами строить платформу для продуктовых команд!
У нас нет легаси, можно хорошо прокачаться в kubernetes и service mesh, много инженерных и инфраструктурных проектов.
Примеры задач: делать аутентификации, авторизации, отправки смс, пушей, email, подписок через API. Все это на микросервисной распределенной архитектуре на Java.
СберМаркет был создан на основе стартапа Instamart, присоединившегося к экосистеме Сбера в 2019 годe. Важно, что с одной стороны у нас есть стабильность экосистемы, а с другой — мы отдельная компания со своими процессами, командами, корп культурой и инфраструктурой.
В Tech-команде сейчас 650+ человек, за 2021 год мы стали сервисом №1 в e-grocery, хотим укрепиться на этой позиции, и твоя работа поможет достичь эту амбициозную цель.
Подробности по ссылке
🛒Пиши @aurecruit и рекомендуй знакомых
⛳️ СберМаркет
💼🥁 Удаленка\офис Мск\гибрид — выбирай
💵 от 300 т.р. на руки
Делаем Core Services в eCom. Давай с нами строить платформу для продуктовых команд!
У нас нет легаси, можно хорошо прокачаться в kubernetes и service mesh, много инженерных и инфраструктурных проектов.
Примеры задач: делать аутентификации, авторизации, отправки смс, пушей, email, подписок через API. Все это на микросервисной распределенной архитектуре на Java.
СберМаркет был создан на основе стартапа Instamart, присоединившегося к экосистеме Сбера в 2019 годe. Важно, что с одной стороны у нас есть стабильность экосистемы, а с другой — мы отдельная компания со своими процессами, командами, корп культурой и инфраструктурой.
В Tech-команде сейчас 650+ человек, за 2021 год мы стали сервисом №1 в e-grocery, хотим укрепиться на этой позиции, и твоя работа поможет достичь эту амбициозную цель.
Подробности по ссылке
🛒Пиши @aurecruit и рекомендуй знакомых
#вопросы_с_собеседований
Когда в приложении может быть выброшено исключение ClassCastException?
Когда в приложении может быть выброшено исключение ClassCastException?
ClassCastException
(потомок RuntimeException
) - исключение, которое будет выброшено при ошибке приведения типа.#вопросы_с_собеседований
Как поделиться данными между двумя потоками?
Данными между потоками возможно делиться, используя общий объект или параллельные структуры данных, например BlockingQueue.
Как поделиться данными между двумя потоками?
Данными между потоками возможно делиться, используя общий объект или параллельные структуры данных, например BlockingQueue.
#вопросы_с_собеседований
Почему String неизменяемый и финализированный класс?
Есть несколько преимуществ в неизменности строк:
• Пул строк возможен только потому, что строка неизменяемая, таким образом виртуальная машина сохраняет больше свободного места в
• Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.
• Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.
• Строки используются
• Поскольку строка неизменяемая, её
Почему String неизменяемый и финализированный класс?
Есть несколько преимуществ в неизменности строк:
• Пул строк возможен только потому, что строка неизменяемая, таким образом виртуальная машина сохраняет больше свободного места в
Heap
, поскольку разные строковые переменные указывают на одну и ту же переменную в пуле. Если бы строка была изменяемой, то интернирование строк не было бы возможным, потому что изменение значения одной переменной отразилось бы также и на остальных переменных, ссылающихся на эту строку.• Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.
• Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.
• Строки используются
classloader
и неизменность обеспечивает правильность загрузки класса.• Поскольку строка неизменяемая, её
hashCode()
кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в HashMap
т.к. его обработка происходит быстрее.#вопросы_с_собеседований
В чем разница между операторами GROUP BY и DISTINCT?
DISTINCT указывает, что для вычислений используются только уникальные значения столбца. NULL считается как отдельное значение. GROUP BY создает отдельную группу для всех возможных значений (включая значение NULL).
Если нужно удалить только дубликаты лучше использовать DISTINCT, GROUP BY лучше использовать для определения групп записей, к которым могут применяться агрегатные функции.
В чем разница между операторами GROUP BY и DISTINCT?
DISTINCT указывает, что для вычислений используются только уникальные значения столбца. NULL считается как отдельное значение. GROUP BY создает отдельную группу для всех возможных значений (включая значение NULL).
Если нужно удалить только дубликаты лучше использовать DISTINCT, GROUP BY лучше использовать для определения групп записей, к которым могут применяться агрегатные функции.
Привет! Наш проект proglib.academy растет и сейчас мы ищем Digital-маркетолога в команду, который обеспечит поток клиентов на продукты Proglib.academy из органических и платных каналов, будет строить маркетинговые воронки и проектировать CJM, а также оптимизировать показатели и тестировать гипотезы.
Будем рады, если вы поможете нам и отправите информацию о вакансии своим друзьям, знакомым или бывшим коллегам, которых она могла бы заинтересовать.
Более подробно о вакансии можно прочитать тут: https://proglib.io/vacancies/digital-marketolog-biblioteka-programmista-2022-04-04
Будем рады, если вы поможете нам и отправите информацию о вакансии своим друзьям, знакомым или бывшим коллегам, которых она могла бы заинтересовать.
Более подробно о вакансии можно прочитать тут: https://proglib.io/vacancies/digital-marketolog-biblioteka-programmista-2022-04-04
#вопросы_с_собеседований
Почему char[] предпочтительнее String для хранения пароля?
С момента создания строка остаётся в пуле, до тех пор, пока не будет удалена сборщиком мусора. Поэтому, даже после окончания использования пароля, он некоторое время продолжает оставаться доступным в памяти и способа избежать этого не существует. Это представляет определённый риск для безопасности, поскольку кто-либо, имеющий доступ к памяти сможет найти пароль в виде текста. В случае использования массива символов для хранения пароля имеется возможность очистить его сразу по окончанию работы с паролем, позволяя избежать риска безопасности, свойственного строке.
Почему char[] предпочтительнее String для хранения пароля?
С момента создания строка остаётся в пуле, до тех пор, пока не будет удалена сборщиком мусора. Поэтому, даже после окончания использования пароля, он некоторое время продолжает оставаться доступным в памяти и способа избежать этого не существует. Это представляет определённый риск для безопасности, поскольку кто-либо, имеющий доступ к памяти сможет найти пароль в виде текста. В случае использования массива символов для хранения пароля имеется возможность очистить его сразу по окончанию работы с паролем, позволяя избежать риска безопасности, свойственного строке.
Forwarded from Java jobs — вакансии для java-разработчиков
👔 Senior Java Dev
⛳️ СберМаркет
💼🥁 Удаленка\офис Мск\гибрид — выбирай
💵 от 300 т.р. на руки
Делаем Core Services в eCom. Давай с нами строить платформу для продуктовых команд!
У нас нет легаси, можно хорошо прокачаться в kubernetes и service mesh, много инженерных и инфраструктурных проектов.
Примеры задач: делать аутентификации, авторизации, отправки смс, пушей, email, подписок через API. Все это на микросервисной распределенной архитектуре на Java.
СберМаркет был создан на основе стартапа Instamart, присоединившегося к экосистеме Сбера в 2019 годe. Важно, что с одной стороны у нас есть стабильность экосистемы, а с другой — мы отдельная компания со своими процессами, командами, корп культурой и инфраструктурой.
В Tech-команде сейчас 650+ человек, за 2021 год мы стали сервисом №1 в e-grocery, хотим укрепиться на этой позиции, и твоя работа поможет достичь эту амбициозную цель.
Подробности по ссылке
🛒Пиши @aurecruit и рекомендуй знакомых
⛳️ СберМаркет
💼🥁 Удаленка\офис Мск\гибрид — выбирай
💵 от 300 т.р. на руки
Делаем Core Services в eCom. Давай с нами строить платформу для продуктовых команд!
У нас нет легаси, можно хорошо прокачаться в kubernetes и service mesh, много инженерных и инфраструктурных проектов.
Примеры задач: делать аутентификации, авторизации, отправки смс, пушей, email, подписок через API. Все это на микросервисной распределенной архитектуре на Java.
СберМаркет был создан на основе стартапа Instamart, присоединившегося к экосистеме Сбера в 2019 годe. Важно, что с одной стороны у нас есть стабильность экосистемы, а с другой — мы отдельная компания со своими процессами, командами, корп культурой и инфраструктурой.
В Tech-команде сейчас 650+ человек, за 2021 год мы стали сервисом №1 в e-grocery, хотим укрепиться на этой позиции, и твоя работа поможет достичь эту амбициозную цель.
Подробности по ссылке
🛒Пиши @aurecruit и рекомендуй знакомых
#вопросы_с_собеседований
Как зарегистрировать драйвер JDBC?
Регистрацию драйвера можно осуществить несколькими способами:
☕️ java.sql.DriverManager.registerDriver(%объект класса драйвера%).
☕️ Class.forName(«полное имя класса драйвера»).newInstance().
☕️ Class.forName(«полное имя класса драйвера»);
Как зарегистрировать драйвер JDBC?
Регистрацию драйвера можно осуществить несколькими способами:
☕️ java.sql.DriverManager.registerDriver(%объект класса драйвера%).
☕️ Class.forName(«полное имя класса драйвера»).newInstance().
☕️ Class.forName(«полное имя класса драйвера»);
#вопросы_с_собеседований
Что такое race condition?
Состояние гонки (race condition) - ошибка проектирования многопоточной системы или приложения, при которой эта работа напрямую зависит от того, в каком порядке выполняются потоки. Состояние гонки возникает, когда поток, который должен исполнится в начале, проиграл гонку и первым исполняется другой поток: поведение кода изменяется, из-за чего возникают недетерменированные ошибки.
Что такое race condition?
Состояние гонки (race condition) - ошибка проектирования многопоточной системы или приложения, при которой эта работа напрямую зависит от того, в каком порядке выполняются потоки. Состояние гонки возникает, когда поток, который должен исполнится в начале, проиграл гонку и первым исполняется другой поток: поведение кода изменяется, из-за чего возникают недетерменированные ошибки.
#вопросы_с_собеседований
Почему строка является популярным ключом в HashMap в Java?
Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа
Почему строка является популярным ключом в HashMap в Java?
Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа
HashMap
они будут обрабатываться быстрее.#вопросы_с_собеседований
Что такое WebSocket?
WebSocket — протокол полнодуплексной связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и web-сервером в режиме реального времени.
Протокол WebSocket определяет две URI схемы
☕️ ws: - нешифрованное соединение
☕️ wss: - шифрованное соединение
Что такое WebSocket?
WebSocket — протокол полнодуплексной связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и web-сервером в режиме реального времени.
Протокол WebSocket определяет две URI схемы
☕️ ws: - нешифрованное соединение
☕️ wss: - шифрованное соединение
#вопросы_с_собеседований
Что делает метод intern() в классе String?
Метод
Что делает метод intern() в классе String?
Метод
intern()
используется для сохранения строки в пуле строк или получения ссылки, если такая строка уже находится в пуле.#вопросы_с_собеседований
Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.