Про самопрезентацию
И сразу интересное наблюдение про самопрезентацию
На прошлой неделе проходил техническое собеседование в прикольный стартап.
Прошел на финальную встречу с CTO и лидами - все супер, сидим болтаем, трём за технологии и кейсы, ничего не предвещает беды.
И тут CTO вспоминает что у него был пулл вопросов технического характера для самой самой финальной проверки кандидата. И первый из этих вопросов - на typescript.
Сначала подумал что просто по Utility types погоняют, или про различия interface и type спросят. И тут меня просят написать несколько разных дженериков 😱. А я их последний раз писал пол года назад, синтаксиса уже естественно не помню, короче жопа. На финальном этапе на таком базовом вопросе естественно опозориться не хочется.
И пока я спешно, всеми извилинами, пытался из головы достать смутные образы синтаксиса - CTO говорит примерно следующее "Ну такие вопросы задавать вообще неприлично, поэтому этот блок пропустим, по нему никаких сомнений нет. Лучше расскажи про свой последний кейс с...".
На этом моменте я искренне почувствовал студенческое "прокатило".
По итогу оффер на 300+ прям в этот же день. И все благодаря правильной самопрезентации на протяжении всех этапов, по итогу которых в глазах команды я уже был "компетентным спецом с большим опытом".
Если у вас есть слабые стороны - не выводите на них собеседника, и не плавайте с ответами. Лучше сразу сказать, что вы не знаете и последний раз в проде видели этот вопрос примерно "никогда"
На ваши сильные стороны делайте акцент и углубляйтесь в рассуждениях до потолка ваших знаний
Лучше выглядеть как специалист в некоторых областях, чем плавать во всех вопросах одинаково поверхностно
Итоги недели в мире бэкенда и обзоры новых сервисов: 3 эпических сбоя, вызванных регулярками
😈 Осторожно – Regex! 3 эпических сбоя, вызванных регулярками
Регулярные выражения – мощный, гибкий и многофункциональный инструмент для обработки текста и валидации данных. С их помощью можно решать сложные задачи буквально одной строкой кода. Однако неправильно составленное регулярное выражение может превратиться в настоящую бомбу замедленного действия, готовую взорваться при определенных входных данных. Последствия могут быть сложноустранимыми, а иногда катастрофическими – как в этих реальных кейсах.
Сбой Stack Overflow
В 2016 году Stack Overflow испытал 34-минутный перебой в работе. Причиной стало регулярное выражение, используемое для обработки пользовательского ввода:
^[\s\u200c]+|[\s\u200c]+$
Это выражение должно было находить пробелы в начале и конце строки. Проблема возникла, когда какой-то пользователь запостил комментарий, содержащий около 20 000 последовательных пробелов. Механизм обработки регулярных выражений начал проверять каждый пробел. Когда после 20 000-го пробела встретился другой символ, движок начал откатываться назад, пытаясь найти соответствие, начиная со второго пробела, третьего и так далее.
Это привело к катастрофическому возврату (catastrophic backtracking) – ошибке, которая возникает, когда движок регулярных выражений тратит чрезмерное количество времени на попытки найти соответствие шаблону, перебирая различные комбинации. Количество проверок начало лавинообразно увеличиваться и быстро достигло 199 990 000 – это вызвало значительную задержку и в итоге сбой системы.
Для решения проблемы потребовалось 10 минут на обнаружение причины, 14 минут на написание исправления и еще 10 минут на развертывание решения. В результате регулярное выражение было заменено на функцию подстроки.
📖#️⃣ Больше полезных книг вы найдете на нашем телеграм-канале
Сбой Cloudflare
2 июля 2019 года произошел крупный сбой в работе платформы Cloudflare. Один из инженеров написал регулярное выражение, которое привело к действительно катастрофическому возврату – вызвало экстремальную перегрузку всей инфраструктуры. Использование процессоров выросло до 100%, а большинство сайтов, подключенных к Cloudflare, замедлились до крайности или вовсе оказались недоступными.
Коварная регулярка выглядела так:
(?:(?:\"|'|\]|\}|\\|\d|(?:nan|infinity|true|false|null|undefined|symbol|math)|\`|\-|\+)+[)]*;?((?:\s|-|~|!|{}|\|\||\+)*.*(?:.*=.*)))
Самую большую опасность в этом выражении представляет
.*(?:.*=.*)
– группа без захвата, которая может привести к чрезмерному использованию процессора при обработке определенных шаблонов. Эта конструкция вызвала серьезные проблемы с производительностью и в конечном итоге привела к массовому сбою.
Глобальный сбой Windows/CrowdStrike
19 июля 2024 года произошел самый массовый сбой в истории – из строя вышли около 8,5 млн Windows-компьютеров с ПО CrowdStrike. Причиной сбоя стало несоответствие между ожидаемым количеством входных параметров (21) и фактическим количеством параметров (20), которые были переданы в интерпретатор контента (этот компонент отвечает за обработку содержимого с использованием регулярных выражений). Когда система получила ввод с 21 параметром, интерпретатор контента попытался считать данные за пределами выделенной памяти, что и привело к сбою системы.
Привет!
Мы запустили еженедельную email-рассылку, посвященную последним новостям и тенденциям в мире бэкенда. В еженедельных письмах ты найдешь:
Языки программирования и фреймворки для бэкенда
Архитектура и проектирование серверных приложений
Базы данных и управление данными
Безопасность и защита данных
Облачные технологии и DevOps
API и интеграции
Тестирование и отладка
Инструменты и утилиты для бэкенд-разработчиков
Лучшие практики и паттерны проектирования
🤵 Как не завалить собеседование в крупной ИТ-компании
Разработчик с 10-летним коммерческим опытом поделился провальным опытом прохождения технического собеседования в одной из лидирующих компаний. Из этого провала он извлек три основных урока:
Перед собеседованием нужно освежить знания о структурах данных – и не только о списках, массивах и словарях. Не стоит игнорировать и те структуры, с которыми вы в последний раз сталкивались в университете и никогда не используете на практике – очереди, кучи и деревья. Автору попался как раз вопрос о деревьях, с которыми он с университетских времен не встречался и которые, скорее всего, на новой работе ему бы тоже не понадобились. Однако на собеседовании зачастую проверяются не только практические навыки, но и общая ИТ-эрудиция.
Для тренировки нужно использовать самый простой редактор кода и таймер. Хотя в реальной работе повсеместно используются IDE с автодополнением кода и прочей ИИ-функциональностью, крупные компании при проведении теста обычно настаивают на старомодном способе решения задач, без каких-либо подсказок со стороны IDE. Писать код надо быстро – поэтому во время подготовки к собеседованию обязательно нужно пользоваться таймером для самоконтроля.
Не надо решать задания по порядку. Необходимо прочитать все вопросы сразу и начинать с ответов на те, что попроще. Автор надолго застрял на первом вопросе, хотя мог быстро ответить на второй и успел бы выполнить третье задание. Два решенных задания, несомненно, лучше, чем незаконченный ответ на первый вопрос.
📖🤖 Больше полезных книг вы найдете на нашем телеграм-канале
🛠️ Инструменты
BullMQ – библиотека для Node.js, которая реализует быструю и надежную систему очередей, основанную на Redis и предназначенную для решения всех основных задач в современных микросервисных архитектурах (сглаживание пиков нагрузки, создание надежных каналов связи между сервисами, распределение ресурсоемких задач между несколькими обработчиками и тому подобное).
Основные возможности и преимущества BullMQ:
Точная обработка сообщений – библиотека гарантирует доставку как минимум один раз.
Горизонтальное масштабирование – можно добавить сколько угодно обработчиков для параллельной обработки заданий.
Высокая производительность – благодаря эффективным Lua-скриптам и конвейерной обработке.
Минимальное использование CPU.
Распределенное выполнение заданий на основе Redis.
Поддержка очередей LIFO и FIFO.
Приоритезация и отсроченное выполнение заданий.
Запланированные и повторяющиеся задачи по расписанию.
Настройка параллельности для каждого обработчика.
Многопоточные (изолированные) функции обработки.
Автоматическое восстановление после сбоев процесса.
Поддержка зависимостей между задачами (родительские и дочерние задачи).
📖🦫 Больше полезных книг вы найдете на нашем телеграм-канале
SigNoz – опенсорсный инструмент для мониторинга и устранения неполадок в развернутых приложениях. Это отличная бесплатная альтернатива коммерческим решениям – DataDog и New Relic.
Основная функциональность:
Единый интерфейс для метрик, трассировок и логов.
Визуализация метрик производительности приложений (RPS, процентили задержек, частота ошибок).
Распределенная трассировка для выявления проблем в сервисах.
Управление логами с продвинутым построителем запросов.
Мониторинг инфраструктуры.
Отслеживание исключений в различных языках программирования.
Настраиваемые оповещения.
Поддержка OpenTelemetry для инструментирования приложений.
Возможность агрегации данных трассировки для получения бизнес-метрик.
📖➕➕ Больше полезных книг вы найдете на нашем телеграм-канале «Книги для C/C++-разработчиков»
Infisical – опенсорсная платформа для удобного и безопасного управления секретами и конфигурационными данными. Основные возможности:
Централизованное хранение секретов – позволяет безопасно хранить в одном месте все важные данные (API-ключи, пароли от баз данных и другие конфиденциальные настройки приложений).
Синхронизация между командой и инфраструктурой – гарантирует, что все члены команды и все части инфраструктуры будут получать доступ к актуальным секретам и ключам.
Предотвращение утечек – помогает предотвратить случайное раскрытие секретной информации, например, путем коммита в Git-репозиторий.
Управление конфигурациями – позволяет управлять общими настройками приложений для разных сред (разработка, тестирование, продакшн).
Безопасный доступ – предоставляет инструменты (SDK, CLI, API) для безопасного получения секретов в приложениях и инфраструктуре.
Контроль доступа – позволяет настраивать права доступа к секретам для разных пользователей и систем.
Аудит и версионирование – ведет лог всех действий с секретами и позволяет отслеживать их изменения во времени.
Интеграция с инфраструктурой – легко интегрируется с популярными платформами и инструментами (GitHub, AWS, Kubernetes и т. п.).
Управление внутренней PKI – позволяет создавать и управлять собственной инфраструктурой открытых ключей для выпуска цифровых сертификатов.
KubeAI – инструмент для развертывания и управления опенсорсными LLM-моделями в среде Kubernetes. Среди основных функций и особенностей:
Совместимость с OpenAI. Предоставляет API, совместимый с OpenAI, что позволяет легко заменить сервисы OpenAI в любых ИИ-приложениях на локальные.
Поддержка различных моделей. Может работать с различными моделями, включая языковые (LLMs), модели для преобразования речи в текст (например, Whisper) и другие.
Мультиплатформенность. Может работать на разных аппаратных платформах, включая системы только с CPU, системы с GPU, а в будущем планируется поддержка TPU.
Масштабирование. Обеспечивает автоматическое масштабирование в зависимости от нагрузки, включая возможность масштабирования до нуля (когда ресурсы не используются).
Простота развертывания. Не требует никаких дополнительных зависимостей типа Istio или Knative.
Встроенный пользовательский интерфейс. Предоставляет чат-интерфейс OpenWebUI для взаимодействия с моделями.
Управление серверами vLLM, Ollama и FasterWhisper.
Интеграция с системами обмена сообщениями. Поддерживает потоковую передачу и пакетную обработку через интеграции с Kafka и другими PubSub-системами обмена сообщениями.
Zed – опенсорсный многопользовательский редактор кода, предназначенный для совместной работы над проектом в реальном времени. Основные особенности и возможности:
Написан на Rust и отличается высокой скоростью и минимальными требованиями к ресурсам.
Предусматривает интеграцию с LLM для генерации, анализа и рефакторинга кода.
Имеет встроенный терминал.
Предоставляет несколько удобных функций для совместной работы – демонстрацию экрана, общие заметки и т. п.
Разработан с учетом конфиденциальности пользователей и не собирает личные данные.
📖☕ Больше полезных книг вы найдете на нашем телеграм-канале
Warp – современный высокопроизводительный терминал с ИИ-функциональностью. Основные особенности и возможности:
Производительность. Написан полностью на Rust и использует рендеринг на GPU через Metal API, что обеспечивает высокую скорость работы (60+ FPS даже на 4K- и 8K-мониторах).
Поддержка совместной работы в реальном времени.
Улучшенный ввод команд. Редактор ввода команд представляет собой полноценный текстовый редактор с поддержкой выделения текста, позиционирования курсора, привычных пользователям сочетаний клавиш и автодополнения.
Встроенный чат-бот. Понимает указания на естественном языке, дает рекомендации и отвечает на вопросы.
Блоки команд. Команды и их вывод визуально группируются в блоки, что улучшает организацию и читаемость информации в терминале.
Совместимость с популярными оболочками. Работает с Bash, ZSH и Fish, сохраняя существующие привязки клавиш.
Кроссплатформенность. Работает на macOS и Linux, вскоре будет поддерживать Windows и WASM.
Продвинутый UI. В отличие от традиционных терминалов, может отображать различные элементы интерфейса (всплывающие уведомления, меню и т. д.).
Автор рассылки: Наталья Кайда
Вместо Telegram: ТОП-14 email-рассылок для программиста
В этой статье делюсь подборкой из 14 лучших email-рассылок по бэкенду, фронтенду, ИИ на русском и английском языках.
В последнее время подсел на рассылки для экономии времени: вместо того, чтобы следить за более чем 20 телеграм-каналами по интересующей меня тематике, я получаю письма c тщательно отобранной информацией всего 1-3 раза в неделю.
В русскоязычном сегменте оказалось не так просто найти качественные рассылки. Мне удалось обнаружить всего несколько стоящих вариантов с помощью поиска. Если у вас есть рекомендации по интересным и полезным рассылкам, особенно в области бэкенда, фронтенда и искусственного интеллекта, поделитесь ссылками в комментариях, добавлю в статью.
Бэкенд
Proglib Backend
Язык: русский
Эта рассылка посвящена бэкенд-разработке и предлагает своим подписчикам еженедельную подборку актуальных материалов.
Темы:
Языки программирования и фреймворки для бэкенда
Архитектура и проектирование серверных приложений
Базы данных и управление данными
Безопасность и защита данных
Облачные технологии и DevOps
API и интеграции
Тестирование и отладка
Инструменты и утилиты для бэкенд-разработчиков
Лучшие практики и паттерны проектирования
Pvs-studio
Язык: русский
Рассылка предлагает подписчикам ежемесячную подборку самых интересных статей и новостей, вышедших за этот период.
Хотел добавить рассылку журнала «Код», но ни одного письма мне не пришло.
Фронтенд
Proglib Frontend
Язык: русский
В рассылке вы найдете:
Современные JavaScript-фреймворки и библиотеки
HTML5 и CSS3: новые возможности и трюки
Оптимизация производительности веб-приложений
Тестирование и отладка кода
UX/UI лучшие практики
Новые веб-стандарты и браузерные технологии
Тренды в веб-дизайне и интерфейсах
Прогрессивные веб-приложения (PWA)
Bytes.dev
Язык: английский
Рассылка Bytes посвящена новостям в области веб-разработки и технологий. Она включает:
Актуальные выпуски с обзорами последних событий и трендов.
Темы, связанные с JavaScript, React, TypeScript и другими инструментами и технологиями веб-разработки.
Анализ новых проектов, библиотек и инструментов, которые могут повлиять на развитие индустрии.
Искусственный интеллект
Proglib AI
Язык: русский
В рассылке вы найдете:
Новости о прорывных исследованиях в области машинного обучения и нейросетей.
Материалы о применении ИИ в разных сферах – медицине, бизнесе, науке, производстве и образовании.
Статьи об этических аспектах развития технологий.
Подборки лучших онлайн-курсов и видеолекций по машинному обучению.
Обзоры инструментов и библиотек для разработки нейронных сетей.
Ссылки на репозитории с открытым исходным кодом ИИ-проектов.
Фильмы, сериалы и книги, которые заслуживают внимания AI энтузиастов.
AI Supremacy
Язык: английский
О чем:
Новости и материалы на пересечении искусственного интеллекта, технологий и бизнеса.
Также рассматриваются тенденции в робототехнике и квантовых вычислениях.
Подписаться / Архив рассылки
Last Week in AI
Язык: английский
Еженедельные сводки новостей об ИИ; статьи, интервью.
Refactoring
Язык: английский
Рассылка Refactoring создана для инженеров и менеджеров, чтобы помочь им писать качественное программное обеспечение и эффективно взаимодействовать с людьми. Она предлагает:
По понедельникам: короткие письма с тремя практическими идеями для улучшения работы, которые остаются бесплатными для всех подписчиков.
По средам: оригинальные, глубокие статьи на инженерные темы, доступные только платным подписчикам. Эти статьи основаны на личном опыте автора, исследованиях и идеях других ведущих технических специалистов.
AI Weekly
Язык: английский
Еженедельная подборка новостей и ресурсов, связанных с искусственным интеллектом и машинным обучением: общие новости об ИИ, этике ИИ, прикладных случаях использования ИИ, робототехнике, исследованиях в области ИИ, маркетинге, здравоохранении, кибербезопасности и социально полезных аспектах ИИ.
AlphaSignal
Язык: английский
Рассылки для разработчиков от разработчиков: «Мы отбираем и обобщаем 1% самых лучших новостей, статей об ИИ».
Dev Interrupted
Язык: английский
Свежие материалы об управлении в инженерии дважды в неделю:
Вторник: еженедельный подкаст с участием ведущих технических руководителей и краткие обзоры других важных материалов.
Четверг: статьи с рекомендациями по развитию карьеры и управлению командой разработчиков.
About Unwind AI
Язык: английский
Рассылка Unwind AI предлагает:
Ежедневные новости о ключевых открытиях в ИИ.
Советы по использованию ИИ для повышения продуктивности.
Применение ИИ в реальных приложениях.
AI Breakfast
Язык: английский
Анализ последних проектов, продуктов и новостей в области искусственного интеллекта — каждую неделю.
Import AI
Язык: английский
Рассылка Import AI фокусируется на последних исследованиях в области искусственного интеллекта и их анализе. Эту рассылку готовит Джек Кларк, соучредитель компании Anthropic.
Подписаны ли вы на email-рассылки о программировании?
Сколько нужно времени, чтобы уложить теплый пол?
Точно не скажем, но в нашем проекте с этим можно справиться буквально за минуту одной левой!
Заметка про бэкенд и геймдев
Не редко сталкиваюсь с тем, что для игровых разработчиков вопросы бэкенда являются чем-то инородным 🤔
Хотя я постоянно взаимодействую с бэкендом, причём с первого же проекта в своей карьере. Это и взаимодействие с сервером, и серверный код, и разворачивание инфраструктуры, её настройка и автоматизация 🤖
В больших командах есть выделенные люди под эти задачи. Но бегать к ним по всяким мелочам не получится — у них много и других желающих, и своей работы. Ситуативные временные действия проще реализовать своими силами 🔧
В небольших командах придётся брать всё в свои руки. При условии, что современный гейминг часто обильно обмазан мета-геймплеем, под который нужна инфраструктура, это неизбежно.
Есть бэкенд-сервисы по типу Playfab, но в какой-то момент они могут оказаться или слишком дорогими, или недостаточными/неудобными по возможностям, или вовсе недоступными. Тогда захочется реализовать свой сервер 🌐
Если слова типа docker, nginx, deploy, сертификаты, http казались избыточными для геймдева — это не совсем так. Без этого прожить можно, но это сильно сузит спектр возможностей. Если засиживаться в Middle-звене не хочется, то стоит развивать свои компетенции и в этом направлении. А если в планах есть место руководителя, то знание этих технологий необходимо.
Не обязательно становиться гуру бэкенда — для этого часто есть более компетентные люди. Но понимание, как это работает, умение говорить с бэкендерами на одном языке, возможность самостоятельно стартовать проекты с бэкендом или на более поздних этапах подсобить в экстренных ситуациях — ценные навыки, которые бустанут карьеру 📈
На рассуждения по теме побудило прикреплённое видео: здесь доступно и кратко подсвечены базовые моменты и теги для дальнейшего ресёрча 🔍
—————————————
#gamedev #development #backend #server #infrastructure #management #career #teamlead #геймдев #разработка #бэкенд #сервер #инфраструктура #менеджмент #управление #компетенции #карьера #рекомендация #видео