_>> 3. Фактически, на каждый из вопросов нас устраивает любой ответ, который в каком-нибудь плане лучше предложенных фрагментов кода, и при этом не создаёт больше проблем, чем решает. M> Очень многие такие тесты на собеседовании и этот в том числе имеют серьезный недостаток: они даны вне контекста и испытуемому на самом деле предлагается усовершенствовать "сферический код в M> вакууме." Я бы такой код без дополнительных условий вообще переписывать не стал бы Работает — и хорошо.
Представьте, что вышеуказанные фрагменты кода достались Вам в наследство от программиста, уволенного за профнепригодность, и у Вас есть немного времени на рефакторинг именно этих фрагментов.
M> Как можно говорить, что усовершенствованный код должен решать больше проблем, чем создает, если даже достоверно неясно какого рода проблемы имели место?
Наличие проблем — это часть вопроса. Исправляйте те проблемы, которые видите. Считайте, что Вы — последний человек, который стоит между этими фрагментами кода и реальной эксплуатацией в какой-нибудь life-critical system.
M> А то может первый код вообще хитрый хак чего-то или оптимизирован по быстродействию, а тут уже на форуме напредлагали и boost и смартпоинтеры, которые там возможно уместны как седло у коровы. M> По второму коду можно сказать, что вообще-то есть библиотечные функции для разбора опций командной строки getopt для Unix или более универсально boost::program_options, а может этого не нужно M> совсем и тут важно, что внещний результат работы программы может быть одинаковым в случае отсутствия опций и в случае неотображаемого символа в аргументах.
Ради бога. Если Вы считаете, что от использования буста, смартпоинтеров, getopt или чёрта в ступе программа в чём-то выиграет, то пожалуйста, используйте их. Только напишите, в чём программа, по Вашему мнению, выиграла.
M>В общем, как я уже написал, на практике без дополнительных не видно смысла что-то с этим делать, тест, строго говоря, некорректный.
А представьте, каково нам. Мы решаем задачу, для которой математически строго доказана невозможность корректного решения: определяем, является ли файл вирусом. Ничего, как-то справляемся.
Здравствуйте, sergey_cheban, Вы писали:
M>>В общем, как я уже написал, на практике без дополнительных не видно смысла что-то с этим делать, тест, строго говоря, некорректный. _>А представьте, каково нам. Мы решаем задачу, для которой математически строго доказана невозможность корректного решения: определяем, является ли файл вирусом. Ничего, как-то справляемся.
Втом то и дело, что "както". Т.е. коекак, с довольно фиговым результатом. Качество современных антивирусов оставляет желать лучшего.
Здравствуйте, alexander_st, Вы писали:
S>>Нет, для того, чтобы показать что этот буфер изменять не надо. _>из каких соображений? что будет если его изменить?.... точнее чем изменение буфера хуже его удаления?
Тем что его уже может не существовать в момент изменения, что может повлеч расстрел памяти с продолжением работы. А вот освобождение не выделенной памяти с высокой вероятностью бужет пресечено сразу же.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
SaZ>Признаю, что возможно немного погорячился с оценкой. Цепляться в этом случае или нет, так сказать, человеко-зависимо. Мои преподаватели бы зацепились (на собеседовании, а на экзамене — тем более).
Это очень от целей собеседования/экзамена зависит...
Но, в любом случае, в ответе всякую ересь можно был бы и не писать...
Кстати, проблема может быть и в том, что вообще используется функция fprintf, а не std::cout, например
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
V>Странно, что вы не понимаете, что ошибочно отвергнутый на самом деле обходится в сотни тысяч рублей убытка.
*недополученной прибыли
Несколько разные вещи.
Здравствуйте, sergey_cheban, Вы писали:
_>Приветствую героев, дочитавших эту тему до шестнадцатой страницы.
Извините, что влезаю, но ваш тон сообщений и отношение к кандидатам очень сильно отталкивает. Чисто по-человечески, я бы даже как с коллегой не смог бы с вами работать, но, как я понимаю, вы еще и тимлид или что-то в таком роде — это еще хуже. Я, конечно, не знаю, что там у вас на рынке труда сиплюсплюсников, может их в свободной "продаже" как собак нерезанных(во что я очень плохо верю), но любой нормальный джавист(да и вообще любой из моих знакомых) при таком отношении к нему как к кандидату бежал бы как от огня(я уже не говорю про тестовое задание типа "хочу того, не скажу чего", но опять же, может для плюсов с их вагоном средств для прострела ноги это норма, я хз). Ну, разве что у вас зп в два раза выше рынка — некоторые бы повелись. Но я бы посоветовал вам все-таки спуститься с небес немного.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
M>C учетом предлагаемой зарплаты, других кандидатов вы наврятле увидите усебя на собеседовании
Хм. Как-то я пропустил, что это ДрВеб.
А вакансия забавная. Я слабо представляю, кто с указанным набором знаний пошел бы на такую зп вообще. Видимо, надеются, что кто-то пойдет работать "за громкое имя", ну так на это только студенты ведутся.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Бредовые тестовые вопросы составлены человеком, который не умеет собеседовать. В вопросе отсутствует какой либо смысл... что хотел узнать человек, не понятно...
Здравствуйте, Кодт, Вы писали:
К>Вот если бы функция была объявлена void g(char*,char*,size_t)throw() — это другое дело... Но она же не объявлена.
На VS throw() ни к чему не обязывает и ничего не гарантирует. Компилятор будет бросать варнинги о том, что это не реализовано, лечиться отключением через #pragma.
Здравствуйте, Vamp, Вы писали:
V>Где? В вызывающей функции он есть. Но я вообще-то не считаю, что bad_alloc надо перехватывать, за исключением редких стратегий типа — попросим 10 гиг, не получилось — тогда 5, опять не получилось, тогда 2 Кб. Как правило, программа просит столько памяти, сколько ей надо для работы
В Linux (и в винде вроде тоже) есть спекулятивное выделение памяти т.е. можно запросить и 10 гиг и получить добро от ОС, креш произойдёт потом когда приложение попробует заюзать полностью эти недоступные 10 гиг, oom killer прибъёт.
E__>Здравствуйте, Eugeny__, Вы писали:
E__>Здравствуйте, midl, Вы писали:
M>>C учетом предлагаемой зарплаты, других кандидатов вы наврятле увидите усебя на собеседовании
E__>Хм. Как-то я пропустил, что это ДрВеб.
E__>А вакансия забавная. Я слабо представляю, кто с указанным набором знаний пошел бы на такую зп вообще. Видимо, надеются, что кто-то пойдет работать "за громкое имя", ну так на это только студенты ведутся.
Ну вообще-то, да! Странная контора?? На моей памяти они уже лет 8 наверно ищут С++ программиста и регулярно несколько раз в месяц постят вакансию на разных сайтах??? Толи они ищут как ищут жену- одну и на всю жизнь, толи они набирают С++ программистов, пока не заполнят вагон, а как заполнят на этап их в Освенцим и потом берут новый вагон.
Здравствуйте, artkarma, Вы писали:
E__>>Хм. Как-то я пропустил, что это ДрВеб.
E__>>А вакансия забавная. Я слабо представляю, кто с указанным набором знаний пошел бы на такую зп вообще. Видимо, надеются, что кто-то пойдет работать "за громкое имя", ну так на это только студенты ведутся. A>Ну вообще-то, да! Странная контора?? На моей памяти они уже лет 8 наверно ищут С++ программиста и регулярно несколько раз в месяц постят вакансию на разных сайтах??? Толи они ищут как ищут жену- одну и на всю жизнь, толи они набирают С++ программистов, пока не заполнят вагон, а как заполнят на этап их в Освенцим и потом берут новый вагон.
Ну, с такими требованиями и зарплатой они будут искать лохов еще долго, трудно, и под смех адекватных людей.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, любой, Вы писали:
Л>А меня в таком коде всегда прикалывает, почему два блока нельзя за раз выделить:
Л>char *a = new char[n*2]; Л>char *b = a + n; Л>g( a, b, n ); Л>delete [] a;
Не забывай про то, что этот код будет потом читаться\переделываться другими. Я бы "споткнулся" об это место при чтении, а читаю чужого кода я довольно много.
Поверьте, из 10 кандидатов, только 2-3 человека могут указать на все проблемы.
Порядка половины может указать на одну или две.
А вот предложить решение, это уже какой-то высший пилотаж...
П.С.
И этот код я скоммуниздил из реального(!) проекта. Естественно я его причесал и выкинул ненужное, но суть та же.
П.П.С.
А вот ЧСВ у многих товарищей соискателей просто зашкаливает. Вы на улицу давно выглядывали, с людьми
общались? или только в мониторы смотрите, да в теплых помещениях сидите?
1. Не инициализируется массив. Не критично, но не помешает.
2. Не контролируется размер передаваемых данных при копировании в массив.
3. Возвращается указатель на массив, который был создан в теле функции.
По хорошему нужно передавать в функцию два массива — источник и приемник. Проверять размерности. Использовать strncpy. м?
N>1. Не инициализируется массив. Не критично, но не помешает.
*зачем* его инициализировать?
чтоб подавить предупреждение о неинициализированной переменной?
или чтоб в 99.9% случаев баг с отсутствием нуля на конце строки спрятать?
N>>1. Не инициализируется массив. Не критично, но не помешает. A>*зачем* его инициализировать? A>чтоб подавить предупреждение о неинициализированной переменной? A>или чтоб в 99.9% случаев баг с отсутствием нуля на конце строки спрятать?