Python вопросы с собеседований
24.9K subscribers
511 photos
16 videos
17 files
408 links
Вопросы с собеседований по Python

@workakkk - админ

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

@pro_python_code - Python

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

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

РКН: clck.ru/3FmrFd
Download Telegram
🖥 Декоратор для замера времени

Напишите декоратор TimeDecorator, который будет замерять время выполнения декорированной функции.

Исходная функция должна возвращать результат, а декоратор должен просто выводить строку "Затрачено N секунд" на экран.

Пример:

def func(...):
...
print('Я закончила работать!')

func()
# Затрачено 0.5 секунд
# Я закончила работать!


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

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Декоратор для контроля уникальности аргументов

Напишите декоратор RepeatDecorator, который проверяет, запускалась ли ранее обернутая функция с заданными позиционными аргументами. Если такие аргументы уже подавались на вход данной функции, то нужно вывести на экран сообщение: «Функция с такими аргументами уже запускалась!».

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

Пример:


func1(1, 2)
> Ничего не выводится
func1(2, 1)
> Ничего не выводится
func1(3, 1)
> Ничего не выводится
func1(1, 2)
# Функция с такими аргументами уже запускалась!

func2(1, 2)
> Ничего не выводится, т.к. функция другая
func2(1, 2)
# Функция с такими аргументами уже запускалась!


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

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Задача

В шеренгу друг за другом стоят n человек, рост i-го из них равен ai условных единиц. Вы тоже собираетесь встать в эту шеренгу, при чем вам хочется встать на такую позицию p, чтобы f(p) = [количество людей левее вас того же роста, что и вы] умножить на [количество людей правее вас ростом, не равным росту вас] было максимально. Для этого вы можете встать в начало шеренги, в её конец, или между любыми 2мя соседними людьми. К сожалению вы не можете точно вспомнить ваш рост, у вас есть только m предположений о том, каким он может быть, и для каждого из них вы хотели бы знать оптимальную позицию, на которую вам стоило бы встать.

Решение:

Cчитаем сразу для нулевой позиции, сколько в списке не вашего роста для каждой гипотезы. А потом на каждом шаге изменяем кол-во равных слева и неравных справа по текущему значению списка

equal = [0 for i in range(len(m))]
notequal = [len(list(filter(lambda x: x != m[i], n))) for i in range(len(m))]
valsave = [0 for i in range(len(m))]
possave = [0 for i in range(len(m))]

for i in range(len(n)):
for x in range(len(m)):
if n[i] == m[x]:
equal[x] += 1
if n[i] != m[x]:
notequal[x] -= 1

val = equal[x] * notequal[x]
if val > valsave[x]:
valsave[x] = val
possave[x] = i+1
print(possave)


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

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача количество последовательных вхождений

Вам дана строка s. Предположим, что некоторый символ x встречается последовательно n раз в строке. Напишите функцию occurence(), которая принимает строку s и заменяет последовательные вхождения символа x на (n, x). Результат выведите на экран.

Примечание: все символы строки s являются целыми числами от 0 до 9.

Пример:

Входные данные:
s = '1222311'
Вывод:
(1, 1) (3, 2) (1, 3) (2, 1)

Пояснение: вначале 1 встречается только один раз. Меняем на (1, 1). Затем, 2 появляется три раза и заменяется на (3, 2) и так далее.

Важно: не забудьте пробелы между скобками.

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

@python_job_interview
Каким будет результат выполнения этого кода?
Anonymous Quiz
6%
0.5
2%
2
34%
3
58%
Error
🖥 Вы видите только следующий кусок кода. Что с ним не так? И для чего такой код нужен?

if __debug__:
assert False, ("error")


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

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Объясните как такое возможно?

_MangledGlobal__mangled = 23
class MangledGlobal:
def test(self):
return __mangled
>>> MangledGlobal().test()
23

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

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Какой результат мы получим, запустив следующий код?

big_num_1 = 1000
big_num_2 = 1000
small_num_1 = 1
small_num_2 = 1
big_num_1 is big_num_2
small_num_1 is small_num_2


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

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Как подготовиться к собеседованию на позицию Middle Python Developer

Всем привет! Меня зовут Александр, я Python-разработчик в компании VK. За свою карьеру питониста приходилось достаточно часто проходить собеседования, особенно работая на аутсорсе. И я, проходя все эти собеседования, выявил некоторые общие моменты, которыми хочу с вами поделиться.

Знания в Питоне
Алгоритмы
Фреймворки
Базы данных
Общие советы


📝 Читать дальше

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

Дан родительский класс и дочерний, который наследуется от него

class Parent():
def test(self):
print('inside parent')

class Child(Parent):
def test(self):
print('inside child')


при вызове метода экземпляра дочернего класса с тем же названием вызывается функция из дочернего класса, перезаписываем родительскую

>>> b1 = Child()
>>> b1.test()
inside child
>>>


Вопрос: можно ли сделать так чтобы дочерний метод не перезаписывал родительский, а добавлялся к нему и они выполнялись бы вместе и поочередно (сначала родительский потом дочерний)? Чтобы получилось вот так:

>>> b1.test()
inside parent
inside child
>>>


Ответ

Для этого можно вызвать функцию в родительском классе при помощи super().

class Parent:
def test(self):
print('inside parent')


class Child(Parent):
def test(self):
super().test()
print('inside child')


b1 = Child()
b1.test()
Вывод:

inside parent
inside child


Подробнее про функцию super() можете почитать в документации.

#junior

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как посчитать уникальные значений с Counter() ?

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

%%time
num_counts = {}
for num in a_long_list:
if num in num_counts:
num_counts[num] += 1
else:
num_counts[num] = 1

# Вывод в консоль
# CPU times: user 448 ms, sys: 1.77 ms, total: 450 ms
# Wall time: 450 ms



Однако более эффективный способ для решения этой задачи – использование Counter() из модуля collections. Весь код при этом уместится в одной строчке:


%%time
num_counts2 = Counter(a_long_list)

# Вывод в консоль
# CPU times: user 40.7 ms, sys: 329 μs, total: 41 ms
# Wall time: 41.2 ms


Этот фрагмент будет работать примерно в 10 раз быстрее, чем предыдущий.

У Counter также есть удобный метод most_common, позволяющий получить самые часто встречающиеся значения:


for number, count in num_counts2.most_common(10):
print(number, count)

# Вывод в консоль
29 19831
47 19811
7 19800
36 19794
14 19761
39 19748
32 19747
16 19737
34 19729
33 19729



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

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Задача для новичков на Python.

Задаются месяц и год в виде чисел. Нужно определить, есть ли в этом месяце пятница, 13-е

Пример:
has_friday_13(3, 2023) ➞ True

has_friday_13(10, 2017) ➞ True

has_friday_13(1, 1985) ➞ False


👉 Пишите ваше решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы и ответы к интервью для Python Developer

В этом репозитории собраны популярные вопросы по Python и смежным темам: Django, ООП, принципы программирования.

Также в проекте есть вопросы по основам HTML, фронтенд и БД, которые позволят вам повторить важные моменты, на которых зачастую останавливаются интервьюеры:

https://github.com/yakimka/python_interview_questions

#python

@python_job_interview
Как_составить_резюме_для_поиска_работы_в_Европе_.pdf
714.5 KB
Краткое пособие: как составить качественное резюме для поиска работы в иностранных компаниях.

Один из лучших обучающих материалов, что доводилось читать — написано с юмором, легко, а главное, реально полезно.

@python_job_interview
Top 100 Python Interview Questions.pdf
483.9 KB
100 самых частых вопросов на собеседованиях на должность Python разработчика.

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

1. LeetCode поддерживает более 16 языков программирования. Пользователи могут сами выбирать уровень сложности задачи.
2. HackerRank — платформа, где кроме базовых задач можно выбрать задачи в разных областях: SQL, алгоритмы, AI и т.д.
3. Codewars представляет алгоритмические и практические задачи, связанные с шаблонами проектирования.
4. TopCoder — сообщество программистов, где любят решать головоломки. На сайте иногда проходят турниры.
5. CodinGame — платформа, где решение задачи сопровождается визуализацией в стиле видеоигр.
Поиск мажоритарного элемента

Условие задачи:
Дан массив nums размера n. Требуется вернуть мажоритарный элемент.

Мажоритарный элемент - это элемент, который появляется более n / 2 раз. Вы можете быть уверены, что мажоритарный элемент всегда существует в массиве.

Примеры:
Ввод: nums = [4,2,4]
Вывод: 4

Ввод: nums = [8, 8, 6, 6, 6, 8, 8]
Вывод: 8

Решение задачи

👉 Пишите ваше решение в комментариях👇


@python_job_interview
🖥 Задача. Подготовка экспедиции на Марс

N кандидатов готовятся к двум космическим экспедициям на Марс. Поскольку экспедиции будут продолжаться несколько лет, а их участники окажутся в замкнутом пространстве небольшого объёма, то важное значение приобретает психологическая совместимость членов экипажа.

Путём тестирования были установлены пары кандидатов, присутствие которых в одной и той же экспедиции было бы нежелательным. Результаты тестирования отражены в таблице размера NxN. Если на пересечении -той строки и $j$-го столбца таблицы находится знак «+», то участие -го и $j$-го кандидатов в одной экспедиции нежелательно.

Составьте программу, разделяющую кандидатов на две группы для участия в экспедициях. Если такое разделение невозможно, программа должна выводить сообщение «No solution». В противном случае, программа должна выводить номера кандидатов, принадлежащих первой группе. Первой группой мы будем считать группу, в которой меньше кандидатов.

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

Программа должна считывать со стандартного потока ввода количество кандидатов и матрицу размера NxN. Например, для входных данных

8
- - + - - - - -
- - - + - - - -
+ - - - - - - +
- + - - - + - -
- - - - - - - -
- - - + - - - -
- - - - - - - +
- - + - - - + -

программа должна выводить

1 2 6 8


👉 Пишите ваше решение в комментариях👇

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Автор этого резюме утверждает, что оно понравилось гигантам вроде Microsoft, Google, Amazon. Добрые люди решили детально разобрать его и выделить ключевые моменты:

Розовым — глаголы действия, с них начинается каждый bullet point;

Желтым — hard skills по вашей специальности;

Оранжевый — показатель понимания бизнеса и реального опыта в (игровой) индустрии;

Зеленый — рабочие достижения, самая ценная часть резюме;

Голубойсертификаты «Кенгуру» impact и всякие личные награды и достижения;

Фиолетовый — ссылки на портфолио.

Теперь вы знаете, как грамотно составить резюме.