Python | Вопросы собесов
13.6K subscribers
37 photos
3 videos
1 file
1.17K links
Download Telegram
🤔 Что такое 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💊1
🤔 Что за функция gather()?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍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
👍3
🤔 Что такое Git Rebase?

rebase — это операция в Git, которая позволяет переписать историю коммитов, подставляя текущую ветку поверх другой. Это полезно для создания линейной, чистой истории.


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

Для сортировки списка словарей по определенному полю в Python удобно использовать функцию sorted() или метод sort(). Оба подхода позволяют указать ключ сортировки с помощью параметра key, где можно передать либо функцию, либо лямбда-выражение, которое извлекает значение из словаря для сортировки.

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

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

🚩Как это сделать?

🟠Использование функции `sorted()`
Эта функция возвращает новый отсортированный список.

   employees = [
{"name": "Alice", "age": 30, "salary": 70000},
{"name": "Bob", "age": 25, "salary": 50000},
{"name": "Charlie", "age": 35, "salary": 120000}
]

# Сортировка по возрасту
sorted_employees = sorted(employees, key=lambda x: x["age"])

print(sorted_employees)


Результат

   [{'name': 'Bob', 'age': 25, 'salary': 50000},
{'name': 'Alice', 'age': 30, 'salary': 70000},
{'name': 'Charlie', 'age': 35, 'salary': 120000}]


🟠Использование метода `sort()`
Этот метод изменяет существующий список.

   employees = [
{"name": "Alice", "age": 30, "salary": 70000},
{"name": "Bob", "age": 25, "salary": 50000},
{"name": "Charlie", "age": 35, "salary": 120000}
]

# Сортировка по зарплате
employees.sort(key=lambda x: x["salary"])

print(employees)


Результат

   [{'name': 'Bob', 'age': 25, 'salary': 50000},
{'name': 'Alice', 'age': 30, 'salary': 70000},
{'name': 'Charlie', 'age': 35, 'salary': 120000}]


🟠Сортировка в обратном порядке
Установите параметр reverse=True, чтобы отсортировать в порядке убывания.

   sorted_employees_desc = sorted(employees, key=lambda x: x["age"], reverse=True)
print(sorted_employees_desc)


🟠Использование функции `itemgetter` из модуля `operator`
Это более эффективный способ, чем лямбда-функция, особенно для больших данных.

   from operator import itemgetter

sorted_employees = sorted(employees, key=itemgetter("age"))
print(sorted_employees)


🚩Обработка отсутствующих значений

Если поле может отсутствовать в некоторых словарях, можно использовать параметр key для обработки таких ситуаций.
employees = [
{"name": "Alice", "age": 30},
{"name": "Bob"},
{"name": "Charlie", "age": 35}
]

sorted_employees = sorted(employees, key=lambda x: x.get("age", 0))
print(sorted_employees)


Результат
[{'name': 'Bob'},
{'name': 'Alice', 'age': 30},
{'name': 'Charlie', 'age': 35}]


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🔴 Реальный собес на Python от ТехЛида с опытом работы в Авито и Яндексе в прямом эфире

23 декабря (уже завтра!) в 19:00 по мск приходи на прямой эфир с реальным собеседованием на Middle разработчика.

Почему точно нужно прийти:
📂 Савва Демиденко, ТехЛид с опытом в Яндексе и Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Савва будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Савве

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир →
@shortcut_py_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Отличие методов GET, POST и HEAD?

- GET — запрашивает данные, передаёт параметры в URL, ничего не меняет на сервере.
- POST — отправляет данные (формы, JSON), используется для создания/обработки.
- HEAD — как GET, но без тела ответа, только заголовки (для проверки существования, длины и пр.).


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

В Python все данные делятся на изменяемые (mutable) и неизменяемые (immutable)

🚩Неизменяемые (`immutable`) типы

После создания их нельзя изменить!
x = 10
print(id(x)) # 140735598722544 (адрес в памяти)

x = x + 5 # Создаётся новый объект!
print(id(x)) # 140735598722704 (новый адрес)


Пример: str неизменяемая
s = "hello"
print(id(s)) # 140735598723664

s = s + " world" # Создаётся новая строка!
print(id(s)) # 140735598724240 (новый адрес)


🚩Изменяемые (`mutable`) типы

Можно менять их содержимое без создания нового объекта.
lst = [1, 2, 3]
print(id(lst)) # 140735598722544

lst.append(4) # Изменяем список
print(id(lst)) # 140735598722544 (адрес остался тот же!)


Пример: dict изменяемый
d = {"name": "Alice"}
print(id(d)) # 140735598723664

d["age"] = 25 # Добавляем ключ
print(id(d)) # 140735598723664 (адрес не изменился!)


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

Неизменяемые объекты безопаснее для ключей dict и set
d = {}
d[[1, 2, 3]] = "Ошибка!" # TypeError: unhashable type: 'list'


Используем tuple вместо list (он неизменяемый)
d[(1, 2, 3)] = "OK"


Ошибки с изменяемыми значениями по умолчанию
def add_item(lst=[]):  #  Опасный код!
lst.append(1)
return lst

print(add_item()) # [1]
print(add_item()) # [1, 1] Список не создаётся заново!


Используем None вместо списка
def add_item(lst=None):
if lst is None:
lst = []
lst.append(1)
return lst


🚩Копирование объектов (`copy()` vs `deepcopy()`)

copy() делает поверхностную копию (новый объект, но старые вложенные элементы).
deepcopy() делает глубокую копию (всё новое).
import copy

lst1 = [[1, 2, 3], [4, 5, 6]]
lst2 = copy.copy(lst1) # Поверхностная копия

lst2[0][0] = 99
print(lst1) # [[99, 2, 3], [4, 5, 6]] Исходный список изменился!


Используем deepcopy() для полной независимой копии
lst3 = copy.deepcopy(lst1)
lst3[0][0] = 100
print(lst1) # [[99, 2, 3], [4, 5, 6]] Не изменился!


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