Python | Вопросы собесов – Telegram
Python | Вопросы собесов
13.6K subscribers
36 photos
3 videos
1 file
1.17K links
Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp

Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky
Download Telegram
🤔Что тебе известно про нереляционные базы данных?

Нереляционные базы данных (NoSQL) подходят для хранения неструктурированных или динамических данных. Они делятся на типы: ключ-значение (Redis), документоориентированные (MongoDB), графовые (Neo4j) и базы временных рядов. NoSQL обеспечивает высокую производительность и горизонтальное масштабирование.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3💊1
🤔 Что такое машинный код?

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

🚩Основные характеристики

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

🟠Процессор-специфичность
Машинный код зависит от архитектуры процессора. Инструкции для одного типа процессора (например, x86, ARM) не будут работать на другом типе процессора. Производители процессоров предоставляют документацию по набору инструкций, который поддерживает их процессор.

🟠Бинарный формат
Машинный код записывается в виде последовательностей битов. Эти последовательности могут представлять как инструкции, так и данные. Для удобства представления и анализа машинный код часто записывается в виде шестнадцатеричных (hex) чисел.

🚩Пример машинного кода

B8 01 00 00 00 BB 01 00 00 00 B9 48 00 00 00 BA 0D 00 00 00 CD 80


🚩Преобразование машинного кода

🟠Ассемблер
Это инструмент, который преобразует ассемблерный код (читаемый человеком) в машинный код (читаемый процессором). Ассемблерный код использует мнемоники для представления инструкций процессора, что упрощает программирование по сравнению с непосредственным написанием машинного кода.
section .data
msg db 'Hello, world!', 0

section .text
global _start

_start:
mov eax, 4 ; системный вызов sys_write
mov ebx, 1 ; файл дескриптор stdout
mov ecx, msg ; адрес сообщения
mov edx, 13 ; длина сообщения
int 0x80 ; вызов ядра

mov eax, 1 ; системный вызов sys_exit
xor ebx, ebx ; статус выхода 0
int 0x80 ; вызов ядра


🟠Компилятор
Это инструмент, который преобразует код, написанный на языке программирования высокого уровня (например, C или C++), в машинный код. Компиляторы обычно выполняют оптимизацию кода для повышения производительности.
#include <stdio.h>

int main() {
printf("Hello, world!\n");
return 0;
}


🚩Плюсы и минусы

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое транзакция?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥4
🤔 Какие есть отличия у python и js?

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

🚩Синтаксис и стиль написания кода

🟠Python
Синтаксис: Простой и читаемый синтаксис, использующий отступы для определения блоков кода. Философия: "Читабельность превыше всего" — код должен быть читаемым и понятным.
def greet(name):
return f"Hello, {name}!"

print(greet("World"))


🟠JavaScript
Синтаксис: Использует фигурные скобки {} для определения блоков кода и точку с запятой ; для окончания выражений (хотя она часто не обязательна). Философия: Гибкость и функциональность — JavaScript позволяет писать код в разных стилях (объектно-ориентированном, функциональном и императивном).
function greet(name) {
return `Hello, ${name}!`;
}

console.log(greet("World"));


🚩Область применения

🟠Python
Веб-разработка (с использованием фреймворков, таких как Django и Flask). Научные вычисления и анализ данных (библиотеки Pandas, NumPy, SciPy). Машинное обучение и искусственный интеллект (библиотеки TensorFlow, PyTorch). Автоматизация и скрипты. Обработка текста и естественного языка. Применение: Широко используется в различных областях благодаря богатой экосистеме библиотек и простоте использования.

🟠JavaScript
Веб-разработка (frontend и backend, с использованием фреймворков и библиотек, таких как React, Angular, Vue.js, Node.js). Создание интерактивных пользовательских интерфейсов. Разработка серверных приложений (Node.js). Мобильная разработка (React Native, Ionic). Разработка игр (библиотеки и фреймворки, такие как Phaser). Применение: Основной язык для веб-разработки, особенно на стороне клиента (браузера), а также широко используется на сервере с Node.js.

🚩Исполняемая среда

🟠Python
Интерпретируемый язык: Код Python обычно выполняется интерпретатором. Среда выполнения: Python можно запускать на сервере, рабочем столе или встраивать в другие приложения. Веб-приложения часто развертываются на сервере. Установка и управление пакетами: Пакетный менеджер pip используется для установки и управления библиотеками и зависимостями.

🟠JavaScript
Интерпретируемый язык: Код JavaScript выполняется интерпретатором в браузере или в среде Node.js на сервере. Среда выполнения: Браузер (клиентская сторона) и сервер (с помощью Node.js). Установка и управление пакетами: Пакетный менеджер npm (Node Package Manager) используется для установки и управления библиотеками и зависимостями.

🚩Типизация

🟠Python
Динамическая типизация: Типы переменных определяются на этапе выполнения, и переменные могут менять тип во время выполнения программы. Аннотации типов: Начиная с версии 3.5, Python поддерживает аннотации типов, что позволяет указывать типы переменных, параметров и возвращаемых значений функций.
def add(a: int, b: int) -> int:
return a + b


🟠JavaScript
Динамическая типизация: Типы переменных определяются на этапе выполнения, и переменные могут менять тип во время выполнения программы. Проверка типов: В JavaScript нет встроенной поддержки аннотаций типов, но можно использовать TypeScript — надстройку над JavaScript, которая добавляет статическую типизацию.
function add(a: number, b: number): number {
return a + b;
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
🤔 Что такое git?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20
🤔 Зачем нужен ООП?

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

🚩Основные принципы

🟠Инкапсуляция
Объединение данных и методов, работающих с этими данными, в одном объекте. Это позволяет скрывать внутреннее состояние объекта и защищать его от внешнего вмешательства.
class Dog:
def __init__(self, name):
self.__name = name # Инкапсуляция

def get_name(self):
return self.__name

def set_name(self, name):
self.__name = name

dog = Dog("Buddy")
print(dog.get_name()) # Buddy
dog.set_name("Max")
print(dog.get_name()) # Max


🟠Наследование
Создание нового класса на основе существующего, что позволяет переиспользовать код и упрощает его поддержку.
class Animal:
def __init__(self, name):
self.name = name

def speak(self):
pass

class Dog(Animal):
def speak(self):
return "Woof!"

dog = Dog("Buddy")
print(dog.speak()) # Woof!


🟠Полиморфизм
Способность объектов разных классов обрабатывать данные через единый интерфейс. Это позволяет использовать один и тот же код для объектов разных типов.
class Cat(Animal):
def speak(self):
return "Meow!"

animals = [Dog("Buddy"), Cat("Whiskers")]

for animal in animals:
print(animal.speak()) # Woof! Meow!


🟠Абстракция
Процесс выделения общих характеристик и скрытия деталей реализации. Это позволяет сосредоточиться на логике работы программы, а не на деталях реализации.
from abc import ABC, abstractmethod

class Animal(ABC):
@abstractmethod
def speak(self):
pass

class Dog(Animal):
def speak(self):
return "Woof!"

dog = Dog()
print(dog.speak()) # Woof!


🚩Плюсы

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤔 Зачем нужен метод super в классе?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5
🤔 Является ли класс объектом?

Классы сами по себе являются объектами. Это один из аспектов метапрограммирования в Python, который позволяет рассматривать классы как объекты, наравне с экземплярами этих классов.

🚩Почему классы являются объектами?

🟠Классы имеют тип
Все, включая классы, является объектами и имеет свой тип. Классы — это экземпляры метакласса type.

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

🟠Классы можно передавать как аргументы и возвращать из функций
Классы могут передаваться в функции и возвращаться из них, как и любые другие объекты.

🚩Пример:

1⃣Тип класса
class MyClass:
pass

# Проверка типа класса
print(type(MyClass)) # <class 'type'>


2⃣Создание класса динамически
def create_class(name):
if name == "Dog":
class Dog:
def speak(self):
return "Woof!"
return Dog
else:
class Cat:
def speak(self):
return "Meow!"
return Cat

AnimalClass = create_class("Dog")
animal = AnimalClass()
print(animal.speak()) # Woof!


3⃣Передача и возврат классов из функций
def print_class_name(cls):
print(cls.__name__)

class MyClass:
pass

print_class_name(MyClass) # MyClass


🚩Метаклассы

Это "классы для классов". Метакласс определяет поведение класса и используется для создания классов. По умолчанию все классы в Python являются экземплярами метакласса type.
class MyMeta(type):
def __new__(cls, name, bases, dct):
print(f"Creating class {name}")
return super().__new__(cls, name, bases, dct)

class MyClass(metaclass=MyMeta):
pass

# Вывод: Creating class MyClass


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Что знаешь про два основных типа данных Python?

Основные типы данных Python — изменяемые (списки, множества, словари) и неизменяемые (строки, числа, кортежи). Изменяемые можно модифицировать после создания, тогда как неизменяемые остаются неизменными.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥1💊1
🤔 Что такое абстрактный метод?

Это метод, который объявлен в абстрактном классе, но не имеет собственной реализации. Абстрактные методы предназначены для того, чтобы подклассы, наследующие абстрактный класс, обязательно реализовали эти методы. Абстрактные методы создаются с использованием модуля abc (Abstract Base Classes).

🚩Основные моменты

🟠Абстрактный метод
Метод, который объявлен в абстрактном классе и должен быть реализован в подклассах.
🟠Абстрактный класс
Класс, содержащий один или более абстрактных методов. Такие классы не могут быть инстанцированы напрямую.
🟠Использование модуля `abc`
Для создания абстрактных методов и классов.

🚩Пример создания

🟠Импорт модуля `abc`
Импортируем необходимые классы и декораторы.
🟠Создание абстрактного класса
Наследуемся от ABC.
🟠Определение абстрактного метода
Используем декоратор @abstractmethod.

from abc import ABC, abstractmethod

# Создание абстрактного класса
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass

# Попытка создания экземпляра абстрактного класса приведет к ошибке
# animal = Animal() # TypeError: Can't instantiate abstract class Animal with abstract methods make_sound

# Создание подклассов, которые реализуют абстрактные методы
class Dog(Animal):
def make_sound(self):
return "Woof!"

class Cat(Animal):
def make_sound(self):
return "Meow!"

# Теперь можно создать экземпляры подклассов
dog = Dog()
print(dog.make_sound()) # Woof!

cat = Cat()
print(cat.make_sound()) # Meow!


🚩Основные моменты, которые стоит учитывать

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

🚩Плюсы

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое Docker?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
🤔 Виды наследования?

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

🟠Одиночное наследование (Single Inheritance)
Одиночное наследование — это когда класс наследует только один родительский класс.
class Animal:
def speak(self):
return "Some sound"

class Dog(Animal):
def speak(self):
return "Woof!"

dog = Dog()
print(dog.speak()) # Woof!


🟠Множественное наследование (Multiple Inheritance)
Множественное наследование — это когда класс наследует несколько родительских классов.
class Animal:
def eat(self):
return "Eating"

class Pet:
def play(self):
return "Playing"

class Dog(Animal, Pet):
def speak(self):
return "Woof!"

dog = Dog()
print(dog.eat()) # Eating
print(dog.play()) # Playing
print(dog.speak()) # Woof!


🟠Многоуровневое наследование (Multilevel Inheritance)
Многоуровневое наследование — это когда класс наследует другой класс, который в свою очередь наследует другой класс.
class Animal:
def eat(self):
return "Eating"

class Mammal(Animal):
def walk(self):
return "Walking"

class Dog(Mammal):
def speak(self):
return "Woof!"

dog = Dog()
print(dog.eat()) # Eating
print(dog.walk()) # Walking
print(dog.speak()) # Woof!


🟠Иерархическое наследование (Hierarchical Inheritance)
Иерархическое наследование — это когда несколько классов наследуют один и тот же родительский класс.
class Animal:
def speak(self):
return "Some sound"

class Dog(Animal):
def speak(self):
return "Woof!"

class Cat(Animal):
def speak(self):
return "Meow!"

dog = Dog()
cat = Cat()
print(dog.speak()) # Woof!
print(cat.speak()) # Meow!


🟠Гибридное наследование (Hybrid Inheritance)
Гибридное наследование — это комбинация двух или более типов наследования. Это может быть сложная структура, включающая одиночное, множественное, многоуровневое и иерархическое наследование.
class Animal:
def eat(self):
return "Eating"

class Mammal(Animal):
def walk(self):
return "Walking"

class Bird(Animal):
def fly(self):
return "Flying"

class Bat(Mammal, Bird):
def use_sonar(self):
return "Using sonar"

bat = Bat()
print(bat.eat()) # Eating
print(bat.walk()) # Walking
print(bat.fly()) # Flying
print(bat.use_sonar()) # Using sonar


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🤔 Что такое git?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2💊2
🤔 Что такое SDLC?

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

🚩Основные этапы SDLC

🟠Планирование и анализ требований (Planning and Requirements Analysis)
На этом этапе определяются цели проекта, анализируются потребности и требования к системе. Включает сбор требований от заинтересованных сторон, анализ бизнес-процессов и создание документации с описанием требований.
Встречи с клиентами и пользователями для определения функций системы. Документирование функциональных и нефункциональных требований.

🟠Проектирование (Design)
На этапе проектирования разрабатывается архитектура системы и ее компоненты. Создаются технические спецификации, включая схемы базы данных, диаграммы классов и интерфейсов, а также детализируется план реализации.Разработка диаграмм UML.Создание прототипов пользовательского интерфейса.Проектирование архитектуры системы.

🟠Разработка (Implementation or Coding)
На этом этапе осуществляется непосредственная разработка программного обеспечения на основе спецификаций, созданных на предыдущем этапе. Кодирование выполняется в соответствии с выбранными языками программирования и инструментами разработки. Написание кода для модулей и компонентов системы. Интеграция различных компонентов системы. Регулярное использование систем контроля версий (например, Git).

🟠Тестирование (Testing)
Этап тестирования включает проверку и валидацию системы для обнаружения и исправления ошибок. Тестирование проводится в различных формах, включая юнит-тестирование, интеграционное тестирование, системное тестирование и приемочное тестирование. Автоматизированное тестирование с использованием фреймворков, таких как pytest или JUnit. Ручное тестирование функциональности и пользовательского интерфейса. Тестирование производительности и безопасности.

🟠Развертывание (Deployment)
На этом этапе программное обеспечение разворачивается в рабочей среде и становится доступным пользователям. Включает настройку серверов, развертывание баз данных и настройку инфраструктуры. Развертывание на облачных платформах, таких как AWS или Azure. Настройка и конфигурация серверов и сетей. Миграция данных и начальная загрузка данных.

🟠Поддержка и сопровождение (Maintenance)
Этап поддержки и сопровождения включает в себя обслуживание и улучшение системы после ее развертывания. Включает исправление ошибок, обновление функциональности и оптимизацию производительности. Обновление системы безопасности. Внесение изменений на основе отзывов пользователей. Обслуживание серверов и баз данных.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101
🤔 Что такое изоморфное приложение?

Это веб-приложение, в котором как клиентская, так и серверная часть используют один и тот же код, обычно написанный на JavaScript или TypeScript. Это позволяет рендерить страницы на сервере и на клиенте, улучшая производительность и SEO.

🚩Основные преимущества изоморфных приложений

🟠Улучшенная производительность
Первоначальный рендеринг выполняется на сервере, что уменьшает время загрузки и улучшает пользовательский опыт, особенно на медленных соединениях.
🟠Лучший SEO
Поисковые системы лучше индексируют страницы, которые уже отрендерены на сервере, что улучшает SEO по сравнению с чисто клиентскими приложениями.
🟠Повышенная удобочитаемость кода
Использование одного и того же кода как на клиенте, так и на сервере упрощает поддержку и развитие приложения.

🚩Как работает изоморфное приложение

🟠Серверный рендеринг
Когда пользователь запрашивает страницу, сервер рендерит HTML и отправляет его пользователю. Это обеспечивает быстрый первый рендер и делает контент доступным для поисковых систем.

🟠Гидратация (Hydration)
После получения HTML от сервера, клиентская часть "гидратирует" (или "активирует") рендеренные элементы, добавляя интерактивность с помощью JavaScript. Это позволяет приложениям работать как одностраничные приложения (SPA) после начальной загрузки.

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

🚩Пример изоморфного приложения с использованием React и Next.js

Установка Next.js
npx create-next-app@latest my-isomorphic-app
cd my-isomorphic-app
npm run dev


Создание страницы с серверным рендерингом
// pages/index.js
import React from 'react';

const Home = ({ message }) => (
<div>
<h1>{message}</h1>
</div>
);

export async function getServerSideProps() {
return {
props: {
message: 'Hello from the server!',
},
};
}

export default Home;


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какие основные HTTP методы знаешь?

Основные методы: GET для получения данных, POST для отправки данных, PUT для обновления или создания ресурса, DELETE для удаления. Также используются PATCH для частичного обновления, HEAD для получения заголовков и OPTIONS для определения доступных методов.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥5
🤔 Что такое SRP?

Это один из пяти принципов SOLID, которые формулируют правила для написания чистого и поддерживаемого кода в объектно-ориентированном программировании. Согласно SRP, класс или модуль должен иметь только одну причину для изменения, что означает, что он должен выполнять только одну задачу или иметь одну ответственность.

🚩Основные аспекты

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

🚩Пример нарушения

class User:
def __init__(self, name, email):
self.name = name
self.email = email

def save(self):
# Сохранение данных пользователя в базу данных
print(f"Saving user {self.name} to the database.")

def send_welcome_email(self):
# Отправка приветственного сообщения на электронную почту
print(f"Sending welcome email to {self.email}.")


🚩Пример соблюдения

Для соблюдения принципа SRP разделим класс User на два отдельных класса: один для управления данными пользователя, другой для отправки сообщений электронной почты.
class User:
def __init__(self, name, email):
self.name = name
self.email = email

class UserRepository:
def save(self, user):
# Сохранение данных пользователя в базу данных
print(f"Saving user {user.name} to the database.")

class EmailService:
def send_welcome_email(self, user):
# Отправка приветственного сообщения на электронную почту
print(f"Sending welcome email to {user.email}.")

# Использование классов
user = User("Alice", "alice@example.com")
user_repository = UserRepository()
email_service = EmailService()

user_repository.save(user)
email_service.send_welcome_email(user)


🚩Плюсы

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Что знаешь про ORM?

ORM (Object-Relational Mapping) — это технология, которая позволяет работать с реляционными базами данных через объектно-ориентированные модели. Она автоматически преобразует объекты в SQL-запросы и обратно, упрощая работу с данными. Популярные ORM включают Hibernate, SQLAlchemy и Django ORM.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
🤔 Какие есть 6 этапов разработки продукта?

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

🟠Планирование и анализ требований
Этот этап включает в себя сбор и анализ требований к будущему продукту. Целью является понимание того, что именно требуется создать и для кого. Включает: Встречи с клиентами и заинтересованными сторонами для обсуждения требований.
Определение функциональных и нефункциональных требований.
Анализ целевого рынка и конкурентов.
Разработка спецификаций и документации.

🟠Проектирование
На этапе проектирования создается архитектура будущего продукта. Это включает:
Разработка высокоуровневой архитектуры системы.
Детальное проектирование отдельных компонентов и модулей.
Создание схем баз данных, диаграмм классов и других архитектурных диаграмм.
Разработка прототипов пользовательского интерфейса.

🟠Разработка (кодирование)
Этот этап включает в себя непосредственное написание кода и реализацию функциональности согласно разработанным спецификациям и проектам. Включает:
Разработка модулей и компонентов системы.
Интеграция различных частей системы.
Использование систем контроля версий для управления кодом.
Постоянная проверка кода на соответствие стандартам и требованиям.

🟠Тестирование
Тестирование необходимо для обеспечения качества продукта и выявления ошибок до его развертывания. Включает:
Юнит-тестирование отдельных компонентов.
Интеграционное тестирование для проверки взаимодействия компонентов.
Системное тестирование для проверки всей системы в целом.
Приемочное тестирование для проверки соответствия требованиям клиента.

🟠Развертывание
На этапе развертывания продукт готовится к запуску и становится доступным пользователям. Включает:
Настройка серверов и инфраструктуры.
Развертывание приложений в производственной среде.
Проведение окончательных проверок и тестов в реальной среде.
Подготовка и выпуск документации для пользователей и администраторов.

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92
🤔 Что такое транзакция?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🤔 Что такое кастомный менеджер модели?

В Django, кастомный менеджер модели — это способ расширения стандартного менеджера модели (класса Manager), чтобы добавить дополнительные методы для выполнения более сложных запросов к базе данных. Менеджеры используются для работы с наборами запросов (QuerySets) и предоставляют интерфейс для выполнения операций с базой данных.

🚩Зачем использовать кастомный менеджер модели?

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

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

🟠Расширение функциональности
Добавление новых методов к менеджеру позволяет выполнять специфичные для приложения операции с данными.

🚩Пример создания кастомного менеджера модели

1⃣Создание кастомного менеджера
from django.db import models
from django.utils import timezone

class BookManager(models.Manager):
def by_author(self, author_name):
return self.filter(author__name=author_name)

def published_recently(self):
one_month_ago = timezone.now() - timezone.timedelta(days=30)
return self.filter(publication_date__gte=one_month_ago)


2⃣Использование кастомного менеджера в модели
from django.db import models

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

class Book(models.Model):
noscript = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
publication_date = models.DateTimeField()

# Подключение кастомного менеджера
objects = BookManager()


3⃣Пример использования кастомного менеджера
# Получение книг по автору
books_by_author = Book.objects.by_author('John Doe')
for book in books_by_author:
print(book.noscript)

# Получение книг, опубликованных за последний месяц
recent_books = Book.objects.published_recently()
for book in recent_books:
print(book.noscript)


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7