суббота, 27 февраля 2010 г.

Рассылка емейлов

Эта задача предполагает написание работающего кода. Лучше всего давать как домашнее задание.

В компании - 1 миллион клиентов.
Ко дню рождения компании нужно разослать всем емейлы с персонализированным текстом. День рождения - через неделю.
Напишите программу на любом языке с использованием любого источника данных (хоть файл, хоть xml).

Сложность тут в том, что емейл серверы - довольно медленная штука. И если рассылать все письма по очереди, то процесс может занять в буквальном смысле месяцы.
У собеседника нужно поинтересоваться, работал ли он с рассылкой почты. Если нет, то рассказать о том, что написано выше.

Оценка работы и беседа по горячим следам:

  1. Посмотрите на реализацию многопоточной обработки. Если ее нет, то дальше можно не разговаривать.
  2. Каким образом приложение выбирает, какому потоку отсылать какое письмо. Если есть центральный диспетчер - решение не оптимально, попросить предложить другое решение.
  3. Есть ли возможность восстановить работу программы, если произошел сбой работы. Другими словами, можно ли понять, какие емейлы отправлены, а какие - нет. Если это не реализовано, то спросить, как сделать. Если нету, попросить придумать.
  4. Если нет юнит-тестов, попросить написать один-два самых критичных.
  5. Наверняка в коде будут места, где нужна синхронизация потоков. На примере этих мест порасспрашивать собеседника.

Преподаватели и лекции

Дано
Преподаватели ведут курсы в универе.
Один преподаватель может вести любое количество курсов.

Вопросы

  1. Как называется такое вид отношения между сущностями
  2. Нарисовать схему БД. (SQL, диаграмма, что угодно)
  3. Написать запрос, выдающий список преподавателей, которые не ведут никаких курсов
  4. Написать запрос, выдающий количество преподавателей, ведущих курсы.
С вопросом №3 справляется процентов 20 собеседников. Только третья часть из них делает это без использования подзапросов.

Обычно я стараюсь встроить в этот вопрос немного юмора. Если интервью проводим вдвоем, то мы с партнером разыгрываем мини-сценку, где он - декана факультета, который хочет найти ленивых преподов, отлынивающих от обязанностей. ;)

Вопросы, которые задаю в процессе обсуждения
  1. Быстро ли отрабатывает подзапрос?
  2. Что такое JOIN? Какие бывают?
Забавные ответы
Человек решил задачку №3 с подзапросом. На вопрос: "Как повысить быстродействие?" предложил создать в базе кеширующую таблицу, в которой будут храниться результаты подзапроса.

Начало

Сегодня меня попросили поделиться простеньким вопросом, который я задавал разработчикам на интервью.
Этот просьба сподвигла меня на создание онлайн хранилища вопросов, задаваемых программистам.
Основная масса людей, которых я интервьюирую - либо Java, либо PHP разработчики. С них и начнем.