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

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


архитектура_и_дизайн_программ

Вопросы и ответы при собеседовании по теме Архитектура и дизайн программ

Вопросы

  • Инверсия контроля (Inversion of Control)
    1. Что такое IoC?
    2. Каковы преимущества фреймворков, обеспечивающих IoC, перед библиотеками?
    3. Каковы преимущества библиотек без IoC перед фреймворками?
    4. Может ли модуль предоставить интерфейс, поддерживающий оба подхода: с IoC и без IoC?
  • Внедрение зависимости (Dependency Injection)
    1. Что такое DI?
    2. Какие есть альтернативы DI? Каковы преимущества и недостатки каждой альтернативы?
    3. Можно ли реализовать DI без IoC?
    4. Как DI помогает достичь разделения проблем?
    5. Как DI и принцип инверсии зависимостей от SOLID связаны друг с другом?
  • Что такое рассогласование импеданса (Impedance Mismatch)? Каковы примеры несоответствия импеданса в различных технологиях? Какие самые популярные шаблоны решений?
  • Какие проблемы может вызвать преждевременная оптимизация (premature optimization)? Как решить проблемы с производительностью, не допустив преждевременной оптимизации?
  • Каковы преимущества предоставления API с разными уровнями абстракции?
  • Почему обратные вызовы (callbacks) нарушают композицию (composability)?
  • Крупномасштабный JS (Large Scale JS)
    1. В чем основная идея предлагаемого подхода?
    2. Какие шаблоны используются в этом подходе?
    3. Какова роль событий в этом подходе? Можно ли реализовать аналогичный подход только с синхронными вызовами функций (synchronous function invocations)?
    4. Как это помогает добиться отказоустойчивости (fault tolerance)?
    5. Как модули могут зависеть друг от друга?
  • Модуль API
    1. Каковы характеристики хорошего API модуля?
    2. Как сделать так, чтобы API было трудно использовать не по назначению? Каковы преимущества этой характеристики?
    3. Каковы свойства согласованности (consistency) и концептуальной целостности (conceptual integrity) API? Почему свойства ценны?
    4. Как написание сценариев использования перед написанием кода может помочь в достижении более чистого API?
    5. В чем разница между расширяемостью авторов модуля и клиентами модуля?
    6. Как вы объясните фразу «асимметрия функции должна отражаться асимметрией формы»?
    7. Как имена, используемые в API вашего модуля, могут отражать структуру вашего модуля и увеличивать согласованность в различных частях вашего контракта?
    8. Каковы крайние случаи (edge cases) в контексте разработки API? Почему неявная обработка крайнего случая предпочтительнее явной?
    9. В чем заключается правило «Лучший API - это не API»? Какие есть примеры нарушения правила?
  • Как модульное программирование помогает нам добиться лучшего локального мышления при разработке модуля?
  • Каковы преимущества объявления явного контракта между клиентом и лицом, реализующим модуль?
  • В чем разница между абстракцией по параметрам и абстракцией по спецификации?

Ссылки

архитектура_и_дизайн_программ.txt · Последнее изменение: 2020/09/04 08:50 — oleg