Вопрос: Придумай несколько вопросов для телефонного собеседования по PHP для Senior Developer
Нужно придумать несколько вопросов для проведения телефонного собеседования по PHP с подробной интерпретацией ответов для сотрудника, не имеющего квалификации в веб-разработке с целью выявления опытного программиста (Senior Developer).
Примеры вопросов уровня Junior и Middle:
- Чем отличается абстрактный класс от интерфейса?
- Может ли у абстрактного класса быть конструктор? Если да, то зачем, если нет, то почему?
Но нужно для Senior.
Устно трудно отличить Senior от специалиста проходить собеседования. Все типовые вопросы тщательно разжованы в Интернет и легко гуглятся. Поэтому нужны не вопросы с типовыми ответами, а открытые вопросы на размышление, всё более и более углубляющиеся в тему.
Проблема: Обнаружили, что дата последней новости в ленте была 2 недели назад.
Вопрос 1. Дайте несколько вариантов развития событий, которые привели к такой ситуации.
Возможные ответы:
1.1. Сломался виджет вывода новостей
1.2. Сломалось голосование за новости
1.3. Сломалось добавление новостей
1.4. Сломался логин пользователей
1.5. Модераторы отсутствуют (заболели, уволились)
1.6. Пользователи отсутствуют (сервис потихоньку угас)
1.7. Статей слигком много, модераторы не успевают проверить все
1.8. Серверные проблемы, например место на дисках закончилось или недоступность базы данных
1.9. Программный код испорчен в результате слияния версий
Этот список не исчерпывающий. Кандидат может углубиться в вопросы качества кода, стабильность работы сервера, обсуждение работы отдела тестирования.
Вопрос 2. Дайте хотя бы по одному варианту решения, предотвращающие такое развитие событий и возвращающее сайт в режим ежедневной публикации лучших новостей.
Возможные ответы:
2.1. Проверить логику вывода в ленту, путём логина, создания новости и голосования силами тестировщиков. Вариант — автоматическое тестирование, юнит тестирование и e2e тестирование.
2.2. Проверить наличие данных в БД силами сисадмина или программиста
2.3. Проверить аналитику — есть ли посетители. Привлечь посетителей — но это уже не разработчик.
2.4. Дать пользователям права модераторов для перекрёстной проверки статей (нельзя проверять свою, но можно проверять чужие)
2.5. Настроить автоматическое снятие метрик (место на диске, доступность базы данных, количество записей в очереди, дата самой свежей записи в ленте новостей) и рассылку алертов, чтобы быстрее замечать такие ситуации
Вопрос 3. Дайте реальный пример сервисов, где такая функциональность реализована.
Возможные ответы:
3.1. Хабрахабр
3.2. Медиум — там даже больше, потому что проект международный
3.3. Яндекс.Дзен отбирает сразу со многих ресурсов
3.4. На твитере есть трендовые записи
Вопрос 4. Расскажите как физически реализовать такую ленту на главной странице
Возможные ответы:
4.1. Таблица пользователей, таблица ролей (чтобы модератора отметить) или признак «модератор» у пользователя, таблица новостей, таблица голосов за статьи, возможно таблица самых популярных
4.2. Страница логина, страница публикации новости у пользователя, страница голосования за статьи у модератора, главная страница с виджетом популярных статей
4.3. Возможно кэширование списка самых популярных
Вопрос 5. Что может быть, если ежедневно будут публиковаться 100 000 пользовательских статей?
5.1. Модераторы не успеют голосовать за все статьи. Либо часть вообще пройдёт мимо модерации. Либо новые будут с большой задержкой появляться в ТОПе
5.2. Модераторы будут голосовать за совершенно разные статьи, в результате не будет значительного перевеса для выбора самых популярных статей
5.3. Нагрузка довольно высокая. Возможно потребуется больше места для хранения статей. Или значительная реорганизация (рефакторинг) системы хранения.
5.4. Скорость модерации может значительно упасть из-за неудачных условий поиска статей на модерацию
5.5. Скорость выбора популярных статей может значительно упасть из-за неудачной логики поиска популярных статей или неудачного алгоритма кэширования
Ещё один вариант я описывал в статье Примеры тестовых заданий на позиции Middle и Senior веб-разработчика
А перечень того, что встречается на реальных собеседования, регулярно публикуются на хабре и встречаются на тостере (пример, пример).
Иллюстрация: Banana phone