Тихон | Помогаю разработчикам устроиться в BigTech
14.6K subscribers
459 photos
16 videos
1 file
237 links
Senior-разработчик, ментор
🫂Записаться на консультацию по трудоустройству или задать вопрос @codepunks_bro
Отзывы https://t.me/bestitteam
Download Telegram
*когда не проходит один из тестов на литкоде 😅

Типы задач на livecoding. Часть 1.

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


Два указателя — одна из самых популярных тем из алго-секции на фронт-собеседованиях, и пока не теряет обороты.

Какие задачи в целом часто дают на фронт-собеседованиях?
- Алгоритмические (два указателя, скользящее окно, хэш-таблица, стек)
- Особенности языка (асинхронность, контекст, замыкания, метод промиса или массива)
- Основы фреймворка (рефакторинг, асинхронность, особенности)

В этой серии, мы посмотрим решения самых частых алгоритмических задач, потому что задачи на JS мы многократно решали на стримах, и наверняка вы и так их помните) 👇

Заметка: без знания алгоритмической сложности тема может быть непонятной.


Что в может указывать на то, что задача решается указателями?


— Отсортированный массив
— Два массива
— Палиндром

Задача 1. Вариация на TwoSum.

Наверняка все, кто заходил на литкод ее знают.

Дан массив чисел и target, нужно найти в массиве два числа, которые в сумме дают target.

Например: [1, 3, 5, 7, 9, 13]

Решение 1.

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

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

function twoSumSorted(arr, target) {
let left = 0;
let right = arr.length - 1;

while (left < right) {
const sum = arr[left] + arr[right];

if (sum === target) {
return [left, right];
} else if (sum < target) {
left++;
} else {
right--;
}
}

return null;
}


Задача 2. Обьединить два отсортированных массива в один.

Частое решение в JS — собрать массивы через spread оператор, и далее отсортировать через sort(). И оно неверное 😅

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


Решение 2.

У задачи есть два варианта. Базовый и более интересный.

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

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


Если начать с первых элементов, можно затереть первый элемент, и получится не тот результат, который мы ожидаем)

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

function mergeSortedArraysInPlace(arr1, m, arr2, n) {
let i = m - 1;
let j = n - 1;
let k = m + n - 1;

while (i >= 0 && j >= 0) {
if (arr1[i] >= arr2[j]) {
arr1[k] = arr1[i];
i--;
} else {
arr1[k] = arr2[j];
j--;
}
k--;
}

// если в arr2 остался остаток
while (j >= 0) {
arr1[k] = arr2[j];
j--;
k--;
}
}


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

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

@codepunks_bro
👍5014🔥91🤝1
Майские праздники конечно сильно влияют на найм, за одну неделю мая удалось собрать 26 собеседований в группе, что чуть меньше чем в обычные рабочие периоды.

А также три оффера:

6 800 долларов и релокация
306 тысяч net по ИП
1 100 000 тенге(176 тысяч рублей)

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

Не густо, но для праздничной недели результаты хорошие) 🌚
🔥24👍1293
Почему сейчас фундаментальные знания важнее всего

Эту мысль подчеркивает Matt Pocock, создатель самых подробных разборов по TS, на конференции AI Engineer 👇
Главная проблема замещения программистов — контекст проекта, бизнеса, который сложно передать через .md файл

90% разработчиков не доверяют, и проверяют по несколько раз код после генерации, оставаясь главным проводником качества и ответственности за проект

Еще кто-то должен нанимать, обучать людей, и планировать рост проекта на большом масштабе


А также на фото анализ от Citadel Securities на основе данных Indeed

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

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

За каждым спадом всегда идет рост

Не теряем хватку, забираем лучшее 👋
Please open Telegram to view this post
VIEW IN TELEGRAM
22👍16🔥2
Как удобнее всего оплачивать зарубежные сервисы?

Вообще вариантов очень много, самый базовый и на все случаи: eResidency Казахстана и карта Freedom Bank. Я сам им пользуюсь, но чтобы получить резиденство КЗ нужно будет отдать 120$, зато оформление карты бесплатное. Пластиковую карту можно доставить в любой город России.

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

И дальше, для меня, идут виртуальные карты, например WantToPayBot, но в итоге с комиссиями при регулярных переводах выходит дороже, чем если сделать свою карту в банке. Также этим способом оплатить можно не все сервисы, например с claude очень сложно.

А как вы оплачиваете сервисы?
7👍3🔥3🙏1
*когда решал задачу на стриме, но на собеседовании делаешь вид, что видишь ее в первый раз

Сегодня четверг, а значит мы по традиции собираемся решать задачи с livecoding секций 🤓

В этом месяце это последний стрим по livecoding, потому что у нас в подготовке еще несколько стримов с hr и много всего интересного

Будем решать все задачи вместе с вами в чате, и разбирать решения пока все ответы не будут правильными) 👇

nextTask = allCorrect ? harderTask() : repeat()


🗓 Четверг
20:00
📍 Ссылка придет в 🔺бота (там нет ничего лишнего, только ссылки на стримы)

@codepunks_bro
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19🤓98👍6🆒1
Что могут спросить на собеседовании по теории TS?

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

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


Основы
▸ Что такое TypeScript и зачем он нужен? → TypeScript с нуля
▸ Чем TypeScript отличается от JavaScript? → TS за 5 минут
▸ Что такое статическая типизация? → Базовые типы
▸ Какие базовые типы есть в TypeScript? → Everyday Types
▸ Что такое вывод типов (type inference)? → Type Inference

Специальные типы
▸ В чём разница между any и unknown? → unknown в функциях
▸ Когда использовать тип never? → The never type
▸ Что такое void и когда он нужен? → void

Составные типы
▸ Что такое union types? → Union Types
▸ Что такое intersection types? → Intersection Types
▸ Что такое литеральные типы? → Literal Types
▸ Чем enum отличается от union литералов? → Enums
▸ Что такое кортежи (tuple types)? → Tuple Types

Объекты и интерфейсы
▸ В чём разница между type и interface? → type vs interface
▸ Как объявлять необязательные и readonly свойства? → Optional & Readonly
▸ Что такое индексные сигнатуры? → Index Signatures

Сужение типов
▸ Что такое type narrowing? → Narrowing
▸ Что такое type guards и assertion functions? → Type Predicates
▸ Что такое discriminated unions? → Discriminated Unions

Операторы типов
▸ Что делает оператор keyof? → keyof Type Operator
▸ Чем отличается typeof в типах от typeof в JS? → typeof Type Operator
▸ Что такое as const? → Type Assertions
▸ Для чего нужен оператор satisfies? → satisfies в TS 4.9

Дженерики и продвинутые типы
▸ Что такое дженерики и зачем они нужны? → Generics
▸ Как ограничивать дженерики через extends? → Generic Constraints
▸ Что такое параметры дженериков по умолчанию? → Default Type Parameters
▸ Что такое условные типы? → Conditional Types
▸ Как работает infer в условных типах? → Inferring with infer
▸ Что такое mapped types? → Mapped Types
▸ Какие utility types самые полезные? → Utility Types

Функции и классы
▸ Как описывать тип функции? → Functions
▸ Что такое перегрузка функций? → Function Overloads
▸ Как типизировать this в функции? → Declaring this
▸ Какие возможности типизации есть у классов? → Classes
▸ Что такое абстрактные классы и implements? → Abstract Classes
▸ Что такое декораторы в TypeScript? → Decorators

Конфигурация и модули
▸ Как устроены модули и импорты? → Modules
▸ Ключевые опции tsconfig.jsonTSConfig Reference

React + TypeScript
▸ Как типизировать React-компонент и его props? → React + TypeScript
▸ Как типизировать children в React? → React TS Cheatsheet

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

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

Если тему задач по TS тоже стоит раскрыть подробнее, ставьте 👍 и мы соберем все что у нас встречалось на собеседованиях в отдельный пост 🫡

По любым вопросам, если что, отвечаю тут) @codepunks_bro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4421🔥91
Отзывы | Тихон
Voice message
Ооочень крутой отзыв от участника комьюнити 👀

Немного расскажу предистории, но не раскрывая все карты)

Искали полную удаленку, в международную компанию с зарплатой от 3.500 $, и за 2.5 месяца активного участия дошли до результата с первых собеседований 😎

0:30 самостоятельный поиск
01:20 что понравилось
01:40 как работали с ментором :D
02:00 после выхода на рынок
02:25 срок до оффера
02:45 про ментора
03:30 про комьюнити
03:50 после трудоустройства
04:30 общие впечатления)

Всегда круто и интересно работать с талантливыми разработчиками, и вместе делать стабильный результат 👋

Автор: @solnotka ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1543🤩2👍1
👽Что будет в консоли?
Anonymous Quiz
39%
First Second
28%
Third
26%
Third Third
7%
Third Fourth
🌚19🤓1210😭7🏆6
Когда делаешь ревью резюме каждый день, в голову приходят разные идеи..)

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

Но финальное ревью всегда остается за hr и менторами. Просто рутинные и неочевидные вещи иногда лучше парсить и смотреть в боте.

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

Проще говоря, чтобы проходить фильтры, мы написали свои фильтры 🌚

👇 А если у вас задача написать резюме или доработать 👇

То завтра у нас будет стрим с рекрутером и ментором, где мы будем смотреть резюме разработчиков и прогонять через бота 🫡

Это в 100 раз лучше и на 800р дешевле чем платный разбор от hh 😅

Также можете отправлять ваши резюме мне на @codepunks_bro или под этим постом

А завтра мы все их посмотрим и постараемся дать максимально полезную ОС 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍124👀2
Сегодня мы с рекрутером Таней и ментором из команды, будем смотреть резюме, прогонять через бота

Надеюсь, что получится увеличить конверсии и обменяться опытом 👍

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

🗓 Четверг
20:00
📍 Ссылка придет в 🔺бота (там нет ничего лишнего, только ссылки на стримы)

Активное участие максимально приветствуется, будем вместе приводить наши резюме к оптимальному виду)

Отправляйте cv'шки в комментарии 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
20🔥8👍5🤩1
Summary вчерашнего стрима 👨‍💻

Мы посмотрели и прогнали через бота более 40 резюме, и вот к чему пришли 👇


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

Контакты -> telegram, почта, номер. Если они только в профиле, рекрутеру нужно покупать доступ к контактам. Добавляем их в описании работы и в блоке "о себе".

Фото -> Айтишное, в идеале с митапа/конференции, можно поправить нейронкой и сделать хороший фон. Фото и заполненность профиля вызывает доверие, а если фото хорошо сделано, то это вообще шик.

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

Обновление резюме -> Каждый день нужно поднимать резюме, а также немного редактировать: добавить пробел, точку, в общем что угодно) Это показывает что вы прямо сейчас, сегодня, ищете работу и вам можно писать.

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


Надеюсь, что стрим и саммари были полезны, и всем с командой желаем побольше собеседований! Keep going

@codepunks_bro
23🔥11👍6🥰2👏2
Что могут спросить на собеседовании по теории React?

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

Основы
- Что такое React?
- Что нового в React 18, 19?
- Перечислите особенности React
- Назовите преимущества использования React
- Является ли React реактивным?
- Разница между JSX и HTML
- Что такое JSX и как он компилируется?
- Как отрендерить HTML код в React-компоненте?

Virtual DOM -> Fiber
- Что такое Virtual DOM? Как он работает с React?
- Что такое React Reconciliation?
- Что такое React Fiber?
- Назовите основную цель React Fiber
- Разница между теневым (Shadow) и виртуальным (Virtual) DOM

Компоненты
- Разница между классовым и функциональным компонентами
- Разница между элементом и компонентом
- Разница между компонентом и контейнером
- Разница между управляемыми (controlled) и неуправляемыми (uncontrolled) компонентами
- Что такое компонент-переключатель (Switching Component)?
- Что такое распределённый компонент?
- Что такое Компонент высшего порядка (HOC)?
- Что такое инверсия наследования (Inheritance Inversion)?
- Методы жизненного цикла компонента в React
- Стадии жизненного цикла компонента в React
- Разница между рендерингом и монтированием

Пропсы, состояние, поток данных
- Как React обрабатывает / ограничивает использование пропсов определённого типа?
- Что такое «бурение пропсов» (Prop Drilling)? Как его избежать?
- Как передавать пропсы в React Router?
- Что такое поднятие состояния вверх (Lifting State Up)?
- Как в React реализовать двустороннее связывание данных?
- Что такое обратный поток данных в React?

Хуки (Hooks)
- Что такое React хуки (Hooks)?
- Преимущества хуков?
- Недостатки хуков?
- Правила (ограничения) использования хуков?
- Когда использовать useMemo, а когда useCallback?
- useId: https://ru.react.dev/reference/react/useId
- useTransition: https://ru.react.dev/reference/react/useTransition
- useDeferredValue: https://ru.react.dev/reference/react/useDeferredValue
- useSyncExternalStore: https://ru.react.dev/reference/react/useSyncExternalStore
- useInsertionEffect: https://ru.react.dev/reference/react/useInsertionEffect

Рендеринг
- Что такое условный рендеринг (Conditional Rendering)?
- Что такое «ленивая» (Lazy) функция?
- Что такое синтетические события в React (SyntheticEvent)?
- Что такое события указателя (Pointer Events)?
- Что такое Error Boundary?
- Что такое строгий режим (StrictMode)? Его преимущества?

Маршрутизация и стейт-менеджмент
- Чем React Router отличается от обычной маршрутизации?
- Какие хуки были добавлены в React Router версии 5, 6, 7?
- Что такое Reselect и как он работает?

Прочее
- Что такое «опрос» (Polling)? Как его реализовать в React?
- Техники оптимизации производительности в React?
- Практики безопасности в React

Вообще вопросов по React не больше 100, может показаться что это много, но допустим в разделе "Безопасность, браузер, веб" уникальных вопросов как минимум в 4 раза больше, буквально 400+, поэтому я все-никак не могу найти способ уместить это в один лаконичный пост.. 👨‍💻


Но если вы поставите много очкариков 🤓, я постараюсь все это осилить и подготовить пост по вопросам из этой категории тоже)

Какие еще вопросы вы встречали на собеседованиях?

Кто я | Кейсы | Менторство
🤓13910👍7🔥54