интервьюер:Я вижу, что в вашем резюме написано, что вы знакомы с распространенными шаблонами проектирования, почему бы вам вкратце не рассказать о том, с какими из них вы знакомы?
Кандидат: общий шаблон фабрики, шаблон прокси, шаблон метода шаблона, шаблон цепочки ответственности, шаблон одиночного элемента, шаблон проектирования упаковки, шаблон стратегии и т. д. — все они знакомы.
Кандидат: Рукописный код проекта используется больше, как правило, режим метода шаблона, режим цепочки ответственности, режим стратегии и режим одиночного элемента.
Кандидат: Подобно фабричному режиму и прокси-режиму, почерка не так много, но ведь Spring используется в общем окружении Java-бэкенда, так что он все еще относительно знаком.
интервьюер:Почему бы вам не написать шаблон singleton вручную?
Кандидат: Шаблон singleton обычно имеет несколько способов записи.
Кандидат: Голодный стиль, простой ленивый стиль (блокировка при объявлении метода), блокировка двойной проверки DCL (расширенный ленивый стиль), статический внутренний класс (элегантный ленивый стиль), перечисление
Кандидат: Так называемый "голодный стиль" означает, что объект инициализируется непосредственно перед его использованием. Так называемый «ленивый человек» относится к инициализации, когда он используется.
Кандидат: Тогда я все равно все это напишу, это просто те коды
интервьюер: Какой из них вы используете чаще?
Кандидат: Как правило, мы используем статические внутренние классы для реализации синглетонов в наших проектах (если нет среды Spring), код лаконичен и легко читается.
Кандидат: Если есть окружение Spring, то удобнее управлять им напрямую контейнером Spring (по умолчанию Spring — синглтон)
Кандидат: Перечисление вообще используется как "лого", а DCL - тоже метод, который некоторые студенты будут писать в проекте (его тоже можно увидеть в некоторых исходниках), но он вообще слишком неблагоприятен для чтения и понимания (:
Кандидат: В общем, вы можете использовать любой из них. Я думаю, что ключевой момент заключается в том, чтобы смотреть на стиль кода команды (просто соблюдайте его согласованность). Даже если вы используете «голодный стиль», большой проблемы нет (теперь память не так уж и много).Нехватка, я думаю читабельность важнее)
интервьюер: Эм…
интервьюер:Я вижу, что вы написали volatile модификацию одноэлементного кода DCL? Зачем?
Кандидат: Разве ты не помнишь, мы говорили о volatile? Инструкции могут выполняться не по порядку (оптимизация компилятора приводит к нарушению порядка, архитектура кэш-памяти ЦП приводит к нарушению порядка, собственное переупорядочение ЦП приводит к нарушению порядка)
Кандидат: Когда код нового объекта не является атомарной инструкцией, он будет состоять из нескольких шагов.Во время этого процесса может возникнуть проблема перестановки инструкций, а ключевое слово volatile может избежать перестановки инструкций.
интервьюер:Можете ли вы рассказать мне, какие шаблоны дизайна вы используете в своем проекте?
Кандидат: Ну, например, когда я буду обрабатывать запросы, я буду использовать модель цепочки ответственности для обработки (уменьшить if else и сделать структуру проекта более понятной)
Кандидат: при работе с общей логикой шаблон метода шаблона будет использоваться для абстракции, а другая конкретная логика будет обрабатываться разными классами реализации (каждое сообщение необходимо проверить перед отправкой, поэтому логика проверки копирования может быть записана в абстрактный класс)
Кандидат: меньше возможностей для рукописного ввода в режиме прокси (поскольку в проекте обычно используется среда Spring, просто используйте прокси Spring AOP напрямую)
Кандидат: я использовал АОП для инкапсуляции «клиента мониторинга» и использования его в форме «аннотаций» (вам не нужно использовать жесткое кодирование для мониторинга, если есть аннотации).
интервьюер:Итак, можете ли вы рассказать об общих шаблонах проектирования в Spring?
Кандидат: Например, контейнер Spring IOC можно понимать как применяющий «фабричный шаблон» (получение объектов через ApplicationContext или BeanFactory)
Кандидат: Объекты Spring по умолчанию являются синглтонами, поэтому необходимо использовать «режим синглтона» (реализация синглетонов в исходном коде использует DCL для реализации синглетонов)
Кандидат: базовый принцип Spring AOP заключается в использовании «прокси-режима», который может быть реализован с помощью динамического прокси-сервера JDK или динамического прокси-сервера CGLIB.
Кандидат: Spring использует «шаблон метода» во многих местах, таких как менеджер транзакций (AbstractPlatformTransactionManager), getTransaction определяет структуру, многие из которых реализованы в подклассах.
Кандидат: модель Spring, управляемая событиями, использует «шаблон наблюдателя», конкретной реализацией является ApplicationContextEvent, ApplicationListener.
интервьюер:Хорошо понял…
Добро пожаловать в мой публичный аккаунт WeChat【Java3y] Давайте поговорим о Java-интервью, серия онлайн-интервьюеров постоянно обновляется!
Серия [Онлайн-интервьюер-Мобильный терминал]Продолжаем обновлять два раза в неделю!
【Онлайн-интервьюер-компьютер】СерияПродолжаем обновлять два раза в неделю!
Оригинал это не просто! ! Проси три! !