Инструменты пользователя

Инструменты сайта


функциональное_программирование

Вопросы и ответы при собеседовании по теме Функциональное программирование

Вопросы

  • Что такое арность (arity)? Как получить арность функции в JS?
  • Что такое первоклассный гражданин (first-class citizen)? Что это в JS?
  • Каковы последствия того, что в JS функции тоже первоклассные?
  • Что такое функция высшего порядка (higher order function)?
  • Поток управления (Control flow)
    • Что такое поток управления?
    • Как это влияет на сложность кода?
    • Каковы особенности потока управления в программах, написанных в функциональной парадигме?
  • Частичное использование (Partial use) функций и каррирование (currying)
    1. Когда может быть полезно частичное применение функций?
    2. Когда каррирование может быть полезным?
    3. В чем их отличия?
    4. Как они влияют на арность функций?
  • Функциональная композиция (Function Composition)
    • Что такое Функциональная композиция?
    • Для чего её используют?
    • Что такое pipe?
    • Как реализовать функцию compose?
  • Бесточечный стиль (Point-free)
    • Что такое Бесточечный стиль?
    • Какие преимущества это даёт?
    • В чем могут быть недостатки?
  • Какие бывают побочные эффекты функционального подхода? В чём вред и в чём полеза?
  • Что такое чистые функции (pure functions)? Что такое грязные функции (dirty functions)? Какие преимущества у одних перед другими?
  • Может ли грязный вызов (dirty call) поступать из чистой функции? Если да, то что это значит?
  • Как ограничить влияние «грязных функций» на систему?
  • Что такое идемпотентность (idempotency)? В чем разница между программной и математической идемпотентностью?
  • Что такое прозрачность ссылок (link transparency)? Является ли ссылочная прозрачность выражения вызова функции достаточным признаком чистоты этой функции?
  • Неизменяемость или иммутабильность (Immutability)
    • Что такое иммутабильность?
    • Объекты, содержащиеся в переменных, объявленных с помощью const, неизменны?
    • В чем преимущества иммутабельных структур данных?
    • Что такое структурное разделение (structural sharing) и какие проблемы оно решает?
  • Рекурсия (Recursion)
    • Что такое рекурсия?
    • В чем преимущества и недостатки рекурсии для приложения?
    • Что такое оптимизация хвостового вызова (tail call optimization)? Поддерживается ли это в JS?
  • Как реализовать функционал объектов через замыкания (closures) и наоборот? Какие преимущества у каждого метода?
  • Как я могу создать частные значения (private values) в функции? Как они могут стать невосприимчивыми (immune)?
  • Что такое категории (categories)? Что такое морфизмы (morphisms)?
  • Что такое изоморфизм (isomorphism)?
  • Что такое функтор (functor)?
  • Как избежать ненужных проходов через массив?
  • Что такое ленивые вычисления (lazy computing)? Каковы преимущества и недостатки ленивых вычислений?
  • Что такое трансдукция (transduction)? Какие проблемы можно решить с помощью этого инструмента?
  • Что такое точечный функтор (pointed functor)?
  • Что такое монады (monads)? Для чего они нужны? Что делают монады ниже?
    • Maybe (Может быть)
    • Either (Либо)
    • IO
  • Что такое ассоциативность (associativity)?
  • Что такое аппликативный функтор (applicative functor)? Какова сфера его применения?
  • Что делают следующие утилиты?
    • identity
    • partial / partialRight
    • prop
    • curry / uncurry
    • cond
    • flatMap / chain
  • Неизменяемость и состояние (Immutability and state)
    • Может ли состояние программы быть неизменным (immutable)?
    • В чем проблема запоминания состояния программы (state of the program)?
    • Почему изменчивое состояние затрудняет соблюдение гарантии инвариантов на протяжении всего жизненного цикла программы?
    • Почему изменчивость накладывает дополнительные требования на порядок функций (order of functions)? Как этого избежать?
    • Опишите следующие модели состояний. Как их можно классифицировать по степени опасности (degree of danger)?
      • Невидимое для клиента изменчивое состояние (Invisible to the client mutable state)
      • Инкапсулированное изменяемое состояние (Encapsulated mutable state)
      • Невидимое изменяемое состояние программиста (Invisible programmer mutable state)
      • Двухфазный жизненный цикл (Two-phase life cycle)
      • Изменяемое состояние, разделяемое несколькими процессами (A mutable state shared between several processes)
      • Отсутствие изменчивого состояния (Lack of mutable state)
      • Неинкапсулированное изменчивое состояние (Unencapsulated mutable state)
      • Управляемое изменяемое состояние (Managed mutable state)
      • Монотонное переменное состояние (Monotonous variable state)

Книги

Ссылки

функциональное_программирование.txt · Последнее изменение: 2020/09/04 13:43 — oleg