Алгоритмические задачи — это задачи, которые часто предлагают решить на собеседовании в крупных компаниях. Иногда для этого выделяют отдельный этап интервью.
Я тоже проводил такие собеседования с кандидатами, и заметил, что даже опытные программисты, претендующие на должности senior, tech lead или team lead, часто не могут справиться с алгоритмическими задачами.
С другой стороны, студенты и стажеры часто успешно проходили этот этап и получали оценку Middle или Middle+.
Связано это с тем, что навык решать алгоритмические задачи в онлайн-редакторе мало связан с повседневной деятельностью разработчика, а вот студенты и те, кто только учит язык, как раз постоянно решают похожие задачки в онлайн-тренажерах.
Если хотите потренироваться — вот задача, которая есть в открытом доступе leetcode и которую я встречал на реальном алгоритмическом собеседовании.
Дан массив
nums содержащий n различные чисел в диапазоне от 0 до n. Нужно вернуть единственное число из этого диапазаона, которое отсутствует в массивеПримеры:
Input: [3, 0, 1]
Output: 4
Input: [0, 1]
Output: 2
Input: [9, 6, 4, 2, 3, 5, 7, 0, 1]
Output: 8Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
На выходных немного исчез, а сейчас вовзращаюсь с двумя фактами и одним опросом
🧳 Факт 1: В эти выходные уже второй раз сходил на занятие по яхтенному спорту, теперь знаю много новых слов.
Если вдруг вам зачем то нужны малоизвестные слова, вот несколько - стаксель, галс, оверштаг.
Фотка прилагается
💻 Факт 2: Сделал нормальный сайт вместо notion, вывод - конструкторы сайтов круто
Сам сайт вот - dsvdev.com
Заходите, смотрите, записывайтесь)
Ну и опрос
🔽 🔽 🔽
Если вдруг вам зачем то нужны малоизвестные слова, вот несколько - стаксель, галс, оверштаг.
Фотка прилагается
Сам сайт вот - dsvdev.com
Заходите, смотрите, записывайтесь)
Ну и опрос
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Сегодня простой и достаточно популярный вопрос на собеседованиях:
Что выведет этот код?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет этот код?
Anonymous Quiz
29%
true, true
24%
false, false
35%
true, false
0%
false, true
12%
Посмотреть ответы
Для начала стоит отметить, что оператор == корректно работает только с примитивными типами данных. Например, такой код выведет true:
int a = 200;
int b = 200;
System.out.println(a == b);
//true
Когда мы сравниваем объекты класса Integer с помощью оператора ==, мы фактически сравниваем не их значения, а адреса в памяти, по которым они хранятся. Это означает, что оператор == вернёт true только тогда, когда мы сравниваем один и тот же объект с самим собой.
Именно поэтому такой код напечатает false
Integer a = 200;
Integer b = 200;
System.out.println(a == b);
//false
Почему в первом случае, когда значения равны 100, результат будет true?
Это связано с особенностями реализации класса Integer.
Когда мы создаём новый объект с помощью автоупаковки (autoboxing), используя примитивное значение, например 100 или 200, и если это значение находится в пределах от -128 до 127 (по умолчанию), то фактически мы не создаём новый объект, а получаем ссылку на уже существующий. Это позволяет экономить память, так как нет необходимости создавать множество одинаковых объектов.
Таким образом, оба объекта со значением 100 являются одним и тем же объектом, поэтому код ниже выведет true.
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
//true
Чтобы изменить это поведение, можно создавать объект Integer с помощью оператора new, например, так:
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b);
//false
Такой код напечатает false
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤔1🤯1
Последнее время в описании стека многих вакансий на Java можно встретить Kotlin.
Это относительно новый язык, который появился только в 2011 году, а используется чаще всего для разработки под android.
Иногда опыт работы с ним пишут в пожеланиях к кандидату или даже в требованиях вакансии.
По моим ощущениям, Kotlin упоминается примерно в 20-25% всех Java вакансий.
Kotlin — язык, который, как и Java, компилируется в bytecode JVM, а еще он полностью совместим с Java. Это значит, что внутри одного проекта можно совмещать код на Java и на Kotlin.
Поэтому некоторые компании и команды начинают переносить на него часть своих бэкенд-сервисов.
Например у меня в команде новые проекты пишут целиком на Kotlin, а в уже существующих на нем реализуют Unit и интергационные тесты.
В эту пятницу на внутренней IT-конференции в Т
Запись выложил на YouTube-канал — найти можно по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Чем хорош Kotlin | Доклад на внутреннем митапе Т-Банка
Персональный менторинг по Java - https://dsvdev.com
Обучающие материалы по Java и разборы реальных вопросов с собеседований в ТГ канале - https://news.1rj.ru/str/dsvdev
______
Запись выступления с внутренней IT конференции Т-Банка
Кратко рассказал про преимущества…
Обучающие материалы по Java и разборы реальных вопросов с собеседований в ТГ канале - https://news.1rj.ru/str/dsvdev
______
Запись выступления с внутренней IT конференции Т-Банка
Кратко рассказал про преимущества…
🔥1
Твоя язык программирования не важен!
На прошлой неделе написала HR из «Авито» с предложением пройти собеседование на Golang-разработчика.
Я ответил, что этот язык почти не знаю, а мой стек — Java/Kotlin.
На это мне сказали, что им не важно, на каком языке я пишу, главное — общие знания по бэкенд-разработке и инженерное мышление.
От собеседования я отказаться не смог, как минимум потому, что очень интересно, какие вопросы зададут на интервью, если стеки кандидата и вакансии не совпадают.
Вчера состоялся первый этап собеседования, сегодня HR написала, что я его успешно прошел и можно планировать следующий.
На первом этапе пообщались про работу сетей, какие есть протоколы, в каких случаях лучше применять TCP, а в каких UDP, зачем нужен HTTPS, какие бывают виды HTTP и из чего состоят запросы.
Поговорили про общие подходы к разработке, зачем нужен таймаут на выполнение запроса сервисом и как определить, какой он должен быть.
Также обсудили, как сервисы могут взаимодействовать между собой, а в конце затронули контейнеризацию — Docker и Kubernetes.
Интересный был опыт, впереди еще 2–3 этапа, посмотрим, как пойдет.
Хотите разбор некоторых общих вопросов, не связанных напрямую с Java, которые могут спросить на любом собеседовании разработчика?
👍 - да
🤔- нет
На прошлой неделе написала HR из «Авито» с предложением пройти собеседование на Golang-разработчика.
Я ответил, что этот язык почти не знаю, а мой стек — Java/Kotlin.
На это мне сказали, что им не важно, на каком языке я пишу, главное — общие знания по бэкенд-разработке и инженерное мышление.
От собеседования я отказаться не смог, как минимум потому, что очень интересно, какие вопросы зададут на интервью, если стеки кандидата и вакансии не совпадают.
Вчера состоялся первый этап собеседования, сегодня HR написала, что я его успешно прошел и можно планировать следующий.
На первом этапе пообщались про работу сетей, какие есть протоколы, в каких случаях лучше применять TCP, а в каких UDP, зачем нужен HTTPS, какие бывают виды HTTP и из чего состоят запросы.
Поговорили про общие подходы к разработке, зачем нужен таймаут на выполнение запроса сервисом и как определить, какой он должен быть.
Также обсудили, как сервисы могут взаимодействовать между собой, а в конце затронули контейнеризацию — Docker и Kubernetes.
Интересный был опыт, впереди еще 2–3 этапа, посмотрим, как пойдет.
Хотите разбор некоторых общих вопросов, не связанных напрямую с Java, которые могут спросить на любом собеседовании разработчика?
👍 - да
🤔- нет
👍11🤔1
Методы HTTP запросов
#собесы
🖥 Тема - #сети
Какие методы HTTP запросов существуют?
Начнем с основных запросов, которых чаще всего хватит для ответа на собеседовании
GET: Запрашивает данные с сервера. Запросы с использованием этого метода должны только извлекать данные.
➿ ➿ ➿
POST: Используется для создание новых данные в сервисе.
➿ ➿ ➿
PUT: Заменяет все текущие данные данными из запроса. Обычно используется для обновления существующих данных.
PATCH: Используется для частичного обновления данных. В отличие от PUT, который заменяет все данные, PATCH изменяет только указанные поля.
➿ ➿ ➿
DELETE: Удаляет указанный ресурс.
➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿
Еще четыре метода, которые используются редко (я за все время работы не разу не сталкивался с этими запросами на практике)
Но если вы назовете их, можете выбить для себя пару плюсиков на собесе
HEAD: Запрашивает ресурс так же, как и метод GET, но без тела ответа. Используется для получения метаданных.
➿ ➿ ➿
OPTIONS: Используется для описания параметров связи с ресурсом. Например, может определить, какие методы поддерживаются сервером.
➿ ➿ ➿
CONNECT: Устанавливает туннель к серверу, определённому ресурсом.
➿ ➿ ➿
TRACE: Выполняет тестовый запрос для получения обратной связи маршрута, пройденного запросом.
#собесы
Какие методы HTTP запросов существуют?
Начнем с основных запросов, которых чаще всего хватит для ответа на собеседовании
GET: Запрашивает данные с сервера. Запросы с использованием этого метода должны только извлекать данные.
Примеры: Получение поста, получение комментариев к посту, получение количества лайков.
POST: Используется для создание новых данные в сервисе.
Примеры: Написание нового комментария, регистрация пользорвателя и т.д
PUT: Заменяет все текущие данные данными из запроса. Обычно используется для обновления существующих данных.
PATCH: Используется для частичного обновления данных. В отличие от PUT, который заменяет все данные, PATCH изменяет только указанные поля.
Примеры: Редактирование поста, редактирование комментария, обновление информации профиля.
DELETE: Удаляет указанный ресурс.
Примеры: Удаление поста, удаление комментария.
Еще четыре метода, которые используются редко (я за все время работы не разу не сталкивался с этими запросами на практике)
Но если вы назовете их, можете выбить для себя пару плюсиков на собесе
HEAD: Запрашивает ресурс так же, как и метод GET, но без тела ответа. Используется для получения метаданных.
OPTIONS: Используется для описания параметров связи с ресурсом. Например, может определить, какие методы поддерживаются сервером.
CONNECT: Устанавливает туннель к серверу, определённому ресурсом.
TRACE: Выполняет тестовый запрос для получения обратной связи маршрута, пройденного запросом.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
Хочу поделиться интересным вопросом, на который я сам не сразу смог ответить правильно.
Что выведет этот код?
int a = 0;
int b = 0;
if (a++ == 0 || b++ == 0) {
System.out.println("Zero");
}
System.out.println(a);
System.out.println(b);
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет этот код?
Anonymous Quiz
24%
Zero 0 0
0%
Zero 0 1
18%
Zero 1 0
35%
Zero 1 1
15%
0 0
0%
0 1
0%
1 0
9%
1 1
Иерархия коллекций
На собеседованиях часто спрашивают о коллекциях. Обычно начинают с вопроса о том, как выглядит иерархия классов. Вот достаточно полное описание:
➡️ В Java Collection Framework на вершине иерархии находятся два интерфейса:
➡️
➡️ Интерфейс
➡️ Реализации интерфейса
➡️ Реализации интерфейса
➡️ Интерфейс
➡️ Интерфейс
На собеседованиях часто спрашивают о коллекциях. Обычно начинают с вопроса о том, как выглядит иерархия классов. Вот достаточно полное описание:
Collection и Map. Они разделяют коллекции на простые последовательные наборы элементов и наборы пар «ключ — значение» (словари).Collection наследуется от интерфейса Iterable. Он представляет собой набор однородных элементов, которые могут повторяться определённое количество раз.Collection определяет основные методы работы с простыми наборами элементов, которые будут общими для всех реализаций этого интерфейса. Например add(), remove() и size().Map включают HashMap, LinkedHashMap и TreeMap. Есть ещё WeakHashMap, но для понимания этой реализации нужно разбираться с типами ссылок в Java.List включают Vector, Stack, ArrayList и LinkedList.Set — это абстракция над математическим понятием множества. Главная особенность множества — отсутствие дубликатов. Его реализации: HashSet, LinkedHashSet и TreeSet.Queue описывает коллекции с предопределённым способом вставки и извлечения элементов — очереди FIFO. Его реализует, например, LinkedList.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
ТОП-10 вопросов по Java | Разбор самых популярных вопросы с собеседований по Java Core
Персональный менторинг по Java - https://dsvdev.com
Телеграм канал с полезными материалами по Java - https://news.1rj.ru/str/dsvdev
Больше об иерархии коллекций - https://news.1rj.ru/str/dsvdev/60
Таймкоды:
00:00 Начало
00:10 Откуда вопросы?
00:23 Расскажите про класс String?…
Телеграм канал с полезными материалами по Java - https://news.1rj.ru/str/dsvdev
Больше об иерархии коллекций - https://news.1rj.ru/str/dsvdev/60
Таймкоды:
00:00 Начало
00:10 Откуда вопросы?
00:23 Расскажите про класс String?…
🔥1
Кого ты, блядь, выберешь? Java или Go? Go или Java?
Недавно писал о том, как меня позвали проходить собесы на позицию Go разработчика в Авито.
Из запланированных 5 этапов уже пройдено 3
✔️ Скоринг - пол часа общих вопросов, чтобы отсеять тех кто точно совсем не шарит, подробно писал здесь
✔️ Алгоритмическая часть - такие я провожу сам в Т-Банке, было непривычно оказаться с другой стороны. По ощущениям в авито проще, надо решить две задачи а не три, и код не обязательно должен запускаться, главное описать верный алгоритм. В итоге решил две задачки, первая по уровню сложности примерно как easy с литкода, вторая сначала тоже казалась не очень сложной, пока интервьюер не сказал, что решать ее надо без сортировки. Додумался до оптимального решения только после небольшой подсказки интервьюера.
✔️ Секция по языку - На удивление была отдельная секция именно по Java, кажется хотели просто проверить насколько хорошо кандидат владеет тем инструментом которым пользуется в данные момент, понятное дело что для Go разработки знание Java не нужно. Поговорили про особенности реализации стримов, разницу между анонимными классами и лямбда выражениями, также была практическая задача на то, чтобы реализовать свою структуру данных алгоритмически эффективно.
Что еще осталось:
⏰ System design - нормально проходил его только один раз, и на тот момент прошел не очень, секция запланирована на вторник, сейчас активно перечитываю две книги по проектированнию распределенных систем которые у меня есть, очень хочется пройти хорошо. По результатам этой секции будет решаться итоговый грейд между Middle+ и Senior
⏰ Итоговая встреча с командой - на этом этапе обсуждаются уже задачи команды, задачи кандидата в команде в случае выхода, взаимная мотивация. Происходит знакомство с потенциальным тимлидом.
Про что из прошедших этапов рассказать подробнее?
👾 - алгоритмы
✍️ - секция по языку
Недавно писал о том, как меня позвали проходить собесы на позицию Go разработчика в Авито.
Из запланированных 5 этапов уже пройдено 3
Что еще осталось:
Про что из прошедших этапов рассказать подробнее?
👾 - алгоритмы
✍️ - секция по языку
Please open Telegram to view this post
VIEW IN TELEGRAM
✍4👾4