Backend
3.95K subscribers
36 photos
710 links
Комьюнити Backend программистов.
Python, Java, Golang, PHP, C#, C/C++, DevOps

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 Какой пакет в Node.js используется для работы с файловой системой?
Anonymous Quiz
48%
fs
16%
file-system
30%
node-fs
5%
file
Шаг 3: Оркестрация с использованием Kubernetes


Теперь, когда наши микросервисы контейнеризированы, мы можем управлять ими с помощью Kubernetes.

Deployment и Service для catalog-service:

# catalog-service-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: catalog-service
spec:
replicas: 2
selector:
matchLabels:
app: catalog-service
template:
metadata:
labels:
app: catalog-service
spec:
containers:
- name: catalog-service
image: catalog-service
ports:
- containerPort: 3000
---
# catalog-service-service.yaml
apiVersion: v1
kind: Service
metadata:
name: catalog-service
spec:
selector:
app: catalog-service
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer


Deployment и Service для order-service:

# order-service-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
spec:
replicas: 2
selector:
matchLabels:
app: order-service
template:
metadata:
labels:
app: order-service
spec:
containers:
- name: order-service
image: order-service
ports:
- containerPort: 3001
---
# order-service-service.yaml
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
selector:
app: order-service
ports:
- protocol: TCP
port: 80
targetPort: 3001
type: LoadBalancer


Применение конфигураций Kubernetes:

kubectl apply -f catalog-service-deployment.yaml
kubectl apply -f catalog-service-service.yaml

kubectl apply -f order-service-deployment.yaml
kubectl apply -f order-service-service.yaml


Шаг 4: Управление и масштабирование


Kubernetes позволяет легко управлять и масштабировать микросервисы. Например, для масштабирования catalog-service до 4 реплик достаточно выполнить команду:

kubectl scale deployment catalog-service --replicas=4


Вы также можете следить за состоянием микросервисов с помощью команд:

kubectl get deployments
kubectl get services
kubectl get pods


Заключение


Использование Docker и Kubernetes для создания и управления микросервисами предоставляет множество преимуществ, включая гибкость, масштабируемость и надежность. Docker упрощает контейнеризацию приложений, а Kubernetes обеспечивает мощные инструменты для их оркестрации, управления и масштабирования. Этот подход позволяет легко развертывать и управлять сложными системами, состоящими из множества микросервисов, обеспечивая высокую доступность и устойчивость ваших приложений.
📌 Что такое Agile?

💬 Спрашивают в 20 % собеседований

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

🤔 Основные принципы Agile

1️⃣ Индивидуумы и взаимодействия важнее процессов и инструментов:

Акцент на командную работу и эффективное общение.

2️⃣ Работающее программное обеспечение важнее исчерпывающей документации:

Быстрая поставка работающих продуктов с минимально необходимой документацией.

3️⃣ Сотрудничество с заказчиком важнее согласования условий контракта:

Постоянное взаимодействие с заказчиком для удовлетворения его потребностей.

4️⃣ Готовность к изменениям важнее следования первоначальному плану:

Гибкость в адаптации к изменениям требований и условий.

🤔 Основные методологии Agile

1️⃣ Scrum:

Итеративный процесс с фиксированными временными промежутками, называемыми спринтами.

Роли: Product Owner, Scrum Master, Команда разработки.

Артефакты: Product Backlog, Sprint Backlog, Инкремент.

Встречи: Планирование спринта, Ежедневные стендап-совещания, Обзор спринта, Ретроспектива.

2️⃣ Kanban:

Визуализация процесса работы с помощью доски Kanban.

Ограничение незавершенной работы (Work In Progress, WIP).

Постоянное улучшение и адаптация.

3️⃣ Extreme Programming (XP):

Практики: Парное программирование, Частые релизы, Непрерывная интеграция, Тестирование.

4️⃣ Lean:

Сокращение избыточности и увеличение ценности для клиента.

Принципы: Устранение потерь, Увеличение потока, Улучшение качества.

🤔 Преимущества Agile

1️⃣ Быстрая адаптация к изменениям:

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

2️⃣ Улучшенное качество продукта:

Постоянное тестирование и интеграция.

3️⃣ Повышенная вовлеченность команды:

Активное участие всех членов команды в процессе разработки.

4️⃣ Удовлетворенность клиентов:

Постоянное взаимодействие с заказчиками и предоставление им ценности на каждом этапе разработки.

🤔 Краткий ответ

Agile — это гибкий подход к разработке программного обеспечения, который акцентирует внимание на сотрудничестве, быстрой адаптации к изменениям и регулярной поставке работающего продукта. Основные методологии Agile включают Scrum, Kanban и Extreme Programming.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какой фреймворк используется для создания веб-приложений на Rust?
Anonymous Quiz
26%
Rocket
12%
Actix
16%
Iron
46%
все перечисленные
📌 Что такое join'ы?

💬 Спрашивают в 25 % собеседований

JOIN'ы (объединения) — это операции в языке SQL, которые позволяют объединять строки из двух или более таблиц на основе логических связей между ними. Существует несколько типов JOIN'ов, каждый из которых используется для разных сценариев объединения данных.

🤔 Основные типы JOIN'ов:

1️⃣ INNER JOIN:

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

Пример:
     SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;


2️⃣ LEFT JOIN (LEFT OUTER JOIN):

Описание: Возвращает все строки из левой таблицы и совпадающие строки из правой таблицы. Если совпадений нет, то в столбцах правой таблицы будут NULL.

Пример:
     SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;


3️⃣ RIGHT JOIN (RIGHT OUTER JOIN):

Описание: Возвращает все строки из правой таблицы и совпадающие строки из левой таблицы. Если совпадений нет, то в столбцах левой таблицы будут NULL.

Пример:
     SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;


4️⃣ FULL JOIN (FULL OUTER JOIN):

Описание: Возвращает все строки, когда есть совпадения в одной из таблиц. Если совпадений нет, то в соответствующих столбцах будут NULL.

Пример:
     SELECT employees.name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.id;


5️⃣ CROSS JOIN:

Описание: Возвращает декартово произведение строк из двух таблиц. Каждая строка из первой таблицы соединяется со всеми строками из второй таблицы.

Пример:
     SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;


6️⃣ SELF JOIN:

Описание: Использует JOIN для объединения таблицы с самой собой. Это полезно, когда нужно сравнить строки внутри одной таблицы.

Пример:
     SELECT e1.name AS Employee1, e2.name AS Employee2
FROM employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.id;


🤔 Краткий ответ

JOIN'ы в SQL — это операции для объединения строк из двух или более таблиц на основе логических связей. Основные типы JOIN'ов включают:

INNER JOIN: Только совпадающие строки.

LEFT JOIN: Все строки из левой таблицы и совпадающие из правой.

RIGHT JOIN: Все строки из правой таблицы и совпадающие из левой.

FULL JOIN: Все строки из обеих таблиц, с заполнением NULL при отсутствии совпадений.

CROSS JOIN: Декартово произведение строк.

SELF JOIN: Объединение таблицы с самой собой.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Что такое ORM?

💬 Спрашивают в 19 % собеседований

ORM (Object-Relational Mapping) — это технология, которая позволяет разработчикам взаимодействовать с реляционными базами данных, используя объектно-ориентированные парадигмы программирования. ORM автоматизирует преобразование данных между несовместимыми типами систем, таких как объекты в программном коде и таблицы в базе данных.

🤔 Основные особенности ORM

1️⃣ Абстракция базы данных:

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

2️⃣ Маппинг классов и таблиц:

Классы в приложении сопоставляются с таблицами в базе данных, а свойства классов — со столбцами таблиц. Это позволяет автоматически преобразовывать данные при сохранении и извлечении объектов.

3️⃣ Автоматическое управление связями:

ORM поддерживает управление отношениями между объектами, такими как "один-к-одному", "один-ко-многим" и "многие-ко-многим".

4️⃣ Кэширование и оптимизация запросов:

ORM может кешировать запросы и результаты для улучшения производительности.

🤔 Преимущества ORM

1️⃣ Скорость разработки:

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

2️⃣ Поддерживаемость:

Код на ORM более понятен и легко поддерживается, поскольку использует объектно-ориентированные принципы.

3️⃣ Безопасность:

ORM помогает избежать SQL-инъекций, так как запросы строятся с помощью методов и свойств классов.

4️⃣ Портативность:

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

🤔 Популярные библиотеки и фреймворки ORM

Hibernate: Java

Entity Framework: .NET

Django ORM: Python

SQLAlchemy: Python

ActiveRecord: Ruby on Rails

🤔 Пример

Рассмотрим пример с использованием Django ORM на Python:

Модель
from django.db import models

class Author(models.Model):
name = models.CharField(max_length=100)
birth_date = models.DateField()

class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)


Создание записи
author = Author(name='J.K. Rowling', birth_date='1965-07-31')
author.save()

book = Book(title='Harry Potter and the Philosopher\'s Stone', author=author)
book.save()


Извлечение данных
books = Book.objects.filter(author__name='J.K. Rowling')
for book in books:
print(book.title)


🤔 Краткий ответ

ORM (Object-Relational Mapping) — это технология для взаимодействия с реляционными базами данных через объектно-ориентированные парадигмы программирования. ORM автоматизирует преобразование данных между объектами и таблицами, улучшая разработку, поддерживаемость и безопасность кода.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🤔 Какой пакет используется для работы с базой данных Cassandra в Java?
Anonymous Quiz
15%
DataStax Java Driver
14%
Hector
15%
Kundera
56%
All of the above
📌 Что такое инкапсуляция?

💬 Спрашивают в 19 % собеседований

Инкапсуляция — это один из основных принципов объектно-ориентированного программирования (ООП), который подразумевает скрытие внутренней реализации объекта и предоставление доступа к ней только через строго определенные методы или интерфейсы. Это помогает защитить данные от некорректного использования и обеспечивает контроль над изменением состояния объекта.

🤔 Основные аспекты инкапсуляции

1️⃣ Скрытие данных:

Внутреннее состояние объекта (переменные и данные) скрыто от внешнего мира и доступно только через методы класса.

2️⃣ Методы доступа:

Класс предоставляет публичные методы для взаимодействия с его внутренним состоянием. Эти методы часто называют геттерами (для получения значений) и сеттерами (для установки значений).

3️⃣ Контроль над данными:

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

🤔 Пример

Рассмотрим пример инкапсуляции на языке Python:
class Person:
def __init__(self, name, age):
self._name = name # Внутреннее состояние
self._age = age

# Геттер для имени
def get_name(self):
return self._name

# Сеттер для имени
def set_name(self, name):
if isinstance(name, str) and name:
self._name = name

# Геттер для возраста
def get_age(self):
return self._age

# Сеттер для возраста
def set_age(self, age):
if isinstance(age, int) and 0 <= age <= 120:
self._age = age

# Использование класса
person = Person("Alice", 30)
print(person.get_name()) # Вывод: Alice
print(person.get_age()) # Вывод: 30

person.set_name("Bob")
person.set_age(35)
print(person.get_name()) # Вывод: Bob
print(person.get_age()) # Вывод: 35

# Попытка установить некорректное значение
person.set_age(-5) # Значение не изменится из-за проверки в сеттере
print(person.get_age()) # Вывод: 35


🤔 Преимущества инкапсуляции

1️⃣ Защита данных: Скрытие внутреннего состояния объекта предотвращает его некорректное использование и изменение.

2️⃣ Упрощение поддержки: Инкапсуляция облегчает модификацию и поддержку кода, поскольку внутренние изменения объекта не влияют на внешний код, взаимодействующий с объектом.

3️⃣ Повышение гибкости: Возможность изменения внутренней реализации объекта без изменения его интерфейса.

4️⃣ Контроль доступа: Возможность добавления логики проверки и валидации данных при их установке или изменении.

🤔 Краткий ответ

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

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет в Go используется для работы с JSON?
Anonymous Quiz
38%
encoding/json
7%
json-iterator
21%
go-simplejson
34%
All of the above
🤯1
📌 Что такое итератор?

💬 Спрашивают в 19 % собеседований

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

🤔 Основные аспекты итераторов

1️⃣ Итерабельные объекты (Iterable):

Объекты, которые поддерживают протокол итерации, называются итерабельными. Примеры включают списки, кортежи, множества и словари.

2️⃣ Протокол итерации:

В Python, чтобы объект был итерабельным, он должен реализовать метод __iter__(), который возвращает итератор.

3️⃣ Итератор:

Итератор — это объект, который реализует методы __iter__() и __next__(). Метод __next__() возвращает следующий элемент последовательности, а когда элементы заканчиваются, возбуждает исключение StopIteration.

🤔 Пример использования итератора в Python

Рассмотрим пример создания итератора для простого списка:

Пример с использованием встроенного итератора
numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers) # Получение итератора из списка

print(next(iterator)) # Вывод: 1
print(next(iterator)) # Вывод: 2
print(next(iterator)) # Вывод: 3
print(next(iterator)) # Вывод: 4
print(next(iterator)) # Вывод: 5
# print(next(iterator)) # Вызывается StopIteration


Пример создания собственного итератора
class MyIterator:
def __init__(self, start, end):
self.current = start
self.end = end

def __iter__(self):
return self

def __next__(self):
if self.current >= self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1

# Использование собственного итератора
my_iter = MyIterator(1, 5)

for num in my_iter:
print(num) # Вывод: 1 2 3 4


🤔 Преимущества итераторов

1️⃣ Унифицированный интерфейс:

Итераторы предоставляют единый интерфейс для прохода по элементам коллекции, независимо от их типа.

2️⃣ Ленивая загрузка:

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

3️⃣ Инкапсуляция логики прохода:

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

🤔 Краткий ответ

Итератор — это объект, который позволяет поочередно проходить через элементы коллекции, предоставляя стандартный интерфейс для доступа к элементам. Итераторы реализуют методы __iter__() и __next__(), что позволяет использовать их в циклах для последовательного доступа к элементам.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет используется для работы с базой данных SQLite в Python?
Anonymous Quiz
68%
sqlite3
13%
sqlite
14%
pysqlite
4%
sqlite-python
👍1
📌 Что такое идемпотентность?

💬 Спрашивают в 18 % собеседований

Идемпотентность — это свойство операции, при котором повторное выполнение этой операции приводит к тому же результату, что и однократное выполнение. Это понятие часто используется в контексте HTTP методов, API запросов и транзакций в системах с распределенной архитектурой.

🤔 Основные аспекты идемпотентности

1️⃣ Идемпотентные операции:

GET: Получение ресурса. Повторный запрос не изменяет состояние ресурса.

PUT: Обновление или создание ресурса. Повторный запрос с одинаковыми данными приводит к одному и тому же состоянию ресурса.

DELETE: Удаление ресурса. Повторный запрос удаляет ресурс, если он существует, или не изменяет состояние, если ресурс уже удален.

2️⃣ Неидемпотентные операции:

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

🤔 Примеры идемпотентности

Пример 1: HTTP методы

GET запрос:
  GET /user/123

Повторный запрос возвращает информацию о пользователе с ID 123 и не изменяет его состояние.

PUT запрос:
  PUT /user/123
{
"name": "John Doe",
"age": 30
}

Повторный запрос обновляет данные пользователя с ID 123, но состояние пользователя остается тем же, если данные запроса не изменяются.

Пример 2: База данных

Идемпотентная операция:
  UPDATE users SET name = 'John Doe' WHERE id = 123;

Повторный запрос обновит имя пользователя с ID 123 на 'John Doe', не изменяя его состояние при повторном выполнении.

Неидемпотентная операция:
  INSERT INTO users (name, age) VALUES ('John Doe', 30);

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

🤔 Зачем нужна идемпотентность

1️⃣ Повышение надежности:

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

2️⃣ Упрощение обработки ошибок:

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

3️⃣ Удобство разработки:

Идемпотентность упрощает разработку и тестирование, так как позволяет предсказуемо управлять состоянием системы при повторных запросах.

🤔 Краткий ответ

Идемпотентность — это свойство операции, при котором повторное выполнение приводит к тому же результату, что и однократное выполнение. Примеры идемпотентных операций включают HTTP методы GET, PUT и DELETE. Идемпотентность повышает надежность системы и упрощает обработку ошибок.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какой пакет используется для работы с REST API в Java?
Anonymous Quiz
8%
Retrofit
6%
Jersey
41%
RestTemplate
46%
All of the above
📌 Из чего состоит ответ на сервере?

💬 Спрашивают в 18 % собеседований

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

1️⃣ Стартовая линия (Status Line)

Стартовая линия содержит информацию о статусе ответа и состоит из следующих частей:

Версия протокола HTTP: Например, HTTP/1.1.

Код состояния (Status Code): Числовой код, который указывает результат обработки запроса. Примеры включают 200 (OK), 404 (Not Found), 500 (Internal Server Error).

Причинная фраза (Reason Phrase): Человеко-читаемое описание статуса. Например, OK, Not Found, Internal Server Error.

Пример:
HTTP/1.1 200 OK


2️⃣ Заголовки (Headers)

Заголовки предоставляют метаданные о ответе. Они состоят из пар "ключ-значение" и могут включать:

Date: Дата и время отправки ответа.

Content-Type: Тип содержимого ответа (например, text/html, application/json).

Content-Length: Размер тела ответа в байтах.

Server: Информация о сервере, отправившем ответ.

Set-Cookie: Установка cookies.

Пример:
Content-Type: application/json
Content-Length: 85
Server: Apache/2.4.1 (Unix)
Set-Cookie: sessionId=abc123; Path=/; HttpOnly


3️⃣ Тело ответа (Body)

Тело ответа содержит данные, которые сервер отправляет клиенту. Формат и содержание тела зависят от типа ответа и могут включать:

HTML-страницы

JSON-объекты

XML-данные

Файлы (например, изображения, документы)

Пример (JSON):
{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}


🤔 Пример полного HTTP-ответа
HTTP/1.1 200 OK
Date: Tue, 27 Jul 2024 12:28:53 GMT
Content-Type: application/json
Content-Length: 85
Server: Apache/2.4.1 (Unix)
Set-Cookie: sessionId=abc123; Path=/; HttpOnly

{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}


🤔 Краткий ответ

Ответ на сервере состоит из стартовой линии (статус запроса), заголовков (метаданные) и тела ответа (данные). Например, в HTTP ответ включает код состояния, заголовки, такие как Content-Type и Content-Length, и само содержимое ответа (например, JSON).

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет используется для работы с графовыми базами данных в Python?
Anonymous Quiz
19%
py2neo
7%
networkx
33%
igraph
41%
graphtools
📌 Какие http методы могут быть?

💬 Спрашивают в 18 % собеседований

HTTP (HyperText Transfer Protocol) методы представляют собой набор стандартных операций, которые используются для взаимодействия между клиентом и сервером в сети. Каждый метод определяет конкретное действие, которое должен выполнить сервер. Вот основные HTTP методы и их предназначение:

🤔 GET

Метод GET используется для получения данных с сервера. Он запрашивает представление ресурса, не изменяя его состояния. GET запросы часто используются для запросов веб-страниц и получения данных из API.

🤔 POST

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

🤔 PUT

Метод PUT используется для обновления существующего ресурса или создания нового ресурса на сервере. Если ресурс уже существует, он будет обновлен, если нет — будет создан.

🤔 DELETE

Метод DELETE используется для удаления ресурса с сервера. Запросы DELETE могут быть небезопасными, так как они изменяют состояние сервера, удаляя данные.

🤔 PATCH

Метод PATCH используется для частичного обновления ресурса. В отличие от PUT, который заменяет весь ресурс, PATCH изменяет только указанные части ресурса.

🤔 HEAD

Метод HEAD аналогичен GET, но без тела ответа. Используется для получения метаданных о ресурсе, таких как заголовки, без загрузки самого ресурса.

🤔 OPTIONS

Метод OPTIONS используется для запроса информации о поддерживаемых методах на сервере или на конкретном ресурсе. Это может быть полезно для определения доступных операций перед отправкой основного запроса.

🤔 CONNECT

Метод CONNECT используется для установления туннеля к серверу через прокси. Обычно используется для HTTPS через прокси.

🤔 TRACE

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

🤔 Краткий ответ:

Основные HTTP методы включают GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, CONNECT и TRACE. Они используются для различных операций с ресурсами на сервере, таких как получение данных, отправка данных, обновление, удаление и диагностика сетевых маршрутов.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет в Ruby используется для работы с очередями сообщений?
Anonymous Quiz
6%
Sidekiq
22%
Resque
16%
Delayed::Job
56%
All of the above
📌 Расскажи об отличиях MVC от MVP?

💬 Спрашивают в 18 % собеседований

MVC (Model-View-Controller) и MVP (Model-View-Presenter) – это архитектурные шаблоны, используемые в разработке программного обеспечения для разделения логики приложения на отдельные компоненты. Хотя обе архитектуры помогают улучшить структуру и поддерживаемость кода, между ними существуют важные различия.

🤔 MVC (Model-View-Controller)

Компоненты:

1️⃣ Model (Модель): Отвечает за управление данными и бизнес-логикой приложения. Она не знает о существовании View и Controller.

2️⃣ View (Представление): Отображает данные, полученные от Model, и отправляет пользовательский ввод в Controller.

3️⃣ Controller (Контроллер): Получает ввод от View, обновляет Model и выбирает, какое View должно быть обновлено.

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

View отправляет пользовательский ввод в Controller.

Controller обрабатывает ввод, обновляет Model.

Model обновляет данные и уведомляет View об изменениях.

View обновляется и отображает актуальные данные.

Преимущества:

Четкое разделение обязанностей.

Простота в тестировании отдельных компонентов.

Недостатки:

Controller может стать перегруженным.

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

🤔 MVP (Model-View-Presenter)

Компоненты:

1️⃣ Model (Модель): Отвечает за управление данными и бизнес-логикой приложения.

2️⃣ View (Представление): Отображает данные и передает пользовательский ввод Presenter'у.

3️⃣ Presenter (Презентер): Получает ввод от View, обновляет Model и передает данные обратно в View для отображения.

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

View передает пользовательский ввод Presenter'у.

Presenter обрабатывает ввод, обновляет Model.

Model обновляет данные.

Presenter получает обновленные данные из Model и обновляет View.

Преимущества:

Легкость в тестировании, особенно View и Presenter.

Presenter более тонко контролирует View, что упрощает управление пользовательским интерфейсом.

Недостатки:

Presenter может стать перегруженным логикой.

Увеличение сложности кода из-за множества взаимодействий между компонентами.

🤔 Основные отличия:

1️⃣ Взаимодействие View и других компонентов:

В MVC View взаимодействует напрямую с Model.

В MVP View взаимодействует только с Presenter, а Presenter уже работает с Model.

2️⃣ Уведомления об изменениях:

В MVC Model уведомляет View об изменениях напрямую.

В MVP Model уведомляет Presenter, а Presenter обновляет View.

3️⃣ Роль Controller и Presenter:

В MVC Controller отвечает за определение, какое View отображать.

В MVP Presenter отвечает за всю логику взаимодействия между Model и View, а также за обновление View.

🤔 Краткий ответ:

MVC и MVP – это архитектурные шаблоны, используемые для разделения логики приложения. В MVC View взаимодействует напрямую с Model, а в MVP View взаимодействует только с Presenter. В MVC Controller управляет отображением View, а в MVP Presenter управляет всей логикой взаимодействия между Model и View.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет используется для работы с базой данных Cassandra в Python?
Anonymous Quiz
28%
cassandra-driver
58%
pycassa
8%
cqlengine
7%
pylibmc
📌 Что такое cherrypick?

💬 Спрашивают в 18 % собеседований

Cherry-pick — это команда в системе управления версиями Git, которая позволяет выбрать один или несколько конкретных коммитов из одной ветки и применить их в другую ветку. Это полезно, когда нужно перенести отдельные изменения без необходимости слияния целых веток.

🤔 Основные аспекты cherry-pick

1️⃣ Избирательное применение коммитов:

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

2️⃣ Избежание полного слияния:

В отличие от обычного слияния (merge), cherry-pick переносит только выбранные коммиты, а не всю историю изменений.

🤔 Как использовать cherry-pick

Основной синтаксис
git cherry-pick <commit_hash>


Пример использования

1️⃣ Переход на целевую ветку:

Переключитесь на ветку, в которую нужно перенести изменения.
   git checkout target-branch


2️⃣ Применение коммита:

Используйте команду cherry-pick, чтобы применить нужный коммит.
   git cherry-pick a1b2c3d4 


3️⃣ Решение конфликтов (если они возникли):

Если во время cherry-pick возникают конфликты, Git предложит их решить.

Разрешите конфликты, затем завершите процесс:
   git add <resolved_files>
git cherry-pick --continue


🤔 Пример

Предположим, у вас есть коммит с хешем a1b2c3d4 в ветке feature-branch, который вы хотите перенести в main-branch.
git checkout main-branch
git cherry-pick a1b2c3d4


Если коммит успешно применен, изменения из коммита a1b2c3d4 будут добавлены в main-branch.

🤔 Когда использовать cherry-pick

1️⃣ Перенос исправлений:

Когда нужно быстро перенести исправление из одной ветки в другую (например, багфикс из develop в release).

2️⃣ Избирательное применение новых функций:

Когда нужно перенести конкретную функцию или изменение без переноса всей ветки.

🤔 Ограничения и риски

1️⃣ Конфликты:

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

2️⃣ Историческая чистота:

Частое использование cherry-pick может запутать историю изменений, так как один и тот же коммит будет существовать в нескольких ветках с разными хешами.

🤔 Краткий ответ

Cherry-pick в Git — это команда, позволяющая выбрать один или несколько коммитов из одной ветки и применить их в другую ветку. Она используется для избирательного переноса изменений без полного слияния веток.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2