пятница, 25 марта 2022 г.

Техническое собеседование

Ехать никуда не понадобилось, но пришлось поставить WeMeeting от Huawei для online-собеседования.

Так уж получилось, что меня собеседовали компиляторщики, специалисты по C++. Вопросы по Java были достаточно примитивны, типа интернирование строк. Ещё надо было поведать про основную разницу C++ и Java - я вспомнил только про garbage collector. Не смог ответить, что такое полиморфизм и какие-то другие термины. То есть, я ООП понимаю и вовсю использую, но как называется каждый термин - забыл.

Про C++ я сразу сказал, что за стандартами не слежу и пишу всякое только в контексте нативных реализаций JDK. Меня спросили, как бы я реализовал выделение блока памяти с помощью malloc, чтобы для её освобождения не надо было бы передавать размер в метод free. Я навскидку придумал пару способов, самым примитивным из которых оказалось хранение информации о выделенном блоке непосредственно перед ссылкой. А мне говорят, что оно так и реализовано. Да неужели?

2 комментария:

  1. Ты не поверишь :)
    Очень часто, при выделении памяти, выделяют блок, размером запрошенный + выравнивание если применимо + sizeof(size_t). В начало блока памяти пишут его длину, и возвращают указатель на начало блока + sizeof(size_t).

    ОтветитьУдалить
    Ответы
    1. Я приблизительно так и предложил. Вот только про выравнивание не подумал.

      Удалить