Gh0st dev | Всякое про IT – Telegram
Gh0st dev | Всякое про IT
97 subscribers
53 photos
22 links
Тут полезные материалы, советы и мемы про айтишечку и всякое около нее
___
by @dsvtlg
Download Telegram
Итоги того самого собеседования подъехали кстати
🔥7
🔥 Их боялись даже синьоры...

Алгоритмические задачи — это задачи, которые часто предлагают решить на собеседовании в крупных компаниях. Иногда для этого выделяют отдельный этап интервью.

Я тоже проводил такие собеседования с кандидатами, и заметил, что даже опытные программисты, претендующие на должности 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: 8



➡️Попробовать решить можно - здесь

⚠️Усложнение:
если решил задачу с помощью сортировки массива - решить без сортировки массива
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Java понятный язык - говорили они
В программировании все логично - утверждали они
🤯1😱1
На выходных немного исчез, а сейчас вовзращаюсь с двумя фактами и одним опросом

🧳 Факт 1: В эти выходные уже второй раз сходил на занятие по яхтенному спорту, теперь знаю много новых слов.
Если вдруг вам зачем то нужны малоизвестные слова, вот несколько - стаксель, галс, оверштаг.

Фотка прилагается

💻 Факт 2: Сделал нормальный сайт вместо notion, вывод - конструкторы сайтов круто

Сам сайт вот - dsvdev.com
Заходите, смотрите, записывайтесь)

Ну и опрос
🔽🔽🔽
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
В универе говорили, что настоящий программист может писать код на листочке

Штош
3
🤔 Рубрика "Неочевидная Java"

🖼️ Тема - Java Core

Сегодня простой и достаточно популярный вопрос на собеседованиях:

Что выведет этот код?
Please open Telegram to view this post
VIEW IN TELEGRAM
Отвечай в опросе
🔽🔽🔽
Please open Telegram to view this post
VIEW IN TELEGRAM
Объяснение предыдущего вопроса

Для начала стоит отметить, что оператор == корректно работает только с примитивными типами данных. Например, такой код выведет 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 vs Kotlin 👩‍💻

Последнее время в описании стека многих вакансий на Java можно встретить Kotlin.
Это относительно новый язык, который появился только в 2011 году, а используется чаще всего для разработки под android.
Иногда опыт работы с ним пишут в пожеланиях к кандидату или даже в требованиях вакансии.

По моим ощущениям, Kotlin упоминается примерно в 20-25% всех Java вакансий.


💻 Причём тут Java?

Kotlin — язык, который, как и Java, компилируется в bytecode JVM, а еще он полностью совместим с Java. Это значит, что внутри одного проекта можно совмещать код на Java и на Kotlin.

Поэтому некоторые компании и команды начинают переносить на него часть своих бэкенд-сервисов.

Например у меня в команде новые проекты пишут целиком на Kotlin, а в уже существующих на нем реализуют Unit и интергационные тесты.

В эту пятницу на внутренней IT-конференции в Тинькофф-Банке рассказал, чем удобен Kotlin, и показал на примере, как можно часть классов в Java-проекте перенести на Kotlin за пару минут.

Запись выложил на YouTube-канал — найти можно по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Твоя язык программирования не важен!

На прошлой неделе написала 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: Выполняет тестовый запрос для получения обратной связи маршрута, пройденного запросом.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21
🖥 Пятничная #неочевидная_java

Хочу поделиться интересным вопросом, на который я сам не сразу смог ответить правильно.

Что выведет этот код?


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
Иерархия коллекций

На собеседованиях часто спрашивают о коллекциях. Обычно начинают с вопроса о том, как выглядит иерархия классов. Вот достаточно полное описание:

➡️В 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
Кого ты, блядь, выберешь? Java или Go? Go или Java?

Недавно писал о том, как меня позвали проходить собесы на позицию Go разработчика в Авито.

Из запланированных 5 этапов уже пройдено 3

✔️ Скоринг - пол часа общих вопросов, чтобы отсеять тех кто точно совсем не шарит, подробно писал здесь

✔️ Алгоритмическая часть - такие я провожу сам в Т-Банке, было непривычно оказаться с другой стороны. По ощущениям в авито проще, надо решить две задачи а не три, и код не обязательно должен запускаться, главное описать верный алгоритм. В итоге решил две задачки, первая по уровню сложности примерно как easy с литкода, вторая сначала тоже казалась не очень сложной, пока интервьюер не сказал, что решать ее надо без сортировки. Додумался до оптимального решения только после небольшой подсказки интервьюера.

✔️ Секция по языку - На удивление была отдельная секция именно по Java, кажется хотели просто проверить насколько хорошо кандидат владеет тем инструментом которым пользуется в данные момент, понятное дело что для Go разработки знание Java не нужно. Поговорили про особенности реализации стримов, разницу между анонимными классами и лямбда выражениями, также была практическая задача на то, чтобы реализовать свою структуру данных алгоритмически эффективно.

Что еще осталось:

System design - нормально проходил его только один раз, и на тот момент прошел не очень, секция запланирована на вторник, сейчас активно перечитываю две книги по проектированнию распределенных систем которые у меня есть, очень хочется пройти хорошо. По результатам этой секции будет решаться итоговый грейд между Middle+ и Senior

Итоговая встреча с командой - на этом этапе обсуждаются уже задачи команды, задачи кандидата в команде в случае выхода, взаимная мотивация. Происходит знакомство с потенциальным тимлидом.

Про что из прошедших этапов рассказать подробнее?


👾 - алгоритмы
✍️ - секция по языку
Please open Telegram to view this post
VIEW IN TELEGRAM
4👾4