Найти в Дзене
Python Power

10 вопросов бэкенд-разработчику на позицию Junior

Без этих вопросов не проходит ни одно техническое собеседование по бэкенд разработки, это основы основ. Сначала постарайтесь сами ответить на эти базовые вопросы, а потом детально разберите каждый, самое главное не только знать теорию, но и применять это на практике, тогда и теория будет не зубрилкой, а пересказ своей рутинной работы ну или практики на личных пет-проектах! Конечно, корректней подразделить вопросы ещё на несколько структур, которые в совокупностей дают представление о бэкенд, например про БД, версионности, вебе, алгоритмах и т.д, но сейчас мы пройдемся по обобщающим, если вам понравится статья, сделаем по каждой теме более углубленные вопросы. Начнем!
Вопросы:
1. Что такое HTTPS и как он работает?
2. Расскажите про протоколы TCP и UDP, в чем их отличие?
3. Что такое микросервисы? Расскажите его минусы и плюсы
4. Что такое авторизация и аутентификация?
5. Что такое кэширование и как его использовать для оптимизации производительности бэкенда?
6. В чем разница между SQ

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

Вопросы:

1. Что такое HTTPS и как он работает?
2. Расскажите про протоколы TCP и UDP, в чем их отличие?
3. Что такое микросервисы? Расскажите его минусы и плюсы
4. Что такое авторизация и аутентификация?
5. Что такое кэширование и как его использовать для оптимизации производительности бэкенда?
6. В чем разница между SQL и NoSQL базами данных?
7. Что такое логирование и почему это важно?
8. Что такое Docker?
9. Что такое транзакция?
10. Какие есть базовые алгоритмы сортировки?

1. Что такое HTTPS и как он работает?

HTTPS (Hypertext Transfer Protocol Secure) – это безопасная версия HTTP, основного протокола для передачи данных между веб-браузером и веб-сервером. Он обеспечивает зашифрованное соединение, гарантируя, что данные, которыми обмениваются клиент (браузер) и сервер, не могут быть перехвачены и прочитаны посторонними лицами.

Вытекающий из этого вопрос, а как он работает? HTTPS добавляет к HTTP уровень безопасности, используя протокол TLS (Transport Layer Security) или его предшественника SSL (Secure Sockets Layer).

Вот основные его шаги:

- Запрос соединения: Браузер запрашивает HTTPS-соединение с сервером.

- Обмен сертификатами: Сервер предоставляет браузеру свой SSL/TLS-сертификат

- Установление безопасного соединения: Браузер и сервер согласовывают алгоритм шифрования (cipher suite).

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

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

2. Расскажите про протоколы TCP и UDP, в чем их отличие?

Обязательно начните с того что TCP и UDP являются транспортными протоколами из модели OSI

TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) – это два основных протокола транспортного уровня в сети Интернет. Они отвечают за передачу данных между приложениями, работающими на разных компьютерах. Однако, они делают это совершенно по-разному, предлагая разные гарантии и функциональность.

Можно ограничиться такими формулировками, чтоб понять их разницу

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

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

Для понимания сравнение TCP и UDP
Для понимания сравнение TCP и UDP

3. Что такое микросервисы? Расскажите его минусы и плюсы

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

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

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

Плюсы:

  • Можно быстро менять и добавлять новое.
  • Каждая часть может быть написана на своем языке.
  • Легко увеличить мощность только у нужных частей.
  • Если одна часть сломается, остальное продолжит работать.

Минусы:

  • Сложно сделать так, чтобы все части работали вместе.
  • Трудно найти ошибки, когда они возникают в разных местах.
  • Нужно больше ресурсов (серверов, людей).
  • Дороже в разработке и поддержке.

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

4. Что такое авторизация и аутентификация?

Тут всё просто, стоит один раз запомнить и всё!

Аутентификация (Authentication):

Ответ на вопрос: “Кто ты?”

  • Процесс подтверждения личности пользователя. Это как предъявление паспорта.
  • Аутентификация проверяет, действительно ли пользователь тот, за кого себя выдаёт.

Авторизация (Authorization):

Ответ на вопрос: “Что тебе разрешено делать?”

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

Проще говоря:

  1. Аутентификация: “Это ты, Вася?” (Да, я Вася, вот мой пароль).
  2. Авторизация: “Раз ты Вася, то тебе можно смотреть заказы, но нельзя их удалять”.

Ключевая разница:

  • Аутентификация проверяет личность.
  • Авторизация определяет права доступа.

Связь между ними:

Обычно сначала происходит аутентификация, а затем авторизация. Система должна сначала узнать, кто вы (аутентификация), прежде чем определять, что вам разрешено делать (авторизация).

5. Что такое кэширование и как его использовать для оптимизации производительности бэкенда?

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

Один из самых популярных инструментов для кэширования - Redis

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

Кэширование на стороне клиента (Browser Caching):

  • Как работает: Браузер сохраняет статические ресурсы (изображения, CSS, JavaScript) и использует их повторно при последующих запросах.
  • Преимущества: Снижает нагрузку на сервер, ускоряет загрузку страниц для пользователей.

CDN (Content Delivery Network):

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

Кэширование на стороне сервера:

  • Как работает: Бэкенд сохраняет результаты запросов (например, данные из базы данных, сгенерированные HTML-страницы) в кэше и возвращает их при повторных запросах.
  • Преимущества: Значительно сокращает время отклика, снижает нагрузку на базу данных.

Кэширование на уровне базы данных:

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

Для общего также развития существуют некоторые стратегии кэширования:

  • Write-Through: Данные записываются одновременно и в кэш, и в основное хранилище.
  • Write-Back (Write-Behind): Данные записываются только в кэш, а затем асинхронно сбрасываются в основное хранилище.
  • Cache-Aside (Lazy Loading): Данные загружаются в кэш только при первом запросе.

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

6. В чем разница между SQL и NoSQL базами данных?

SQL (Structured Query Language) и NoSQL (Not Only SQL) - два основных типа баз данных, которые отличаются по модели данных, структуре, масштабируемости и способу запроса данных.

SQL Базы данных:

  • Данные как в таблице Excel: строки и столбцы.
  • Четкая структура (что где лежит, известно заранее).
  • Язык запросов SQL для поиска данных.
  • Важна точность и надежность данных.
  • Хороши для небольших и средних проектов, где важна структура и точность.

NoSQL Базы данных:

  • Данные хранятся по-разному (как документы, пары ключ-значение и т.д.).
  • Структура может меняться (гибкая).
  • Для поиска используют разные способы, не всегда SQL.
  • Важна скорость и возможность хранить много данных.
  • Хороши для больших проектов, где много разных данных и важна скорость.

Из этого можно сделать вывод и также ответить для каких проектов какие именно БД можно применить.

7. Что такое логирование и почему это важно?

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

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

  • Отладка (Debugging): Логирование помогает разработчикам понимать, что происходит в приложении, особенно при возникновении ошибок.
  • Мониторинг (Monitoring): Логи позволяют отслеживать состояние и производительность системы в реальном времени.
  • Анализ (Analysis): Логи содержат ценную информацию о поведении пользователей, производительности системы и использовании ресурсов.
  • Безопасность (Security): Логи могут использоваться для обнаружения и предотвращения атак, таких как попытки взлома паролей, SQL-инъекции и другие виды вредоносной активности.

Основные уровни логирования:

  • DEBUG: Подробная информация, полезная для отладки.
  • INFO: Общая информация о работе системы.
  • WARNING: Предупреждения о потенциальных проблемах.
  • ERROR: Информация об ошибках, которые не приводят к сбою системы.
  • CRITICAL (FATAL): Информация о критических ошибках, которые приводят к сбою системы.

8. Что такое Docker?

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

Основные понятия Docker:

  • Docker Image (образ): Шаблон, используемый для создания контейнеров. Это как фотография, с которой делают копии (контейнеры). Образ содержит все необходимое для запуска приложения.
  • Docker Container (контейнер): Запущенный экземпляр образа. Это уже работающее приложение, использующее ресурсы операционной системы, но изолированное от других контейнеров.
  • Dockerfile: Текстовый файл, содержащий инструкции по созданию Docker image. Это как рецепт для приготовления контейнера.
  • Docker Hub: Публичный или приватный реестр, где хранятся Docker images. Это как “магазин”, где можно найти готовые образы или поделиться своими.

Как это работает:

  1. Разработчик пишет Dockerfile, описывающий, как создать образ приложения.
  2. Docker собирает образ на основе Dockerfile.
  3. Образ может быть отправлен в Docker Hub.
  4. Любой может скачать образ из Docker Hub и запустить его как контейнер на своей машине.

В итоге:

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

9. Что такое транзакция?

Базовый вопрос на понимание СУБД.

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

Основные свойства транзакций (ACID):

  • A (Atomicity - Атомарность): Транзакция должна быть либо выполнена целиком, либо не выполнена вовсе. Нельзя выполнить только часть транзакции. Если во время выполнения транзакции происходит ошибка, все изменения должны быть отменены (rollback). Это как переключатель: либо “включено”, либо “выключено”.
  • C (Consistency - Согласованность): Транзакция должна переводить систему из одного согласованного состояния в другое согласованное состояние. Это означает, что после выполнения транзакции все правила и ограничения системы должны быть соблюдены.
  • I (Isolation - Изолированность): Транзакции должны выполняться изолированно друг от друга. Это означает, что выполнение одной транзакции не должно влиять на выполнение других транзакций, выполняемых одновременно. Это как будто каждая транзакция работает в своей “песочнице”.
  • D (Durability - Долговечность): После того, как транзакция успешно завершена (зафиксирована), изменения должны быть постоянными и не должны быть потеряны, даже если произойдет сбой системы (например, отключение электроэнергии). Это как будто изменения “записаны в камень”.

Зачем нужны транзакции?

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

10. Какие есть базовые алгоритмы сортировки?

Сортировка пузырьком (Bubble Sort):Принцип работы: Сравнивает соседние элементы и меняет их местами, если они находятся в неправильном порядке. Этот процесс повторяется многократно, пока все элементы не будут отсортированы.
Временная сложность: O(n^2) в среднем и худшем случаях.

Сортировка выбором (Selection Sort):Принцип работы: Находит минимальный элемент в неотсортированной части массива и меняет его местами с первым элементом этой части. Затем этот процесс повторяется для оставшейся неотсортированной части.
Временная сложность: O(n^2) во всех случаях.

Сортировка вставками (Insertion Sort):Принцип работы: Берет один элемент из неотсортированной части массива и вставляет его на правильное место в отсортированной части.
Временная сложность: O(n^2) в среднем и худшем случаях, O(n) в лучшем случае (если массив уже отсортирован).


Сортировка слиянием (Merge Sort):Принцип работы:
Разделяет массив на две половины, рекурсивно сортирует каждую половину, а затем объединяет отсортированные половины в один отсортированный массив.
Временная сложность: O(n log n) во всех случаях.

Временная сложность:

Временная сложность показывает, как время работы алгоритма зависит от размера входных данных (n). O(n^2) означает, что время работы растет пропорционально квадрату размера данных, а O(n log n) означает, что время работы растет пропорционально размеру данных, умноженному на логарифм размера данных. Чем меньше временная сложность, тем быстрее работает алгоритм для больших массивов.

Выбор алгоритма:

  • Для небольших массивов можно использовать сортировку вставками или выбором из-за их простоты.
  • Для больших массивов лучше использовать сортировку слиянием или быструю сортировку из-за их лучшей временной сложности.

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

Заключение

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

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