Рубрики
Без рубрики

Python / Django Developer Вопросы Интервью Вопросы и ответы (# 1)

Большинство инженеров программного обеспечения запуганы техническими раундами, и я недавно начал GIV … Теги с Python, Django, WebDev, производительностью.

Большинство инженеров программного обеспечения запутаны техническими раундами, и я недавно начал давать интервью. Итак, на этот раз я планирую записать все вопросы, которые мне задают в моих технических раундах. Надеюсь, что это будет полезно для некоторых из вас, чтобы получить представление о том, какие вопросы задают вопросы. Используйте эту серию в качестве руководства для подготовки и 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”