Вот я не понимаю!

Почему подавляющее большинство HR'ов или нанимающих менеджеров не звонит и не пишет проинтервьюированному кандидату об отказе, если он не подошел?!

Что это? Гипертрофированное чувство собственной важности, корона на мозг давит или просто разгильдяйство?

Это ведь так просто! Сделал шаблон вида: «Здравствуйте. <бла-бла-бла> К сожалению, Вы нам не подошли. <бла-бла-бла>. С уважением, я» и отправляешь его. Отправка занимает секунд 10, приблизительно. Зато, если что-то изменится вы сможете спокойно к этому человеку подъехать снова и он не расскажет своим друзьям, что в компании XXX работают одни YYY. А вдруг у него друзья — мегакрутые специалисты, которые вам край как нужны?

Добрее надо быть к людям и они к вам потянутся!

Работа с людьми, создание  и поддержание имиджа — это вообще кропотливая работа, состоящая из мелочей. И «сохранив» сегодня минуту, поправляя корону и не отправив человеку вежливый отказ, никогда не знаешь чем такая «экономия» аукнется завтра.

Hibernate — достаточно популярный пакет для упрощения работы с базой данных. Упрощение достигается путем автоматизации мапинга объектов в базу данных. Таким образом программисту не надо писать SQL запросы, а можно напрямую сохранять и загружать экземпляры классов.

Но, как обычно, в каждой бочке  мёда найдётся своя ложка дёгтя. Суть одной из проблем в том, как хранятся и представляются связи между объектами.

Задача

Есть две таблицы — People и Events. Между ними установлена связь «Многие ко многим», т.е. один человек может пойти на много событий и на одно событие пойдет много людей.

В Java, с использованием Hibernate, это будет реализовано следующим образом:

public class Man {
    private String name;
    private Vector events;
}
public class Event {
    private String name;
    private Vector people;
}

Вопросы

  1. Где проблема?
  2. Как бороться?
  3. Для всех ли случаев поможет lazy loading?

Ожидаемые ответы

  1. Проблема в том, что Hibernate будет загружать объект Man (или Event) целиком, включая все события, на которые пойдет человек. События, в свою очередь будут загружать людей, которые будут в них учавствовать. Таким образом, захотев посмотреть имя одного человека, мы имеем шанс загрузить все содержимое базы данных, с соответствующим влиянием на производительность приложения и сервера, объём памяти и загрузку каналов передачи.
  2. Правильный ответ на этот вопрос имеется в третьем вопросе и называется lazy loading. Включение этой опции позволяет загружать связи лишь при первом к ним обращении.
  3. К сожалению, даже lazy loading не решает проблему загрузки ненужных данных до конца. Например, мы хотим добавить одно новое событие к человеку и все остальные события, куда он собирается, нам безразличны. Но в момент добавления события мы обращаемся к вектору, т.е. тут же будут загружены все события. С этой бедой уже так просто не поборешься 🙁

Что проверяем

Проверяем задумывается ли человек к чему ведут его действия на более низком уровне. И как у него это получается.

В последнее время, на собеседованиях с новыми кандидатами, мне нравится использовать задачку про генератор кода. Подсмотрел я эту задачку на сайте Яндекса.

Задача

Существует генератор кода на разных языках, реализованный следующим образом:

public class Generator {
    private final int language;

    // Language constants
    public static final int JAVA = 1;
    public static final int C = 2;
    public static final int CPP = 3;

    public Generator(int language) {
        this.language = language;
    }

    public void generateIF() {
        switch (language) {
        case JAVA:<Код, генерирующий Java>
            break;
        case C:<Код, генерирующий C>
            break;
        case CPP:<Код, генерирующий C++>
            break;
        }
    public void generateFOR() {
        switch (language) {
        case JAVA:<Код, генерирующий Java>
            break;
        case C:<Код, генерирующий C>
            break;
        case CPP:<Код, генерирующий C++>
            break;
        }
    }<И так далее>
}

Вопросы

  1. Что не нравится в коде и почему?
  2. Как изменить?

Ожидаемые ответы

  1. Должна не нравиться повторяемость кусков кода и их влияние на производительность. А так же, трудности с расширением подобной реализации на новые языки.
  2. Необходимо выделить общего предка или интерфейс, который будет определять список методов, для генератора каждого языка. Затем для каждого языка реализовать отдельный класс.

Что проверяем

Проверяем умение кандидата работать с ООП и способность видеть несовершенство чужого кода.

Один из самых простых и самых действенных способов мотивировать своего сотрудника — похвала. Как бы банально это не звучало!

Похвала удобна со всех сторон. Она позволяет почувствовать сотруднику, что его работу видят и ценят. А что может быть приятнее признания твоих заслуг?! Остальные сотрудники тоже видят, что добрые дела не остаются незамеченными и начинают думать, если не думали до того, не сделать ли и им что-нибудь полезное. Кроме того это способ поднять авторитет, улучшить отношения в команде и прочее, и прочее.

И это практически ничего не стоит 🙂

Похвалить человека можно кучей способов. Можно зайти и похвалить или отметить достижения на собрании группы. Можно написать письмо, с копией на группу и, по ситуации, вышестоящему начальству. В зависимости от политик компании и важности события, можно выдать какую-нибудь грамоту, вымпел, подарок от компании или премию.  Проявите фантазию.

Наиболее частыми, конечно, будут устная похвала и письмо. Их можно применять для похвалы за достижения от самых мелких, до самых крупных.

Есть еще один момент в письменной похвале, который часто упускают из вида: документирование успехов членов команды. Потом, когда придет время оценки или увеличения зарплат, этот архив будет удобно поднять и посмотреть, а не пытаться вспомнить что, кто и когда сделал. Так что и для себя пользу можно извлечь.

И не стесняйтесь хвалить даже за самые мелочи!