2021-04-21

Питання до проектів з Python

 Питання до проектів з Python

Общее по Computer Science и Web Development:


1. Что такое инженерия и процесс разработки в целом?


2. Какие знаете принципы программирования?


3. Чем отличаются процедурная и объектов-ориентированная парадигмы программирования?

4. Какие основные принципы ООП (наследование, инкапсуляция, полиморфизм)?



5. Что такое множественное наследование?

6. Какие есть шесть этапов разработки продукта в  Software Development lifecycle и какая разница между Agile и Kanban?

7. Какие есть методы HTTP-запросов и какая между ними разница?


8. Как выглядят HTTP-request / response?


9. Что такое авторизация и как она работает?


10. Что такое cookies?


11. Что такое веб уязвимость?


12. Какие знаете классические базы данных?


13. Как читать спецификацию в конкретном языке (например, PEP8 в Python)?


14. Как происходит взаимодействие клиента и сервера?


15. Какие есть подходы к проектированию API?


16. Как использовать паттерны программирования?


17. Что такое Acceptance Testing и зачем его используют?


18. Что такое модульные и интеграционные тесты, API-тесты?

19. Как писать unit-тесты?

20. Какие есть best practices в написании автотестов?

21. Какие базовые команды системы контроля версий?

22. Как использовать Git?

23. В чем разница между хешированием и шифрованием?

 


Python:


24. Python - интерпретируемый язык или компилируемый?

25. Какие есть меняющиеся и постоянные типы данных?

26. Что такое область видимости переменных?

27. Что такое introspection?

28. Разница между is и ==?

29. Разница между __init __ () и __new __ ()?

30. В чем разница между потоками и процессами?

31. Какие есть виды импорта?

32. Что такое класс, итератор, генератор?

33. Что такое метакласс, переменная цикла?

34. В чем разница между итераторами и генераторами?

35. В чем разница между staticmethod и classmethod?

36. Как работают декораторы, контекстные менеджеры?

37. Как работают dict comprehension, list comprehension и set comprehension?

38. Можно ли использовать несколько декораторов для одной функции?

39. Можно ли создать декоратор из класса?

40. Какие есть основные популярные пакеты (requests, pytest, etc)?

41. Что такое lambda-функции?

42. Что означает *args, **kwargs и как они используются?

43. Что такое exceptions, <try-except>?

44. Что такое PEP (Python Enhancement Proposal), какие из них знаете (PEP 8, PEP 484)?

45. Напишите hello-world сервис, используя один из фреймворков.

46. Какие есть типы данных и какая разница между list и tuple, зачем они?

47. Как использовать встроенные коллекции (list, set, dictionary)?

48. В чем заключается сложность доступа к элементам dict?

49. Как создается объект в Python, для чего __new__, зачем __init__?

50. Что знаете из модуля collections, какими еще built-in модулями пользовались?

51. Что такое шаблонизатор и как в нем выполнять базовые операции (объединять участки шаблона, выводить дату, выводить данные с серверной стороны)?

52. Как Python работает с HTTP-сервером?

53. Что происходит, когда создается виртуальная среда?

 

Вопросы для Middle
 

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

Обычно у мидлов спрашивают:

63. Ориентируетесь ли в *nix, можете ли написать скрипты/автоматизацию для себя и коллег?

64. Что такое многопоточность?

65. Что такое архитектура веб сервисов?

66. Как работает современное нагруженное веб приложение (нарисовать и обсудить примерную архитектуру, например, Twitter или Instagram)?

67. Что нужно для сайта / сервиса среднего размера (redis \ celery \ кэш \ логирование \ метрики)?

68. Как написать, задеплоить и поддерживать (микро) сервис?

69. Как масштабировать API?

70. Як проводить Code review?

71. Что такое абстрактная фабрика, как ее реализовать и зачем ее применяют?

72. Что такое цикломатическая сложность?

 

Python:


73. Async Python: как работает, зачем, что под капотом?

74. Сравнить асинхронные web-фреймворки.

75. Что такое модель памяти Python?

76. Что такое SQLAlchemy (Core и ORM частей) и какие есть альтернативы?

77. Принципы работы и механизм Garbage collection, reference counting?

78. Как работает thread locals?

79. Что такое _slots_?

80. Как передаются аргументы функций в Python (by value or reference)?

81. Что такое type annotation?

82. Для чего используют нижние подчеркивания в именах классов?

83. Статические анализаторы: Flake8, Pylint, Radon.

 

Бонус. Практические задания

 

1. Спроектировать клон Instagram. Это сервис, который понятен практически любому кандидату, даже если у него нет аккаунта. На высоком уровне он очень прост: картинки, описания, комментарии. Поэтому что-то минимальное сможет описать и джуниор. Если кандидат претендует на высшие позиции, можно бесконечно копать вглубь, касаясь API, тротлинга запросов, защиты от фрода, построения фидов пользователя и тому подобное.

2. Дано рекурсивное определение чисел Фибоначчи, надо написать функцию, которая реализует это определение.

3. Есть база данных из трех таблиц — стандартная many-to-many схема. Нужно написать запрос, который объединяет три таблицы и возвращает определенный результат.

4. Даем ТЗ какого-то полезного микросервиса (сокращалка url-ов, поиск дубликатов картинок, поиск тегов в текстах) или функции (rate limiter). Просим кандидата рассказать, как бы он его реализовал. Это дает возможность узнать, что привык использовать специалист, насколько глубоко он знает и понимает различные технологии.

5. Написать какой-то несложный декоратор (выводит аргументы функции на экран или, например, измеряет сколько времени выполнялась функция).

6. Junior`у можно предложить реализовать задачу FizzBuzz test.

7. Для Middle+ я люблю давать несложные задачки на рекурсию. Например, есть вложенный список чисел и нужно что-то на нем посчитать (скажем, найти максимум). Также, можно предложить написать аналог deepcopy для конкретной структуры данных (tree, graph).

8. Для Senior - игра «спроектировать за 5 минут...». Это может быть Google, FB, Twitter, высоконагруженный интернет-магазин, сервис поиска, продажи и бронирования билетов, сайт новостей и тому подобное. Такая задача помогает понять, как кандидат решает проблемы, ход его мыслей, умеет ли он отделять главное от второстепенного, понять, какого он типа ( «в глубину» или «в ширину»).

9. Игра «у юзера что-то не работает». На примере спроектированной системы собеседователь придумывает ошибку с «дикими симптомами», которую очень сложно понять, воспроизвести. Но нужно быстро решить проблему.

10. Задание, которое демонстрирует знание и понимание list и dict comprehensions.

Looking at the below code, write down the final values of A0, A1, ...An.
            A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
            A1 = range(10)
            A2 = sorted([i for i in A1 if i in A0])
            A3 = sorted([A0[s] for s in A0])
            A4 = [i for i in A1 if i in A3]
            A5 = {i:i*i for i in A1}
            A6 = [[i,i*i] for i in A1]
            A7 = [i if i%2 else 0 for i in A1 if 2 < i < 8]
            ','.join(str(j**2) for j in range(10)) – what is this object ?

 

11. Задача, в которой есть три функции, в них выполняются базовые операции (сортировка, фильтрация, поднесение массива к квадрату). Нужно упорядочить эти три функции в порядке возрастания времени, которое уходит на их выполнение.

Place the following functions below in order of their efficiency. They all take in a list of numbers between 0 and 1. The list can be quite long. An example input list would be [random.random () for i in range (100000)]. How would you prove that your answer is correct? - profiling?
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. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро.

 

12. Простые задачи на статистику или логику. Например, определить угол между стрелками часов, которые показывают 8:40.


Немає коментарів:

Дописати коментар