9 апреля Почтатех проведёт One day offer. Ищут специалистов с опытом в Java-разработке от трёх лет, чтобы одним днём предложить крутую работу.
Все пройдёт онлайн:
• до 3 апреля включительно — приём заявок;
• 4–8 апреля — предварительный этап со скринингом и HR-интервью;
• 9 апреля — техническое интервью, знакомство с командой и оффер.
Если ты хочешь делать продукты Почты России, которыми пользуется вся страна, хочешь влиять на жизни миллионов пользователей и готов к сложным задачам, скорее подавай заявку: https://clck.ru/dniKc
Все пройдёт онлайн:
• до 3 апреля включительно — приём заявок;
• 4–8 апреля — предварительный этап со скринингом и HR-интервью;
• 9 апреля — техническое интервью, знакомство с командой и оффер.
Если ты хочешь делать продукты Почты России, которыми пользуется вся страна, хочешь влиять на жизни миллионов пользователей и готов к сложным задачам, скорее подавай заявку: https://clck.ru/dniKc
#вопросы_с_собеседований
Что такое «анонимные классы»? Где они применяются?
Это вложенный локальный класс без имени, который разрешено декларировать в любом месте обрамляющего класса, разрешающем размещение выражений. Создание экземпляра анонимного класса происходит одновременно с его объявлением. В зависимости от местоположения анонимный класс ведет себя как статический либо как нестатический вложенный класс - в нестатическом контексте появляется окружающий его экземпляр.
Анонимные классы имеют несколько ограничений:
• Их использование разрешено только в одном месте программы - месте его создания;
• Применение возможно только в том случае, если после порождения экземпляра нет необходимости на него ссылаться;
• Реализует лишь методы своего интерфейса или суперкласса, т.е. не может объявлять каких-либо новых методов, так как для доступа к ним нет поименованного типа.
Анонимные классы обычно применяются для:
• создания объекта функции (function object), например, реализация интерфейса
• создания объекта процесса (process object), такого как экземпляры классов
• в статическом методе генерации;
• инициализации открытого статического поля
Что такое «анонимные классы»? Где они применяются?
Это вложенный локальный класс без имени, который разрешено декларировать в любом месте обрамляющего класса, разрешающем размещение выражений. Создание экземпляра анонимного класса происходит одновременно с его объявлением. В зависимости от местоположения анонимный класс ведет себя как статический либо как нестатический вложенный класс - в нестатическом контексте появляется окружающий его экземпляр.
Анонимные классы имеют несколько ограничений:
• Их использование разрешено только в одном месте программы - месте его создания;
• Применение возможно только в том случае, если после порождения экземпляра нет необходимости на него ссылаться;
• Реализует лишь методы своего интерфейса или суперкласса, т.е. не может объявлять каких-либо новых методов, так как для доступа к ним нет поименованного типа.
Анонимные классы обычно применяются для:
• создания объекта функции (function object), например, реализация интерфейса
Comparator
;• создания объекта процесса (process object), такого как экземпляры классов
Thread
, Runnable
и подобных;• в статическом методе генерации;
• инициализации открытого статического поля
final
, которое соответствует сложному перечислению типов, когда для каждого экземпляра в перечислении требуется отдельный подкласс.Приходи на бесплатный курс «Golang разработчик», изучи новый язык за 3 месяца и получи оффер в #CloudMTS!
В чем преимущество курса?
Курс бесплатный и включает обучение не только Golang, но и работе с базами данных, брокерами сообщений, k8s/docker, новым фичам в Go, включая дженерики. По результатам обучения у тебя будет возможность попасть в команду разработки #CloudMTS, т.к. курс заточен под потребности компании.
Что такое CloudMTS?
CloudMTS – это облачный провайдер с собственными магистральными каналами связи. Команда проектирует инфраструктурные службы облака и строит биллинг. Вся разработка ведётся на Golang.
Как попасть на курс?
Кандидатам нужно наличие опыта коммерческой разработки от полугода, а также пройти отборочные на знание синтаксиса и базовых конструкций Go, основ работы с базами данных и брокерами сообщений. Подать заявку можно до 11 апреля 2022 года, обучение стартует 11 мая.
Как получить оффер?
После успешного окончания курса вас ждет собеседование с CloudMTS, к которому вы подготовитесь на курсе.
Регистрируйся на курс тут.
В чем преимущество курса?
Курс бесплатный и включает обучение не только Golang, но и работе с базами данных, брокерами сообщений, k8s/docker, новым фичам в Go, включая дженерики. По результатам обучения у тебя будет возможность попасть в команду разработки #CloudMTS, т.к. курс заточен под потребности компании.
Что такое CloudMTS?
CloudMTS – это облачный провайдер с собственными магистральными каналами связи. Команда проектирует инфраструктурные службы облака и строит биллинг. Вся разработка ведётся на Golang.
Как попасть на курс?
Кандидатам нужно наличие опыта коммерческой разработки от полугода, а также пройти отборочные на знание синтаксиса и базовых конструкций Go, основ работы с базами данных и брокерами сообщений. Подать заявку можно до 11 апреля 2022 года, обучение стартует 11 мая.
Как получить оффер?
После успешного окончания курса вас ждет собеседование с CloudMTS, к которому вы подготовитесь на курсе.
Регистрируйся на курс тут.
www.teta.mts.ru
MTS Teta⎪Golang developer
Курс, после которого возьмут в CloudMTS
This media is not supported in your browser
VIEW IN TELEGRAM
Освойте бэкенд-разработку на Java за 10 месяцев!
Профессия для тех, кто настроен серьезно: https://bit.ly/32zyTpZ
Научим:
✔️Писать код на Java
✔️Использовать фреймворки Javalin, Spring
✔️Применять принципы ООП
✔️Работать с базами данным, SQL
✔️Настраивать окружение: IDEA, Gradle/Maven, JDK
✔️Пользоваться командной строкой и Git
Поможем:
✔️Наработать практику — вы сделаете 5 проектов на GitHub
✔️Грамотно оформить резюме
✔️Подготовиться к собеседованиям
А еще порекомендуем в хорошие компании и познакомим с сообществом из 26 тысяч айтишников. Присоединяйтесь!
Профессия для тех, кто настроен серьезно: https://bit.ly/32zyTpZ
Научим:
✔️Писать код на Java
✔️Использовать фреймворки Javalin, Spring
✔️Применять принципы ООП
✔️Работать с базами данным, SQL
✔️Настраивать окружение: IDEA, Gradle/Maven, JDK
✔️Пользоваться командной строкой и Git
Поможем:
✔️Наработать практику — вы сделаете 5 проектов на GitHub
✔️Грамотно оформить резюме
✔️Подготовиться к собеседованиям
А еще порекомендуем в хорошие компании и познакомим с сообществом из 26 тысяч айтишников. Присоединяйтесь!
#вопросы_с_собеседований
Каким образом из вложенного класса получить доступ к полю внешнего класса?
Статический вложенный класс имеет прямой доступ только к статическим полям обрамляющего класса.
Простой внутренний класс, может обратиться к любому полю внешнего класса напрямую. В случае, если у вложенного класса уже существует поле с таким же литералом, то обращаться к такому полю следует через ссылку на его экземпляр. Например:
Каким образом из вложенного класса получить доступ к полю внешнего класса?
Статический вложенный класс имеет прямой доступ только к статическим полям обрамляющего класса.
Простой внутренний класс, может обратиться к любому полю внешнего класса напрямую. В случае, если у вложенного класса уже существует поле с таким же литералом, то обращаться к такому полю следует через ссылку на его экземпляр. Например:
Outer.this.field
.#вопросы_с_собеседований
Расскажите про основные понятия ООП: «класс», «объект», «интерфейс».
Класс – это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт).
С точки зрения программирования класс можно рассматривать как набор данных (полей, атрибутов, членов класса) и функций для работы с ними (методов).
С точки зрения структуры программы класс является сложным типом данных.
Объект (экземпляр) – это отдельный представитель класса, имеющий конкретное состояние и поведение, полностью определяемое классом. Каждый объект имеет конкретные значения атрибутов и методы, работающие с этими значениями на основе правил, заданных в классе.
Интерфейс – это набор методов класса, доступных для использования. Интерфейсом класса будет являться набор всех его публичных методов в совокупности с набором публичных атрибутов. По сути, интерфейс специфицирует класс, чётко определяя все возможные действия над ним.
Расскажите про основные понятия ООП: «класс», «объект», «интерфейс».
Класс – это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт).
С точки зрения программирования класс можно рассматривать как набор данных (полей, атрибутов, членов класса) и функций для работы с ними (методов).
С точки зрения структуры программы класс является сложным типом данных.
Объект (экземпляр) – это отдельный представитель класса, имеющий конкретное состояние и поведение, полностью определяемое классом. Каждый объект имеет конкретные значения атрибутов и методы, работающие с этими значениями на основе правил, заданных в классе.
Интерфейс – это набор методов класса, доступных для использования. Интерфейсом класса будет являться набор всех его публичных методов в совокупности с набором публичных атрибутов. По сути, интерфейс специфицирует класс, чётко определяя все возможные действия над ним.
#вопросы_с_собеседований
Как работают методы wait() и notify()/notifyAll()?
Эти методы определены у класса Object и предназначены для взаимодействия потоков между собой при межпоточной синхронизации.
☕️ wait(): освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify()/notifyAll();
☕️ notify(): продолжает работу потока, у которого ранее был вызван метод wait();
☕️ notifyAll(): возобновляет работу всех потоков, у которых ранее был вызван метод wait().
Когда вызван метод wait(), поток освобождает блокировку на объекте и переходит из состояния Работающий (Running) в состояние Ожидания (Waiting). Метод notify() подаёт сигнал одному из потоков, ожидающих на объекте, чтобы перейти в состояние Работоспособный (Runnable). При этом невозможно определить, какой из ожидающих потоков должен стать работоспособным. Метод notifyAll() заставляет все ожидающие потоки для объекта вернуться в состояние Работоспособный (Runnable). Если ни один поток не находится в ожидании на методе wait(), то при вызове notify() или notifyAll() ничего не происходит.
Поток может вызвать методы wait() или notify() для определённого объекта, только если он в данный момент имеет блокировку на этот объект. wait(), notify() и notifyAll() должны вызываться только из синхронизированного кода.
Как работают методы wait() и notify()/notifyAll()?
Эти методы определены у класса Object и предназначены для взаимодействия потоков между собой при межпоточной синхронизации.
☕️ wait(): освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify()/notifyAll();
☕️ notify(): продолжает работу потока, у которого ранее был вызван метод wait();
☕️ notifyAll(): возобновляет работу всех потоков, у которых ранее был вызван метод wait().
Когда вызван метод wait(), поток освобождает блокировку на объекте и переходит из состояния Работающий (Running) в состояние Ожидания (Waiting). Метод notify() подаёт сигнал одному из потоков, ожидающих на объекте, чтобы перейти в состояние Работоспособный (Runnable). При этом невозможно определить, какой из ожидающих потоков должен стать работоспособным. Метод notifyAll() заставляет все ожидающие потоки для объекта вернуться в состояние Работоспособный (Runnable). Если ни один поток не находится в ожидании на методе wait(), то при вызове notify() или notifyAll() ничего не происходит.
Поток может вызвать методы wait() или notify() для определённого объекта, только если он в данный момент имеет блокировку на этот объект. wait(), notify() и notifyAll() должны вызываться только из синхронизированного кода.
👋 Мы — команда айтишников. В текущих условиях компания не может работать как работала, и мы решили переехать всей командой.
💬 Создали канал для таких же, как мы, — тех, кто хочет уехать. Собираем всё самое полезное про релокацию. Рассказываем, с чем столкнулись сами, ищем лайфхаки и способы похачить систему (например, нашли несколько способов, как жить за границей на рубли).
Присоединяйся и узнаешь, как сделать так, чтобы твой котик не остался за бортом самолёта😉
💬 Создали канал для таких же, как мы, — тех, кто хочет уехать. Собираем всё самое полезное про релокацию. Рассказываем, с чем столкнулись сами, ищем лайфхаки и способы похачить систему (например, нашли несколько способов, как жить за границей на рубли).
Присоединяйся и узнаешь, как сделать так, чтобы твой котик не остался за бортом самолёта😉
#вопросы_с_собеседований
Что такое «сервлет»?
Сервлет является интерфейсом, реализация которого расширяет функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ. Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов.
Большинство необходимых для создания сервлетов классов и интерфейсов содержатся в пакетах 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.