Python | Вопросы собесов
13.4K subscribers
38 photos
4 videos
1 file
1.32K links
Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp

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

Разбить список (list) можно разными способами в зависимости от задачи:
На части фиксированной длины
На N частей
По условию

🚩Разбить список на части фиксированного размера

Если нужно разделить список на подсписки длиной n, можно использовать list comprehension
def split_list(lst, size):
return [lst[i:i + size] for i in range(0, len(lst), size)]

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(split_list(data, 3))


Вывод
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]


🚩Разбить список на N частей (равных или почти равных)

Если нужно разделить список на N частей, можно использовать numpy или itertools
import numpy as np

def split_into_n_parts(lst, n):
return np.array_split(lst, n)

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(split_into_n_parts(data, 4))


Вывод
[array([1, 2, 3]), array([4, 5]), array([6, 7]), array([8, 9])]


🚩Разбить список по условию

Если нужно разделить список по какому-то критерию, например, на чётные и нечётные числа
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]

even = [x for x in data if x % 2 == 0]
odd = [x for x in data if x % 2 != 0]

print(even, odd)


Вывод
[2, 4, 6, 8] [1, 3, 5, 7, 9]


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤔 Какая в Python типизация, статическая или динамичная?

Python использует динамическую типизацию.
1. Тип переменной определяется во время выполнения, а не во время компиляции.
2. Это позволяет переменной менять тип в процессе выполнения.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1
🤔 Cловари {dict}?

Словарь (dict) — это структура данных, которая хранит пары "ключ → значение".

🟠Создание словаря
Через {} (фигурные скобки)
my_dict = {"name": "Alice", "age": 25, "city": "New York"}


Изменение значения
my_dict["age"] = 26  # Меняем возраст


del — удаление по ключу
del my_dict["city"]


Перебор ключей (for key in dict)
for key in my_dict:
print(key, my_dict[key])


Проверка наличия ключа
if "name" in my_dict:
print("Ключ существует!")


🟠Генерация словарей (Dictionary Comprehension)
Создадим словарь квадратов чисел
squares = {x: x**2 for x in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}


🟠Ключи должны быть хешируемыми (неизменяемыми)
Нельзя использовать list как ключ!
my_dict[[1, 2, 3]] = "Ошибка"  # TypeError: unhashable type: 'list'


Можно использовать tuple, int, str, frozenset
my_dict[(1, 2, 3)] = "OK"


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3💊1
🤔 Как посмотреть количество доступной ОЗУ на Linux?

Можно использовать системные утилиты, которые выводят сведения об объёме оперативной памяти, её использовании и свободном объёме.


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

git stash — это команда в Git, которая сохраняет незакоммиченные изменения во временное хранилище (stash) и очищает рабочую директорию.

🚩Когда это полезно?

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

🚩Как использовать `git stash`?

Сохранить изменения в stash
git stash


Посмотреть список сохранённых изменений
git stash list


Выведет список всех stash-ов
stash@{0}: WIP on main: 1234567 Добавил новую фичу
stash@{1}: WIP on dev: 89abcde Исправил баг


Восстановить сохранённые изменения
git stash pop  # Восстановит изменения и удалит stash


ИЛИ
git stash apply  # Восстановит, но stash останется в списке


Удалить stash после применения
git stash drop stash@{0}  # Удалит конкретный stash
git stash clear # Удалит все stash'и


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

Сценарий
- Ты работаешь в ветке main, но нужно срочно переключиться на dev.
- У тебя есть изменения, которые ты не хочешь коммитить.
Решение
git stash          # Сохраняем изменения
git checkout dev # Переключаемся на другую ветку
# Делаем нужную работу...
git checkout main # Возвращаемся в основную ветку
git stash pop # Восстанавливаем изменения


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10💊1
🤔 Виды форматирования строк?

– Через оператор % (устаревший стиль).
– Метод .format().
– f-строки (f"{переменная}").
– Конкатенация (+), если речь не о форматировании, а о сложении.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Почему плохо хранить данные SQL в Docker контейнере?

Хранение данных базы данных (SQL) внутри Docker-контейнера не рекомендуется, потому что контейнеры являются временными и одноразовыми. При удалении или пересоздании контейнера все данные внутри него теряются.

🚩Данные удаляются при удалении контейнера
Контейнеры в Docker спроектированы так, чтобы их можно было легко пересоздавать. Если удалить контейнер (docker rm), все данные, хранящиеся внутри него, исчезнут навсегда.
docker run --name mydb -e MYSQL_ROOT_PASSWORD=secret -d mysql
docker stop mydb
docker rm mydb # Удаляем контейнер – все данные пропали!


🚩Проблемы с обновлением и масштабированием

Если база данных хранится внутри контейнера, обновить версию MySQL/PostgreSQL будет сложно. При пересоздании контейнера все данные потеряются, и их придется восстанавливать из резервной копии.

🚩Низкая производительность I/O

Хранение данных внутри контейнера может снизить скорость работы базы, потому что Docker использует копию на запись (Copy-on-Write, CoW).
Решение — использовать прямые тома (volumes) или монтировать каталог хоста.
docker run --name mydb -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql


🚩Проблемы с резервным копированием

Если база находится внутри контейнера, то сделать бэкап или восстановить данные сложно.
Лучшее решение: использовать volumes + делать бэкапы через mysqldump или pg_dump.
docker exec mydb mysqldump -u root -psecret mydatabase > backup.sql


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🤔 Чем отличается re.match от re.search?

- re.match() проверяет только начало строки на соответствие шаблону. Если начало не совпадает — возвращает None.
-
re.search() ищет соответствие в любом месте строки и возвращает первое совпадение.

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

В HTTP коды состояния указывают, как сервер обработал запрос. Они делятся на 5 категорий:
1xx (Информационные – запрос принят, продолжаем.
2xx (Успешные) – всё хорошо.
3xx (Перенаправления) – запрашиваемый ресурс перемещён.
4xx (Ошибки клиента) – клиент отправил неправильный запрос.
5xx (Ошибки сервера) – сервер не смог обработать запрос.


🚩Как исправить ошибки HTTP?

4xx:
400: Проверить формат запроса.
401: Убедиться, что пользователь авторизован.
403: Проверить права доступа.
404: Убедиться, что URL правильный.
5xx:
500: Проверить код сервера (ошибки в логах).
502/504: Проверить настройки Nginx/Proxy.
503: Сервер перегружен → добавить балансировку нагрузки.

Ставь 👍 и забирай 📚 Базу знаний
👍6
🤔 Что такое git stash?

git stash — это временное сохранение текущих изменений в "карман", чтобы вернуться к чистому состоянию рабочего каталога. Это удобно, если нужно переключиться на другую ветку, не делая коммит. Позже можно восстановить изменения или удалить их.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍6🔥2
🤔 Что в python не является объектом?

В Python практически всё является объектом: числа, строки, функции, классы, модули и даже сам интерпретатор Python рассматривает их как объекты. Однако есть несколько вещей, которые объектами не являются:

🟠Операторы и синтаксические конструкции
Операторы (+, -, *, and, or, not и т. д.) сами по себе не являются объектами. Они — часть синтаксиса языка и не имеют представления в виде объектов в памяти.
   a = 10 + 5  # Оператор "+" выполняет сложение, но сам по себе не объект
print(type(+)) # Ошибка: нельзя получить тип оператора


🟠Ключевые слова (keywords)
Встроенные ключевые слова Python (if, else, while, for, def, class, return и т. д.) не являются объектами. Они зарезервированы интерпретатором и используются для управления потоком выполнения кода.
   print(type(if))  # Ошибка: ключевое слово не является объектом


🟠Идентификаторы переменных
Хотя переменные ссылаются на объекты, сами идентификаторы (имена переменных) — это просто ссылки, а не объекты.
   x = 42  # x — это имя, а не объект
print(type(x)) # Это целое число, но само имя "x" объектом не является


🟠Аннотации типов во время компиляции
Аннотации типов в Python, такие как list[str], не создают объекты во время компиляции кода. Они интерпретируются только на уровне анализа типов.
   def func(x: int) -> str:
return str(x)


Ставь 👍 и забирай 📚 Базу знаний
👍7
🤔 Как открывается WebSocket?

Соединение начинается с HTTP-запроса, который просит сервер перейти на протокол WebSocket. Если сервер согласен, он отвечает подтверждением, после чего создаётся постоянный канал связи, через который обе стороны могут отправлять и получать данные без повторной авторизации.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥4👍3
🤔 Какие есть высокоуровневые языки программирования?

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

🚩Основные высокоуровневые языки программирования:

🟠Python
Веб-разработка, анализ данных, научные исследования, искусственный интеллект, автоматизация.
def greet(name):
return f"Hello, {name}!"

print(greet("World"))


🟠Java
Разработка корпоративного ПО, веб-приложений, мобильных приложений (Android), больших распределенных систем.
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}


🟠C#
Разработка настольных приложений, веб-приложений, игр (с использованием Unity), облачных сервисов.
using System;

class Program {
static void Main() {
Console.WriteLine("Hello, World!");
}
}


🟠JavaScript
Веб-разработка, создание интерактивных пользовательских интерфейсов, серверные приложения, мобильные приложения (с использованием фреймворков, таких как React Native).
function greet(name) {
return `Hello, ${name}!`;
}

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


🟠Ruby
Веб-разработка, скрипты автоматизации, создание прототипов.
def greet(name)
"Hello, #{name}!"
end

puts greet("World")


🟠PHP
Веб-разработка, серверные приложения, управление контентом.
<?php
function greet($name) {
return "Hello, $name!";
}

echo greet("World");
?>


🟠Swift
Разработка мобильных и настольных приложений для экосистемы Apple.
func greet(name: String) -> String {
return "Hello, \(name)!"
}

print(greet(name: "World"))


🟠Kotlin
Разработка Android-приложений, серверных приложений, веб-приложений.
fun greet(name: String): String {
return "Hello, $name!"
}

fun main() {
println(greet("World"))
}


🟠Go (Golang)
Разработка серверных приложений, облачных сервисов, микросервисов.
package main
import "fmt"

func main() {
fmt.Println("Hello, World!")
}


🟠Rust
Системное программирование, разработка высокопроизводительных приложений, безопасное многопоточность.
fn main() {
println!("Hello, World!");
}


Ставь 👍 и забирай 📚 Базу знаний
👍5
🤔 Что знаешь про singleton?

Singleton — это паттерн проектирования, который ограничивает инстанцирование класса одним объектом. В Python его можно реализовать с помощью модуля или класса с использованием приватного конструктора и метода класса для доступа к экземпляру.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4
🤔 Как происходит наследование моделей в Django?

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

🟠Абстрактные модели
Абстрактные модели используются, когда нужно создать базовый класс с полями и методами, которые должны быть унаследованы, но сам класс не должен создавать таблицу в базе данных.
Создается базовый класс с abstract = True в Meta.
Дочерние классы наследуют его поля и методы, но не его саму в виде отдельной таблицы.
from django.db import models

class BaseModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

class Meta:
abstract = True # Указывает, что это абстрактная модель

class Post(BaseModel):
title = models.CharField(max_length=255)
content = models.TextField()

class Comment(BaseModel):
text = models.TextField()


🟠Многоуровневое (конкретное) наследование
Этот тип наследования создаёт отдельные таблицы для каждой модели. Используется, когда дочерний класс должен представлять отдельную сущность, но при этом иметь доступ к полям родительского класса.
Django создаёт отдельные таблицы в БД для родительской и дочерней модели.
Дочерняя модель автоматически получает OneToOneField на родительскую.
class Person(models.Model):
name = models.CharField(max_length=255)

class Employee(Person): # Отдельная таблица employee
salary = models.DecimalField(max_digits=10, decimal_places=2)


🟠Прокси-модели (Proxy Models)
Используются, когда нужно изменить поведение модели без изменения структуры базы данных.
Прокси-модель наследует поля родительской модели.
В Meta указывается proxy = True.
Можно переопределять методы, добавлять новые, но не менять поля.
class Person(models.Model):
name = models.CharField(max_length=255)

class Manager(Person):
class Meta:
proxy = True # Указываем, что это прокси-модель

def get_uppercase_name(self):
return self.name.upper()


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое Self Join?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥5👍4
🤔 Что такое GET?

GET — это HTTP-метод, который используется для запроса данных с сервера.
Когда ты открываешь веб-сайт или вводишь URL в браузере — это GET-запрос. Браузер запрашивает страницу у сервера, и сервер возвращает данные.

🚩Как работает GET-запрос?

1⃣Клиент (браузер, программа) отправляет GET-запрос на сервер.
2⃣Сервер обрабатывает запрос и возвращает ответ (HTML-страницу, JSON-данные, картинку и т. д.).
3⃣Данные отображаются пользователю.

🚩Пример GET-запроса

Когда ты заходишь на https://example.com/users, браузер отправляет:
GET /users HTTP/1.1
Host: example.com


Ответ сервера
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]


🚩Особенности GET-запроса

🟠Читаемый URL
параметры передаются в строке запроса (например, ?id=123).
🟠Безопасен
GET не изменяет данные на сервере.
🟠Можно кэшировать
браузеры и серверы могут сохранять результаты GET-запросов.
🟠Ограниченная длина URL
слишком длинные запросы могут не работать.
🟠Не подходит для конфиденциальных данных
передача пароля в URL (?password=123) небезопасна.

🚩GET-запрос с параметрами

Если нужно передать параметры, они добавляются в URL:
GET /search?q=python&page=2


В Python можно отправить GET-запрос с помощью библиотеки requests
import requests

response = requests.get("https://api.example.com/users", params={"id": 123})
print(response.json()) # Получаем ответ в JSON


Ставь 👍 и забирай 📚 Базу знаний
👍7
🤔 Что такое UDP?

UDP (User Datagram Protocol) — лёгкий и быстрый протокол без гарантии доставки:
- Нет установления соединения.
- Пакеты могут приходить в любом порядке или теряться.
- Быстрее TCP, но ненадёжнее.
Часто используется в видеозвонках, онлайн-играх, стриминге, где важна скорость, а не идеальная точность.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍8💊2
🤔 Что такое клиент-серверная архитектура?

Клиент-серверная архитектура – это модель взаимодействия устройств, где клиент запрашивает данные или услуги, а сервер их предоставляет.

🚩Как это работает?

Клиент – это программа или устройство, которое отправляет запросы (например, браузер).
Сервер – это программа или устройство, которое обрабатывает запросы и отправляет ответ (например, веб-сервер).

Сервер (сервер.py)
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("localhost", 8080)) # Привязываем сервер к адресу и порту
server.listen(1) # Ожидаем подключения одного клиента
print("Сервер запущен и ждёт подключения...")

conn, addr = server.accept() # Принимаем подключение
print(f"Подключен клиент: {addr}")

data = conn.recv(1024).decode() # Читаем данные от клиента
print(f"Клиент прислал: {data}")

conn.send("Привет от сервера!".encode()) # Отправляем ответ клиенту
conn.close()


Клиент (клиент.py)
import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost", 8080)) # Подключаемся к серверу

client.send("Привет, сервер!".encode()) # Отправляем сообщение
response = client.recv(1024).decode() # Получаем ответ от сервера

print(f"Ответ сервера: {response}")
client.close()


🚩Как это работает?

1⃣Запускаем сервер.py. Он ждёт подключения.
2⃣Запускаем клиент.py. Клиент подключается к серверу и отправляет сообщение.
3⃣Сервер получает сообщение, отвечает клиенту и закрывает соединение.
4⃣Клиент принимает ответ и завершает работу.

🚩Типы клиент-серверных архитектур

Одноуровневая – клиент общается напрямую с сервером.
Двухуровневая – классическая схема "клиент сервер" (например, браузер веб-сервер).
Трёхуровневая – добавляется база данных (например, клиент сервер БД).
Многоуровневая – сложные распределённые системы с несколькими серверами (например, микросервисы).

Ставь 👍 и забирай 📚 Базу знаний
👍9
🤔 Что делать, если нужно сериализовать данные, которые не поддерживаются стандартным модулем json?

Можно передать параметр default с функцией, преобразующей неподдерживаемые объекты. Либо использовать другой модуль, например pickle.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔3