Большинство инженеров программного обеспечения запутаны техническими раундами, и я недавно начал давать интервью. Итак, на этот раз я планирую записать все вопросы, которые мне задают в моих технических раундах. Надеюсь, что это будет полезно для некоторых из вас, чтобы получить представление о том, какие вопросы задают вопросы. Используйте эту серию в качестве руководства для подготовки и ACE, которые интервью.
Некоторые вопросы могут быть специфическими для Python и Django, но большинство из них будут применимы к любым разработчикам роли программного обеспечения и разработчиков веб-приложений.
Это интервью было для роли разработчиков Python, и они также искали кандидата опыта в Джангу, поэтому вы будете видеть много вопросов, связанных с архитектурой и дизайном Django.
1. Давайте работать над рекурсивной реализацией серии Fibonacci.
Прошло «n», верните значение фибоначчи на n-й позиции.
Решение : Серия Fibonacci создана в одном из двух способов, итеративных и рекурсивных. Интервьюер искал только рекурсивное решение.
def fibonacci(n): if n == 0 or n == 1: return n return fibonacci(n-1) + fibonacci(n-2)
Это решение работало нормально для небольших чисел, взяли 0: 00: 00.001004сек, взяли 0: 00: 05.157989сек, который слишком долго. Так что дальше меня попросили оптимизировать это.
Идеальное решение: использование динамического программирования Я сохраняю каждое значение, найденное в словаре, так что следующая ищет фибоначчи из этого числа, он может просто посмотреть из «Value_dict»
def fibonacci(n, value_dict): # the first two values of fibonacci is always 0,1 if n == 0 or n == 1: return n # if fibonacci(n) is already calculated then return it from dict if value_dict.get(n): return value_dict[n] #else store it in dict and return next time it is called for. else: value_dict[n] = fibonacci(n-2,value_dict) + fibonacci(n- 1,value_dict) return value_dict[n] print(fibonacci(100, {}))
2. Что такое декораторы? Напишите декоратор, который регистрирует аргументы функций.
Решение : Декоратор – это любая функция, которая принимает в другой функции и добавляет его функциональность без манипулирования самой функцией. Это делает это с помощью функции обертки.
def decorator(func): def wrapper(*args): print("Logging the parameter of ", func, " is ", args) return func return wrapper @decorator def operation(x, y): return x+y operation(5,20)
@decorator – это просто синтаксический сахар, это эквивалентно res (операция (5,20))
3. Что Гил (глобальный переводчик)? Как это позволяет многопоточь в Python?
Решение : GIL – это замок, который гарантирует, что переводчик Python удерживается только одним потоком одновременно. Это означает, что только один поток может находиться в состоянии выполнения в любой момент времени. И именно поэтому Python – это однопоточный язык программирования. Это было введено для решения проблемы ссылочного подсчета, которая используется Python для сборки мусора.
Тогда как многопоточный модуль работает в Python, вы можете спросить! Ну, этот глобальный замок переводчика применяется только для мероприятий CPU. Таким образом, если есть какой-либо код, который влияет или использует процессор, он автоматически начинает действовать как одно резьбовое. Но все общие программы все еще могут работать в многопоточной моде.
4. Что такое WSGI и UWSGI?
Решение : Интерфейс Web Server Gateway, так как имя предполагает, что это интерфейс между самим приложением и веб-сервером. Django предоставляет Runserver для сервера разработки и для отладки, но для производства мы используем WSGI в комбинации любых веб-серверов, таких как Nginx, Apache или даже UWSGI Server. WSGI и UWSGI являются протоколами, и эти работы с веб-серверами для обслуживания хорошего применения производительности в производстве.
Поэтому, когда клиент делает запрос на приложение Django, запрос прочитан NGINX или любым веб-сервером. Затем NGINX проходит этот запрос на службу UWSGI, в каком стажере проходит через приложение Django.
5. Можем ли мы написать пользовательские запросы в Dango? Как?
Решение : Да, мы можем создать пользовательский запрос на настройке менеджеров. Менеджер – это интерфейс, посредством которого операции запросов к базе данных предоставляются модели Django. Каждая модель содержит не менее одного менеджера. Мы можем переопределить базовый запрос менеджеров путем переопределения метода Manager.get_QuerySet ().
class Employees(models.Model): name = models.CharField(max_length=50) location = models.CharField(max_length=100)
На бегах, Сотрудники .Objects.all ()
Это вернет всех сотрудников в базе данных. Теперь, если мы хотим настроить это, чтобы вернуть только сотрудников из местоположения Торонто, затем ниже можно сделать с помощью менеджера.
class TorontoEmployeesManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(location="Toronto") class Employees(models.Model): name = models.CharField(max_length=50) location = models.CharField(max_length=100) objects = models.Manager() toronto_objects = TorontoEmployeesManager()
Теперь Сотрудники .toronto_objects.all ()
вернется только сотрудникам из местоположения Торонто.
6. (Диапазон (10)) ;; [:]
Этор2?
Решение : Нет, AR2
Создает новую ссылку ARR1 и присваивает его ARR2. в то время как , Arr3 [:]
Копирует содержание ARR1 и присваивает его новую переменную под названием ARR3.
arr1 = [1,2,3,4] arr2 = arr1 arr3 = arr1[:] arr1.append(5) print(arr2) # [1,2,3,4,5] print(arr3) # [1,2,3,4]
7. Как скрыть переменную класса от доступа к классу?
class Sample: def __init__(self, a, b): self.a = a self.b = b
A и B следует скрывать от внешнего класса.
Решение:
class Sample: def __init__(self, a, b): self.__a = a # using double underscore hides class variable self.__b = b
8. Каковы подразделения в Джангу? Как вы создаете пользовательские промежуточные программы.
Ответ: Middleware – это низкоуровневый плагин, который может использоваться для подключения к циклу запроса/ответа Django. По умолчанию уже есть Admitwares, доступные по умолчанию, когда проект Django создан, и он может найден в Settings.py. Мы можем создать пользовательское промежуточное программное обеспечение и включить его в список промежуточных программ с существующими.
Для создания пользовательского промежуточного программного обеспечения следует соблюдать следующую структуру:
# Middleware class should always consist __init__() and __call__() class MyCustomMiddleware(): def __init__(self, get_response): self.get_response = get_response #get_response is the view which will be called after this middleware/ or its the next middleware in the list. def __call__(self, request): # write the code to be executed before calling view here response = self.get_response(request) #pass the request to view and get the response back, which will be returned. # write the code to be executed after calling view here. return response
Добавьте это промежуточное программное обеспечение в раздел «промежуточное программное обеспечение» в настройках .py. Также убедитесь, что порядок промежуточного программного обеспечения является правильным. Потому что он вызывается сверху вниз, при обработке запросов, а затем снизу вверх при возврате ответа.
Надеюсь, это было полезно!
Если вы хотите поддержать мою работу, https://www.buymeacoffee.com/manishanaidu
Оригинал: “https://dev.to/manishanaidu/python-django-developer-interview-questions-and-answer-1-3l82”