ПоискПочтаКартыМаркетНовостиСловариБлогиВидеоКартинки
Войти

Разработчик C++

Если Вам нравится язык C++, Вы любите решать нетривиальные задачи, Вам интересна разработка интернет-сервисов и высоконагруженных приложений, возможно, эта вакансия для Вас.

Требования

  • опыт разработки на C++;

  • знание параллельного/многопоточного программирования;

  • знание классических алгоритмов и структур данных.

Условия

Вакансия открыта в Москве и в Санкт-Петербурге.

Подробнее об условиях работы в Яндексе

Продемонстрируйте свои знания

Вопрос 1

class Foo
{
public:
    Foo(int j) { i=new int[j]; }
    ~Foo() { delete i; }
private:
    int* i;
};

class Bar: Foo
{
public:
    Bar(int j) { i=new char[j]; }
    ~Bar() { delete i; }
private:
    char* i;
};


void main()
{
    Foo* f=new Foo(100);
    Foo* b=new Bar(200);
    *f=*b;
    delete f;
    delete b;
}

Перечислите все проблемы, которые вы видите в данном коде:


Вопрос 2

Какие из следующих стандартных контейнеров позволяют найти в них элемент (по его значению) за O(ln(n))?

Аргументируйте ответ, прокомментируйте правильность постановки вопроса.

Вопрос 3

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


Вопрос 4

Мы разработали свой медиа-плеер. Работу со звуком он осуществляет при помощи специальной библиотеки FMOD. Ниже приводятся интерфейсы классов библиотеки FMOD и реализация нашего медиа-плеера на их основе. В дальнейшем планируется подключить к плееру альтернативные библиотеки работы со звуком (IPP, OpenAL и другие аналоги). Исходя из планов развития плеера предложите refactoring кода.

namespace FMOD
{
    class Sound
    {
        //Класс для хранения звукового потока
        public:
            //загрузить звук из файла
            Sound(const std::string& filename);
 
            //скорость потока
            double bitrate() const;
 
            //полезные методы
            ...
    };
 
    class SoundCard
    {
        //Класс для работы со звуковой картой
        public:
            //полезные методы
            ...
            //воспроизвести звуковой поток через звуковую карту
            void Play(FMOD::Sound* sound);
    };
} //end of namespace FMOD
 
class MediaPlayer
{
    //Наш медиа-плеер
public:
    MediaPlayer()
    {
        soundCard = new FMOD::SoundCard(параметры инициализации);
        //Инициализируем остальные ресурсы
        ...
    }
 
    ~MediaPlayer()
    {
        for (std::list<FMOD::Sound*>::iterator it = playlist.begin(); it != playlist.end(); ++it)
            delete *it;
        delete soundCard;
        //Освобождаем остальные ресурсы
        ...
    }
 
    //Загрузка нового звуковой файл в плейер
    void Open(const std::string& filename)
    {
        playlist.push_back(new FMOD::Sound(filename));
    }
 
    //Воспроизведение звука
    void Play(const FMOD::Sound* sound)
    {
        soundCard->Play(sound);
    }
 
    //Другие полезные методы
    ...
 
private:
    FMOD::SoundCard* soundCard;
    std::list<FMOD::Sound*> playlist;
};

Аргументируйте преимущество вашего подхода.

Ваш комментарий

Расскажите нам о себе

Резюме до 250 КБ
Ссылка на профиль в Моем Круге
Имя, Фамилия
Телефон

Пожалуйста, укажите код города

E-mail
Дополнительные сведения
если Вы узнали про эту вакансию от сотрудника Яндекса, пожалуйста, укажите его имя и фамилию