uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

Python вопросы с собеседований

Python вопросы с собеседований

Kanalga Telegram’da o‘tish

Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd

Ko'proq ko'rsatish

📈 Telegram kanali Python вопросы с собеседований analitikasi

Python вопросы с собеседований (@python_job_interview) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 24 938 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 5 313-o'rinni va Rossiya mintaqasida 26 054-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 24 938 obunachiga ega bo‘ldi.

02 Noyabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 82 ga, so‘nggi 24 soatda esa -1 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 5.89% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 2.99% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 469 marta ko‘riladi; birinchi sutkada odatda 745 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 7 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent github, api, собеседование, git, docker kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd”

Yuqori yangilanish chastotasi (oxirgi ma’lumot 03 Noyabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

24 938
Obunachilar
-124 soatlar
-57 kun
+8230 kun
Postlar arxiv
Что распечатает код: def f(x,l=[]): for i in range(x): l.append(i*i) print(l) f(2) f(3,[3,2,1]) f(3) Ответ [0, 1] [3, 2, 1, 0, 1, 4] [0, 1, 0, 1, 4] Почему? Первый вызов функции волне очевиден, цикл добавляет 0, а затем 1 в пустой список. l – имя переменной которая указывает на список, хранящийся в памяти. Второй вызов начинается с создания нового списка, хранящегося в новом блоке памяти. l ссылается на новый список. Затем добавляются 0, 1 и 4 к новому списку. В третьем вызове функции происходит что-то странное. Она использует исходный список, хранящийся в исходной области памяти. Именно поэтому он начинается с 0 и 1. Протестируйте следующий код, для понимания: l_mem = [] l = l_mem # первый вызов for i in range(2): l.append(i*i) print(l) # [0, 1] l = [3,2,1] # второй вызов for i in range(3): l.append(i*i) print(l) # [3, 2, 1, 0, 1, 4] l = l_mem # третий вызов for i in range(3): l.append(i*i) print(l) # [0, 1, 0, 1, 4] @python_job_interview

Что такое «монкей патчинг» и когда он уместен? «Монкей патчинг» меняет поведение объекта или функции после того, как он/она будет определён/а. import datetime datetime.datetime.now = lambda: datetime.datetime(2022, 09, 09) Чаще всего это – довольно плохая идея, предпочтительно такие вещи определять явным способом. Одна из причин применения «монкей патчинга» - тестирование. Пакет mock очень полезен с для этих целей. Почему это важно? Это показывает, собеседуемый знаком методологией модульного тестирования. Упоминание о «моней патчинге» покажет, что программист за поддерживаемый программный код (те кто против – менее эффективны). Помните принцип KISS? И это показывает, что вы знакомы, как работает Python на более низком уровне, как функции хранятся, вызываются и прочее. PS: стоит немного почитать о mock если вы ещё не сделали этого. Это довольно полезно. @python_job_interview

❓ Задача с собеседования | Уровень: #Medium Условие: Ваша задача — написать функцию, которая принимает неограниченное количество списков и возвращает только те элементы, что есть в каждом списке. Пример: find_values([11, 10, 3], [10, 3, 5, 11], [11, 10]) -> [11, 10] find_values([8, 4, 7, "hi"], [8, "hi"], [4, "hi"]) -> ['hi'] find_values([1, 4, 3], [6, 2, 8], ["4", "hi"]) -> [] ➡️Делитесь своим решением в комментариях👇 #задача_с_собеседования @python_job_interview

Какая Встроенная база данных поддерживается в Python? Расскажите о работе с ней. Ответ «Встроенность» предполагает, что вам не нужно запускать pip install для получения библиотеки. Просто импортируйте ее с помощью: import sqlite3 as sl Создание соединения с БД Не беспокойтесь о драйверах, строках подключения и т.д. Вы можете создать базу данных SQLite и задать такой простой объект подключения, как: con = sl.connect('my-test.db') После запуска этой строки кода происходит создание с БД и активируется подключение к ней. Дело в том, что базы данных, к которой мы просим подключиться Python, не существует, поэтому он автоматически создает пустую. Также мы можем ввести точно такой же код для подключения к уже существующей базе данных. Создание таблицы Теперь создадим таблицу: with con: con.execute(""" CREATE TABLE USER ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER ); """) Мы добавили три столбца в таблицу USER. Как видите, SQLite действительно легка и при этом поддерживает все основные функции обычной реляционной СУБД, такие как тип данных, обнуляемый тип, первичный ключ и автоинкремент. После запуска этого кода создается таблица, но она ничего не выводит. Включение записей Вставим несколько записей в только что созданную таблицу USER, чтобы доказать, что она действительно создана. Предположим, мы хотим вставить сразу несколько записей. Выполним: sql = 'INSERT INTO USER (id, name, age) values(?, ?, ?)' data = [ (1, 'Alice', 21), (2, 'Bob', 22), (3, 'Chris', 23) ] Определяем оператор SQL с вопросительными знаками ? в качестве заполнителя. Теперь создадим образцы данных для вставки, а затем вставим их с помощью объекта подключения: with con: con.executemany(sql, data) После запуска кода не появилось никаких предупреждений, значит все прошло успешно. Запрос к таблице Пришло время удостовериться, что все сделано правильно. Выполним запрос к таблице на возврат образцов строк. with con: data = con.execute("SELECT * FROM USER WHERE age <= 22") for row in data: print(row) ➡️ Читать дальше @python_job_interview

Опишите сложость исполнения основных операций над словарями Ответ В таблице ниже приводится усреднённая сложность. Амортизиро
Опишите сложость исполнения основных операций над словарями Ответ В таблице ниже приводится усреднённая сложность. Амортизированный худший случай обычно описывается O(n). Для усреднённой сложности предполагается, что хеш-функция для словарей в состоянии сделать конфликты редкими. Также предполагается, что ключи, используемые в параметрах, выбираются равномерно из множества всех существующих ключей. Указанная ниже сложность справледлива и для defaultdict (вместе с доступными операциями они наследуют от словарей и их сложности). Предполагается, что конструирование нового defaultdict имеет сложность O(1) (что справледливо для часто используемых int(), list(), set()). Для словарей, где ключи являются строками, используется быстрый путь. Это не оказывает влияния на алгоритмическую сложность, однако сильно влияет на постоянные факторы — то, на сколько быстро исполяется типовое приложение. @python_job_interview

Опишите сложость исполнения основных операций над словарями

Найти работу Python программистом можно 2 методами: Первый. Бесконечно скроллить HeadHunter и пытаться что-то выклевать на Li
Найти работу Python программистом можно 2 методами: Первый. Бесконечно скроллить HeadHunter и пытаться что-то выклевать на LinkedIn. Офигеть от условий и закрыть. Второй. Подписаться на Python Job. Это база адекватных предложений, где даже для новичков много мест с хорошей з/п. Тут найдете работу как в Яндексе (именно сюда крупняки присылают вакансии напрямую), так и в молодых стартапах! В общем, не теряйте времени и находите работу в 2 клика: @job_python

Собеседование Senior Python Developer на $8000 Смотреть видео @python_job_interview
Собеседование Senior Python Developer на $8000 Смотреть видео @python_job_interview

Как выполняется интерполяция строк? Без импорта класса Template есть три способа интерполяции строк: name = 'Chris' # 1. f strings print(f'Hello {name}') # 2. % operator print('Hey %s %s' % (name, name)) # 3. format print( "My name is {}".format((name)) ) @python_job_interview

English for Developers - канал для тех, кто хочет учить технический английский. От создатателей популярного ит-канала Книги п
English for Developers - канал для тех, кто хочет учить технический английский. От создатателей популярного ит-канала Книги программиста. 1. техническая лексика 2. опросы на английском 3. шутки на английском Подписывайтесь, проходите опросы, читайте полезные прогерские фразы на английском: english_forprogrammers. 1 канал вместо тысячи учебников и курсов

#Вопросы_с_собеседования ❓Напишите программу, которая возвращает количество гласных букв в строке Наша программа при помощи р
#Вопросы_с_собеседования ❓Напишите программу, которая возвращает количество гласных букв в строке Наша программа при помощи регулярного выражения, вычисляет количество гласных (A, E, I, O, U, Y) в строке.

Задача. Есть три функции, в которых выполняются базовые операции (сортировка, фильтрация, возведение массива в квадрат). Нужно упорядочить эти три функции в порядке возрастания времени, идущего на их выполнение. def f1(lIn): l1 = sorted(lIn) l2 = [i for i in l1 if i<0.5] return [i*i for i in l2] def f2(lIn): l1 = [i for i in lIn if i<0.5] l2 = sorted(l1) return [i*i for i in l2] def f3(lIn): l1 = [i*i for i in lIn] l2 = sorted(l1) return [i for i in l1 if i<(0.5*0.5)] То есть на входе все функции имеют одинаковые данные, на выходе выдают одинаковый результат. Но из-за того, что внутри операции выполняются в разном порядке, время выполнения будет отличаться. Здесь нужно ориентироваться в алгоритмах и понимать, что происходит с твоими данными в процессе. Эту задачу может решить Junior, а может не решить и Middle. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро. @machinelearning_interview

Расскажите о концепции распределенной архитектуры Ответ В больших системах, которые обрабатывают миллионы событий в день, некоторые вещи просто по определению обязаны пойти не по плану. Вот почему прежде, чем погружаться в планирование системы, нужно сделать самый важный шаг — принять решение о том, что для нас означает «здоровая» система. Степень «здоровья» должна быть чем-то таким, что на самом деле можно измерить. Общепринятым способом измерения «здоровья» системы являются SLA (service level agreements). Вот некоторые из самых распространённых видов SLA: Доступность (Availability): процент времени, который сервис является работоспособным. Пусть существует искушение достичь 100% доступности, достижение этого результата может оказаться по-настоящему сложным занятием, да ещё вдобавок и весьма дорогостоящим. Даже крупные и критичные системы вроде сети карт VISA, Gmail или интернет-провайдеров не имеют 100% доступности — за годы они накопят секунды, минуты или часы, проведённые в даунтайме. Для многих систем, доступность в четыре девятки (99.99%, или примерно 50 минут даунтайма в год) считается высокой доступностью. Для того, чтобы добраться до этого уровня, придётся изрядно попотеть. Точность (Accuracy): является ли допустимой потеря данных или их неточность? Если да, то какой процент является приемлимым? Для системы платежей, над которой я работал, этот показатель должен был составлять 100%, поскольку данные терять было нельзя. Пропускная способность/мощность (Capacity): какую нагрузку должна выдерживать система? Этот показатель обычно выражается в запросах в секунду. Задержка (Latency): за какое время система должна отвечать? За какое время должны быть обслужены 95% и 99% запросов? В подобных системах обычно многие из запросов являются «шумом», поэтому задержки p95 и p99 находят более практическое применение в реальном мире. Горизонтальное и вертикальное масштабирование По мере роста бизнеса, который использует нашу свежесозданную систему, нагрузка на неё будет лишь увеличиваться. В определенный момент, существующая установка будет неспособна выдержать дальнейшее увеличение нагрузки, и нам потребуется увеличить допустимую нагрузку. Две общепринятые стратегии масштабирования — это вертикальное или горизонтальное масштабирование. Горизонтальное масштабирование заключается в добавлении большего количества машин (или узлов) в систему для увеличения пропускной способности (capacity). Горизонтальное масштабирование — это самый популярный способ масштабирования распределённых систем. Вертикальное масштабирование — это по сути «купить машину побольше/посильнее» — (виртуальная) машина с большим числом ядер, лучшей вычислительной мощностью и большей памятью. В случае с рапределёнными системами, вертикальное масштабирование обычно менее популярно, поскольку оно может быть более дорогостоящим, чем масштабирование горизонтальное. Однако, некоторые известные большие сайты, вроде Stack Overflow, успешно масштабировались вертикально для соответствия нагрузке. @machinelearning_interview

Начните осваивать продвинутые приемы web-разработки на Python. В OTUS пройдут 2 открытых урока: 🗓 5 октября в 20:00 — погово
Начните осваивать продвинутые приемы web-разработки на Python. В OTUS пройдут 2 открытых урока: 🗓 5 октября в 20:00 — поговорим о роли регулярных выражений в разработке, оценим эффект от re.compile и посмотрим, стоит ли тратить время на изучение этой непростой темы? 👉🏻 Пройдите вступительный тест для регистрации — https://otus.pw/L4zo/ 12 октября в 20:00 — обсудим, нужны ли методы класса (classmethod), поговорим об особенностях ООП в Python, рассмотрим ситуации, когда без classmethod не обойтись, посмотрим на реализации в известных библиотеках. 👉🏻 Пройдите вступительный тест для регистрации — https://otus.pw/hRnQ/ Открытые уроки хорошая возможность протестировать обучением на онлайн-курсе «Web-разработчик на Python» и познакомиться с практикующим экспертом!

🦾 Собеседование Senior Python Developer на $6500 ➡️ Смотреть @python_job_interview
🦾 Собеседование Senior Python Developer на $6500 ➡️ Смотреть @python_job_interview

Что такое _slots_ в Python ? Ответ Позволяет снизить объём памяти, потребляемой экземплярами класса, ограничивая количество атрибутов ими поддерживаемых. По умолчанию классы используют словарь для хранения атрибутов — это позволяет модифицировать набор атрибутов объекта прямо в ходе исполнения программы. Однако такой подход оказывается затратным для объектов, набор атрибутов которых невелик и/или ограничен. Это становится особенно заметно, когда создаётся большое количество экземпляров. Поведение по умолчанию можно изменить, задав slots при определении класса. В slots могут быть перечислены атрибуты для значений которых требуется зарезервировать место (с точки зрения CPython в объекте класса резервируется место для массива указателей на Python-объекты). При этом ни dict, ни weakref для экземпляров автоматически созданы не будут (даже если в качестве значения строки указать пустую строку). В качестве значения slots может быть указана строка, объект поддерживающий итерирование, или последовательность строк с именами атрибутов, использующихся экземплярами. Слоты реализуются при помощи создания дескриптора для каждого из перечисленных атрибутов. class Ordinary(object): """Экземпляры этого класса могут дополняться атрибутами во время исполнения. """ class WithSlots(object): __slots__ = 'static_attr' a = Ordinary() b = WithSlots() a.__dict__ # {} b.__dict__ # AttributeError a.__weakref__ # None b.__weakref__ # AttributeError a.static_attr = 1 b.static_attr = 1 a.dynamic_attr = 2 b.dynamic_attr = 2 # AttributeError Попытки присвоить экземпляру атрибут, который не был перечислен в slots будет поднято исключение AttributeError. 2.3 Если требуется динамическое назначение атрибутов, следует указать в перечислении слотов '__dict__'. Не имея атрибута weakref, экземпляры классов со slots не поддерживают слабые ссылки на себя. 2.3 Если требуется поддержка слабых ссылок, следует указать в перечислении слотов '__weakref__'. Область действия слотов ограничено классом, в котором они определены, поэтому наследники (если конечно они не определили собственные слоты) будут иметь dict. Если наследники тоже определяют слоты, то в перечислении должны содержаться лишь дополнительные. В последующих версиях возможно будет реализована проверка на совпадение имён. Непустой slots не может быть использован для классов, наследующихся от встроенных типов переменной длины, например long, str и кортеж. При попытке сделать это будет поднято исключение TypeError. Слот может принимать перечисления с «нестроками». Например, могут использоваться отображения, однако в будущих версиях значения по ключам могут быть наделены неким определённым смыслом. 2.6 Если назначается class, следует проследить, что для обоих классов определены одинаковые слоты. @python_job_interview

Объясните, как работает функция reduce Ответ Это может быть сложновато сразу понять, пока вы не используете ее несколько раз. reduce принимает функцию и последовательность — и проходит по этой последовательности. На каждой итерации в функцию передаются как текущий элемент, так и выходные данные предыдущего элемента. В конце концов, возвращается одно значение . from functools import reduce def add_three(x,y): return x + y li = [1,2,3,5] reduce(add_three, li) #=> 11 Возвращается 11, что является суммой 1+2+3+5. @python_job_interview

🐍 Собеседование Python. Разбор вопросов 00:00 Agenda 00:41 Как справиться со стрессом 04:00 Начало собеседования 13:37 Типы
🐍 Собеседование Python. Разбор вопросов 00:00 Agenda 00:41 Как справиться со стрессом 04:00 Начало собеседования 13:37 Типы данных в Python 22:46 Lambda-функции 24:40 Тернарный оператор 26:50 Глубокая и поверхностная копия 28:40 Виртуальные окружения 33:45 Big O Notation 41:48 Классы 48:35 Декораторы 56:53 Абстрактные классы 59:57 Метаклассы 1:02:52 ООП 1:10:24 MRO 1:13:00 Итератор 1:14:24 Генератор 1:17:00 ОФФТОП 1:31:07 Конкурентность, асинхронность 1:36:20 Тестирование кода 1:43:32 ORM 1:46:34 Best practices 1:55:35 Базы данных 2:04:48 Git 2:07:28 Docker 2:12:37 Web 2:19:24 Linux 2:23:10 ОФФТОП ➡️ Смотреть @python_job_interview

Что такое временная сложность алгоритма (time complexity) Оценка сложности Сложность алгоритмов обычно оценивают по времени выполнения или по используемой памяти. В обоих случаях сложность зависит от размеров входных данных: массив из 100 элементов будет обработан быстрее, чем аналогичный из 1000. При этом точное время мало кого интересует: оно зависит от процессора, типа данных, языка программирования и множества других параметров. Важна лишь асимптотическая сложность, т. е. сложность при стремлении размера входных данных к бесконечности. Допустим, некоторому алгоритму нужно выполнить 4n3 + 7n условных операций, чтобы обработать n элементов входных данных. При увеличении n на итоговое время работы будет значительно больше влиять возведение n в куб, чем умножение его на 4 или же прибавление 7n. Тогда говорят, что временная сложность этого алгоритма равна О(n3), т. е. зависит от размера входных данных кубически. Использование заглавной буквы О (или так называемая О-нотация) пришло из математики, где её применяют для сравнения асимптотического поведения функций. Формально O(f(n)) означает, что время работы алгоритма (или объём занимаемой памяти) растёт в зависимости от объёма входных данных не быстрее, чем некоторая константа, умноженная на f(n). Примеры O(n) — линейная сложность Такой сложностью обладает, например, алгоритм поиска наибольшего элемента в не отсортированном массиве. Нам придётся пройтись по всем n элементам массива, чтобы понять, какой из них максимальный. O(log n) — логарифмическая сложность Простейший пример — бинарный поиск. Если массив отсортирован, мы можем проверить, есть ли в нём какое-то конкретное значение, методом деления пополам. Проверим средний элемент, если он больше искомого, то отбросим вторую половину массива — там его точно нет. Если же меньше, то наоборот — отбросим начальную половину. И так будем продолжать делить пополам, в итоге проверим log n элементов. O(n2) — квадратичная сложность Такую сложность имеет, например, алгоритм сортировки вставками. В канонической реализации он представляет из себя два вложенных цикла: один, чтобы проходить по всему массиву, а второй, чтобы находить место очередному элементу в уже отсортированной части. Таким образом, количество операций будет зависеть от размера массива как n * n, т. е. n2. Бывают и другие оценки по сложности, но все они основаны на том же принципе. Также случается, что время работы алгоритма вообще не зависит от размера входных данных. Тогда сложность обозначают как O(1). Например, для определения значения третьего элемента массива не нужно ни запоминать элементы, ни проходить по ним сколько-то раз. Всегда нужно просто дождаться в потоке входных данных третий элемент и это будет результатом, на вычисление которого для любого количества данных нужно одно и то же время. Аналогично проводят оценку и по памяти, когда это важно. Однако алгоритмы могут использовать значительно больше памяти при увеличении размера входных данных, чем другие, но зато работать быстрее. И наоборот. Это помогает выбирать оптимальные пути решения задач исходя из текущих условий и требований. Тут можно посмотреть сложность основных алгоритмов сортировки и работы с данными. @python_job_interview

В чем разница между глубокой и мелкой копиями? Обсудим это в контексте изменяемого объекта — списка. Для неизменяемых объектов глубокое и мелкое (поверхностное) копирование обычно не отличаются. Рассмотрим три сценария. I) Поставьте ссылку на исходный объект. Она отсылает новое имя li2 к тому же месту в памяти, на которое указывает li1. Поэтому любое изменение в li1 также происходит с li2: li1 = [['a'],['b'],['c']] li2 = li1 li1.append(['d']) print(li2) #=> [['a'], ['b'], ['c'], ['d']] II) Создайте мелкую копию оригинала. Ее можно создать с помощью конструктора list() или mylist.copy(). Мелкая копия создает новый объект, но заполняет его ссылками на оригинал. Таким образом, добавление нового объекта в исходный список li3 не отразится в li4, а вот изменение объектов в li3 — отразится: li3 = [['a'],['b'],['c']] li4 = list(li3) li3.append([4]) print(li4) #=> [['a'], ['b'], ['c']] li3[0][0] = ['X'] print(li4) #=> [[['X']], ['b'], ['c']] III) Создайте глубокую копию. Это делается с помощью copy.deepcopy(). Оригинал и копия полностью независимы, а изменения в одном не оказывают никакого влияния на другой: import copy li5 = [['a'],['b'],['c']] li6 = copy.deepcopy(li5) li5.append([4]) li5[0][0] = ['X'] print(li6) #=> [['a'], ['b'], ['c']] @python_job_interview