Road to FAANG @fakng_eng Channel on Telegram

Road to FAANG

@fakng_eng


Java Буткемп — https://clck.ru/39NSHf
Курс Java Magics - https://clck.ru/38dLDY
Задать вопросы по обучению - @bolovina

YouTube — https://clck.ru/3B5SaA

Road to FAANG (Russian)

Канал "Road to FAANG" (@fakng_eng) - это идеальное место для тех, кто мечтает о работе в крупнейших технологических компаниях мира. Здесь вы найдете обширные знания и навыки, необходимые для того, чтобы пройти успешный карьерный путь в FAANG (Facebook, Apple, Amazon, Netflix, Google).

В канале представлены два курса: Java Буткемп и Java Magics, которые помогут вам углубить свое понимание языка программирования Java и подготовиться к сложным техническим задачам. Кроме того, вы можете задавать вопросы по обучению по контакту @bolovina.

Не упустите возможность присоединиться к сообществу тех, кто стремится к карьере в FAANG. Подпишитесь на канал "Road to FAANG" и начните свой путь к успешной карьере уже сегодня! YouTube-канал также доступен для дополнительной поддержки и обучения.

Road to FAANG

07 Jan, 15:08


Не Проспи Свой Шанс: IT Компании Начинают Найм

Многие еще чилят на диване, обнимают оливье и думают, что новогодние каникулы можно продлить? Но читай внимательно: IT-компании уже заряжают пушки, чтобы нанять свежую кровь. Как только закончится праздничное затишье, они начнут масштабный поиск новых ребят, которые пишут хороший код. И это случится буквально через неделю, так что самое время встряхнуться!

Новые Бюджеты - Новые Шансы

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

Серьезно, у менеджеров сейчас горят глаза: нужно быстро расширять штат. А раз так, то они готовы активнее нанимать джунов, т.к. программистов других уровней значительно меньше, и найти их сильно сложнее. А рабочие руки нужны сейчас! Не упусти возможность, потому что это длится несколько месяцев, пока формируют новую команду под новые проекты.

Почему Джуны Важны

Компании любят брать начинающих программистов, потому что это драйвовая энергия. Мол, “Я хочу научиться всему на свете, готов фигачить сверхурочно, лишь бы увидеть свой код на проде”. И, конечно, это экономит ресурсы работодателя. Джуны дешевле, но при этом дают кучу пользы, если их грамотно направлять.

Ну и вдруг ты думаешь: “А меня-то куда возьмут? Я же почти без опыта”. Вот в этом вся фишка. Зимой и в начале весны многие менеджеры и технические лиды думают: “Возьмем пару стажеров, подтянем их навыки, и к концу года у нас будет сильная команда”. Так что у тебя есть все шансы влиться в топовую контору, если не будешь отсиживаться в режиме “постновогоднего расслабона”.

Цели И Задачи Компаний

Так почему прям сейчас? Во-первых, новый год — новые задачи. Босс говорит: “Нужен свежий фреймворк для обработки больших данных, иначе конкуренты нас обгонят”. Во-вторых, бюджеты уже официально подтверждены, и все хотят быстро найти людей, чтобы не терять время. Программистов на рынке НЕ ХВАТАЕТ — надо брать как можно быстрее.

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

Действовать Нужно Сейчас

Все это я говорю на базе конкретных данных: в начале 2024 года у меня как раз выпустились куча ребят с Java Буткемпа. Кончились праздники - огромное их число тут же получили офферы в Сбер, Альфу и Яндекс. Был прям разрыв!

Так что не жди дальнейшего затишья. Набрасывай пет-проекты, готовь GitHub, подтягивай алгоритмы и бегом на HH. Компании со свежими бюджетами ищут тебя — честно. Вопрос в том, что там за проект, какие технологии, что умеешь писать. А математика, диплом - на это всем пофиг уже давно.

Ставь лайк, если тоже чувствуешь прилив сил после праздников, а уже 9 января в 19:00 по МСК ЗДЕСЬ узнаешь, какие проекты точно зацепят работодателей, какие фичи внедрить в свое приложение и как подготовить своё резюме, чтобы его точно заметил рекрутер!

Road to FAANG

05 Jan, 16:11


Новогодний Отпуск Программиста в Европе!

Я приехал в Вену, Австрия! Наслаждаюсь новогодними огнями и меланж (местный кофе), а впереди у меня куча новых впечатлений. Можно подумать: “Камон, Влад, ты только недавно куда-то ездил!”. Все так, но это вообще не проблема - сейчас как раз поговорим, сколько это все стоит, когда вы работаете программистом в Европе.

Зарплаты Разработчиков в FAANG

FAANG - это акроним из названий 5 топ IT-компаний, таких как Netflix или Google. У разработчика в компании такого уровня в Европе зарплата доходит до 10 000 евро в месяц (после налогов)! И то на мидла. Состоит она из базовой зарплаты и акций компании, которые частями выдают ежемесячно. Можно глянуть на levels.fyi - оттуда я беру цифры.

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

Квартира на AirBnB

Для примера: я буквально на днях забронировал себе студию недалеко от центра Вены. Это обошлось примерно в 1000 евро за 10 дней. Цена может показаться серьезной, но здесь есть удобный стол, просторная кухня и главное — атмосфера старого города буквально за окном.

Билеты До Вены

Самолет из Амстердама в новогодние праздники вылился в сумму примерно 100 евро туда-обратно. Времени на перелет ушло всего полтора часа, я даже не успел дослушать подкаст в пути (про стартапы).

Трэскать, трэскать, трэскать!

В Вене можно найти симпатишный ресторанчик буквально на каждом шагу. Типичный завтрак стоит около 25 евро, ужин — 35 (хорошего уровня). Честно говоря, мне австрийская/немецкая кухни не очень интересны - скучные они, но есть же куча, например, итальянских мест!

Разумеется, все очень вкусно, а вокруг новогодний дух - в каждом ресторане куча елочек, все украшено, мигает. Кроме того, раз уж отпуск, то можно никуда не спешить и посидеть за ноутом - пописать этот пост, например. В обычное время у меня такая возможность есть редко - всегда миллион задач.

Музеи и Достопримечательности

Вена славится своими музеями. Билет на экскурсию стоит 10-20 евро. Я побывал пока в паре мест. А сегодня вот иду в Альбертину. Картины, исторические залы, интерактивные инсталляции — все это стоит в общей сложности около сотни евро, если взять музейный пропуск на весь отпуск. С ним можно куда угодно хоть каждый день!

А доходя до громадин вроде дворца Шенбрунн, вспоминаешь, что ты не просто турист на один раз, а тот, кто может возвращаться сюда, когда захочет (буквально). Так меняется чувство перспективы.

Опера, где нифига непонятно

Да, звучит солидно, но цена на венскую оперу колеблется от 60 до 150 евро. Я взял средний вариант за 100 евро, чтобы ощутить опыт. Поскольку я вообще из деревки, то это мой первый в жизни (!) поход в театр. Очень захватывающе: архитектура, акустика, атмосфера — все это открывает новый культурный горизонт.

На самом деле там, разумеется, нифига непонятно, и я сходил, чтобы, так сказать, глянуть, что есть что. Не уверен, что буду туда возвращаться в ближайшее время, хех

Считаем Общую Сумму

Если суммировать: 1000 евро за жилье, 100 за самолет, около 100 евро в день на еду (общие 1000 евро за 10 дней), плюс 100 на музеи и 100 на оперу — набирается около 2500 евро. Плюс еще такси, но у меня оно бесплатное - компания дает. Ну и если сравнить это с типичной зарплатой разраба в сильной компании, то еще и подарки новогодние всем можно купить еще раз!

Я все еще в пути и расту как программист. Но уже сегодня вполне реально совмещать интерес к технологиям с насыщенной жизнью и путешествиями. Если кажется, что все это фантастика, поверьте: я тоже никогда не думал, что такая жизнь возможна для человека вроде меня. У меня не было к ней никаких предпосылок. Однако ежедневный труд и стремление вперед открывают любые двери.

Ставь лайк, если тоже круто проводишь каникула, и напиши в комментах, чем занимаешься, получается ли отдохнуть - ведь это очень важно! Все же впереди захватывающий год, где будет много дела! И там у тебя точно все получится!

Road to FAANG

27 Dec, 08:51


Готовим для тебя множество бесплатных полезностей, ты нам очень поможешь, если ответишь на опрос ниже⬇️

Road to FAANG

14 Dec, 13:33


Раньше Notion, Но Теперь… MOTION! 😑

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

До сих пор Notion был основным местом, где я следил за своими задачами. Но мне не хватало от него поддержки. Пример: я записал туда задачу, поставил дату выполнения, а потом просто забил на нее болт и не выполнил. Да, порой бывает впадлу что-то делать…

Но задачу надо выполнить, хоть тресни. А значит мне надо зайти в Notion, найти эту задачу, обновить ей дату выполнения, подумать, куда ее впихнуть в новом расписании и прочие тупорылые совершенно действия. Я как будто собственный секретарь - это же ужас.

И это только одна задача! Ведь расписание постоянно едет, блоки перемещаются - жизнь вносит свои коррективы. И если моя система управления делами заставляет меня самого ее поддерживать, то в самом ли деле она мне помогает, или же теперь я у нее на службе? Особенно это заметно, когда задач у вас просто дофига.

Но что же делать?!

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

И вот удача: такое УЖЕ есть, елки-палки. Приложение называется Motion, и это просто пушка, которая сделала мое управление ежедневными задачами в миллион раз проще. Это приложение-календарь, которое использует ИИ для того, чтобы организовывать ваши задачи… Самостоятельно!

Серьезно? Как это работает?

Выглядит, как обычный календарь. Жмем кнопку, добавляем задачку с названием. Что угодно, например, “Закодить важную фичу”. Ставим ей приоритет и дату, когда она железно должна быть сделана - дедлайн. И все, это нужно сделать только один раз! Дальше уже Motion сам найдет, куда ее впихнуть в ближайшее время в вашем расписании.

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

В результате, я просто добавляю задачи, а потом смотрю на свой календарь. Машина сама расставляет все согласно приоритетам и помогает организовать мое время. А если в середину нужно добавить что-то срочное - вообще не вопрос. Вкидываем задачу с высоким приоритетом, и Motion тут же реорганизует ВСЕ остальные задачи так, чтобы эта срочная была закрыта здесь и сейчас.

Я все еще использую Notion для текстов, базы знаний и прочего. Но для задач - Motion просто песня. Настоятельно рекомендую, прям выручает.

Еще больше о системах продуктивности, которые помогают мне учиться максимально быстро я буду говорить в прямом эфире уже 16 декабря на моем бесплатном интенсиве по получению работы Java Dev в 2025. А 17 и 18 декабря расскажу о том, как сделать крутой проект и пройти наконец собесы. Будет очень интересно, покажу все, что делал буквально сам, когда учился прогать, и как я это делал!

Ставьте лайк, если полезно про Motion! А какие инструменты с ИИ используете вы на регулярной основе? Пишите в комменты - возможно, я у вас подхвачу их!

Road to FAANG

13 Dec, 12:26


Планируй свой лучший год: как совместить карьеру в IT и насыщенную жизнь?

Я провел захватывающий 2024! Работал над крутыми проектами, разогнал стартап, помог тысячам людей изменить их жизнь, а еще очень много путешествовал - Италия, Испания, Франция, Германия, Тайланд - было невероятно!

Пора и тебе оставить навязчивые мысли, что всё это недоступно в прошлом! Ключевое, что необходимо — иметь четкий план действий, который сможет сделать двадцать пятый лучшим годом в твоей жизни!

Именно им я сегодня и делюсь в новом видео! Узнаешь, как словить баланс между карьерой, семьей, здоровьем, отдыхом и деньгами, конечно же, (да-да, они сильно влияют на всё остальное)!

Приятного просмотра!

📷 СМОТРЕТЬ ВИДЕО

Road to FAANG

11 Dec, 12:26


Работай Удаленно, Путешествуй Где Угодно

Пару часов назад я сидел в кафе в центре Мадрида, смотрел на старинные улочки, пробовал чуррос и кофе, рядом мой ноут, стабильный интернет и все условия для полной свободы.

Сегодня обычный будний день, я решаю рабочие задачи, но не из душного опенспейса, а из уютного уголка Европы. Да, так было не всегда - все начиналось с тесной комнатушки, где я ботал разработку днями и ночами, но приятно видеть, что все усилия однажды приводят к результату.

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

Свобода Выбора Места

Недавно утром я закрыл очередную задачу и вышел из дома в Амстердаме, чтобы неспешно дойти до кофейни. На следующий день - уже пил кофе в Мадриде. Нет строгой привязки к конкретному городу или даже стране. Это значит, что твое рабочее место - планета, а не кубик в офисе.

Такое перемещение буквально делает мою жизнь интереснее. Я экономлю кучу времени и сил, которые раньше уходили на дорогу в офис. Теперь это время уходит на прогулки, дегустацию местной кухни, получение впечатлений и расширение кругозора. С каждым новым местом я становлюсь счастливее.

Гибкий График Дня

На днях я проснулся чуть раньше обычного, чтобы сделать важный созвон, а потом пошел исследовать местный рынок, где болтал с продавцами, трэскал фрукты и даже поснимал. Вернувшись, сел за комп и продолжил пилить фичи.

Такой гибкий график позволяет мне не зависеть от офиса. Когда я сосредоточен, я работаю. Когда мозг просит перезагрузки, я спокойно ее получаю. В итоге качество труда выше, а ощущение, что вся жизнь крутится вокруг работы, уходит. Этот баланс буквально заставляет меня чувствовать себя на своем месте.

Комфорт и Концентрация

Даже в очередном AirBnB я смог настроить свое рабочее пространство под себя: тихое место, удобное кресло, правильная высота стола. Да, в офисе тоже можно неплохо устроиться, но там шум, болтовня коллег и не всегда подходящая обстановка.

Сейчас же я выбираю себе условия сам. Это повышает концентрацию и продуктивность. Я не отвлекаюсь на лишние разговоры, не хожу на бесполезные встречи. Каждая минута становится ценнее. А это прямой путь к личному росту и удовольствию от процесса.

Максимальное Переключение Фокуса

На прошлой неделе после решения сложной задачки я просто закрыл ноут и пошел на соседнюю улицу пробовать испанскую кухню. Такой переключатель мгновенно помогает мозгу отдохнуть и набраться сил.

Если в офисе ты бы просто пошел в столовку или выпил кофе на бегу, здесь - получаешь новые эмоции, картинку, атмосферу города. В результате даже после короткого отдыха снова возвращаешься к задачам с ясной головой и свежими идеями.

Меньше Стресса Всегда

Позавчера я спокойно работал, не думая о том, что кто-то заглядывает мне через плечо или что грядет жесткая планерка. В удаленном формате все эти раздражающие факторы пропадают. Нет лишнего давления, меньше формальностей, меньше нервов.

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

Да, путь к такому образу жизни не был простым. Я помню, как ломал голову над задачами, путался в коде, боялся, что все это не для меня. Но я обычный человек, вообще не гений. Значит и ты справишься.

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

Ставь лайк, если тебе откликнулись эти преимущества, и напиши в комментах, насколько эффективно тебе удается работать из дома. Давай поделимся опытом и поддержим друг друга!

Road to FAANG

10 Dec, 12:01


Мои Цели на 2025 - Самые Большие в Жизни!

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

Цель №1 - Разработать свой проект с AI. Чтоооооо?!

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

Понятное дело, что не буду создавать свою модель - это абсурд. Использую существующие с тем, чтобы сделать крутую систему на их базе. И совершенно точно не буду учить Python. Моя экспертиза - бекенд, а под ML уже собрал команду: в обойме даже есть сотрудник научного ML отдела Amazon!

Цель №2 - Больше видео

Прошедший год был важным для меня, как для автора. Я искал рабочие сочетания, форматы, которые интересны людям. Есть ряд находок, но еще больше нужно проверять дальше.

Сейчас видео выходят каждые 2 недели. В 2025 хочется прийти к ролику в неделю еще и с ростом качества. Основная проблема здесь - это подбор команды. Но я уже делаю это не один - мне помогают реально мощные ребята. А значит где-то есть и другие…

Цель №3 - Посмотреть мир!

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

В 2024 ставил целью организовать крутой отпуск со всей семьей, и это получилось - мы сгоняли в Тайланд, провели время в великолепном месте на берегу океана! И продолжим традицию в 2025! Это была настоящая мечта - собраться с близкими и разделить с ними плоды труда, что вкладывал все это время в образование, работу, поиск возможностей.

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

И вот мой посыл!

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

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

Тебя ждет впечатляющий год. Это огромная возможность, и ее пора брать. Как ты ею распорядишься? Покажи буквально, что ты написал черным по белому на бумаге, зафиксировав свои цели? Что пообещал себе - пообещай всем!

Пиши в комменты о своих планах на 2025. Там должны быть амбиции, там должны быть вызовы. Их, ох… Там должна быть работа!

И мы ее сделаем… Точно тебе говорю!

Road to FAANG

09 Dec, 11:06


Так и не удалось стать разработчиком в 2024 году? Еще рано подводить итоги!

Ты говорил, что твоя главная цель - стать разработчиком, но тебе мешает непонимание, с чего начать, нехватка времени, идей для проекта (даже по пьяни) , и вообще опыта.

Ты до сих пор веришь в высокую конкуренцию среди джунов, а недостаток опыта считаешь причиной собственной неудачи.

А что, если есть решение всех твоих проблем, которое поможет пройти собеседование и получить оффер в короткие сроки без всяких накруток опыта?

Специально для тебя мы подготовили поистине уникальное событие, которого еще не было — мощный 3-х дневный интенсив «Пошаговый гайд к работе Java Dev в 2025» с 3-мя лекциями в прямом эфире!

Невероятная польза, практика и даже домашние задания!


📆16 декабря тебя ждет лекция «Первые шаги в IT: с чего начать, чтобы не потеряться», которая кратно сократить твой путь изучения основ Java! Ты будешь знать:

🟠какие навыки изучить в первую очередь;
🟠как разобраться в сложных темах;

И самое главное — не психануть и не бросить всё на пол пути.

📆 17 декабря продолжаем идти к твоему офферу на лекции «Как создать проект и получить реальный опыт». Здесь ты узнаешь, как:

🟠выбирать актуальные идеи для проекта;
🟠работать с инструментами разработки (Jira, Miro, Scrum);
🟠избежать ошибок, из-за которых 80% проектов оказываются провальными.

📆 18 декабря на лекции «Как пройти собеседование и получить опыт» у тебя полностью перевернется представление о том, как действительно выглядит рынок IT!

❗️Вместе с секретным гостем — HR из ТОП-компании расскажем, как:
🟠преодолеть фильтры HR без накрутки опыта;
🟠презентовать проект и свои навыки так, чтобы успешно пройти собеседования.

🎉В конце каждого вебинара тебя будет ждать эксклюзивная RoadMap на тему лекции, а также домашнее задание на закрепление полученных навыков!

⬇️Обо всем подробнее мы еще расскажем, а пока залетай в закрытый чат ивента, чтобы забрать подарок и узнать, как даже джуну создать проект, способный обеспечить для него пассивный доход!

🔗 ЗАРЕГИСТРИРОВАТЬСЯ НА ИНТЕНСИВ

Road to FAANG

08 Dec, 11:34


Работаю и путешествую одновременно!

Год подходит к концу. Получилось ли выполнить все задуманное? Одной из моих целей было путешествовать каждый сезон года в знаковые места.

И вот уже зима, и я выполняю обещание полностью! Приехал в Мадрид, где отправился на осмотр всех культурных достопримечательностей, ну и, конечно, зацепил немного футбольных…

Путешествия в каждый сезон года - звучит жестко, когда работаешь в компании. Вроде, есть ограничения по дням отпуска, а также надо появляться в офисе. Но нет!

Я прекрасно работаю полностью удаленно. Уже даже не помню, когда последний раз ходил в офис - с этим никаких вообще проблем! Что мне это дает?

Я могу вновь и вновь вот так резко собирать буквально один рюкзак, закидывать туда комп и прыгать в вертолет, чтобы оказаться в новом крутом месте! А потом AirBnB, подключение к wi-fi, кофе, и вот я снова в рабочем режиме.

Отвлекают ли такие поездки? Не слишком. За уже почти 8 лет в разработке я прекрасно умею держать фокус на задачах из любых условий. Тем более в таких местах это наоборот вдохновляет: вспоминаешь, что блин, именно эта работа, эти мои навыки приносят мне возможность быть здесь, так прекрасно проводить время, по-настоящему получать удовольствие от жизни. Не только по выходным, но когда я хочу!

И теперь просто с двойным рвением выполняешь задачи, делаешь что-то полезное. А такие поездки - это совершенно заслуженная награда, что делал работу над собой и в этом году, и все время до этого. Жить ведь нужно сегодня, а не завтра! А значит почему мы ждем отпуск, чтобы было круто? Можно прямо сейчас!

Короче, удаленка - топчик 😐

Ставьте лайки 👍 и пишите в комменты, как вам удается оставаться продуктивными на удаленке? А еще было бы интересно посмотреть на фотки ваших домашних сетапов!

Road to FAANG

06 Dec, 12:21


Как сделать простое приложение и заработать миллион?

Программисты в среднем зарабатывают по 200-300 тысяч рублей в месяц. Это действительно круто! Но что, если у тебя есть возможность увеличить эту сумму в несколько раз?

Всё, что тебе нужно — это написать простое приложение, которое решает понятную проблему, и реализовать его.

Я собрал 5 идей приложений, которые удивительно просты в реализации, но приносят своим создателям невероятные доходы.

Ты узнаешь:
✔️Как работают эти приложения и почему они так успешны.
✔️ Какие технологии помогут тебе быстро запустить своё решение.
✔️ И как, даже без глубоких знаний, создать проект, который обеспечит пассивный доход.

Ставь уведомление, залетай на премьеру, я буду в чате на протяжении всего видео и отвечу на любые вопросы!

🔗 СМОТРЕТЬ ВИДЕО

Road to FAANG

03 Dec, 15:18


Вы написали прекрасный код. Отлично! Его нужно переписать. 😈

Стоп, что? Зачем переписывать работающий код? Не трогай, пока работает, правда? Но давайте честно: работает ли он так, как нужно? Или это бомба замедленного действия, которая взорвётся при следующем апдейте? Поговорим о рефакторинге и о том, как он может изменить ваш код, чтобы работать с ним было легко и приятно.

Рефакторинг — штука суперважная, хотя многие его недооценивают. А зря, ведь он может стать ключом к долгой и счастливой жизни вашего проекта.

Так почему же это так важно?

Во-первых, проект растёт, требования меняются, и код начинает обрастать сложностями. Если не проводить «уборку», всё быстро превратится в месиво, которое сложно поддерживать и ещё сложнее развивать. Меньше багов, и вы в целом быстрее фиксите проблемы и не тратите время на попытки понять, что там вообще происходит.

Во-вторых, добавление новых фич тоже становится проще: вы точно знаете, куда их вставить, не ломая всё, что уже есть.

И бонусом — иногда рефакторинг улучшает производительность. Вы упрощаете код, и вдруг оказывается, что можно всё сделать быстрее и изящнее.

Практика рефакторинга

Рефакторинг — это штука, которую лучше сразу сделать привычкой. Например, когда закончили задачу, не торопитесь закрывать тикет. Гляньте на свой код свежим взглядом: что можно сделать понятнее, короче или логичнее? Если нашли — переделывайте, пока свежи воспоминания.

Ревью — вообще кладезь идей для улучшения. Коллеги оставляют вам комменты? Не воспринимайте их в штыки, а прислушивайтесь, там часто прячутся классные советы. А ещё полезно смотреть ревью других — в чужом коде можно найти много инсайтов для себя.

Ещё лайфхак — заводите «чёрный список» для рефакторинга. Нашли дублирующийся код, странное название переменной или кусок, который никто не понимает? Запишите это. Потом обсудите с командой, что реально стоит улучшить, а что пока оставить.

На буткемпе это вообще стандартная практика. Студенты постоянно делают друг другу ревью и рефакторят код большого общего проекта. Это не только прокачивает скиллы, но и помогает увидеть свои ошибки со стороны. Ну и, конечно, делает проект чище и красивее. 😊

Как не попасть в ловушки

Рефакторинг — это не только про улучшение кода, но и про умение вовремя остановиться и не перегнуть палку. Например, если кажется, что старый код ужасен и его хочется переписать с нуля, лучше притормозить — этот код уже работает, протестирован и пережил продакшен. Гораздо разумнее вносить изменения постепенно, небольшими шагами. Так их проще тестировать, а ошибки легче отловить.

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

Используйте возможности своей IDE

Современные IDE помогут сделать процесс быстрее и безопаснее. Например, зачем вручную менять имя переменной по всему проекту, если IDE сделает это за секунду и без ошибок? Или зачем писать новый метод вручную, если можно просто выделить нужный кусок кода и нажать пару клавиш?

Выделите время, чтобы изучить меню своей IDE и освоить горячие клавиши для рефакторинга. Это кажется мелочью, но в долгосрочной перспективе сэкономит вам кучу времени.

В библиотеке Java Junior у нас в сообществе уже лежит шпаргалка по всем горячим клавишам JetBrain IDE - тык.

Если вы нашли этот материал полезным, ставьте огоньки! 🔥 И не забудьте оставить комментарий, что ещё было бы интересно обсудить.

Road to FAANG

01 Dec, 14:30


🔥Оффер на мидла за 1,5 недели! Первая работа в IT!

Сегодня вас ждёт очень ламповое интервью с выпускником Java Буткемпа и нашим комьюнити-менеджером Андреем, который за рекордные 1,5 недели получил 3 оффера и сейчас работает мидл-разработчиком в Сбере. Андрей — живой пример того, что с правильным подходом и поддержкой можно попасть в топовую компанию, не имея за плечами стажа в 10 лет.

Он поделится реальным опытом, расскажет, как проходил собесы и что помогло, по его мнению, выделиться среди других кандидатов. И, конечно, ответит на популярный вопрос: сколько платят в Сбере?

Мы провели это интервью в максимально уютной атмосфере, так что запасайтесь снэками, чайком и погнали!

P.S. Мы уже ждём вас на премьере — залетайте, душевно поболтаем, ответим на ваши вопросы.

📷 СМОТРЕТЬ ВИДЕО

Road to FAANG

27 Nov, 13:50


Вы СИЛЬНО Ошибаетесь с Распределенными Системами

Толпы разработчиков допускают УЖАСНЫЕ ошибки, проектируя архитектуры приложений. Когда вы используете микросервисы, брокеры сообщений типа Kafka или распределяете вашу базу по нескольким серверам, можно сделать несколько ошибочных предположений. Вот то, что нам часто кажется ПРАВДОЙ, но на самом деле - ЛОЖЬ!

Ложь 1: Сеть надежна

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

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

Поэтому, отправляя данные куда-либо по сети, вы должны подумать о том, что будет, если они не долетят, как надо. Соответственно, реализовать механизм повторной отправки или использовать, допустим, RabbitMQ, чтобы реализовать паттерн store & forward.

Ложь 2: Задержки нет

Задержка - это время, которое требуется на отправку данных от одного компонента системы в другой. И когда вы добавляете в вашу архитектуру миллиард микросервисов, где они постоянно тыкают друг друга, то вспомните о том, что задержка НЕ равна 0!

Задержка может быть между юзерами и вашими сервисами, между самими сервисами, между сервисами и данными. Поэтому существует множество способов ее уменьшения: кэши, CDN, география серверов, а также банально грамотная архитектура системы.

Ложь 3: Пропускная способность бесконечна

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

Любая Kafka, любой Redis или ваш микросервис - программы, что запускаются на компах с ограниченными ресурсами. А по Интернетам можно передавать только определенный объем трафика в секунду.

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

Ложь 4: Передача данных ничего не стоит

Когда у вас маленькое приложение, то отправить данные по Интернетам ничего не стоит. Но когда у вас тысячи микросервисов и других компонентов, то счета за передачу данных по сети вдруг начинают бить по карману!

Одна из стратегий: сжимать данные, чтобы использовать меньше сетевого трафика. Например, вы можете перейти с формата JSON на более оптимизированный под передачу формат данных. В частности, использовать gRPC.

Ставьте огонечки, если было интересно!
Пишите в комменты, на какую тему хотелось бы узнать больше подробностей - все разберем простыми словами!

Road to FAANG

26 Nov, 17:56


Last-шанс стать Java-разработчиком в этом году!

Вы давно мечтаете ворваться в IT и стать Java-разработчиком. Но каждый раз кажется, что недостаточно знаний для собеседований, а от мысли, что придется подделывать CV и накручивать опыт бросает в пот.

Это неразрушимый замкнутый круг: чтобы получить опыт, нужна работа, а чтобы получить работу, нужен опыт. А каждый день упущенных возможностей только отдаляет вас от цели. Но и его можно разорвать!

🎉Представляем улучшенный и обновленный Java Буткемп 2.0! Мы сделали обучение ещё мощнее!

⬇️Давайте кратко по обновлениям:

✔️Постоянная поддержка на каждом этапе

Саппорт-ревьюер: Оперативное ревью каждой строчки вашего кода.

Саппорт чата: Быстрые ответы на ваши вопросы на каждом этапе обучения.

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

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

✔️ Улучшенная программа обучения

Обновленные задачи: Мы внедрили больше уровней подсказок, проработали условия и добавили новые задачи с разными уровнями сложности - от easy до pain.

Видеоуроки по инструментам: Вы легко освоите современные инструменты разработки благодаря пошаговым инструкциям.

Спринты-навигаторы: Новые еженедельные уроки, помогут вам ориентироваться в приоритетах, целях спринта, и мотивируют на его прохождение.

ВЕЧНЫЙ доступ, включая будущие обновления: Все материалы остаются с вами. Сможете вернуться к ним даже после выпуска или использовать новые обновления.

Java Буткемп 2.0 — это ваш путь к профессии. И все это без поддельного резюме, 100500+ лет опыта и высшего образования.

Это последний поток в 2024! И ваш last-шанс ворваться в IT ещё до конца этого года! Почему именно сейчас?

✔️ Java Буткемп 2.0 по старым ценам.
✔️ Скидка 45 000 рублей на все тарифы в честь Чёрной пятницы.
✔️ Начинаете учёбу в декабре, а уже в апреле получаете первый оффер.

❗️Представьте: пока другие только начинают разбираться в IT, вы уже входите в офис с мыслью, что смогли это сделать. Мы верим в ваш успех, как поверили более 550 студентов, которые уже прошли путь вместе с нами.

Получите пошаговый гайд в подарок! С помощью наглядной roadmap, узнайте, как стать востребованным разработчиком уже за 4 месяца!

⬇️Скачивайте гайд ниже и записывайтесь на Java Буткемп, пока действуют скидки!

🔗 ЗАПИСАТЬСЯ ПО СТАРЫМ ЦЕНАМ

Road to FAANG

26 Nov, 17:56


✔️ Забрать гайд "Как стать востребованным разработчиком в 2025 году"

Road to FAANG

26 Nov, 11:11


Нужен ли диплом программисту?

Классический вопрос, который задается в сети из года в год, от поколения к поколению. Обычно спрашивают, нужен ли диплом программисту в принципе, но кажется, что на самом высоком уровне он должен быть ну уж точно важен для разработчика.

Ответ простой: не нужен. Ни просто, чтобы стать программистом, ни чтобы работать программистом в Google или где-либо еще. Разумеется, если вы получите диплом неплохого универа по Computer Science, то хуже вам от этого не будет. Я вообще не советую никому бросать универ просто потому, что в IT не нужен диплом.

Я скорее хочу сказать, что если жизнь так сложилась, что у вас его нет или есть не тот, который вам кажется полезным, или же вы боитесь, что без него не сможете справиться и никогда не окажетесь в лучших компаниях в мире, то все эти страхи беспочвенны. Вот несколько тому причин:

🟠 Индустрия меняется быстрее универов
Каждый год мы наблюдаем за поразительными изменениями в IT, новыми трендами, даже целыми профессиями. То облака, то DevOps, то AI, то новый JS-фреймворк (как обычно).

Программа же какого-нибудь универа меняется в миллион раз медленнее из-за разнообразных бюрократических проволочек. В результате даже наличие диплома по Computer Science не является условием того, что человек может выполнять необходимые задачи на его будущем проекте.

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

🟠Универ не создает профессионалов
Занимаясь самообразованием, человек формирует ряд качеств, воспитание которых не является задачей универа: дисциплина, мотивация к действию, находчивость, любовь к обучению и пр.

Если передо мной два разработчика с одинаковыми знаниями, и один из них говорит: “Меня этому научили”, а второй: “Я сам научился”, то я возьму в команду второго. Почему? Потому что он гораздо сильнее, как профессионал. Это будет просто значить, что и дальше он работает гораздо более автономно.

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

Ему не нужны четкие задачи от преподов - он знает, что идеальных задач в мире не существует. Ему не нужно большое количество помощи - его никто не водил за ручку и раньше. Это зрелый и уверенный в себе профессионал.

Конечно, традиционное образование в области Computer Science принесет вам немало пользы: вы будете гораздо сильнее знать базовые вещи, которые в тот или иной момент позволят вам быстрее разучить что-то новое на работе. Но если его нет, то это не значит, что вы не можете без него обойтись!

Современным компаниям без разницы, какой у вас диплом и есть ли он вообще. В любой точке мира и в любой компании вы можете получить работу. Это не значит, что нужно бросить универ! Это значит, что все всегда было и будет в ваших собственных руках!

Пишите в комменты, как считаете вы, и ставьте огоньки, если было обнадеживающе, хехе

P.S. Сегодня ЗДЕСЬ буду рассказывать о том, каких распространенных ошибок следует избегать джунам на их первой работе, и как выглядит рабочий день реального разработчика. Залетайте, душевно пообщаемся)

Работаемс!

Road to FAANG

23 Nov, 18:59


Как не провалить свою первую работу в IT?

Вы вложили месяцы, а может, и годы в изучение Java. Прочитали десятки книг, просмотрели уйму лекций, написали несколько pet-проектов. Уже знаете, что такое Spring, понимаете основы алгоритмов и можете объяснить, как работает многопоточность.

Но как это все применить на реальной работе?

Представьте: приходите в офис своей мечты, садитесь за новый компьютер, открываете проект и… тут реальность, мягко говоря, начинает удивлять.

🟠Вы понимаете, что проект настолько большой, что даже не знаете, с чего начать.

🟠Вокруг незнакомые люди: тимлиды, техлиды, проджекты, продакты — кто все они? И как с ними работать?

🟠Первая задача кажется простой, но вдруг вы упираетесь в вопросы, на которые у вас нет ответа. Куда бежать? У кого спрашивать?

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

❗️Вы можете всего этого избежать, если заранее будете знать, как выглядят будни настоящих разработчиков, как правильно влиться в команду, не совершить типичных ошибок и не сорвать старт своей карьеры.

Мыс командой FAANG School подготовили мощную лекцию «Что ждет Java junior на первой работе», где подробнейшим образом разберём:

✔️ Как познакомиться с командой и быстро влиться в коллектив.

✔️ Что делать, если не понимаете задачу, но боитесь спросить и выглядеть глупо.

✔️ Что такое код-ревью и как превратить критику в инструмент роста, а не принимать её на личный счёт.

✔️ SCRUM, тимлиды, продакты и спринты — как всё это работает в реальной жизни?

✔️ Какие задачи вас ждут, и как выглядит рост в IT-компаниях.
❗️Эта лекция — не просто теория.

📆 26 ноября в 19:00 по МСК в ламповой атмосфере, где каждый сможет задать свои вопросы, мы разберём все ситуации на реальных примерах. А вещать буду я — разработчик из BigTech с 7-ю годами опыта и главный преподаватель FAANG School — Влад Мишустин!

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

⬇️ Записывайтесь на мероприятие и подготовьтесь к первой работе прямо сейчас!

🔗 ЗАПИСАТЬСЯ НА ЛЕКЦИЮ

Road to FAANG

23 Nov, 12:43


SQL базы: классика, не прошедшая проверку временем

Запускаете свой Telegram и он взлетает на миллионы пользователей. Вот только через полтора дня ваша SQL база данных просто сдастся под натиском 15 миллиардов сообщений в день. Пользователи начнут видеть бесконечный "спиннер загрузки" и удалять приложение. Почему? Потому что SQL базы хранят всё на одном сервере. Один жесткий диск. Один предел.

Но современным приложениям этого мало. Представьте Google, которому нужно хранить экзабайты данных из всего интернета. Жесткий диск на экзабайт? Забудьте. Именно здесь на сцену выходят NoSQL базы. Они разбивают ваши данные на сотни серверов, масштабируются как угодно и всегда держат скорость на максимуме.

В новом видео мы разберем, как NoSQL вытягивает высоконагруженные проекты, чем они отличаются от привычных SQL баз и почему Telegram, Discord и Google выбирают именно их. Готовы узнать, как хранить бесконечные данные и не сойти с ума?

P.S. Залетайте на премьеру, я уже жду вас в чате и готов ответить на любые вопросы!

🔗 СМОТРЕТЬ ВИДЕО

Road to FAANG

22 Nov, 11:51


Что общего у Amazon, Netflix и Google?

Они круто справляются с масштабированием своих систем, когда это нужно. То есть, если вдруг стало больше пользователей, всё продолжает работать так же быстро.

Ваша программа запускается на компьютере, который находится где-то в интернете. Такой компьютер называется сервером. Но это все еще простой компьютер, мощность которого ограничена. Как же обойти эти рамки и сделать систему, которой будут пользоваться миллионы?

📤Сервисы без состояния

Они работают так: вы отправили запрос, программа его выполнила и сразу забыла, что вы просили. Она ничего не запоминает о вас или ваших данных. Это удобно, потому что можно легко добавить больше таких программ, и они сразу начнут работать без сложных настроек. А вся информация хранится в базах данных, а не в самих приложениях.

📈Горизонтальное масштабирование

Это когда вы добавляете больше серверов, чтобы справляться с нагрузкой. Например, если на ваш сайт заходит много людей и один сервер не справляется, вы подключаете ещё один, потом третий. Нагрузка распределяется между ними, и каждый компьютер выполняет свою часть работы. Чем больше серверов, тем легче каждому из них, и всё работает быстрее.

⚖️Балансировка нагрузки — это способ равномерно распределять запросы между несколькими серверами.

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

💾Кэширование — это способ сделать приложение быстрее, запоминая часто используемые данные.

Если запросы к базе данных повторяются, сервер сохраняет результат в памяти (это и есть кэш). Когда кто-то снова просит то же самое, сервер сразу выдаёт сохранённый ответ, не нагружая базу. Кэширование ускоряет работу системы потому что достать из кеша информацию сильно быстрее, чем из БД.

📚Репликация базы данных

В приложении чаще всего есть база данных, из которой пользователи несомненно захотят что-то прочитать. А если пользователей много, то очень скоро в базу выстроится целая очередь! Но ведь можно сделать копии данных на нескольких серверах, чтобы система работала быстрее и надёжнее. Это и есть репликация. Если кто-то хочет что-то прочитать из базы, сервер выдаёт данные из ближайшей копии. Это ускоряет обработку запросов, потому что не все идут к одному серверу базы.

Кроме того, если одна копия данных вдруг сломается, система продолжит работать с другими копиями, не теряя информацию.

✂️Шардинг базы данных

С базой данных можно сделать еще один фокус — не копировать ее целиком, а разбить данные на части и хранить их на разных серверах. Это называется шардинг.

Например, данные клиентов с фамилией на букву «А» хранятся на одном сервере, с буквой «Б» — на другом, и так далее. Это помогает одновременно читать и записывать данные без сильных задержек — запросы обрабатываются только той частью базы, которая нужна, а не всей сразу. Это особенно полезно, если данных очень много, а в случае с Amazon или Netflix, поверьте, их там много.

Это был короткий обзор, чтобы немного познакомиться с тем, как системы можно масштабировать.

Если вам зашло, ставьте огоньки 🔥 — мне будет приятно!
Ну и пишите, про что из этого вам бы хотелось почитать подробнее 🚀

Road to FAANG

19 Nov, 11:25


Перегрузить БД бесконечными запросами, чтобы получить данные, которые можно вытащить за один клик?

Звучит как ошибка новичка! Но, на самом деле, с этим сталкиваются многие. Речь о ловушке N+1 запросов.

Представьте: приложение вдруг начинает нагружать базу избыточными запросами, и производительность падает.

Что происходит? Разбираем суть проблемы⬇️

Допустим, у вас есть две сущности: Author и Book. Один автор может иметь несколько книг. Вы хотите получить список авторов с их книгами и пишите такой репозиторий⬇️

public interface AuthorRepository extends JpaRepository<Author, Long> {
List<Author> findAll();
}


А потом в сервисе выполняете цикл, чтобы получить книги каждого автора⬇️

List<Author> authors = authorRepository.findAll();
for (Author author : authors) {
System.out.println(author.getBooks());
}


Что происходит?
Hibernate сначала делает 1 запрос для получения всех авторов, а затем ещё N запросов для каждой книги. В результате вместо одного-двух запросов вы получаете десятки лишних!

Как её решить? Есть несколько способов⬇️

✔️Использование @Query с JOIN FETCH: скажите Hibernate подгружать данные сразу с книгами. Пример запроса:

@Query("SELECT a FROM Author a JOIN FETCH a.books")
List<Author> findAllWithBooks();


Теперь findAllWithBooks() выполнит один запрос, подгружая сразу и авторов, и их книги.

✔️Аннотация @EntityGraph: это ещё один способ указать Hibernate загружать только нужные связи⬇️

@EntityGraph(attributePaths = {"books"})
List<Author> findAll();


@EntityGraph работает как JOIN FETCH, но даёт больше гибкости и отлично интегрируется с Spring Data.

✔️Настройка @BatchSize для пакетной загрузки: укажите Hibernate загружать записи пакетами, например, по 10 за раз⬇️

@BatchSize(size = 10)
private List<Book> books;


Проблема N+1 — это избыточная нагрузка из-за множества лишних запросов, но её можно решить, используя JOIN FETCH, @EntityGraph и @BatchSize. Эти подходы помогут вам улучшить производительность и сделать работу с базой данных более эффективной.

Road to FAANG

18 Nov, 16:20


Топ-5 главных бекенд технологий сегодня 😎

Наверняка вы хотя бы раз задумывались, что стоит за крутыми приложениями, которыми мы пользуемся ежедневно. Какие там внутри технологии? Что такого можно изучить, чтобы на собеседовании вам не было равных?

🏗 Микросервисы

Слышали, как компании говорят о надёжности своих сервисов? Всё благодаря микросервисам. Когда ваше приложение состоит из множества маленьких, независимых частей, если одна из них падает, всё остальное продолжает работать.

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

📦Кэши

Кэши помогают нам вместо того, чтобы каждый раз считать одно и то же заново, просто брать результат предыдущих расчетов из памяти. Например,в нашем приложении пользователь каждый день вводит количество бутеров, что он стрэскал, а ваше приложение в ответ снова и снова пересчитывает калории. Звучит утомительно, правда? С кэшами всё проще: приложение запоминает результаты предыдущих расчётов и в следующий раз выдаёт их мгновенно!

📬 Kafka

Брокеры сообщений, такие как Kafka, помогают вашим приложениям "разговаривать" друг с другом через специальные сообщения. И делать это асинхронно! Без необходимости блокировать друг друга на ожидание.

Например, вы добавляете фичу отправки уведомлений вашему тренеру о том, что бутеров было стрэскано слишком много, и атлетичное телосложение снова утрачено. Разумеется, сервис подсчета калорий не должен ждать, пока уведомление дойдет до тренера, ведь оно может идти очень долго! И как раз Kafka позволяет отвязать один сервис от другого.

⚙️DevOps и CI/CD

Представьте, что вы написали код, а система сама его тестирует, собирает в работающее приложение и выкатывает его юзерам. Это называется CI/CD. Например, вы можете добавить новый функционал — высокоскоростной микросервис поиска отговорок перед тренером. И с помощью CI, ваша система проверит, что вы все правильно написали и не сломали то, что работало до этого в других сервисах. А с помощью CD мы позаботимся о том, чтобы нашу потрясающую фичу увидели пользователи.

☁️Cloud: витаем в облаках

Ваше приложение использует стабильно плюс-минус одинаковое количество человек. Но наступает Новый год и огромное количество людей решает, что с этого года, они хотят успевать больше и им не обойтись без вашего приложения. Как вам справиться с таким резким наплывом новых пользователей?

Помогут облачные технологии! Ваше приложение автоматически копирует себя столько раз, сколько нужно, а копии размещает в облаке. А когда, после новогодних каникул мотивация людей сойдет на нет, приложение также автоматически удалит свои копии, которые больше не нужны. Облака — это просто много компьютеров где-то далеко, мощность которых вы можете брать в аренду. Это удобно и экономит деньги, потому что вам не нужно весь год иметь столько машин — только 10 дней в году.

Такое приложение, и даже круче, вы сможете создать после прохождения Java Буткемпа.

Вас будет ждать:

📦 Работа с Redis в качестве кэша

🏗 Собственный проект из 9 микросервисов.
Да-да, девять! Это полноценное приложение и в процессе вы учитесь работать с архитектурой, которую используют в реальных компаниях

⚙️ CI/CD — вы сами сможете настроить это в проекте!

☁️ Облака. Вы узнаете, как на практике использовать облако для оптимального хранения файлов.

📬 Брокеры сообщений. На буткемпе мы используем самые востребованные - Redis и Kafka.

После обучения вы получите навыки, которые сможете сразу применить в работе, и освоите крутые технологии, которые есть сейчас в каждой первой вакансии! Подробнее о буткемпе вы сможете узнать здесь 🚀

Road to FAANG

17 Nov, 11:17


Ну что , друзья!
Сейчас завершился первый прогон вебинара-лекции! Готовится что-то невероятное!

Очень много полезной информации вас ждет, так ещё и множество примеров кода, сможете сразу использовать на своем приложении!

❗️Уже совсем скоро, 20 ноября в 19:00 по МСК детально разберем:

✔️тему связей между объектами и таблицами, чтобы понять, что такое One-to-One, One-to-Many, Many-to-Many и почему эти штуки вообще важны;

✔️ключевые аннотации Hibernate, типа @Entity и @Table, чтобы код был чистым и легко поддерживаемым

❗️А также с 0 соберем мини-проект — простое приложение для хранения видео, где пошагово настроим Hibernate и затестим Spring Data JPA в деле!

Осталось совсем немного, успейте залететь на бесплатную лекцию по Hibernate по ссылке ниже ⬇️

🔗 ЗАРЕГИСТРИРОВАТЬСЯ НА ЛЕКЦИЮ

Road to FAANG

13 Nov, 12:50


Вы кликнули на ссылку, а что происходит дальше?

Что за вопрос? Переходим по ссылке, конечно!

На самом деле, запускается целый процесс. Когда мы нажимаем на ссылку или вводим адрес сайта, всё начинается с одного важного элемента — URL.

Что это такое?

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

Так и в интернете — если вы хотите попасть на сайт, вам нужен его URL. Интернет — это множество соединённых между собой компьютеров, и URL помогает вашему браузеру узнать, на каком из них запущено нужное приложение и куда отправлять запросы, чтобы получить доступ к данным, которые там хранятся. Без точного адреса браузер просто не знал бы, куда идти за нужной информацией, так же как и вы не сможете найти остановку, если не знаете её точное местоположение.

Как устроен URL?

Давайте посмотрим на пример ссылки: https://example.com

- http — это протокол, который объясняет браузеру, как именно обмениваться данными с сервером — компьютером, на котором запущено нужное приложение. https — защищённая версия протокола — никто, кроме вас и сервера не будет знать о чем вы с ним “говорите”.
- `example.com` — это доменное имя, проще говоря, название приложения. Оно служит ориентиром для браузера, показывая, где в интернете искать нужный компьютер с этим приложением. Когда вы вводите доменное имя, оно превращается в конкретный IP-адрес компьютера, на котором приложение сейчас работает.

В какой еще IP-адрес?

Компьютеры общаются друг с другом, зная IP-адреса друг друга — для них это как номера телефонов. У каждого компьютера в Интернете есть свой уникальный IP-адрес. Именно поэтому говорят “вычислю по IP” - такой адрес буквально показывает, где искать этот комп!

Вот пример: 172.217.16.142 IP-адреса состоят из четырёх чисел (от 0 до 255), разделённых точками.

Когда вы вводите URL сайта в строку браузера, ваш компьютер на самом деле ищет IP-адрес компьютера, что к этому URL привязан, в специальном справочнике. Все эти URL существуют потому, что запомнить цифры IP адреса вам - человеку - сложно, вы же не пытаетесь запомнить номера телефонов всех ваших контактов, например!

Вместо этого вы сохраняете номер телефона в контакты и подписываем имя его владельца. Потому что сильно проще отличить контакты "Серега" и "Тетя Тамара", чем их номера телефонов. Так же и с сайтами — доменные имена придуманы, чтобы можно было писать их названия вместо непонятной комбинации цифр. Например IP-адрес 135.352.262.1 может соответствовать example.com - второе запомнить сильно проще

А что за справочник, где хранятся IP-адреса?

Когда вы вводите URL, браузер обращается к DNS (Domain Name System), чтобы спросить, какому IP-адресу соответствует введённое доменное имя. DNS — это справочная система интернета, которая переводит понятные названия сайтов в нужные IP-адреса. Там буквально просто хранится соответствие каждого адреса в интернете какому-то адресу компа, где запущено нужное приложение. И вы тоже там можете зарегистрировать свой адрес!

Установка соединения с сервером

Когда IP-адрес найден, ваш браузер соединяется с сервером, на котором запущен какое-то приложение.

Браузер отправляет запрос на сервер и просит контент. Сервер обрабатывает запрос и отправляет всё нужное обратно. Браузер получает данные и показывает вам результат на экране.

Вот и всё! Всё это происходит за доли секунды.

Схема может показаться сложной, но в ней всё устроено логично. Если понравилось, ставьте огонёк 🔥 и пишите, что ещё было бы интересно разобрать!

Road to FAANG

12 Nov, 15:02


Что делать, если SQL сбивает с толку и постоянно устраивает бардак в коде?

Сначала всё вроде просто — таблицы, данные, запросы, но когда дело доходит до JOIN-ов и связей между этими таблицами, крышечка начинает вскипать.

Вы вроде и правильно пишете код, но результат — дублирующиеся данные, постоянные ошибки, да и вообще, что не так постоянно с этими INNER и LEFT JOIN-ами!?

В новом видео я покажу, что такое реляционные базы данных, как работают связи между таблицами и, главное, как использовать JOIN-ы, чтобы ваш код не превращался в хаос. Без скучной теории — только практические советы, понятные примеры и потрясающие анимации!

Залетайте на премьеру, я уже в чате и готов ответить на и вопросы!

📷 СМОТРЕТЬ ВИДЕО

Road to FAANG

11 Nov, 14:00


Хотите создавать приложения для миллионов пользователей, но пугают базы данных, JDBC и Hibernate? Расскажем, как связать SQL с приложением и разобраться с этим за 2 часа!

Если вы пишете на Java, то рано или поздно столкнетесь с задачей хранения данных: будь то профили пользователей, каталоги товаров или финансы. Можно, конечно, нагромоздить код для прямой работы с базой, но в какой-то момент обычный SQL просто перестанет справляться.

❗️И вот тут на сцену выходит Hibernate! Инструмент, который берёт на себя всю рутину и делает работу с данными проще и удобнее. С его помощью вы можете написать простой запрос на получение данных, используя HQL (Hibernate Query Language), вместо ручного написания сложного SQL-кода.

Например, получить список пользователей с именем “Darth Vader” с минимальными усилиями: Hibernate преобразует этот запрос в SQL и выполнит его за вас. Поверьте, вы это оцените!

❗️Однако, для джунов Hibernate часто становится испытанием: от неправильных настроек до сложностей с транзакциями и связями между таблицами. Здесь многие боятся, что не потянут, и вовсе перестают изучение. И чтобы точно исключить вас из их числа, мы организуем невероятный ивент!

🎉20 ноября в 19:00 по МСК вебинар «Основы Hibernate для начинающих Java Junior», где разберём принципы работы фреймворка и как настроить его для эффективного использования.

Подробнее о том, что вас ждет:

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

🟠 Погрузимся в тему связей между объектами и таблицами, чтобы понять, что такое One-to-One, One-to-Many, Many-to-Many и почему эти штуки вообще важны.

🟠 Разберем ключевые аннотации Hibernate, типа @Entity и @Table, чтобы код был чистым и легко поддерживаемым (и чтобы коллегам было не стыдно показать).

🟠 С нуля соберем мини-проект — простое приложение для хранения видео, где пошагово настроим Hibernate и затестим Spring Data JPA в деле.

После регистрации, каждый участник получит подарок - шпаргалка «Основы SQL», которая поможет быстро вспомнить ключевые команды и синтаксис для работы с запросами и таблицами.

И конечно же, вас ждет, все в лучшем виде: розыгрыши, подарки и невероятные презентации с анимациями!

Регистрируйтесь на вебинар по кнопке ниже и уже после ивента сможете забрать пару фич к себе в проект!
⬇️

Road to FAANG

11 Nov, 13:38


Идея Для Твоего Пет-Проекта с Архитектуркой 🏃‍♂️

Сегодня предлагаю сделать свой собственный AirBnB и делюсь конкретным стеком и архитектуркой для фич, что вы можете сделать самостоятельно!

AirBnB - это платформа, где вы можете быстро забронировать себе квартиру для великолепного отпуска в любой точке мира! Сервис берет на себя вообще все: бронь, оплату, поиск, взаимодействие между людьми, сбор отзывов и многое другое. Его-то мы и построим!

Наш стек: Spring Boot, Spring Data JPA, Microservices, Kafka, Redis, PostgreSQL, Amazon S3, Docker.

Выглядит уже многообещающе, да? Стек важен - ведь именно его мы потом будем зашивать себе в резюме. Поэтому выбираем всегда самый топчик, чтобы привлечь как можно больше внимания компаний!

Какие фичи построим:

- CRUD для объявлений (нужно же откуда-то начать)
- Фотки для квартир (чтоб красыво было)
- Поиск квартир по геолокации (тут будет интересно!)
- Бронь квартир (работаем с ACID транзакциями)
- Уведомления о бронировании (а вот тут Kafka очень пригодится!)

Добавление объявлений 😎

У каждого юзера в нашем приложении должна быть возможность добавить свою квартирку туда. Можно установить название, описание, локацию, а также цену, например.

Для этого мы можем сделать пару REST эндпоинтов с помощью Spring Boot - для создания объявления и для его обновления. По сути здесь мы попросту будем сохранять эти данные в нашу PostgreSQL, с которой работаем с помощью Spring Data JPA.

Для получения работы такого функционала, конечно, недостаточно. Но нам нужно откуда-то начать, чтобы сделать крутые фичи! Поэтому едем дальше!

Фотки для квартир 😎

Конечно, не имеет смысла добавлять объявление о сдаче квартиры без фотокарточек. Но нельзя же и фотки хранить в PostgreSQL… Поэтому для этого мы используем Amazon S3 - облачное хранилище бинарных файлов!

По сути мы будем принимать файлы от юзеров прямо через наши REST эндпоинты создания/обновления объявления. Затем эти файлы будем пихать в S3, а ссылки, которые нам вернет S3, уже складывать в БД, ассоциируя с соответствующим объявлением через связь один ко многим.

Если интересно чуть подробнее про использование S3, то у меня ЕСТЬ ВИДЕО!

Поиск по геолокации 😎

Конечно, никто не будет искать квартиру по названию в AirBnB. Обычно юзер пишет город, куда он хочет поехать, а приложение предлагает варианты. Но как же оно делает поиск по геолокации?

Реализовать это есть множество вариантов. Один из них - использовать расширение для PostgreSQL, которое называется PostGIS. Оно позволяет вам очень удобно хранить долготу и широту (координаты) различных точек на карте прямо в вашей базе данных, а в SQL запросах делать очень быстрый поиск в определенном радиусе!

Более того, нам здесь еще пригодится Redis… Ведь мы делаем приложение, которое должно держать высокие нагрузки - этого хочет от нас будущий работодатель! А значит потенциально многие юзеры будут искать объявления в одних и тех же популярных локациях.

Например, туристы очень часто ищут квартиры в Амстердаме… Тогда зачем нам раз за разом отправлять запросы в базу данных, если мы можем кэшировать популярные направления и списки квартир в них в Redis?

В ЭТОМ ВИДЕО подробнее рассказываю о том, как и зачем кэшировать данные

Понравился разбор? Ставьте огоньки 🔥, если хотите его продолжения или более глубокого погружения в каждую из фич! Длина поста ограничена, поэтому будем делать частями. Также пишите в комменты, какую конкретную часть было бы интересно рассмотреть подробнее

Работаемс!

Road to FAANG

09 Nov, 11:16


От SQL-инъекций до DDoS-атак: как разрушить ваш сайт 😈

Представьте себе: вы с любовью создавали свой сайт, вложили в него душу и время, а затем, в один не самый прекрасный день, он становится жертвой хакеров. Как это произошло?

💬 SQL-инъекции

SQL-инъекция — это способ взлома, когда хакер вставляет вредный код прямо в SQL запрос к вашей базе данных через уязвимые места вашего сайта, например, формы или ссылки. Если сайт не проверяет, что вводят пользователи, хакер может ввести SQL команды прямо в обычное поле ввода имени юзера и увидеть или изменить важные данные!

Представьте, что у вас на сайте есть форма входа, где люди вводят имя и пароль. Если у вас нет защиты от SQL инъекций, хакер может ввести что-то вроде ' OR '1'='1 вместо имени. Такой кусочек добавится в ваш SQL запрос на бекенде и как бы изменит его на лету! Ведь это буквально SQL команды. Если вы там просто собираете строчку в виде SQL запроса через конкатенацию, то вполне заплюсуете туда и этот параметр. А это кусок чужого кода!

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

Чтобы защититься, нужно проверять (валидировать) данные, которые вводят пользователи, и использовать специальные инструменты, которые блокируют SQL инъекции. Например, если вы используете JDBC в вашем Java-приложении, то никогда не используйте класс Statement - только PreparedStatement! Он защитит вас от SQL-инъекций при правильном использовании.

👥 DDoS-атаки

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

Чтобы защититься от DDoS, обычно используют специальные фильтры для блокировки лишних запросов, а также распределяют нагрузку на несколько серверов, чтобы сайт выдерживал больше посетителей.

Такие фильтры называются rate limiter (ограничитель трафика). По сути это программы, которые следят за тем, сколько запросов в секунду каждый пользователь вам отправляет. Если их слишком много, то все последующие блокируются, чтобы избежать роста нагрузки на ваше приложение.

📜 XSS

XSS (Cross-Site Scripting) — это уязвимость, которая позволяет хакеру добавить вредоносный код на ваш сайт. Этот код может воровать данные пользователей или перенаправлять их на фальшивые страницы.

Чаще всего XSS-атака происходит через поля для ввода, например, комментарии или строки поиска. Хакер вставляет туда вредный код, и когда кто-то открывает страницу, код запускается и может, например, украсть личные данные.

Чтобы защититься от XSS, нужно проверять все данные, которые пользователи вводят на сайте, чтобы никто не мог зашить свой собственный код внутрь вашего приложения! Валидация - это краеугольный камень любой системы. Если вы думаете, что ваши юзеры белые и пушистые, то заблуждаетесь. Они постоянно будут вводить лютый трэш в вашем приложении!

🕵️‍♂️ Man-in-the-Middle

MitM — это тип атаки, когда злоумышленник перехватывает данные между вашим сайтом и пользователем. Например, он может "подслушать" логины, пароли и другую важную информацию.

Эта атака особенно опасна в публичных сетях Wi-Fi, например, в кафе или аэропортах, где данные легко перехватить. Защититься от таких атак помогает HTTPS — протокол, который шифрует все данные между пользователем и сервером, делая их недоступными для перехвата.

Мы только слегка прошлись по теме атак! Может, рассказать подробнее про SQL-инъекции и как именно с ними бороться из кода? Ставьте огоньки 🔥, если эта тема была бы интересна!

Road to FAANG

07 Nov, 17:15


🔥Сегодня наши студенты расскажут всю правду о Java Буткемпе: каково это — оказаться в потоке настоящих IT- челленджей, где задания требуют не просто кода, а стратегического подхода. Всё по-взрослому: командная работа, реальные баги, ревью от менторов, которые не просто поправляют синтаксис, а помогают понять, как мыслить как настоящий девелопер.

❗️Spoiler ahead! Java Буткемп — это не только про изучение языка, но и про реальную разработку. Всё, от задач до фидбэка, заточено на то, чтобы каждый участник стал готовым ко всему, что ждёт его в настоящем IT. Смотрите видео и узнайте, какой Java Буткемп на самом деле!

📷 СМОТРЕТЬ ВИДЕО

P.S. Залетайте на премьеру, поболтаем, поотвечаем на ваши вопросы!

Road to FAANG

06 Nov, 14:44


🔥 Провожу ламповый стрим «Зарплаты в СБЕР: сколько получают Java Junior» с middle-разработчиком из СБЕРа - Андреем уже в эту пятницу 🔥

Собираемся на уютный стрим, где у вы сможете пообщаться со мной и разработчиком из СБЕРа в прямом эфире! Зададите свои вопросы, узнаете из первых уст, как проходить собеседования в топовые компании и что важно для джуна, который мечтает попасть в крутой IT-проект.

Душевно поболтаем с Андреем и обсудим:

🟠Какие были сложности на собеседованиях, и что помогло Андрею их пройти.
🟠Как он смог получить 3 оффера за 1,5 недели в Сбер и что делает сейчас.
🟠Как стоит искать вакансии и, что именно привлекает внимание работодателей.
🟠 Ну и, конечно, вопрос, который интересует многих: сколько реально платят джунам в Сбере?

❗️ И это только часть программы! Параллельно будем отвечать на вопросы из чата. Вопросы можете задавать заранее через наше сообщество или присоединиться в прямом эфире и задать их лично!

P.S. Стрим уже в эту пятницу, 8 ноября в 19:00 по МСК, чтобы принять участие, присоединяйтесь к сообществу ⬇️, ссылку на трансляцию опубликуем там за 2 часа до начала мероприятия!

🔗 ПРИСОЕДИНИТЬСЯ К СООБЩЕСТВУ

Road to FAANG

04 Nov, 16:50


🎉 Грандиозные новости от FAANG School! Мы создали свое уютнейшее комьюнити Java-разработчиков! Нас уже более 10 000 заряженных специалистов, готовых к свершениям!

Если вы хотите не просто выучить Java, а стать частью команды единомышленников, обсуждать задачи, прокачивать навыки и смеяться над мемами — тогда точно сюда. Здесь каждый может задать вопрос, получить поддержку от разработчиков и набраться опыта в окружении тех, кто «в теме».

Помимо лампового общения вы получите полный доступ к библиотеке Java Junior с бесплатными образовательным материалами, которые помогут ускорить ваше обучение и качественно подготовиться к собеседованиям!

P.S. А также, в честь этого события мы запускаем розыгрыш легендарного мерча FAANG School! Условие всего одно - заполнить анкету в нашем сообществе и дождаться объявления результатов 6 ноября в 19:00 по МСК!

Присоединяйтесь по ссылке ниже, принимайте участие в розыгрыше и начните свой путь в IT с теми, кто готов поддержать на каждом шагу!

🔗 ЗАЛЕТЕТЬ В СООБЩЕСТВО

Road to FAANG

01 Nov, 13:50


За 7 лет в IT я провел больше 300 собеседований для джунов, мидлов и синьоров! Успел пообщаться с разработчиками по всему миру и вывел формулу успешного интервью. И вот, что я скажу: одних “правильных ответов” мало!

Я поделюсь 5 приемами, которые помогут легко пройти любое IT-интервью. Как захватить инициативу с первых минут? Как правильно «рассуждать вслух»? И самое главное, как «выключить нервы», чтобы интервью стало не пыткой, а игрой на вашем поле?

❗️Найти ответы на эти и другие вопросы, вы сможете уже на премьере видео — залетайте, уже жду вас в чате, чтобы ответить на все вопросы!

⬇️Смотрите видео на любой удобной площадке:

📷 СМОТРЕТЬ НА YOUTUBE
📷 СМОТРЕТЬ НА ВК
📷 СМОТРЕТЬ НА RUTUBE

Road to FAANG

30 Oct, 10:37


gRPC для Начинающих Простыми Словами

gRPC — это способ для программ общаться друг с другом, даже если они работают на разных компах и написаны на разных языках. Он помогает, когда нужно отправить данные от одного приложения другому через интернет.

Представьте приложение для поиска утерянных носков. Вы его открываете и отправляете запрос "Где все мои носки?". Программа на другом сервере, которая сканирует местность в радиусе 5 километров, получает запрос и возвращает первый ответ: "Один носок найден за тумбочкой”, а затем еще ответ: “Другой на полу в прихожей”

Теперь представьте, что таких запросов о пропавших носках поступает очень много — от вас и других пользователей. Чтобы не перегружать систему, gRPC сжимает данные и отправляет их в бинарном виде - нолики и единички. Это позволяет сэкономить место и время, особенно когда вокруг множество других запросов на поиск утерянных предметов.

А чем это отличается от HTTP?

В HTTP обмен данными устроен просто: приложение отправляет запрос на сервер (тот самый компьютер с запущенной программой по поиску), а сервер возвращает ответ. Например, вы раз в час спрашиваете сервер: "Ну что, нашли мои носки?". А он отвечает вам, какой сейчас результат поиска.

В gRPC, наоборот, общение происходит быстрее и более гибко. Он умеет поддерживать двустороннюю связь: приложение может отправить запрос, а сервер сразу начинает "стримить" вам обновления, не дожидаясь, пока вы снова спросите. Например, ваше приложение может сразу получать все новости о потерянных носках, как только сервер что-то находит.

Как это работает на практике?

Для работы с gRPC сначала создаётся специальный файл с расширением .proto, который описывает, какие данные передаёт клиент и что на них отвечает сервер. В этом файле задаются сообщения (данные, которые пересылаются) и сервисы (функции, доступные клиенту).

syntax = "proto3";

message SockRequest { // формат запроса
string color = 1; // Цвет носка
string size = 2; // Размер носка
}

message SockResponse { // формат ответа
string location = 1; // Местоположение носка
bool found = 2; // Найден или нет
}

service SockFinderService {
rpc FindSock(SockRequest) returns (SockResponse); // функция поиска носка
}

После того как файл .proto создан, его нужно скомпилировать — это автоматически создаст код для работы с данными и вызовами функций на выбранном языке. Например, если сервер пишется на Java, компилятор создаст нужные заготовки кода для Java, а если на Python — для Python.

gRPC поддерживает множество языков, среди которых: C#, C++, Go, Java, Python, PHP и другие.

Итоговый процесс работы с gRPC:


1. Создаёте файл, где описываются структура данных и функции.
2. Компилируете его, чтобы получить код на нужном языке.
3. Пишете код клиента и сервера, используя сгенерированные шаблоны.
4. Клиент отправляет запросы, сервер отвечает — так ваши программы могут общаться через сеть, даже если написаны на разных языках.

Почему gRPC удобен?

gRPC позволяет клиенту и серверу, написанным на разных языках программирования, легко взаимодействовать, но это же может и HTTP. Основное отличие gRPC — это использование Protocol Buffers вместо JSON или XML. Protocol Buffers — это тот самый компактный бинарный формат, который занимает меньше места в сети.

Это особенно важно для больших распределённых систем, где клиент и сервер могут быть на разных концах света, но при этом обмениваться данными с минимальной задержкой.

Это был только старт для работы с gRPC. Если хотите больше информации о построении запросов с gRPC, то поддержите пост огоньком 🔥 и напишите в комментариях, о чём рассказать дальше! Может, о стриминге данных в реальном времени через gRPC? 🤔

Road to FAANG

28 Oct, 12:02


Сайты знают, кто вы! Но как они это делают?

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

Но вот вопрос: а как же сайты узнают, что это именно вы? Сайт ведь может сказать: «Мы узнали вас на этом устройстве, так что вводить пароль снова не нужно». Звучит удобно! Так почему бы не избавиться от паролей совсем?

😕 Даже если сайт запоминает вас, это не значит, что пароли больше не нужны полностью.

🔑 Есть два главных способа, с помощью которых сайты вас узнают: куки и passkeys (специальные ключи для безопасного входа).

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

🍪 Куки

После того как вы успешно вошли в систему, сайт создает специальный файл у вас на компе — куки, который говорит: «Этот пользователь уже залогинен». Теперь каждый раз, когда вы будете снова заходить на страницу этого сайта, то сайт будет читать этот файл-куки, где уже записана вся информация о вас, а значит ему не потребуется просить вас снова ввести пароль!.. Какое-то время.

Куки хранятся внутри браузера. Это просто файлики с текстом, в которых в специальном секретно-зашифрованном виде может храниться информация о статусе вашего входа на сайт. Ну а сам сайт уже умеет с ними работать - читать из них необходимую информацию.

Чекбокс "Запомнить меня":

Он просто увеличивает срок действия куки. Без него куки могут сохраняться только несколько минут или часов, а с ним — несколько дней или даже недель.

А если вы удаляете куки, сайт снова запросит у вас пароль, потому что данные о вашем предыдущем входе исчезли.

🔐 Passkeys

Passkeys — это более безопасная альтернатива паролям. Работает так:

1. Вы вводите своё имя пользователя.

2. Сайт отправляет код или ссылку для подтверждения личности вам на почту или телефон.

3. Вы вводите код или переходите по ссылке — и вас автоматически пускает в систему.

4. В это время сайт создает специальный ключ-строчку (passkey), который сохраняется на вашем устройстве.

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

🛠 Passkeys в будущем могут полностью заменить пароли. Это гораздо удобнее и безопаснее.

Теперь вы знаете, как сайты запоминают вас и как работают куки и passkeys. Пароли пока ещё с нами, но технологии стремительно развиваются. А там, глядишь, скоро и забудем, что когда-то эти пароли вообще были! 😄

Не забудьте поставить 🔥, если вам было полезно и вы узнали что-то новое!

Road to FAANG

24 Oct, 17:26


🔥 Вот бы весь однотипный код писался за вас… Стоп! Так это делают фреймворки! 🔥

Представьте: вы работаете над проектом, он растёт, появляются новые функции, и вы всё чаще замечаете, что пишете один и тот же код снова и снова только потому, что так требует язык: подключиться к БД, обработать HTTP-запрос и т.д - все это придется делать во всех проектах. В какой-то момент это начинает утомлять. И тут на помощь приходят фреймворки! Они предоставляют готовый код, который можно просто взять и использовать.

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

Что еще за фреймворк?

Представьте, что язык программирования — это универсальный набор инструментов. С ним можно построить всё что угодно: дом, табуретку, ракету — что угодно. А вот фреймворк — это, скорее, сборка мебели из IKEA: у вас тоже есть инструменты самого языка, но фреймворк дает вам как бы инструкцию по их применению и готовый типичный код. Просто следуйте его правилам, и сможете собрать из предоставленных шурупов и палок домашний шаттл или даже портал в другое измерение — главное, чтобы был шестигранник, но об этом позаботится фреймворк.

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

Вы можете писать код и без фреймворка, но любой фреймворк всегда базируется на языке программирования, он буквально на нем написан.

А чем фреймворк отличается от библиотеки?

Библиотека — это набор гаек и болтов. Низкоуровневые компоненты — набор классов и функций, которые вы можете вызвать из своего кода, чтобы они выполнили нужную работу.

Фреймворк, напротив, как большой набор LEGO. У вас уже есть всё необходимое для сборки чего-то крупного: много деталей, инструкции и даже готовые блоки. В этом наборе есть всё — от отдельных библиотек до сложных модулей. Он помогает вам строить целые программы, большие и сложные системы. Но фреймворк — не просто набор, а набор со строгой инструкцией. Он сам диктует, как всё должно быть собрано и как бы говорит: “Собирай все именно таким образом, как я сказал, и тогда твоя разработка будет намного быстрее и качественнее. Этот класс используй именно в этом месте, а эту аннотацию — вон там. А не просто лепи все, где хочется, как в библиотеках, где можно что-то вставить куда угодно”

И в отличие от библиотеки, некоторые фреймворки работают по принципу инверсии управления (IoC): в обычном программировании вы сами командуете, когда и что вызвать, а вот с IoC фреймворк берёт бразды правления и сам вызывает ваш код, когда сочтёт нужным. Вам даже не нужно беспокоиться о том, чтобы каждый раз доставать нужные отвертки — фреймворк сделает это за вас.

Какие популярные фреймворки есть в Java?


В мире Java есть куча популярных фреймворков.

Например, Hibernate. Этот фреймворк используется для работы с БД — вместо того, чтобы вручную писать километры SQL-запросов, вы просто работаете с объектами на Java, а Hibernate заботливо переводит их на язык БД.

Наипопулярнейший и наимощнейший фреймворк, это конечно Spring — огромный набор инструментов и модулей, которые помогают разрабатывать самые разные приложения. Почитать подробнее о том, как начать работать со Spring можно тут.

Есть ещё много других не менее полезных фреймворков, например, Quarkus. Он более молодой и идеально подходит для проектов, которые должны запускаться быстро и работать эффективно в средах с ограниченными ресурсами, таких как контейнеры.

Всех и не перечислить, их очень много.

Самые важные и популярные мы используем на Java Буткемпе при разработке проекта! Там и Spring, и Hibernate, и JUnit (для тестирования кода), а также помимо фреймворков есть куча актуальных современных технологий!

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

Road to FAANG

22 Oct, 15:54


Без опыта не получить оффер, но без оффера опыта не набраться. Замкнутый круг!

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

Знакомая ситуация? Это частая проблема новичков. Есть несколько способов, которые помогут обойти этот замкнутый круг и набрать тот самый опыт, который станет вашим билетом в IT.

📚Стажировки и менторские программы

Стажировки - это не про «разрешили потрогать код», а про шанс поработать с боевыми задачами, которые реальная компания решает каждый день. Включиться в процесс ревью кода, поработать с production-средами, столкнуться с ситуациями, когда «оно работало у меня локально, почему здесь не работает?!😱» — всё это неотъемлемая часть коммерческого опыта.

Ментор в таких программах не просто отвечает на вопросы, он помогает грамотно декомпозировать задачи, подсказывает, как рефакторить код, указывает на лучшие практики в его написании, и ведёт через этапы, которые будут полезны и на реальной работе.

💻Контрибьютинг в Open Source

Идеальный способ влиться в реальную разработку без требований к опыту - Open Source проекты. Это проекты с открытым исходным кодом, доступным для всех. Любой желающий может внести свой вклад: улучшить код, исправить баги, добавить новые функции или обновить документацию. Представьте, что вы решаете задачу в популярном проекте вроде Spring или Hibernate: вам нужно не только написать код, но и оформить Pull Request, пройти код-ревью, получить обратную связь от разработчиков мирового уровня.

Да и об этом опыте можно смело упоминать на собеседовании — ваш вклад и взаимодействие с другими разработчиками будет весомым аргументом.

🧑‍💻Фриланс и микрозадачи

Это вот база. Тут вам удаленка, свобода и  отличный способ получить реальные кейсы. Маленькие проекты, заказы на Upwork или Habr Freelance — возможность взять мелкую задачу и довести её до конца. Например, реализовать CRUD-приложение с использованием Spring Boot и Hibernate, разработать REST API с поддержкой аутентификации, а также интегрировать сторонние сервисы. Даже если проект небольшой, такой опыт показывает, что вы умеете справляться с дедлайнами и работать с требованиями заказчика — важнейшие навыки для джуниора.

P.S.
Каждый из этих путей — это не просто практика, а возможность создать портфолио и показать свою готовность к коммерческим задачам. Главное — не бояться брать на себя ответственность, даже если задача кажется сложной.

Работаемс!

Road to FAANG

17 Oct, 14:55


9 Git Команд на 99% Случаев Жизни

При первом знакомстве с Git всё кажется настолько запутанным: ветки, коммиты, клоны — совершенно непонятно, что с этим делать. Но не волнуйтесь, сейчас я всё объясню и покажу, как Git устроен на самом деле.

В этом видео вы узнаете о 9 самых важных командах Git, которые пригодятся в ежедневной работе. Никакой сложной терминологии или запутанных объяснений — только практические советы, которые реально работают. Покажу, как просто клонировать проекты, делать коммиты, управлять ветками и делиться изменениями с коллегами.

Уже после просмотра, вы поймете, как Git может стать вашим надёжным помощником!

Жмите на ссылку ниже, чтобы посмотреть видео!

📷 СМОТРЕТЬ НА YOUTUBE
📷 СМОТРЕТЬ НА RUTUBE

Road to FAANG

14 Oct, 14:12


GraphQL за 60 сек: зачем и как это работает

Представьте, что вы пришли в любимую пиццерию. В меню есть разные пиццы, из которых вы можете выбрать. И вот она - лучшая пицца в мире! Но вот незадача… В нее входят оливки, а вы их ненавидите! А опции “убрать” в меню нет!

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

Но что если бы в пиццерии можно было собрать собственную пиццу? Выбрать основу, соус, начинку — и получить именно то, что хотели. Так работает GraphQL — вы говорите серверу, какие конкретно данные вам нужны, и получаете только их.

GraphQL — это специальный язык, позволяющий описать, какие именно данные нужны вам от какого-то источника (от API одного приложения или другого) и ничего лишнего. В отличие от SQL, где запросы обращаются напрямую к базе данных, GraphQL работает с API и запрашивает у него только необходимые поля, например:


query getUsers {
users {
firstname
}
}


Здесь мы говорим, что из API-эндпоинта getUsers нам нужно получить список не всех объектов юзеров, а всего навсего список их имен!

Главное преимущество GraphQL в том, что его можно использовать с любыми источниками данных и интегрировать в любую архитектуру, добавляя его поверх существующих REST API, не изменяя всю систему.

Зачем это использовать?

Когда вы запрашиваете данные у какого-то приложения через его API, то как эти данные передаются к вам? По Интернетам, конечно! Но если вам, скажем, нужна всего одна строчка из всех этих данных, но API возвращает огроменный объект с миллионом уровней вложенности, который дофига весит?

Тогда вы будете весь его тащить по Интернетам и очень долго ждать, пока такой объем данных наконец передастся! Доля секунды на один запрос, доля - на другой, и вот вы уже суммарно потеряли кучу времени на работу в приложении.

А представьте, что творится, когда данные запрашиваете не вы - человек - а другие приложения, которые отправлять тысячи и тысячи запросов за разнообразными данными тоже по Интернету. Если все они постоянно таскают данные, которые им на самом деле не нужны, то мы попусту тратим пропускную способность нашей сети, которая вообще не резиновая!

Именно для решения этой проблемы и появился GraphQL. Умные люди подумали: “Давайте придумаем специальный язык, где можно будет прописать, какие именно данные я хочу получить от API, чтобы не таскать все”. Сказано - сделано, а нам теперь… Возиться с этим, хехе

REST vs GraphQL: запросы к API

Предположим, нам нужно получить имя пользователя. В REST API для этого используется конкретный эндпоинт, например, /users/{id}/. Запрос через curl (способ отправки HTTP-запросов через командную строку) будет таким:


curl \\
-H "Content-Type: application/json" \\
<https://www.example.com/api/users/123>



В GraphQL все запросы отправляются на один эндпоинт — /graphql. Чтобы запросить нужные данные, мы описываем их в "Query". Например, запрос имени пользователя будет выглядеть так:


curl \\
-X POST \\
-H "Content-Type: application/json" \\
--data '{ "query": "{ user(id:123) { name } }" }' \\
<https://www.example.com/graphql>



В этом посте мы только начали разбираться с запросами через GraphQL. Ставьте огоньки 🔥, если хотите продолжение и погружение в то, как формируются конкретные запросы через GraphQL!

Road to FAANG

11 Oct, 07:02


🔥 В распределенных системах придется жертвовать чем-то важным ради стабильности!

Есть такое понятие, как CAP и оно описывает три критически важные свойства, которые необходимо сбалансировать.

📊 Согласованность (Consistency) — это про то, что все части системы видят одни и те же данные. Например, если мы отправили сообщение или сделали заказ, то в идеале все серверы системы должны тут же отразить это изменение. Если один сервер говорит "да, заказ принят", а другой этого не видит, начинается путаница.

🌍 Доступность (Availability) — это когда система всегда готова отвечать на наши запросы, даже если внутри что-то не совсем синхронизировано. Главное — мы получаем ответ, пусть он и не всегда будет идеально точным. Но зато приложение не падает и не говорит "попробуйте позже".

🔗 Устойчивость к перебоям (Partition Tolerance) — это про то, что система должна продолжать работать, даже если часть серверов вдруг перестала общаться друг с другом. Сети, знаете ли, штука ненадёжная. Иногда связь прерывается, но система должна быть готова к этому и делать всё, чтобы мы, как пользователи, этого не заметили.

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

CAP утверждает, что распределённая система может гарантировать одновременно только два из трёх свойств.

Приходится делать выбор: если система должна быть доступна всегда, нужно пожертвовать согласованностью. Если важна строгая согласованность, придётся мириться с возможной недоступностью или снижением производительности.

Получаются вот такие сочетания:

CA (Согласованность + Доступность):

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

Но сети по своей природе ненадежны и представьте, что между двумя серверами пропала связь. Если система пытается одновременно поддерживать и согласованность данных, и доступность, то, столкнувшись с сетевым сбоем, ей придется либо остановить обработку запросов (нарушая доступность), либо продолжать работать, нарушая согласованность данных. Поскольку избежать сетевых сбоев невозможно, систему, поддерживающую одновременно CA, создать нельзя — в реальности всегда приходится делать выбор между доступностью и согласованностью.

CP (Согласованность + Устойчивость):

Здесь система гарантирует, что данные останутся согласованными даже при сетевом сбое. Если связь между частями системы пропадает, система предпочтет сохранить правильность и целостность данных, даже если для этого придется временно остановить обработку запросов. Согласованность данных важнее, чем доступность.

AP (Доступность + Устойчивость):

Система будет доступна и работать при сетевых сбоях, но данные могут быть временно несогласованными.

Выбор подхода зависит от задач, которые решает ваша система. Например, в финансовых приложениях крайне важна согласованность данных, в то время как в социальных сетях и онлайн-играх приоритет часто отдаётся доступности.

Ставьте огоньки, если было интересно и полезно! Рррррработаемс!

Road to FAANG

08 Oct, 13:21


Знаете ли вы, как злоумышленники могут использовать ваш API против вас?

API (Application Programming Interface) — это что-то вроде моста, который соединяет разные программы, чтобы они могли "общаться" друг с другом. По сути, это набор правил, который позволяет одному приложению попросить у другого нужные данные по Интернету или воспользоваться его функциями.

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

Сейчас мир во многом зависит от таких интерфейсов. Но, несмотря на их важность, с безопасностью у API часто бывают проблемы: могут не быть настроены важные авторизационные механизмы, а конфигурации иногда далеки от идеала. Это может стать причиной утечки данных. За последние годы такие уязвимости привели к крупным скандалам, когда миллионы личных данных оказались в свободном доступе, а компании понесли огромные убытки.

Какие же самые распространённые ошибки при создании API?

🐛 Излишнее раскрытие данных

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

Например, если API случайно возвращает сведения о структуре базы данных, внутренних запросах или лишние поля с чувствительными данными (например, пароли пользователей), злоумышленники могут использовать эти данные для атак. Это может включать попытки взлома, обхода системы безопасности или получение несанкционированного доступа к системе.

Чтобы этого избежать, нужно следить, чтобы ваш API возвращал только те данные, которые действительно необходимы для запроса.

Ещё один важный момент — лимиты запросов. Это ограничения, которые ставят предел на количество запросов за определённый период времени. Это полезно для защиты от перегрузки и злоупотреблений возможностями вашего API.

🐛 Незащищенные API-ключи

API-ключи — это уникальные идентификаторы, которые позволяют использовать ваш API в принципе. Если ключи окажутся в руках злоумышленников, они смогут получить доступ к вашему API и использовать его без вашего разрешения. Чтобы этого не допустить, ключи нельзя хранить в публичных местах, например, в открытых репозиториях, и важно регулярно их обновлять.

🐛 Доверие всему миру

Никогда не думайте, что если что-то в интернете, то это автоматически безопасно и приватно. Интернет — это огромное пространство, и если ваш сервис не защищён как надо, он может стать лёгкой добычей для злоумышленников. Здесь важно применять принцип "ноль доверия" — это значит, что нужно постоянно проверять каждого пользователя и каждое устройство, даже если они уже подключились к вашей системе.

Принцип "ноль доверия" требует, чтобы каждый запрос проходил через аутентификацию (подтверждение, кто это) и авторизацию (что им вообще разрешено делать). Даже если запрос идёт изнутри системы — не расслабляйтесь, проверяйте всё. Особенно это важно, когда речь идёт о чувствительных данных, таких как личная информация, адреса или финансовые данные.

Плюс, не стоит думать, что раз данные передаются по интернету, то они в безопасности сами по себе. Обязательно используйте шифрование и защищённые протоколы (типа HTTPS), чтобы ваши данные не могли перехватить.

Если вы хотите глубже разобраться в этой теме, будет полезно ознакомиться с OWASP Top Ten для API — это список десяти самых распространённых и опасных уязвимостей API, составленный сообществом экспертов по безопасности. Следование этим рекомендациям помогает предотвратить большинство типичных угроз.

Если вы нашли этот материал полезным, ставьте огоньки! 🔥 И не забудьте оставить комментарий, что ещё было бы интересно обсудить.

Road to FAANG

04 Oct, 13:58


Логи! Вы уже наверняка сталкивались с ними, без них в разработке сейчас никуда.

Что это вообще такое и как они помогут вам не только понять, что творится с вашим приложением, но и быстро исправить любую проблему?

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

Узнаете, как с помощью библиотек сможете не просто собирать логи, но и сохранять их в надёжных хранилищах типа ElasticSearch.

Поговорим об уровнях логирования: INFO, DEBUG, ERROR — и как их использовать, чтобы разбираться в коде как настоящий профессионал.

Смотрите на удобной для вас площадке!

📷 YOUTUBE
📷 VK
📷 RUTUBE

Road to FAANG

04 Oct, 07:46


🎉"Шпаргалка по Spring для начинающих" уже доступна в бесплатной библиотеке Java Junior!

Spring Framework — это мощный инструмент для разработки на Java, значительно упрощающий создание веб-приложений. А его знание критически важно, потому что он является стандартом в индустрии для разработки корпоративных приложений. Разобравшись в этой технологии, вы сможете работать над проектами любой сложности и масштаба, обеспечивая при этом высокую производительность и гибкость.

⬇️В этой шпаргалке вы узнаете:

🟠Что такое паттерн Наблюдатель
🟠Как его реализовать в Java
🟠Плюсы и минусы этого паттерна
🟠Как осуществлять реализацию асинхронных наблюдателей
🟠Что такое события в Spring Boot
🟠Как тестировать слушателей событий
🟠О реальных сценариях использования событий в Spring Boot

Конечно же, все максимально подробно с примерами кода и практическими рекомендациями! Это отличный способ быстро погрузиться в мир Spring и начать применять его в своих проектах! Шпаргалку вы можете скачать ЗДЕСЬ.

Road to FAANG

02 Oct, 12:44


Настраиваем CI в Проекте | Инструкция для Начинающих

Вот конкретный пример настроек CI на GitHub Actions, который мы с ребятами сделали у меня на Java Буткемпе: ПРИМЕР

В посте выше я рассказывал, что такое вообще CI и GitHub Actions

Что делает этот файл настроек из примера?

Если он есть прямо внутри вашего проекта в папке *.github/workflows*, то когда вы загружаете ваш проект на GitHub, то благодаря этому файлу система GitHub Actions автоматически поймет, что с таким проектом нужно начинать работать.

В самом этом файле прописаны конкретные инструкции для GitHub Actions, которые он начнет читать сразу, когда этот файл будет загружен в ваш репозиторий на GitHub. В этих инструкциях мы (программисты) буквально говорим, что именно должно автоматически запускаться с помощью GitHub Actions и когда именно, т.е. при каких событиях/действиях внутри репозитория.

Т.о. в этом файле нам нужно определить две основные вещи: когда GitHub Actions запускается, и что он вообще делает. GitHub Actions - это по сути робот, которому мы даем инструкции, а он их исполняет на серверах GitHub. Так вот в этом файле мы как раз даем эти инструкции.

CI - это в первую очередь про запуск тестов. Но когда именно они должны запускаться в нашем репозитории? Когда в нем появляются новые изменения!

Именно для этого в данном примере настроек есть следующий блок:

on:
pull_request:
branches: [master]

Здесь мы говорим GitHub Actions: “Запускайся, когда создается новый Pull Request в ветку мастер”. Т.о. мы определяем событие, триггер, условие, которые и приведут к тому, что запустятся все действия, которые мы опишем ниже в этом файле настроек CI.

Теперь, раз мы сказали “когда” запускать тесты в нашем репозитории, нужно сказать, как именно их запустить в нашем репозитории. GitHub Actions запускает все действия на своих собственных серверах - обычных компьютерах в датацентре GitHub.

В разделе jobs этого файла мы уже прописываем, что конкретно нужно выполнить в GitHub Actions.

runs-on: ubuntu-latest

Говорит о том, что мы будем запускать все на сервере, на котором стоит Linux - конкретно Ubuntu. Надо же на сервере иметь какую-то ОС, чтобы наши тесты взлетели.

В разделе steps перечисляем шаги, которые нужно выполнить последовательно, чтобы запустить наши тесты из репозитория. И там по порядку:

name: Checkout Repository
uses: actions/checkout@v2

Это шаг для скачивания нашего GitHub-репозитория, в котором мы находимся, на тот самый сервер, который GitHub Actions будет использовать для запуска тестов. Он же пустой сначала! Туда буквально нужно загрузить наш код из GitHub.

name: Set Up JDK 17
uses: actions/setup-java@v2

Это шаг для установки на этот сервер джавы. Приложение у нас на джаве, тесты - тоже. А сервер был пустой, значит сначала джаву туда нужно поставить, чтоб все запустилось!

name: Build Gradle
run: ./gradlew build

Здесь буквально в терминале нашего сервера запускаем команду gradle build для сборки нашего проекта и проверки, что он компилируется в принципе. Проект у нас на Gradle, так что от него и команду пишем.

name: Run tests
run: ./gradlew test

Ну а здесь уже запускаем все тесты в нашем проекте тоже с помощью команды gradle test. В нашем проекте используется обертка над обычным Gradle - gradlew. Поэтому команда выглядит так. По сути это то же самое, что мы в терминале у себя на компе локально дергаем, когда гоняем тесты.

Теперь все эти компоненты будут выполнены автоматически именно в этом порядке каждый раз, когда создается PR в ветку master в нашем репозитории! И GitHub Actions сам найдет нужный сервер, сам выполнит эти команды и сообщит нам о статусе их выполнения. Теперь мы всегда будем знать, прошли ли все тесты после наших изменений или нет!

Ставьте огоньки 🔥, если было полезно! Работаемс!

Road to FAANG

30 Sep, 09:02


3 главных протокола в интернете простым языком

Задумывались ли вы когда-нибудь, как ваш телефон или ноутбук так просто выходят в интернет? На первый взгляд — чистая магия! Но за этим стоит продуманная система правил и стандартов обмена данными, которые называются протоколами.

🌐 Что такое протоколы?

Протоколы — это правила игры. Представьте, что вы пытаетесь поговорить с кем-то, кто говорит на совсем другом языке. Вы машете руками, возмущаетесь, но не понимаете друг друга — у вас нет общего способа обмениваться информацией. Протоколы обеспечивают такой "общий язык" для всех устройств, которые соединяются через интернет. Каждый протокол отвечает за определённую задачу. Посмотрим на самые популярные из них:

🚦 TCP/IP:

Самый важный протокол — это TCP/IP. Его можно представить как дорогу, по которой мчатся данные (например, ваш комментарий к этому посту или видео на YouTube). Протокол состоит из двух частей:

1. IP — это уникальный номер вашего компьютера среди всех компов в интернете. Зная такой номер вашего компа, другие компьютеры могут отправить данные на ваш
2. TCP — следит, чтобы данные не потерялись в пути. Если кусочек информации потерялся в дороге, TCP запросит его заново у отправителя. Происходит это благодаря тому, что каждая переданная часть данных (пакет) пронумерована, и получатель проверяет, все ли пакеты пришли в нужной последовательности. Если какой-то пакет не дошел или был повреждён, получатель отправляет отправителю запрос на повторную отправку именно того пакета, который был утерян.

📩 HTTP/HTTPS

Когда вы начинаете какую-то активность на сайте (нажимаете на кнопки, пишете что-то, отправляете и т.п.), за работу берётся HTTP.

HTTP - протокол, построенный на базе TCP/IP. Он определяет формат, в котором данные передаются через TCP/IP при веб-взаимодействиях. Т.о. он делает TCP/IP еще более структурированным и удобным для понимания обеими сторонами - отправителем и получателем данных (клиентом и сервером).

Например, это могут быть два разных приложения, которые обмениваются между собой информацией по интернету. Взаимодействие по HTTP очень простое: отправитель формирует запрос от вашего браузера (например: «дай мне список товаров»), отправляет его получателю, а тот возвращает ответ - данные с результатом выполнения операции (например, конкретный список товаров).

Получатель - это просто компьютер, на котором запущены ваши программы, которые умеют обрабатывать такие запросы клиентов (пользователей). Еще такой комп называют “сервером”. В ответ на запрос, сервер передаёт обратно отправителю нужные данные — это могут быть тексты, картинки или файлы. А HTTP здесь выступает как курьер, который доставляет информацию туда и обратно.

Но есть и улучшенная версия — HTTPS, которая шифрует данные при передаче для безопасности, чтобы никто в пути не подглядывал, что вы там отправляете — ваши секреты остаются приватными.

📡 DNS

Когда вы вводите адрес сайта, например, google.com, ваш компьютер на самом деле не понимает, что это значит. Ему нужен тот самый IP-адрес, о котором мы говорили выше. Потому что сервер Google — это просто компьютер в интернете, на котором запущен поисковик Google и чтобы найти этот сервер, нужно знать его уникальный номер — IP-адрес компьютера, на котором запущена программа Google-поиск.

Но как же превратить google.com в реальный IP-адрес? Здесь на помощь приходит DNS — он переводит доменные имена (адреса сайтов, URL) в IP-адреса, чтобы ваш запрос знал, куда идти. DNS похож на глобального телефонного оператора — вы говорите: «Соедините меня с Google», а он отвечает: «О, это 216.58.209.14, соединяю!»

Мы тут прошлись по верхам, но если вы хотите погрузиться в HTTP глубже, то ставьте огоньки! 🔥Также пишите в комменты, какие прочие протоколы хотелось бы разобрать подробнее и простыми словами!

Road to FAANG

28 Sep, 10:26


Как Самому Настроить CI/CD Легко и Быстро?

Вероятно, вы слышали модные слова CI/CD. Топ-компании используют эти практики - это точно. Но как вам реализовать их в собственном проекте, чтобы добавить затем CI/CD в резюме, да и вообще разбираться в том, что это такое и зачем вообще?

Ответ - GitHub Actions!

Что такое CI простыми словами?

CI - Continuous Integration или “Постоянная Интеграция”. Если перевести эти слова еще и на человеческий язык, то можно сказать так:


CI - это постоянное добавление нового кода в ваше приложение и автоматическая проверка, что все новые и старые части программы продолжают работать правильно вместе.


Как это выглядит обычно: разработчик создает Pull Request на GitHub с его новыми изменениями, которые он хочет включить в основной код. Это и есть добавление нового кода. Но еще нужно сделать проверку, что новые части не сломают старые, и что все приложение целиком продолжает работать правильно. Как это сделать? Запустить все тесты, конечно!

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

Как же это сделать в моем проекте?!

Тогда если мы хотим добавить CI в свой проект, то нам нужно разобраться, где именно, как и какие автоматизации нам нужно настроить и заставить их автоматически запускаться на каждый Pull Request в наш репозиторий с проектом.

Где мы обычно храним код нашего проекта? На GitHub. Где мы можем создавать Pull Request-ы? Тоже на GitHub. Тогда было бы очень удобно, если бы на GitHub была какая-нибудь фича для автоматического запуска всех тестов внутри нашего репозитория с кодом каждый раз, когда мы создаем в него новый Pull Request…

И такая фича есть! GitHub Actions - это целый модуль, который уже встроен в GitHub как раз для таких задач.

GitHub Actions - это программа встроенная в GitHub, которой вы можете сказать с помощью специальных настроек в вашем коде следующее:

1. Когда в мой репозиторий создается новый Pull Request
2. Возьми свободный компьютер в облаке GitHub (да!)
3. Поставь на него Java (или что вы используете)
4. Запусти все тесты внутри этого репозитория

Т.о. с помощью GitHub Actions вы можете прям взять комп в аренду у GitHub, настроить его так, как вам нужно для запуска ваших тестов, а затем и выполнить команду их прогона. И все это с помощью нескольких строчек настроек в специальном файле!

Файл настроек GitHub Actions, который для одного из микросервисов написали ребята у меня на Java Буткемпе: ПРИМЕР

Если хотите, чтобы я подробно разобрал этот пример, зачем там нужна каждая строчка, и как написать свой собственный конфиг правильно, то ставьте огоньки 🔥 на этот пост! То же самое касается и подробного разбора, что такое CD и как реализовать его в GitHub Actions - ставьте реакции, будем делать!

Работаемс!

Road to FAANG

23 Sep, 16:19


Главные компоненты Spring: от создания бинов до работы с микросервисами

Продолжаем наш мини-сериал про Spring! На этот раз давайте сделаем обзор самых популярных компонентов, которые встречаются практически в каждом проекте. Компонентов в Spring реально много, но сегодня мы сфокусируемся на самых важных и полезных для вас. Это именно те инструменты, с которыми вы столкнётесь, когда начнёте работать над серьёзными проектами — от работы с вебом и базами данных до безопасности и интеграции с другими системами. Начнем!

🟠Spring Core: основа всего

Это сердце Spring. В Spring Core лежат самые базовые и важные вещи, такие как контейнер для управления бинами и внедрение зависимостей (это когда Spring сам решает, что и как создать, чтобы всё правильно работало). Без этого компонента не будет ни одного проекта на Spring — это его фундамент.

🟠Spring Web: работа с вебом

Если вы делаете веб-приложение, то без Spring Web не обойтись. Этот компонент помогает строить приложения по шаблону Model-View-Controller (модель-представление-контроллер). Проще говоря, он разделяет логику приложения, чтобы было удобно управлять данными, обработкой запросов и формированием ответов клиенту. С его помощью вы можете легко создавать контроллеры для обработки HTTP-запросов и строить REST API.

🟠Spring Data: это база

Spring Data берёт на себя всю рутинную часть работы с базами данных. Он автоматически генерирует запросы, обрабатывает полученные данные и позволяет вам меньше думать о тонкостях работы с БД — просто описываете модель (обычный класс в Java, который соответствует таблице в базе) и Spring сам всё сделает.

🟠Spring Security: защита вашего приложения

Если вы хотите, чтобы ваше приложение было защищено (а кто не хочет?), Spring Security — отличная идея. Этот компонент отвечает за аутентификацию и авторизацию. Хотите защитить страницу логином и паролем? Пожалуйста. Нужно настроить роли для разных пользователей? Легко. Этот компонент помогает быстро внедрить безопасность, не погружаясь в детали (шутка, погружаясь).

🟠Spring AOP: аспекты

Когда вам нужно выполнять одинаковый код в разных местах (например, логирование, безопасность, транзакции), Spring AOP спасает. Он позволяет разделить код на модули, которые выполняются в нужных местах, не засоряя бизнес-логику. Вам не нужно прописывать одно и то же во всех методах — просто создайте "аспект", и Spring сам вызовет его в нужный момент.

🟠Spring Cloud: управление микросервисами

Spring Cloud помогает микросервисам автоматически находить друг друга и делить между собой нагрузку, с его помощью можно управлять настройками всех сервисов из одного места, чтобы не настраивать каждый отдельно, а еще — если один сервис вдруг сломается, Spring Cloud не даст всему приложению упасть — система просто переключится на резервный вариант.

🟠 Spring Boot: быстрое создание приложений

Spring Boot — идеальный инструмент, если вы хотите быстро запустить проект без лишних настроек. Он автоматически настраивает базы данных, веб-серверы, безопасность и многое другое. Благодаря стартерам — готовым наборам библиотек, которые подключаются одной строкой кода, — вам не нужно вручную прописывать все конфиги. Например, spring-boot-starter-web добавляет всё необходимое для веб-приложения, включая встроенный сервер и поддержку REST API. Boot ускоряет разработку, позволяя сосредоточиться на коде, а не на настройках.

Все эти компоненты делают приложения гибкими, надёжными и масштабируемыми. Spring берёт на себя рутину, позволяя сосредоточиться на бизнес-логике.

Road to FAANG

22 Sep, 14:40


База Spring: Бины и ApplicationContext простыми словами

В Spring ключевыми элементами управления вашим приложением являются бины. Бин — это просто Java-объект, который создал и которым управляет именно Spring.

Но как Spring понимает, какие объекты он должен создать?

Все супер просто. Если у вас есть обычный класс, то вы можете пометить его аннотацией @Component, и Spring при запуске вашей программы увидит этот класс, увидит эту аннотацию и поймет, что ему - Spring - нужно самому создать объект этого класса. Именно такой объект и будет называться Spring бином. Потому что он был создан именно Spring, а не вы создали его через оператор new.

Разумеется, для создания такого объекта могут потребоваться несколько зависимостей - других объектов, которые должны содержаться в полях вашего нового бина. Если эти объекты-зависимости сами являются бинами, то Spring может с легкостью автоматически привязать их ко всем необходимым полям вашего нового объекта. Делает Spring это с помощью подхода Dependency Injection, а конкретно собственной его реализации - autowiring.

Пример:
@Component
public class UserService {
private final UserRepository userRepository;

@Autowried
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}


Когда Spring будет создавать бин UserService, то сразу увидит, что ему для создания необходим объект UserRepository. Если UserRepository и сам является бином, то он будет “инжектирован” в UserService через его конструктор, на котором висит аннотация @Autowired. Эта аннотация указывает, каким именно способом заполнять поля создаваемого бина.

А где же такие бины хранятся?

Когда Spring создает все бины, то он сохраняет их в специальное хранилище внутри себя. Бины будут находиться в этом хранилище на протяжении всего своего времени жизни - например, до остановки программы.

Именно благодаря этому хранилищу Spring может проводить вот эту “инжекцию” бинов-зависимостей. Когда Spring создает бин UserService в примере выше, то для его создания просто необходим бин UserRepository. Где его найти? Именно в этом хранилище!

Если Spring до этого создал бин UserRepository, то он находится в этом хранилище Spring-а, его можно оттуда вытащить и использовать в качестве параметра для конструктора UserService. Именно благодаря такому хранилищу Dependency Injection и может работать!

Такое хранилище в Spring называется ApplicationContext. Помимо управления бинами, оно поддерживает такие полезные штуки, как аннотации, автоматическую инициализацию всех бинов при старте приложения (ранняя инициализация) и даже может обрабатывать события, например, когда один объект должен узнать, что другой что-то сделал.

Road to FAANG

20 Sep, 14:42


Что такое Spring и почему без него не обойтись?

Загадочная технология Spring — это по сути просто огромный набор библиотек, которые решают множество задач: от работы с базами данных до управления безопасностью и интеграции с другими сервисами. Основной философией Spring является инверсия управления (IoC) и внедрение зависимостей (DI). Но что это значит? Давайте разбираться!

IoC (Inversion of Control)

Представим, что у вас есть приложение Киоск и кто-то сделал покупку хлеба в вашем инновационном сервисе! Вам нужно создать объект Покупка, и если приложение не использует Spring, вы бы сделали это вручную: создали бы объект класса Purchase с информацией о товаре и сумме. Но со Spring’ом вы можете просто сказать, что вам нужен объект Purchase, и Spring сам создаст его, когда это понадобится. Это и есть инверсия управления (IoC) — вместо того, чтобы вы управляли созданием объекта, это делает Spring. Когда киоску нужно зарегистрировать покупку, Spring сам создаст объект покупки и использует его в нужный момент.

DI (Dependency Injection)

Теперь представим, что каждая покупка в вашем киоске может быть оплачена различными способами — картой, наличными или через мобильное приложение, и за это отвечает класс PaymentMethod. Обычно вам бы пришлось вручную создавать объекты способа оплаты и передавать какой-то из них в покупку. Но с Spring всё проще: вы указываете, что для создания покупки требуется зависимость — объект PaymentMethod. Spring сам решит, какой именно способ оплаты использовать, и "внедрит" его в покупку автоматически. Это называется внедрением зависимостей (DI) — вы избавляетесь от необходимости создавать и передавать зависимости вручную, Spring делает это за вас.

Контейнер и бины

Spring использует специальный контейнер, в нем находятся все созданные объекты(бины). Когда приложение запускается, Spring просматривает классы и создает из них бины. И контейнер умеет управлять ими - внедрять зависимости, следить за тем, чтобы они правильно взаимодействовали друг с другом, удалять ненужные. И все это происходит без вашего участия, вам нужно только написать несколько строк настроек и все!

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

Road to FAANG

18 Sep, 13:45


Вы когда-нибудь задумывались, сколько существует паттернов проектирования в программировании? Их так много, что кажется, все не запомнить, но правда в том, что 99% из них вы вряд ли когда-либо будете использовать.

Новички часто пытаются разобраться во всех подряд, вместо того чтобы сосредоточиться на ключевых, которые встречаются в каждом современном приложении, и один из них — это паттерн "Наблюдатель".

В новом видео подробно расскажу о том, как паттерны используются в Spring — фреймворке. Разберем ключевые моменты, научимся применять знания на реальных кейсах!

P.S. Переходите по ссылке ниже, я уже жду вас в чате премьеры, чтобы поболтать и ответить на все вопросы!

📷 СМОТРЕТЬ ВИДЕО

Road to FAANG

16 Sep, 11:32


Готовишься к Собесу? Нужно Знать Паттерны!

Знаете, что отличает талантливого разработчика от человека, который просто знает язык программирования? Умение строить системы, которые легко поддерживать и масштабировать.

В конечном счете, это экономит компаниям деньги - чем легче поддерживать приложение, тем меньше на это уходит времени, и это время можно потратить на новые фичи, например. Люди старательно улучшали архитектуры своих систем, чтобы работать с ними было проще и в конце концов получились универсальные схемы, которые будут работать с любыми приложениями.

Так и появились паттерны - это просто самые лучшие практики написания кода. Сегодня расскажу про три гениальных паттерна: Strategy, Decorator и Observer. Они не просто облегчат жизнь, но и заставят ваш код работать как часы. Поехали!

Strategy — меняй логику, не меняя код

Представьте, что вы разрабатываете Google Maps с выбором маршрутов на карте: пешком, на машине или на велосипеде. Тогда вы прописываете в коде условия: "если велосипед — один маршрут, если машина — другой". Выглядит хорошо, но это ровно до тех пор, пока нам не понадобилось добавить еще один способ передвижения, а затем еще и еще.

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

Паттерн Strategy решает эту проблему: в нем каждый способ перемещения — отдельный класс, который реализует логику построения маршрута для отдельного вида транспорта. Затем вы просто передаете нужный объект того или иного класса-стратегии в универсальный метод построения маршрута и логика адаптируется под выбранную стратегию.

Нужно добавить новый способ передвижения? Создаете отдельный класс, описываете его логику и готово! Основной код менять не нужно. Захотели удалить неактуальный способ передвижения? Пожалуйста! Просто удаляем класс, все остальное остается нетронутым и продолжает работать как часы!

Еще подробнее про Стратегию с примерами кода можно почитать ТУТ

Decorator — улучшай, не переписывая

Представьте, что у вас есть класс “Пользователь”. Сначала это обычный юзер. Но потом вы захотели сделать отдельную роль модератора в вашем приложении, а позже — пользователя с правами администратора.

Что вы для этого делаете? Каждый раз идете в код и переписываете класс “Пользователь”, добавляя туда новые роли и функции. Это, конечно, работает, но код становится сложнее и запутаннее с каждым изменением. Вот тут-то и приходит на помощь паттерн Декоратор, который позволяет добавлять новые возможности без необходимости ломать и переписывать базовый код!

Новые функции добавляются через обёртки вокруг основного объекта — декораторы. По сути это просто классы-наследники от основного, с немного улучшенными методами. Когда вы вызываете метод у этого декоратора, он сначала выполняет свою доп-функцию (например, проверку прав), а потом передаёт управление основному методу пользователя.

Еще подробнее о Декораторе можно почитать по ЭТОЙ ССЫЛКЕ

P.S.

А про паттерн “Наблюдатель” я уже готовлю грандиозное видео в классическом стиле! А еще вы представить себе не можете, как фреймворк Spring делает паттерны в 100 РАЗ мощнее!

Если хотите узнать больше о том, как работает Spring, и почему с ним паттерны становятся еще круче, то ставьте огоньки этому посту и пишите в комменты, про какую тему в Spring или какой паттерн вам было бы интересно увидеть подробный разбор с анимациями!

Работаемс!

Road to FAANG

11 Sep, 14:31


Тебя 100% спросят про это на собесе: Атомарность в ACID

Атомарность в ACID гарантирует, что группа SQL запросов будет выполнена целиком или не выполнена вообще.

Представьте, что вы решили пойти на собеседование в самую крутую компанию на свете. Вы хотите показать себя великолепным специалистом и получить работу мечты. Представим транзакцию:

1. Вы приходите на собеседование
2. Вы прекрасно отвечаете на все вопросы.
3. Компания берет вас на работу.

Но если вдруг на 2 шаге вы слабо пройдете собеседование, то 3 этап не выполнится - компания уже не предложит вам оффер. Но если транзакция будет атомарной - вы можете откатить всю операцию: вы как будто и не приходили на это собеседование, рекрутер делает вид, что ничего не было и вы можете повторить операции, начиная с первого этапа.

Еще классический пример - перевод денег на карту. Процесс включает несколько шагов: списание денег с вашего счёта и зачисление на другой счёт. Важно, чтобы обе операции прошли вместе — ведь если деньги спишутся с вашего счёта, но не дойдут до другого счета, это будет полный провал.

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

Так это работает в SQL, а что по noSQL?

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

NoSQL системы не всегда могут гарантировать ту же самую жёсткую атомарность, как в SQL. В некоторых NoSQL базах, например, в MongoDB или Cassandra, атомарность поддерживается только на уровне одного документа или записи. В отличие от SQL, где система сама заботится об атомарности транзакций, в NoSQL вам нужно самим думать, как гарантировать это.

А вот в Redis - NoSQL базе - есть атомарные транзакции! Представляете?!


В Redis это делается с помощью команд MULTI (начало транзакции), набора команд, и EXEC (завершение транзакции). Однако, есть одно «но»: если вы выполните транзакцию, и в процессе выполнения одной из команд произойдёт ошибка, Redis всё равно выполнит все остальные команды, которые не вызвали ошибок. А это уже нарушает другую гарантию - Consistency или целостность данных.

Если в Redis что-то пошло не так с группой операций, полезно, чтобы система возвращала статус каждой операции. Так вы сможете увидеть, где произошла ошибка. Тогда можно либо повторить неудавшиеся операции (если они не ломают логику при повторном выполнении), либо сделать "компенсирующую транзакцию" — это своего рода отмена сделанных изменений, чтобы всё вернуть на свои места. Это помогает исправить проблемы и держать данные в порядке.

⬇️ Знания — это мощь, не упустите шанс получить их бесплатно! Загляните в библиотеку “Java Junior” по ссылке ниже, чтобы забрать подробные шпаргалки по Docker, Kafka, Микросервисам и многим другим технологиям!

🔗 ЗАГЛЯНУТЬ В БИБЛИОТЕКУ JAVA JUNIOR

Road to FAANG

09 Sep, 15:05


🎉Пополнение в нашей библиотеке Java Junior! Мы подготовили для вас шпаргалку "5 улучшений для твоего пет-проекта"!

Работа с Redis, Docker, Kafka и другими инструментами является важной частью современного стека технологий, и понимание их работы существенно повысит вашу продуктивность и ценность на рынке, поэтому мы подготовили для вас руководство как выделиться на фоне конкурентов при поиске работы и рассказали о:

🟠Spring Data Redis
🟠Spring Boot Cache
🟠Spring JDBC Batch
🟠Hibernate/JPA
🟠Docker Compose
🟠Apache Kafka
🟠AWS S3

❗️ Эти технологии востребованы работодателями, поскольку они позволяют масштабировать приложения, улучшать их производительность и упрощают работу с большими объемами данных. Понимание того, как и когда их применять, делает вас более ценным кандидатом на рынке труда.

Хотите узнать больше и улучшить свои навыки? Скачайте наш гайд и разберитесь в этих технологиях шаг за шагом!

ПОЛУЧИТЬ ДОСТУП К БИБЛИОТЕКЕ

Road to FAANG

09 Sep, 10:00


REST, SOAP, gRPC и GraphQL

Если вы хоть раз занимались разработкой, наверняка слышали про всякие там REST, SOAP, gRPC и GraphQL. Но что это вообще такое и зачем нужно? Давайте разберемся вместе и выясним, в чем разница между этими технологиями.

И в двух словах, пока мы не начали, API (Application Programming Interface) — это способ, с помощью которого разные программы общаются друг с другом.

🌐 REST (Representational State Transfer)

REST — это популярный способ работы с веб-сервисами через стандартные HTTP-запросы и JSON для передачи данных. Вы отправляете запросы на URL-адреса, и получаете данные. Это просто и удобно, особенно для простых задач. REST хорошо масштабируется, что позволяет легко управлять большими объемами данных и кэшировать запросы для ускорения работы. Но у него есть и минусы: иногда для получения нужной информации нужно делать несколько запросов на разные URL, и иногда возвращается больше данных, чем требуется.

🧼 SOAP (Simple Object Access Protocol)

SOAP — это протокол для обмена данными, использующий XML для передачи сообщений. Он хорош для сложных и критически важных операций, где требуется надежность и безопасность. SOAP имеет встроенные функции безопасности и четкие стандарты, которые помогают обеспечить корректность данных. Но из-за использования XML и таких строгих стандартов система может стать более сложной и медленной.

🚀 gRPC (gRPC Remote Procedure Calls)

gRPC — это фреймворк для удаленных вызовов процедур, использующий HTTP/2 и Protocol Buffers. Он быстро передает данные и поддерживает множество языков программирования. Это отличный выбор для взаимодействия микросервисов между собой. Но настройка gRPC может быть немного сложной, особенно если вы новичок, а его поддержка в браузерах ограничена.

🔍 GraphQL

GraphQL — это язык запросов, который позволяет вам запрашивать у сервера именно те данные, которые вам нужны, и ничего лишнего. Вместо того чтобы получать кучу ненужной информации, как это бывает с REST API, вы можете получить только ту часть данных, которая вам важна.
GraphQL позволяет легко изменять запросы — если вам нужно получить с бэкенда что-то другое, вы можете просто подкорректировать запрос, а не менять логику сервера или добавлять новые эндпоинты. Но GraphQL требует больше внимания при настройке, если запросы не оптимизированы, это может увеличить нагрузку на приложение и привести к перегрузке.

Какой выбрать?

Каждый из этих подходов имеет свои особенности и может быть полезен в разных ситуациях. REST и SOAP хорошо работают для многих традиционных приложений, gRPC подходит для задач с высокой производительностью, а GraphQL — для гибких запросов и оптимизации данных.

🚀P.S.

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