Python вопросы с собеседований
25K subscribers
511 photos
18 videos
17 files
409 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
Download Telegram
🖥 Можете объяснить жизненный цикл треда?

Ответ

Общими словами, цикл выглядит так:
- сначала создается класс, который подменяет метод исполнения класса в треде, и создаем экземпляр (instance) для этого класса;
- вызываем start(), который готовит тред к исполнению;
- переводим тред в состояние исполнения;
- можно вызвать разные методы, например sleep() и join(), которые переводят тред в режим ожидания;
- когда режим ожидания или исполнения прекращается, другие ожидающие треды подготавливаются к исполнению;
- после завершения исполнения тред останавливается.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем разница между методами экземпляра, класса и статическими методами в Python?

Ответ

Методы экземпляра: принимают параметр self и относятся к определенному экземпляру класса.

Статические методы: используют декоратор @staticmethod, не связаны с конкретным экземпляром и являются автономными (атрибуты класса или экземпляра не изменяются).

Методы класса: принимают параметр cls, можно изменить сам класс.

Проиллюстрируем разницу на вымышленном классе CoffeeShop:

class CoffeeShop:
specialty = 'espresso'

def __init__(self, coffee_price):
self.coffee_price = coffee_price

# instance method
def make_coffee(self):
print(f'Making {self.specialty} for ${self.coffee_price}')

# static method
@staticmethod
def check_weather():
print('Its sunny')

# class method
@classmethod
def change_specialty(cls, specialty):
cls.specialty = specialty
print(f'Specialty changed to {specialty}')


У класса CoffeeShop есть атрибут specialty (фирменный напиток), установленный по умолчанию в значение ‘espresso’. Каждый экземпляр CoffeeShop инициализируется с атрибутом coffee_price. У него также три метода: метод экземпляра, статический метод и метод класса.

Давайте инициализируем экземпляр с атрибутом coffee_price, равным 5. Затем вызовем метод экземпляра make_coffee:

coffee_shop = CoffeeShop('5')
coffee_shop.make_coffee()
#=> Making espresso for $5


Теперь вызовем статический метод. Статические методы не могут изменять состояние класса или экземпляра, поэтому обычно используются для служебных функций, например, сложения двух чисел. Наши проверяют погоду. Говорят, что солнечно. Отлично!

coffee_shop.check_weather()
#=> Its sunny


Теперь используем метод класса для изменения фирменного напитка (specialty), а затем сделаем кофе (make_coffee):

coffee_shop.change_specialty('drip coffee')
#=> Specialty changed to drip coffee

coffee_shop.make_coffee()
#=> Making drip coffee for $5

Скопировать код
Обратите внимание, что make_coffee раньше делал эспрессо, а теперь заваривает капельную кофеварку (drip coffee).

@python_job_interview
🖥 Что будет в результате выполнения данного кода?

Ответ:
Данный код выдаст в виде результата пустой список [], а ошибка IndexError не возникнет.

Как известно, попытка доступа к элементу списка с использованием индекса, превышающего число элементов (например, операция list[10] в списке выше), приводит к ошибке IndexError. Однако, попытка получить доступ к срезу списка с начальным индексом, превышающем количество элементов в списке, не приведет к IndexError и просто вернет пустой список.

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


@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 В каких областях питон имеет преимущество?

Лучше всего питон использовать в следующих областях:
- веб-приложения
- графические интерфейсы пользователя для настольных ПК
- научные и арифметические приложения
- разработка ПО
- разработка программ обучения
- приложения для бизнеса
- сетевые приложения
- игры, 3D-графика

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Какая разница между Series и dataframe?

Series – это проиндексированный одномерный массив значений. Он похож на простой словарь типа dict, где имя элемента будет соответствовать индексу, а значение – значению записи. DataFrame — это проиндексированный многомерный массив значений, соответственно каждый столбец DataFrame, является структурой Series.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Напишите в одну строку, как можно получить самую позднюю по значению букву в строке.

Ответ

Значение буквы определяется по ее коду в ASCII. Для этого подойдет функция max()

>>> max("flyiNg")
"y"


С помощью той же логики можно объяснить следующую строку кода:

>>> max("fly{}iNg")
"}"


@python_job_interview
🖥 Как вставить объект, чтобы он оказался под определенным индексом?

Ответ


Сначала создадим список:

>>> a=[1, 2, 4]
Затем используем метод insert(). В нем первым аргументом будет индекс, под которым вставляется объект, а вторым — значение объекта:

>>> a.insert(2,3)
>>> a
[1, 2, 3, 4]


@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Если мы не поставим двоеточие в конце строки для цикла "do-while", он все равно сработает?

Ответ


В питоне такой цикл не реализован. Это вопрос из тех, которые с подвохом, когда упоминают элементы других языков.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🌃 Big Data - действительно полезный блог для всех, кто работает с данными на Python.

- огромный набор бесплатных наборов данных
- инструменты для работы с данными
- обучающие материалы для датасаентистов
- перевод книг и статей

🔥 Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Расскажите про методы __str__ и __repr__

Оба метода переводят класс в строку, но у них есть небольшая разница.

str — используется для красивого вывода информации об объекте. Вызывается, например, функциями print() и format().

repr — выводит подробную об информацию об объекте, очень полезно при отладке. Бывает, можно получить такой же объект, если запихнуть результат в eval(str).

Если метод str не определён, то используется repr и наоборот.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Можете назвать десять встроенных функций питона?

Функция complex() создает комплексное число:

>>> complex(3.5,4)
(3.5+4j)

Функция eval() исполняет строку:

>>> eval("print(max(22,22.0) — min(2,3))")
20

Функция filter() отфильтровывает элементы, для которых заданное условие верно.

>>> list(filter(lambda x: x%2 == 0,[1, 2, 0, False]))
[2, 0, False]


Функция format() помогает задать формат строки:

>>> print("a = {0} but b = {1}".format(a, b))
a = 2 but b = 3

Функция hash() возвращает хэш-значение объекта:

>>> hash(3.7)
644245917

Функция hex() преобразовывает число в шестнадцатеричное число:

>>> hex(14)
"0xe"

Функция input() читает ввод и возвращает строку:

>>> input("Enter a number")
Enter a number7
"7"

Функция len() возвращает число, показывающее длину строки:

>>> len("Ayushi")
6

Функция locals() возвращает словарь с локальной таблицей имен:

>>> locals()
{"__name__": "__main__", "__doc__": None, "__package__": None, "__loader__": <class "_frozen_importlib.BuiltinImporter">, "__spec__": None, "__annotations__": {}, "__builtins__": <module "builtins" (built-in)>, "a": 2, "b": 3}

Функция open() открывает файл:

>>> file = open("tabs.txt")

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что такое pickle?

Ответ

Pickle — это модуль сериализации и десериализации объектов в Python.

В примере ниже мы сериализуем и десериализуем список словарей:

import pickle

obj = [
{'id':1, 'name':'Stuffy'},
{'id':2, 'name': 'Fluffy'}
]

with open('file.p', 'wb') as f:
pickle.dump(obj, f)

with open('file.p', 'rb') as f:
loaded_obj = pickle.load(f)

print(loaded_obj)
#=> [{'id': 1, 'name': 'Stuffy'}, {'id': 2, 'name': 'Fluffy'}]


Еще вопрос о pickle

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как увеличить и уменьшить целое число в Python?

Ответ


Инкремент и декремент можно сделать с помощью += и -=

value = 5

value += 1
print(value)
#=> 6

value -= 1
value -= 1
print(value)
#=> 4



@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 В чем разница между append и extend?

append добавляет значения в список, а extend добавляет в список значения из другого списка

a = [1,2,3]
b = [1,2,3]

a.append(6)
print(a)
#=> [1, 2, 3, 6]

b.extend([4,5])
print(b)
#=> [1, 2, 3, 4, 5]


@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Почему мы используем enumerate() при итерации последовательности?

Ответ

enumerate() позволяет отслеживать индекс при итерации последовательности. Это более нативный способ, чем определение и приращение целого числа, представляющего индекс:

li = ['a','b','c','d','e']

for idx,val in enumerate(li):
print(idx, val)
#=> 0 a
#=> 1 b
#=> 2 c
#=> 3 d
#=> 4 e


@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Преобразуйте следующий цикл for в генератор списков (list comprehension)

Дан следующий цикл for:

a = [1,2,3,4,5]

a2 = []
for i in a:
a2.append(i + 1)
print(a2)
#=> [2, 3, 4, 5, 6]


Результат:

a3 = [i+1 for i in a]

print(a3)
#=> [2, 3, 4, 5, 6]


Генератор списка обычно считается более каноническим способом в Python, если он остается понятным.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как разбить список на фрагменты и разделить его на меньшие части.

Ответ

def chunk(my_list, size):
return [my_list[i:i+size] for i in range(0,len(my_list), size)]
my_list = [1, 2, 3, 4, 5, 6]
chunk(my_list, 2) # [[1, 2], [3, 4], [5, 6]]


Пишите свои варианы в комментариях

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Задание от Сбербанка

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

Проведите когортный анализ (за основу для когорты можно взять неделю регистрации), подсчитайте ориентировочный срок жизни клиента/когорты оцените популярность отдельных материалов и форматов

Попробуйте определить общие паттерны у тех пользователей, кто перестал учиться на платформе, и у тех, кто продолжает учиться. Вероятно, на основе этих данных вы сможете сделать предложения по адаптации платформы? Каких данных вам не хватает, чтобы провести более детальный анализ?

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

⭐️ Датасет
🖥 Решение

@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM