🤔 Назови основные команды docker?
Docker — это инструмент для создания, развертывания и управления контейнерами. Основные команды позволяют управлять образами, контейнерами, сетями и томами.
🚩Работа с образами (`images`)
Образы — это "шаблоны" для создания контейнеров.
Пример: скачиваем Python-образ
🚩Работа с контейнерами (`containers`)
Контейнер — это запущенный процесс на основе образа.
Пример: запустить контейнер с Ubuntu и войти в него
Пример: остановить и удалить контейнер
🚩Работа с томами (`volumes`)
Том (volume) — это способ хранения данных, которые не пропадут при перезапуске контейнера.
Пример: подключить том к контейнеру
🚩Работа с сетями (`networks`)
Сети в Docker позволяют контейнерам взаимодействовать друг с другом.
Пример: запустить два контейнера в одной сети
🚩5. Docker Compose (`docker-compose.yml`)
Docker Compose позволяет управлять несколькими контейнерами с помощью
Пример
Запуск
Ставь 👍 и забирай 📚 Базу знаний
Docker — это инструмент для создания, развертывания и управления контейнерами. Основные команды позволяют управлять образами, контейнерами, сетями и томами.
🚩Работа с образами (`images`)
Образы — это "шаблоны" для создания контейнеров.
Пример: скачиваем Python-образ
docker pull python:3.11
🚩Работа с контейнерами (`containers`)
Контейнер — это запущенный процесс на основе образа.
Пример: запустить контейнер с Ubuntu и войти в него
docker run -it ubuntu bash
Пример: остановить и удалить контейнер
docker stop my_app
docker rm my_app
🚩Работа с томами (`volumes`)
Том (volume) — это способ хранения данных, которые не пропадут при перезапуске контейнера.
Пример: подключить том к контейнеру
docker run -v my_data:/app/data ubuntu
🚩Работа с сетями (`networks`)
Сети в Docker позволяют контейнерам взаимодействовать друг с другом.
Пример: запустить два контейнера в одной сети
docker network create my_network
docker run -d --network my_network --name app1 ubuntu
docker run -d --network my_network --name app2 ubuntu
🚩5. Docker Compose (`docker-compose.yml`)
Docker Compose позволяет управлять несколькими контейнерами с помощью
docker-compose.yml. Пример
docker-compose.ymlversion: "3"
services:
app:
image: python:3.11
volumes:
- my_data:/app/data
networks:
- my_network
volumes:
my_data:
networks:
my_network:
Запуск
docker compose up -d
Ставь 👍 и забирай 📚 Базу знаний
🔥1
🤔 Как понять, какие виды тестов нужны именно сейчас?
Выбор типа тестирования зависит от целей, стадии разработки и текущих проблем. Чтобы определить, какие тесты нужны, стоит ответить на вопросы:
Что тестируем? (код, API, UI, производительность и т. д.)
Какие риски? (где может сломаться, критичность ошибки)
Какой этап разработки? (новый код, рефакторинг, релиз)
🚩Как определить нужные тесты прямо сейчас?
🟠Только написали новый код
Нужны: Юнит-тесты
Тестируем функции и классы отдельно.
🟠Соединяем модули или работаем с API
Нужны: Интеграционные тесты
Проверяем работу всей системы вместе.
🟠Перед релизом или деплоем
Нужны: Функциональные и регрессионные тесты
Проверяем ключевые сценарии и старый функционал.
🟠Изменили UI (например, фронтенд на React)
Нужны: UI-тесты (Selenium, Playwright)
Проверяем нажатие кнопок, формы и отображение страниц.
🟠Если проект должен выдерживать большую нагрузку
Нужны: Нагрузочные тесты (Load Testing)
Используем
Ставь 👍 и забирай 📚 Базу знаний
Выбор типа тестирования зависит от целей, стадии разработки и текущих проблем. Чтобы определить, какие тесты нужны, стоит ответить на вопросы:
Что тестируем? (код, API, UI, производительность и т. д.)
Какие риски? (где может сломаться, критичность ошибки)
Какой этап разработки? (новый код, рефакторинг, релиз)
🚩Как определить нужные тесты прямо сейчас?
🟠Только написали новый код
Нужны: Юнит-тесты
Тестируем функции и классы отдельно.
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5 # ✅ Юнит-тест
🟠Соединяем модули или работаем с API
Нужны: Интеграционные тесты
Проверяем работу всей системы вместе.
def test_api():
response = requests.get("https://api.example.com/data")
assert response.status_code == 200
🟠Перед релизом или деплоем
Нужны: Функциональные и регрессионные тесты
Проверяем ключевые сценарии и старый функционал.
def test_login():
assert login("user", "password") == "Success"
🟠Изменили UI (например, фронтенд на React)
Нужны: UI-тесты (Selenium, Playwright)
Проверяем нажатие кнопок, формы и отображение страниц.
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
assert "Example" in driver.title
🟠Если проект должен выдерживать большую нагрузку
Нужны: Нагрузочные тесты (Load Testing)
Используем
locust, JMeter, k6, чтобы проверить сколько пользователей выдержит сервер. from locust import HttpUser, task
class MyUser(HttpUser):
@task
def test_homepage(self):
self.client.get("/")
Ставь 👍 и забирай 📚 Базу знаний
🤔 Какие основные HTTP методы знаешь?
Основные методы: GET (получение данных), POST (отправка данных), PUT (обновление или создание), DELETE (удаление), PATCH (частичное обновление), HEAD, OPTIONS.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Как выбрать данные из двух таблиц без метода join()?
В SQL можно объединять данные из двух таблиц без использования
🚩Использование подзапросов (`SELECT` внутри `SELECT`)
Подзапрос (
Допустим, у нас есть две таблицы:
🚩Использование `IN` или `EXISTS`
Можно фильтровать данные из одной таблицы, проверяя наличие значений в другой.
🚩Объединение данных через `UNION`
Если таблицы имеют схожие колонки, можно объединить их с
🚩Использование `CROSS JOIN` через `WHERE`
Хотя
Ставь 👍 и забирай 📚 Базу знаний
В SQL можно объединять данные из двух таблиц без использования
JOIN, используя альтернативные методы. 🚩Использование подзапросов (`SELECT` внутри `SELECT`)
Подзапрос (
subquery) позволяет выбрать данные из одной таблицы, используя данные из другой. Допустим, у нас есть две таблицы:
employees (id, name, department_id) departments (id, name)SELECT name,
(SELECT name FROM departments WHERE id = employees.department_id) AS department_name
FROM employees;
🚩Использование `IN` или `EXISTS`
Можно фильтровать данные из одной таблицы, проверяя наличие значений в другой.
SELECT name
FROM employees
WHERE department_id IN (SELECT id FROM departments);
🚩Объединение данных через `UNION`
Если таблицы имеют схожие колонки, можно объединить их с
UNION. SELECT id, name, email FROM users_old
UNION
SELECT id, name, email FROM users_new;
🚩Использование `CROSS JOIN` через `WHERE`
Хотя
CROSS JOIN делает декартово произведение, его можно фильтровать WHERE, имитируя INNER JOIN. SELECT e.name, d.name AS department
FROM employees e, departments d
WHERE e.department_id = d.id;
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое оконные функции?
Оконные функции — это агрегатные функции, которые применяются к строкам в пределах окна, не группируя их. Например: сумма по группе, но каждая строка остаётся на месте. Работают вместе с OVER(), PARTITION BY, ORDER BY.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Оконные функции — это агрегатные функции, которые применяются к строкам в пределах окна, не группируя их. Например: сумма по группе, но каждая строка остаётся на месте. Работают вместе с OVER(), PARTITION BY, ORDER BY.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое хешируемые типы данных?
Это такие типы данных, которые имеют постоянное (неизменяемое) хеш-значение на протяжении всего времени их существования. Это означает, что их можно использовать в качестве ключей в словарях (
🚩Как понять, что объект хешируемый?
🟠Объект должен быть неизменяемым
если объект можно изменить после создания, его хеш тоже изменится, что нарушает работу структур данных (словари, множества).
🟠Должен реализовывать метод `__hash__()`
который возвращает уникальный идентификатор объекта.
🚩Какие типы данных хешируемые?
Числа (
Строки (
Кортежи (
Булевы значения (
🚩Какие типы НЕ хешируемые?
Списки (
Множества (
Словари (
🚩Почему это важно?
Хешируемые типы используются в словари (
Ставь 👍 и забирай 📚 Базу знаний
Это такие типы данных, которые имеют постоянное (неизменяемое) хеш-значение на протяжении всего времени их существования. Это означает, что их можно использовать в качестве ключей в словарях (
dict) и элементов в множествах (set), так как они поддерживают вычисление хеша с помощью функции hash().🚩Как понять, что объект хешируемый?
🟠Объект должен быть неизменяемым
если объект можно изменить после создания, его хеш тоже изменится, что нарушает работу структур данных (словари, множества).
🟠Должен реализовывать метод `__hash__()`
который возвращает уникальный идентификатор объекта.
🚩Какие типы данных хешируемые?
Числа (
int, float, complex)print(hash(42)) # 42
print(hash(3.14)) # 322818021289917443
print(hash(1 + 2j)) # 8389048192121911274
Строки (
str)print(hash("hello")) # Например, 5320385861927423548Кортежи (
tuple), если все их элементы тоже хешируемые:print(hash((1, 2, 3))) # 529344067295497451
Булевы значения (
bool):print(hash(True)) # 1
print(hash(False)) # 0
🚩Какие типы НЕ хешируемые?
Списки (
list)hash([1, 2, 3]) # TypeError: unhashable type: 'list'
Множества (
set)hash({1, 2, 3}) # TypeError: unhashable type: 'set'Словари (
dict)hash({"a": 1}) # TypeError: unhashable type: 'dict'🚩Почему это важно?
Хешируемые типы используются в словари (
dict) и множества (set), так как они используют хеш-функцию для быстрого поиска данных.my_dict = { (1, 2, 3): "tuple_key" } # Работает, потому что кортеж неизменяемый
my_set = { 42, "hello", (1, 2) } # Все элементы хешируемыеСтавь 👍 и забирай 📚 Базу знаний
👍3
🤔 Как сделать package?
Пакет в Python — это папка, содержащая файл __init__.py, который указывает, что она является модулем. Внутри пакета могут находиться другие модули или подпакеты. Это позволяет удобно структурировать код по функциональным блокам и импортировать нужные части.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Пакет в Python — это папка, содержащая файл __init__.py, который указывает, что она является модулем. Внутри пакета могут находиться другие модули или подпакеты. Это позволяет удобно структурировать код по функциональным блокам и импортировать нужные части.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний