Python | Вопросы собесов
13.9K subscribers
35 photos
1 video
1 file
918 links
Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp

Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky
Download Telegram
🤔 Как проверить доступность порта на удалённой машине?

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


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

Использование чисел в качестве ключей в словарях Python – это достаточно распространённый случай. Однако у этого подхода есть несколько нюансов, которые нужно учитывать для избежания ошибок.

🚩Хешируемость чисел

Ключи в словаре должны быть хешируемыми, поскольку словари в Python основаны на хеш-таблицах. Хешируемость означает, что объект имеет неизменное значение хеша в течение его жизни. Числа (как int, так и float) являются хешируемыми, поэтому их можно использовать в качестве ключей.
d = {1: "один", 2: "два"}
print(d[1]) # "один"


🚩Взаимодействие `int` и `float`

Python не делает различий между int и float, если их значения равны. Это связано с тем, что у них одинаковое хеш-значение при равенстве.
d = {1: "один", 1.0: "float один", 2: "два"}
print(d) # {1: 'float один', 2: 'два'}


🚩Непредсказуемое поведение при работе с `float`

Числа с плавающей запятой (float) иногда ведут себя непредсказуемо из-за ошибок округления, которые возникают из-за особенностей представления чисел в памяти компьютера.
d = {0.1 + 0.2: "значение"}  # 0.1 + 0.2 не равно точно 0.3 из-за округления
print(d.get(0.3)) # None, ключ не найден!


🚩Производительность

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

🚩Проблемы при преобразованиях

Если ключами словаря являются числа, то при обработке данных (например, чтении из файла или API) можно случайно преобразовать их в строки, что приведёт к созданию новых ключей вместо использования существующих.
d = {1: "один", 2: "два"}
print(d.get("1")) # None, строка "1" и число 1 – это разные ключи!


🚩Пользовательские объекты с числовыми свойствами

Если вы используете пользовательские объекты как ключи и они ведут себя как числа (например, реализуют методы __hash__ и __eq__), то их поведение должно быть совместимо с ожидаемым использованием.
class MyNumber:
def __init__(self, value):
self.value = value

def __hash__(self):
return hash(self.value)

def __eq__(self, other):
return self.value == other.value

d = {MyNumber(1): "один"}
print(d[MyNumber(1)]) # "один"


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

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4🤔2
🤔 Какие есть высокоуровневые языки программирования?

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

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

🟠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!");
}


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

Циклы — это конструкции языка, позволяющие повторять блок кода несколько раз. В Python есть два основных вида циклов: for — используется для итерирования по последовательностям и итераторам, и while — выполняется, пока истинно заданное условие. Циклы позволяют автоматизировать повторяющиеся действия.


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

Асинхронность в Python позволяет не блокировать выполнение программы во время ожидания операций ввода-вывода (I/O). Это делает её намного быстрее в задачах, где программа тратит много времени на ожидание (например, загрузка файлов, работа с сетью, запросы к базам данных).

🟠Как работает синхронный код (медленный вариант)
В обычном (синхронном) коде каждая операция ждёт завершения предыдущей.
import requests
import time

start = time.time()

def fetch(url):
response = requests.get(url) # Ждём ответа от сервера
return response.text

urls = ["https://example.com"] * 3

for url in urls:
fetch(url) # Ждём каждый запрос

print("Время выполнения:", time.time() - start)


🟠Как работает асинхронный код (быстрее!)
Асинхронность в Python использует event loop (цикл событий), который позволяет не ждать выполнения операции, а переключаться на другие задачи.
import asyncio
import aiohttp
import time

start = time.time()

async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()

async def main():
urls = ["https://example.com"] * 3
tasks = [fetch(url) for url in urls]
await asyncio.gather(*tasks) # Запускаем все запросы одновременно

asyncio.run(main())

print("Время выполнения:", time.time() - start)


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

SQL (Structured Query Language) — это язык структурированных запросов, используемый для работы с реляционными базами данных: создание, чтение, изменение и удаление данных.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3💊2
🤔 Встроенные функции Python

В Python есть встроенные функции (built-in functions) — это функции, которые можно использовать без импорта. Они делают код проще и удобнее.
Полный список встроенных функций можно посмотреть так:
print(dir(__builtins__))


🚩Основные категории встроенных функций

Работа с числами
print(abs(-5))  # 5
print(round(3.14159, 2)) # 3.14
print(pow(2, 3)) # 8
print(min([3, 1, 4])) # 1


Работа со строками
print(len("hello"))  # 5
print(str(123)) # '123'
print(ord('A')) # 65
print(chr(65)) # 'A'


Работа с коллекциями (списки, кортежи, множества)
a = [3, 1, 2]
print(sorted(a)) # [1, 2, 3]

nums = [1, 2, 3]
names = ["Alice", "Bob", "Charlie"]
print(list(zip(nums, names))) # [(1, 'Alice'), (2, 'Bob'), (3, 'Charlie')]


Работа с логикой и проверками
print(bool(""))  # False
print(all([True, 1, "Hello"])) # True
print(any([0, "", None, 5])) # True (есть хотя бы один True)


Работа с функциями
nums = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, nums))
print(squared) # [1, 4, 9, 16]

evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens) # [2, 4]


Работа с файлами
with open("file.txt", "w") as f:
f.write("Hello, world!")

name = input("Введите имя: ")
print("Привет,", name)


Работа с объектами и атрибутами
print(type(42))  # <class 'int'>
print(isinstance(42, int)) # True
print(dir([])) # Методы списка


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Какие операции поддерживают большинство последовательностей?

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


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

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

🚩Почему это нужно?

В реальном коде ошибки неизбежны:
деление на ноль (ZeroDivisionError),
обращение к несуществующему индексу (IndexError),
работа с несуществующим файлом (FileNotFoundError) и т. д.

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

В Python для обработки исключений используется конструкция try-except.
Обработка деления на ноль
try:
x = 10 / 0 # Ошибка: деление на ноль
except ZeroDivisionError:
print("Ошибка! Деление на ноль невозможно.")

Результат: вместо аварийного завершения программы мы получаем сообщение
Ошибка! Деление на ноль невозможно.


Обработка нескольких типов исключений
try:
num = int(input("Введите число: ")) # Возможна ошибка ValueError
result = 10 / num # Возможна ошибка ZeroDivisionError
except ZeroDivisionError:
print("Ошибка! Деление на ноль.")
except ValueError:
print("Ошибка! Введите число.")


Если пользователь введет "abc", программа не завершится с ошибкой, а выведет
Ошибка! Введите число.


Использование finally (код, который выполняется всегда)
try:
file = open("data.txt", "r") # Возможна ошибка FileNotFoundError
content = file.read()
except FileNotFoundError:
print("Файл не найден!")
finally:
print("Программа завершена.") # Выполнится в любом случае


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

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


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

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

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

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

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

🟠Изменяемость
Множества в Python изменяемы: вы можете добавлять, удалять и изменять их элементы. Однако сами элементы множества должны быть неизменяемыми (например, числа, строки, кортежи).

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

🚩Создание множества

🟠Пустое множество
Для создания пустого множества используется функция set(), так как {} создаёт пустой словарь
empty_set = set()
print(empty_set) # Output: set()


🟠Создание множества с элементами
Вы можете передать список, строку, кортеж или другой итерируемый объект в функцию set().
# Создание множества из списка
numbers = set([1, 2, 3, 4, 5])
print(numbers) # Output: {1, 2, 3, 4, 5}

# Создание множества из строки (уникальные символы)
chars = set("hello")
print(chars) # Output: {'h', 'e', 'l', 'o'} (порядок может быть разным)


🟠Использование литералов
Вы также можете использовать фигурные скобки {} для создания множества
fruits = {"apple", "banana", "cherry"}
print(fruits) # Output: {'apple', 'banana', 'cherry'}


🚩Основные операции с множествами

🟠Добавление элементов
Используется метод add()
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # Output: {1, 2, 3, 4}


🟠Удаление элементов
remove() — удаляет элемент, выбрасывая ошибку, если его нет.
discard() — удаляет элемент, не выбрасывая ошибку, если его нет.
my_set = {1, 2, 3}
my_set.remove(2) # Удаляем элемент 2
print(my_set) # Output: {1, 3}

my_set.discard(5) # Ошибки не будет, если элемента 5 нет


pop() — удаляет и возвращает случайный элемент (так как множество неупорядочено)
my_set = {1, 2, 3}
removed_element = my_set.pop()
print(removed_element) # Например: 1
print(my_set) # Например: {2, 3}


🟠Очистка множества
my_set = {1, 2, 3}
my_set.clear()
print(my_set) # Output: set()


🟠Проверка наличия элемента
Используется оператор in
my_set = {1, 2, 3}
print(2 in my_set) # Output: True
print(5 in my_set) # Output: False


🚩Операции над множествами

Python поддерживает классические операции теории множеств:

🟠Объединение (`union` или `|`)
Возвращает множество, содержащее все элементы из двух множеств.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2) # Output: {1, 2, 3, 4, 5}
print(set1.union(set2)) # То же самое


🟠Пересечение (`intersection` или `&`)
Возвращает элементы, которые присутствуют в обоих множествах.
print(set1 & set2)  # Output: {3}
print(set1.intersection(set2)) # То же самое


🟠Разность (`difference` или `-`)
Возвращает элементы, которые присутствуют только в одном множестве (а не в другом).
print(set1 - set2)  # Output: {1, 2} (только в set1)
print(set1.difference(set2)) # То же самое


🟠Симметрическая разность (`symmetric_difference` или `^`)
Возвращает элементы, которые есть в одном из множеств, но не в обоих сразу.
print(set1 ^ set2)  # Output: {1, 2, 4, 5}
print(set1.symmetric_difference(set2)) # То же самое


🚩Неизменяемое множество (`frozenset`)

Если вам нужно создать множество, которое нельзя изменить, используйте frozenset
frozen = frozenset([1, 2, 3])
print(frozen) # Output: frozenset({1, 2, 3})

# frozen.add(4) # Ошибка: 'frozenset' object has no attribute 'add'


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

Библиотека Pydantic валидирует и преобразует данные согласно типам:
- Примитивы (str, int, float, bool)
- Коллекции (List, Dict, Tuple, Set)
- Даты и UUID
- Вложенные модели
Pydantic полезен при создании API (например, с FastAPI), где входящие данные из запросов должны быть проверены и типизированы.


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

CRUD — это аббревиатура из четырех основных операций с данными:

C (Create) – создание
R (Read) – чтение
U (Update) – обновление
D (Delete) – удаление

🚩Разберем CRUD на примере работы с базой данных в Python

🟠Create (Создание)
Добавление новой записи в базу данных.
import sqlite3

conn = sqlite3.connect("example.db")
cursor = conn.cursor()

# Создаем таблицу, если её нет
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")

# Добавляем пользователя
cursor.execute("INSERT INTO users (name) VALUES (?)", ("Алиса",))

conn.commit() # Сохраняем изменения
conn.close()


🟠Read (Чтение)
Получение данных из базы.
conn = sqlite3.connect("example.db")
cursor = conn.cursor()

cursor.execute("SELECT * FROM users")
users = cursor.fetchall() # Получаем все записи

for user in users:
print(user)

conn.close()


🟠Update (Обновление)
Изменение существующей записи.
conn = sqlite3.connect("example.db")
cursor = conn.cursor()

cursor.execute("UPDATE users SET name = ? WHERE id = ?", ("Боб", 1))

conn.commit()
conn.close()


🟠Delete (Удаление)
Удаление записи из базы.
conn = sqlite3.connect("example.db")
cursor = conn.cursor()

cursor.execute("DELETE FROM users WHERE id = ?", (1,))

conn.commit()
conn.close()


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
🤔 Различия между REST и RPC?

- REST — архитектурный стиль. Использует HTTP-методы (GET, POST, PUT, DELETE), ресурсы представлены как URL (например, /users/1).
- RPC (Remote Procedure Call) — модель, в которой клиент вызывает конкретную функцию или метод на сервере, как будто она локальная (getUserData, saveOrder).
REST работает с ресурсами, RPC — с действиями. REST проще кэшировать, а RPC может быть более гибким в функциональности.


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

Блокировка (lock) — это механизм, который предотвращает одновременный доступ к данным разными транзакциями, чтобы избежать конфликтов, повреждения данных или "гонки" процессов.
Представь, что два человека редактируют один и тот же документ. Если они начнут менять его одновременно, файл может испортиться. Блокировки в БД работают так же — если один процесс изменяет данные, другой должен подождать, пока первый закончит.

🚩Почему нужны блокировки?

🟠Гарантия целостности данных
предотвращает одновременные изменения одних и тех же строк.
🟠Избегание гонки данных (race condition)
когда два запроса пытаются изменить одно и то же значение.
🟠Изоляция транзакций
разные операции не мешают друг другу.

🚩Виды блокировок в БД

🟠По уровню охвата данных
Строчная (Row Lock) – блокирует только одну строку таблицы.
Табличная (Table Lock) – блокирует всю таблицу целиком.
Блокировка всей базы (Database Lock) – редко используется, но блокирует всю БД.
BEGIN;
SELECT * FROM users WHERE id = 1 FOR UPDATE; -- Блокирует строку, пока транзакция не завершится


🟠По типу блокировки
Эксклюзивная (Exclusive, X-Lock) – блокирует запись для всех (никакие другие операции её не изменят).
Разделяемая (Shared, S-Lock) – блокирует только на запись (чтение возможно).
BEGIN;
UPDATE users SET balance = balance - 100 WHERE id = 1;
-- Пока транзакция не завершится, другая транзакция не сможет изменить balance пользователя 1.


🟠Явные и неявные блокировки
Явные (ручные) – задаются программистом (SELECT ... FOR UPDATE).
Неявные (автоматические) – создаются СУБД при INSERT, UPDATE, DELETE.

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

🟠Deadlock (взаимная блокировка)
Если два запроса ждут друг друга, система "зависает". Решение: правильный порядок выполнения транзакций.

🟠Долгие блокировки
Если транзакция не закрывается (COMMIT/ROLLBACK), другие запросы ждут бесконечно. Решение: короткие транзакции, автоматическое завершение.

🟠Снижение производительности
Чем больше блокировок, тем медленнее работа БД.

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

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

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

Host (хост) — это устройство или сервер, подключённый к сети, который может предоставлять или запрашивать данные.
GET /index.html HTTP/1.1
Host: example.com


🚩Где используется `Host`?

🟠В HTTP-запросах (заголовок `Host`)
Когда браузер запрашивает сайт, он отправляет заголовок Host, чтобы сервер знал, какой сайт нужно отдать.
GET / HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0


🟠В настройке DNS и доменных имён
Host — это доменное имя, привязанное к IP-адресу.
- example.com192.168.1.100
- mail.example.com192.168.1.101
127.0.0.1 mysite.local


🟠3. В локальной сети (локальные хосты)
Внутри сети устройства тоже считаются хостами (192.168.1.10, 192.168.1.20). localhost (127.0.0.1) — это всегда локальный компьютер.

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

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


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

Сортировка слиянием (Merge Sort) — это алгоритм, который использует разделяй и властвуй (divide & conquer).
В худшем случае сложность O(n log n).

🚩Как работает сортировка слиянием?

🟠Делим массив пополам
до тех пор, пока не останутся отдельные элементы.
🟠Сортируем и сливаем
полученные подмассивы.

def merge_sort(arr):
if len(arr) <= 1:
return arr

mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])

return merge(left, right)

def merge(left, right):
sorted_arr = []
i = j = 0

while i < len(left) and j < len(right):
if left[i] < right[j]:
sorted_arr.append(left[i])
i += 1
else:
sorted_arr.append(right[j])
j += 1

sorted_arr.extend(left[i:])
sorted_arr.extend(right[j:])
return sorted_arr

arr = [5, 2, 9, 1, 5, 6]
print(merge_sort(arr))


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