Твоя язык программирования не важен!
На прошлой неделе написала 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
Откуда у тебя все эти вопросы?
Чтобы эффективнее готовить учеников к собеседованиям, нужно иметь на руках список актуальных вопросов, которые там задают
Поэтому я периодически хожу на разные интервью
На скрине итоги одного из них - собес был на проект газпромбанка, состоял из одного часового этапа
Забавно сравнивать такой подход и подход Яндекс/Т-банк/Авито и прочих российских FAANG компаний где нужно пройти 3-5 этапов перед получением оффера
Чтобы эффективнее готовить учеников к собеседованиям, нужно иметь на руках список актуальных вопросов, которые там задают
Поэтому я периодически хожу на разные интервью
На скрине итоги одного из них - собес был на проект газпромбанка, состоял из одного часового этапа
Забавно сравнивать такой подход и подход Яндекс/Т-банк/Авито и прочих российских FAANG компаний где нужно пройти 3-5 этапов перед получением оффера
🔥3❤1
Если задавать слишком много вопросов, тебя уволят
Многие начинающие программисты боятся задавать вопросы своей команде. Они думают:
Но это не так.
На самом деле, риск быть уволенным выше у тех, кто не задаёт вопросы. Ведь быстро разобраться во всех особенностях проекта, используемых технологиях и подходах самостоятельно практически невозможно. А без этого ты вряд ли сможешь начать выполнять задачи.
В новом видео рассказываю, что делать, чтобы успешно пройти испытательный срок и не потерять работу.
Многие начинающие программисты боятся задавать вопросы своей команде. Они думают:
Если я чего-то не знают, то я плохой разработчик и меня точно уволят.
Но это не так.
На самом деле, риск быть уволенным выше у тех, кто не задаёт вопросы. Ведь быстро разобраться во всех особенностях проекта, используемых технологиях и подходах самостоятельно практически невозможно. А без этого ты вряд ли сможешь начать выполнять задачи.
В новом видео рассказываю, что делать, чтобы успешно пройти испытательный срок и не потерять работу.
YouTube
ТИМЛИД ТЕБЯ УВОЛИТ | Как программисту не вылететь с работы в первые три месяца
Персональный менторинг по Java - https://dsvdev.com
Телеграм канал с полезными материалами по Java - https://news.1rj.ru/str/dsvdev
Таймкоды:
00:00 Начало
00:07 Мой опыт
00:24 Soft скилы
00:45 Зачем нужны 1to1
1:11 Как правильно задавать вопросы
1:54 Hard скилы
2:04…
Телеграм канал с полезными материалами по Java - https://news.1rj.ru/str/dsvdev
Таймкоды:
00:00 Начало
00:07 Мой опыт
00:24 Soft скилы
00:45 Зачем нужны 1to1
1:11 Как правильно задавать вопросы
1:54 Hard скилы
2:04…
🔥3
...и хотя он отлично работает, <...> другие объявляют его неработающим. Ситуация превращается в какой-то кошмар: <...> насильно тащат "на кладбище", а он отбивается и кричит "Я жив!". Но, поскольку никто его криков не слышит, похоронная процессия неуклонно продолжает движение
© Мартин Клеппман
Похоже на какой-то триллер, но нет.
Это цитата из книги про разработку высоконагруженных распределенных систем, которую я сейчас читаю.
Это описание того,
Спокойной ночи
😱3👍1🤯1
Из этой тысячи некоторые подписались и сюда, так что добро пожаловать)
Хочу спросить здесь - какое видео интересно было бы посмотреть дальше?
Опрос ниже
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Конечно да!
Я могу привести аргументы, почему это так, но, не буду.
Вместо этого поделюсь скрином переписки с HR компании, где мне изначально предложили зарплату около 360 000 рублей на руки.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Личный бренд, mutherfucker
Сейчас на одном из собеседований интервьюер сказал, что не будет спрашивать меня стандартные вопросы про Java, потому что видел на ютубе мое видео с разбором этих вопросов.
После чего мы приятно пообщались про процессы разработки и разные инструменты, скпинув стандартную скучную часть по Java Core
А само видео, если кто-то вдруг пропустил, можно найти здесь - ТОП-10 вопросов по Java
Сейчас на одном из собеседований интервьюер сказал, что не будет спрашивать меня стандартные вопросы про Java, потому что видел на ютубе мое видео с разбором этих вопросов.
После чего мы приятно пообщались про процессы разработки и разные инструменты, скпинув стандартную скучную часть по Java Core
А само видео, если кто-то вдруг пропустил, можно найти здесь - ТОП-10 вопросов по Java
🔥4
Попался на глаза твит про джуна, который в первый рабочий день гуглили слова, которые услышал и не понял. В связи с чем опрос: понимаете ли вы эту фразу?
После того как раскатишь фичу на прод, переключи фича тогл. Кстати, я заасайнил на тебя таску из бэклога, поресеч какие ручки нам нужны и заспекай их реализацию
Понял фразу?
Anonymous Poll
31%
59%
10%
Работа с гео-данными через MongoDB / Делаем свой Tinder 🌐 (1/2)
Уже второй раз в своей бэкендерской жизни приходится работать с гео-данным (координатами) каких-то точек. Раньше это были точки оплаты, по сути физические терминалы, теперь это ПВЗ, в которые может прийти посылка.
Способы работы тоже разные, в Т-Банке это был Clickhouse, а теперь MongoDB, про которую и хочу рассказать в этом посте.
➡️ Общая формулировка задачи
1. В базе хранятся координаты каких-то точек
2. Найти все точки, которые находятся не расстоянии не больше чем N метров от заданной.
Оба раза бизнес-задача сводилась к такой формулировке, здесь для примера импортозаместим тиндер, в котором пользователь хочет найти людей, находящихся не дальше 1 км от него.
А чтобы как-то разнообразить контент, писать будем на Go, но на Java концепция примерно та же)
Представьте, что пользователь хочет найти людей, находящихся не дальше 1 км от него, чтобы начать общение.
1️⃣ Создадим класс/структуру User
2️⃣ Напишем функцию для генерации случайных пользователей
Мы генерируем случайных пользователей с координатами, чтобы симулировать базу данных. Все точки находятся в пределах заданного диапазона (например, в одном городе).
3️⃣ Запускаем MongoDB в Docker
Эта команда запускает MongoDB-сервер. Убедитесь, что он работает, например, через
4️⃣ Пишем основную логику
И запускаем👣
5⃣ Смотрим что получилось
MongoDB Compass умеет красиво отрисовывать точки на карте, вот они все слева направо
Уже второй раз в своей бэкендерской жизни приходится работать с гео-данным (координатами) каких-то точек. Раньше это были точки оплаты, по сути физические терминалы, теперь это ПВЗ, в которые может прийти посылка.
Способы работы тоже разные, в Т-Банке это был Clickhouse, а теперь MongoDB, про которую и хочу рассказать в этом посте.
1. В базе хранятся координаты каких-то точек
2. Найти все точки, которые находятся не расстоянии не больше чем N метров от заданной.
Оба раза бизнес-задача сводилась к такой формулировке, здесь для примера импортозаместим тиндер, в котором пользователь хочет найти людей, находящихся не дальше 1 км от него.
А чтобы как-то разнообразить контент, писать будем на Go, но на Java концепция примерно та же)
Представьте, что пользователь хочет найти людей, находящихся не дальше 1 км от него, чтобы начать общение.
type Location struct {
Type string `bson:"type"`
Coordinates [2]float64 `bson:"coordinates"`
}
type User struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
Name string `bson:"name"`
Location Location `bson:"location"`
}
primitive.ObjectID - тип данных, отображающий ID в MongoDBbson:"_id,omitempty" - тег, для сохранения структуры в виде bson, по сути определяет маппинг поля структуры на поле в документе MongoDB.omitempty - опция, которая позволяет пропустить поле, если оно пустое. Например, ID будет автоматически сгенерирован MongoDB при вставкеLocation.Type - MongoDB ожидает определенный формат данных для работы с гео-запросами. Тип 'Point' обязателен для хранения точки на местности."func generateUser() *User {
lon := minLon + rand.Float64()*(maxLon-minLon)
lat := minLat + rand.Float64()*(maxLat-minLat)
return &User{
Name: randomStr(),
Location: Location{
Type: "Point",
Coordinates: [2]float64{lon, lat},
},
}
}randomStr() - функция для генерации случайной строки, а минимальные и максимальные значения координат - константы, которые я задал, чтобы не было большого разброса, предположим что все пользователи находятся в одном городе.Мы генерируем случайных пользователей с координатами, чтобы симулировать базу данных. Все точки находятся в пределах заданного диапазона (например, в одном городе).
Эта команда запускает MongoDB-сервер. Убедитесь, что он работает, например, через
docker ps или подключившись к mongodb://localhost:27017 через MongoDB Compass.docker run --name mongodb -p 27017:27017 -d mongodb/mongodb-community-server:latest
func main() {
// Подключаемся к БД
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
client, _ := mongo.Connect(context.Background(), clientOptions)
// Задаем поведение при завершении программы
defer client.Disconnect(context.Background())
//Сколько пользователей будем создавать
count := 1000
// Определяем название БД и коллекции
db := client.Database("Test")
collection := db.Collection("TinderUsers")
// Создаем 1000 пользователей
var users []interface{}
for i := 0; i < count; i++ {
users = append(users, *generateUser())
}
// Сохраняем их в БД
collection.InsertMany(context.Background(), users)
}И запускаем
MongoDB Compass умеет красиво отрисовывать точки на карте, вот они все слева направо
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3