я проходил собеседование как С++ программист, были вопросы по моим текущим задачам и прошлым проектам, несколько задач, по которым потом нужно было определить их сложность.
вопросы и задачи были не сложными, но мой низкий уровень английского по своему доставлял проблем.
как я понял собеседование я прошел успешно, но в ходе дальнейшего общения, оказалось что они ищут не С++ программиста, а просто человека который хорошо знает С++
вот цитата из письма: I’d say it as, We don’t need developers to code in C++. We’d love to have developers who are fantastic coders in C++ but we don’t need anyone to code in C++ on a daily basis. Engineers don’t really identify themselves by language nearly as much in the U.S. so I guess I’m in the habit of thinking like that.
меня такое положение дел немного не устроило, и я отказался от собеседования в Москве, пожелав всем удачи.
> Сложность в этом случае равна O(n), где n — длина входной строки. Это очень важно, чтобы вы во время интервью упомянули о сложности и смогли реально/правильно вычислять сложность некоторого алгоритма.
вы не учли что в вашем алгоритме используется вектор, который выделяет память из кучи, и это может менять сложность в зависимости от состояния кучи.
на небольшом размере строки, выделение памяти может быть тяжелее работы самой функции, и ваше O(N) с длинной строкой не всегда будет больше O(N) с короткой, так как сложность выделения неизвестна и зависит от величин, которые вы учесть и контролировать не можете
обычно если заранее известно сколько памяти нужно, то она выделяется на стеке, эта операция имеет сложность О(1) и даже с учетом обнуления будет быстрее чем выделение памяти из кучи
если количество памяти неизвестно, то всегда нужно упоминать ее расход в определении сложности алгоритма
перемещение некоторых объектов заменяется фогурами. допустим пуля вполне может быть заменена отрезком, в универсальном случае заменяем ориентированным боундинг боксом или цилиндром, который включает в себя начальное и конечное положение объекта. определяются пары объектов которые могли взаимодействовать и время возможного взаимодействия, находим минимальное — это первый шаг симуляции. дальше перерасчитываем скорости провзаимодействовавших объектов и повторяем с момента получения бокса или цилиндра движения. и так до тех пор пока не получим конечную точку симуляции.
но так редко делают в играх для всех объектов, так как миры довольно разрежены и объекты сталкиваются реже чем раз за тик, но попадание пуль/ракет определяется таким образом ибо двигаются они слишком быстро.
концепты и модули жалко.
все остальное не нужно.
С++ не тот язык где место детишкам привыкшим к GC и подобному сахару которого полно в том же шарпе. какой смысл делать еще один шарп?
в зависимости от платформы подключаете нужный cpp файл, либо прямо в файлах ставите проверку платформы и подключаете все
завернуть в неймспейсы по вкусу
да и для таких случаев существует статическая типизация.
фабрика это усложнение на ровном месте, наверное еще и синглтон используете — в общем 2 паттерна там где они не нужны.
при этом пузырек — это кеш фриенди алгоритм, уверен что есть набор данных на котором он порвет все остальное.
пузырек не использует дополнительную память, выполняя все действия inplace в отличии от qsort который на определенных наборах может портебовать O(N) памяти на рекурсию, что опять таки при определенных данных может быть в разы больше чем сортируемый массив
Самое интересное что сейчас С++ покрыват почти все (WP7 пока нет, но надеюсь они одумаются) платформы, но большинство разработчиков все равно пишут под каждую платформу на ее родном языке… неужели не влом по несколько раз все переписывать?
так бы и сказали, что не сталкиваетесь с задачами которые требуют производительности…
на ГД.ру была тема где человек перешел от сета, к сортировке вектора и снизил время кадра с 40 до 6 мс, что согласитесь заметно, даже без секундомера…
вопросы и задачи были не сложными, но мой низкий уровень английского по своему доставлял проблем.
как я понял собеседование я прошел успешно, но в ходе дальнейшего общения, оказалось что они ищут не С++ программиста, а просто человека который хорошо знает С++
вот цитата из письма:
I’d say it as, We don’t need developers to code in C++. We’d love to have developers who are fantastic coders in C++ but we don’t need anyone to code in C++ on a daily basis. Engineers don’t really identify themselves by language nearly as much in the U.S. so I guess I’m in the habit of thinking like that.
меня такое положение дел немного не устроило, и я отказался от собеседования в Москве, пожелав всем удачи.
вы не учли что в вашем алгоритме используется вектор, который выделяет память из кучи, и это может менять сложность в зависимости от состояния кучи.
на небольшом размере строки, выделение памяти может быть тяжелее работы самой функции, и ваше O(N) с длинной строкой не всегда будет больше O(N) с короткой, так как сложность выделения неизвестна и зависит от величин, которые вы учесть и контролировать не можете
обычно если заранее известно сколько памяти нужно, то она выделяется на стеке, эта операция имеет сложность О(1) и даже с учетом обнуления будет быстрее чем выделение памяти из кучи
если количество памяти неизвестно, то всегда нужно упоминать ее расход в определении сложности алгоритма
но так редко делают в играх для всех объектов, так как миры довольно разрежены и объекты сталкиваются реже чем раз за тик, но попадание пуль/ракет определяется таким образом ибо двигаются они слишком быстро.
en.wikipedia.org/wiki/SOLID_(object-oriented_design)
typedef nE_Texture nE_Texture_iOS;
поэтому пример еще более неудачный
есть разные реализации с разным профитом, где-то лучше одна, где-то другая.
все остальное не нужно.
С++ не тот язык где место детишкам привыкшим к GC и подобному сахару которого полно в том же шарпе. какой смысл делать еще один шарп?
смотрите
file.h
File open(FileName name);
void close(File file)
file_win32.cpp
File open(FileName name)
{
CreateFile(… );
}
void close(File file)
{
…
}
file_mac.cpp
File open(FileName name)
{
NS_…
}
void close( File file)
{
…
}
в зависимости от платформы подключаете нужный cpp файл, либо прямо в файлах ставите проверку платформы и подключаете все
завернуть в неймспейсы по вкусу
да и для таких случаев существует статическая типизация.
фабрика это усложнение на ровном месте, наверное еще и синглтон используете — в общем 2 паттерна там где они не нужны.
пузырек не использует дополнительную память, выполняя все действия inplace в отличии от qsort который на определенных наборах может портебовать O(N) памяти на рекурсию, что опять таки при определенных данных может быть в разы больше чем сортируемый массив
вот разгон пузырька, основанный на свойстве его дружелюбности к кешу
blog.gamedeff.com/?p=268
на ГД.ру была тема где человек перешел от сета, к сортировке вектора и снизил время кадра с 40 до 6 мс, что согласитесь заметно, даже без секундомера…