Python | Вопросы собесов
описание
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
12 843
подписчиков
Охват к подписчикам
6,8%
ERR
Реакции к просмотрам
0,13%
29 на 28 постов
Пересылки к просмотрам
0,60%
136
Постов в день
1,4
всего 24
Где отзываются чаще
доля реакций к просмотрам- 7 авг.🤔 Что такое Docker container? Docker container — это запущенный экземпляр образа, изолированный процесс с собственным файловым пространством, сетью и конфигурацией. Контейнеры можно останавливать, перезапускать, удалять и масштабировать. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний0,51%
- 8 авг.🤔 Разница кэш и куки? - Кэш — это временное хранилище файлов и ответов, чтобы ускорить загрузку (изображения, стили, скрипты, запросы). - Cookie — это небольшие данные о пользователе, сохраняемые браузером и автоматически передаваемые серверу (например, для авторизации, настроек, корзин). Кэш ускоряет работу, cookie — хранят состояние пользователя? Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний0,44%
- 4 авг.🤔 Чем отличается re.match от re.search? - re.match() проверяет только начало строки на соответствие шаблону. Если начало не совпадает — возвращает None. - re.search() ищет соответствие в любом месте строки и возвращает первое совпадение. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний0,37%
- 5 авг.🤔 Срезы или слайсы в Python? Позволяют получить подмножество элементов из строки, списка и других последовательностей с помощью синтаксиса [start:stop:step]. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний0,32%
- 12 авг.без подписи0,27%
- 6 авг.🤔 Как отсортировать список словарей по определенному полю? Для сортировки списка словарей по определенному полю в 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}] Ставь 👍 и забирай 📚 Базу знаний0,22%
- 15 авг.Услуги дата-центра в Москве Размещение и аренда серверного оборудования в дата-центре. 👍 4 современных дата-центра в Москве. 👍 Лицензированный оператор связи. 👍 Индивидуальные конфигурации выделенных серверов под задачи клиента. 👍 Круглосуточная техническая поддержка в Телеграм, без ботов. Узнать цену #реклама 16+ itsoft.ru О рекламодателе0,18%
- 3 авг.🤔 Что такое Docker Daemon? Docker Daemon (dockerd) — это фоновый процесс, управляющий: - образами, - контейнерами, - сетями и томами. Он слушает команды от клиента (docker) и взаимодействует с ядром ОС для запуска контейнеров. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний0,17%
- 3 авг.🤔 Почему вычислять большие значения в асинхронной функции плохо? Асинхронность (asyncio) в Python не выполняет код параллельно, а переключается между задачами во время ожидания (I/O-bound). Если в async-функции делать тяжёлые вычисления (CPU-bound), это блокирует asyncio, потому что в Python есть GIL (Global Interpreter Lock). 🚩Асинхронность в Python подходит для ввода-вывода (I/O-bound) Асинхронность позволяет выполнять задачи без блокировки, но только если они ждут чего-то (файлы, сеть, БД). import asyncio import aiohttp 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"] * 5 results = await asyncio.gather(*(fetch(url) for url in urls)) asyncio.run(main()) 🚩Проблема с `async` и тяжёлыми вычислениями (CPU-bound) Если в async-функции делать тяжёлые вычисления, Python не сможет переключаться между задачами. import asyncio async def heavy_task(n): print(f"Вычисляю {n}...") total = sum(i**2 for i in range(n)) # Долгий процесс return total async def main(): await asyncio.gather(heavy_task(10**7), heavy_task(10**7)) asyncio.run(main()) 🚩Как правильно выполнять вычисления в `async`? 🟠Использовать `asyncio.to_thread()` (делегирование в потоки) В Python 3.9+ можно выполнять CPU-задачи в отдельных потоках, не блокируя asyncio. import asyncio def heavy_computation(n): return sum(i**2 for i in range(n)) async def main(): result = await asyncio.to_thread(heavy_computation, 10**7) print(result) asyncio.run(main()) 🟠Использовать `multiprocessing` (запуск на нескольких ядрах) Так как Python использует GIL, единственный способ выполнять настоящий параллелизм — это multiprocessing. import asyncio import multiprocessing def heavy_computation(n): return sum(i**2 for i in range(n)) async def main(): loop = asyncio.get_running_loop() with multiprocessing.Pool() as pool: result = await loop.run_in_executor(pool, heavy_computation, 10**7) print(result) asyncio.run(main()) Ставь 👍 и забирай 📚 Базу знаний0,17%
- 9 авг.🤔 Какие есть виды файловых объектов? В Python существует несколько типов файловых объектов, которые используются для работы с различными типами данных. Рассмотрим основные виды файловых объектов и их особенности. 🟠Текстовые файлы (`TextIOWrapper`) Это самый распространённый тип файловых объектов. Такие файлы используются для работы с текстовыми данными и поддерживают строковые операции. with open("example.txt", "w", encoding="utf-8") as file: file.write("Привет, мир!") # Записываем текст в файл with open("example.txt", "r", encoding="utf-8") as file: content = file.read() # Читаем текст из файла print(content) 🟠Бинарные файлы (`BufferedReader`, `BufferedWriter`) Эти файлы используются для работы с двоичными данными (изображениями, видео, аудиофайлами и т. д.). with open("image.jpg", "rb") as file: binary_data = file.read() # Читаем файл в бинарном режиме print(binary_data[:10]) # Выведем первые 10 байтов with open("copy.jpg", "wb") as file: file.write(binary_data) # Записываем данные в новый файл 🟠Файлы ввода-вывода в памяти (`io.StringIO`, `io.BytesIO`) Эти объекты представляют собой файловые буферы, которые хранят данные в оперативной памяти, а не на диске. from io import StringIO file = StringIO() file.write("Привет, мир!") # Запись данных в буфер file.seek(0) # Перемещаем указатель в начало print(file.read()) # Читаем данные из буфера Пример работы с BytesIO: from io import BytesIO file = BytesIO() file.write(b"Binary data") # Запись бинарных данных file.seek(0) print(file.read()) # Чтение данных 🟠Файловые объекты на основе сокетов, пайпов и других источников Python позволяет работать с файловыми объектами, полученными из нестандартных источников, например, сокетов или каналов связи (pipes). import socket s = socket.socket() s.connect(("example.com", 80)) s.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n") response = s.makefile("r", encoding="utf-8") # Создание файлового объекта print(response.readline()) # Читаем первую строку HTTP-ответа s.close() Ставь 👍 и забирай 📚 Базу знаний0,13%
- 7 авг.🤔 Как происходит наследование моделей в 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() Ставь 👍 и забирай 📚 Базу знаний0,10%
- 5 авг.🤔 Чем отличаются методы сокрытия? Методы и атрибуты класса могут быть скрыты от внешнего использования с помощью различных уровней сокрытия. Сокрытие реализуется с помощью соглашений об именах, а не с помощью жесткой инкапсуляции, как в некоторых других языках программирования. Основные уровни сокрытия включают публичные, защищенные и приватные методы и атрибуты. 🚩Публичные методы и атрибуты Доступны из любого места, как внутри класса, так и за его пределами. Их имена не начинаются с подчеркиваний. class MyClass: def __init__(self): self.public_attribute = "I am public" def public_method(self): return "This is a public method" obj = MyClass() print(obj.public_attribute) # Вывод: I am public print(obj.public_method()) # Вывод: This is a public method 🚩Защищенные методы и атрибуты Не предназначены для использования за пределами класса и его подклассов. Они обозначаются одним подчеркиванием в начале имени. Это всего лишь соглашение, сигнализирующее другим разработчикам, что такие методы и атрибуты не следует использовать вне класса или его подклассов. class MyClass: def __init__(self): self._protected_attribute = "I am protected" def _protected_method(self): return "This is a protected method" class SubClass(MyClass): def access_protected(self): return self._protected_method() obj = MyClass() sub_obj = SubClass() print(sub_obj.access_protected()) # Вывод: This is a protected method 🚩Приватные методы и атрибуты Скрыты от внешнего доступа и доступны только внутри самого класса. Они обозначаются двумя подчеркиваниями в начале имени. Python реализует это с помощью механизма именования, который изменяет имя метода или атрибута, добавляя к нему имя класса, чтобы затруднить доступ извне. class MyClass: def __init__(self): self.__private_attribute = "I am private" def __private_method(self): return "This is a private method" def access_private(self): return self.__private_method() obj = MyClass() try: print(obj.__private_attribute) except AttributeError as e: print(e) # Вывод: 'MyClass' object has no attribute '__private_attribute' try: print(obj.__private_method()) except AttributeError as e: print(e) # Вывод: 'MyClass' object has no attribute '__private_method' # Доступ к приватным методам через публичный метод класса print(obj.access_private()) # Вывод: This is a private method Ставь 👍 и забирай 📚 Базу знаний0,10%