Re[3]: Тестовое задание C++ win
От: Stepkh  
Дата: 01.02.12 12:40
Оценка:
Здравствуйте, nazavrik, Вы писали:

N>Здравствуйте, Stepkh, Вы писали:


S>>С вопросом: что не нравится, какие есть проблемы и как бы вы решили:



N>Интереса для.


N>1. Не инициализируется массив. Не критично, но не помешает.

N>2. Не контролируется размер передаваемых данных при копировании в массив.
N>3. Возвращается указатель на массив, который был создан в теле функции.

N>По хорошему нужно передавать в функцию два массива — источник и приемник. Проверять размерности. Использовать strncpy. м?


Годится
Re[2]: Тестовое задание C++ win
От: Abyx Россия  
Дата: 01.02.12 12:50
Оценка:
Здравствуйте, Stepkh, Вы писали:

S>Здравствуйте, amberovsky, Вы писали:


A>>Здравствуйте.

A>>При попытке устроится в одну фирму прислали "удалённое" тестовое задание.



S>Да абсолютно нормальное задание. Конечно лучше подобное давать тет-а-тет, а не удаленно. Но...


S>Вот есть мой тестовый кусок кода, который даю кандидатам.

S>С вопросом: что не нравится, какие есть проблемы и как бы вы решили:


S>
S>char  * foo (char* c)
S>{
S>    char tmp [80];
S>    strcpy (tmp, c);
S>    return tmp;
S>}
S>



S>Поверьте, из 10 кандидатов, только 2-3 человека могут указать на все проблемы.

S>Порядка половины может указать на одну или две.

есть подозрение, что половина этих "проблем" — надуманные проблемы.

у этого кода только одна проблема — он не компилируется. (при включенных предупреждениях компилятора которые трактуются как ошибки)
при попытке ее решить возникает другая проблема — это код на Си.

дальше можно только добавить, что в моем компиляторе strcpy перегружен шаблоном функции и с размером "tmp" никакой проблемы нет, как Вы возможно считаете.
также "с" мог бы иметь тип "const char*, но это не проблема этого кода, может так было сделано специально,
а 80 такое же магическое число, как и осмысленные имена "foo" и "c"
In Zen We Trust
Re[3]: Тестовое задание C++ win
От: Stepkh  
Дата: 01.02.12 13:18
Оценка:
Здравствуйте, Abyx, Вы писали:


A>есть подозрение, что половина этих "проблем" — надуманные проблемы.


A>у этого кода только одна проблема — он не компилируется. (при включенных предупреждениях компилятора которые трактуются как ошибки)

A>при попытке ее решить возникает другая проблема — это код на Си.

A>дальше можно только добавить, что в моем компиляторе strcpy перегружен шаблоном функции и с размером "tmp" никакой проблемы нет, как Вы возможно считаете.

A>также "с" мог бы иметь тип "const char*, но это не проблема этого кода, может так было сделано специально,
A>а 80 такое же магическое число, как и осмысленные имена "foo" и "c"

Вы наверно невнимательно читали исходный пост — этот код был взят из реального(!) проекта.
И жил там полтора года, пока не пришлось брать в руки большой напильник и чинить, чинить.
По поводу не компилируется: всё зависит от вашего компилятора. Никто не помешает вам, как истинному джедаю,
отключить все предупреждения для конкретного файла. (И ведь делают так!!!) А потом приходится лезть в makefile
и материться и материться.

Вот, например, gcc 2.7 даже не муркнет на этот код. Да, древний компилятор, но.. не мы устанавливаем правила.
А вот gcc постарше кинет предупреждение:

main.cpp: In function ‘char* foo(char*)’:
main.cpp:6:9: warning: address of local variable ‘tmp’ returned [enabled by default]

И что? да ничего — соберется все за милую душу.

А что будет мешать нам собираться — то удалим (-Werror нам мешает)

Тут уже больше относится к дисциплине, но, ведь человек должен понимать что он делает?

Или был такой реальный кусок кода:



 char* foo (...)
 {
      static char* tmp;
      tmp = malloc(...)
      return tmp;
 }

 void big_fun ()
 {
      for (i =0; i < size; i++)
      {
          char* ptr = foo (...)    
      }

 }


и без единого free()...


А почему там static появился? ААА... вот именно потому чтобы обойти сей варнинг от компилятора.
(Это добавило мне пару седых волос)

Так что это не надуманные проблемы — это суровый быт.

Увы.
Re[2]: Тестовое задание C++ win
От: minorlogic Украина  
Дата: 01.02.12 13:59
Оценка:
я бы сказал что задание более бредовое чем в изначальном посте.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: Тестовое задание C++ win
От: minorlogic Украина  
Дата: 01.02.12 14:06
Оценка:
я пару раз давал такое задание , и встречал полное непонимание.

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

currentTime.h

int getCurrentTime();


Вопрос , какие вы видите проблемы и как бы вы смогли улучшить этот код?
"
-----

Интересно что скажет уважаемый All на это задание ?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[3]: Тестовое задание C++ win
От: Stepkh  
Дата: 01.02.12 14:20
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>я бы сказал что задание более бредовое чем в изначальном посте.


Да ну?

inet_ntoa() ничего не говорит? вернее её специфические особенности?

А ведь она практически полная копия вышеупомянутого задания... Ну за исключением входного параметра

И я прошу , данные задания не направлены на то чтобы "зачморить" соискателя или показать "крутость" собеседующего.

Можно сделать такое тестовое задание, что без знания линейной алгербы и не решить.

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

А заодно и посмотреть как человек реагирует на подобные ляпы и казусы.
Re[4]: Тестовое задание C++ win
От: nazavrik Россия  
Дата: 01.02.12 14:36
Оценка:
Здравствуйте, Abyx, Вы писали:

A>*зачем* его инициализировать?

A>чтоб подавить предупреждение о неинициализированной переменной?
A>или чтоб в 99.9% случаев баг с отсутствием нуля на конце строки спрятать?

Ну это как в анекдоте. У Маши было 8 яблок. 2 яблока она отдала Пете. Вопрос: сколько яблок у Пети?
Re[2]: Тестовое задание C++ win
От: landerhigh Пират  
Дата: 02.02.12 00:28
Оценка:
Здравствуйте, Stepkh, Вы писали:

S>С вопросом: что не нравится, какие есть проблемы и как бы вы решили:



S>
S>char  * foo (char* c)
S>{
S>    char tmp [80];
S>    strcpy (tmp, c);
S>    return tmp;
S>}
S>



S>Поверьте, из 10 кандидатов, только 2-3 человека могут указать на все проблемы.

S>Порядка половины может указать на одну или две.

Проблем в этом коде всего две.
1. Это не C++
2. Смысла в этом коде нет.

Ввиду пунка 2 искать дальнейшие проблемы и спорить до усера о необходимости инициализации tmp и допустимости возврата указателя на локальную переменную совершенно бессмысленно, этот код подлежит отправке "на помоечку".
Re[4]: Тестовое задание C++ win
От: qqqqq  
Дата: 02.02.12 01:57
Оценка:
Tы знаешь, твои задачки трудны не тем, что они какие-то шибко закавыристые, а тем, что непонятно зачем вообше все это надо. Все таки должна быть хоть какая то логика пусть даже и в тестовых задачах. Подозреваю, что многие из опрошенных были в ступоре от функции, которая возвращает ту же самую информацию, что была в нее подана как аргумент, да еще предварительно покопировав ее в локальную строку. Собеседование — это тот еще стресс. Ты бы хотя бы функции и пременные назвал так, чтобы человек с без телепатических способностей мог догадаться, что твоя функция фууу должна была делать. Короче, правильный ответ на вопрос что не нравится — "Да, все", а как исправить — "А что надо-то?".
По поводу этой фуу с маллоком, тоже неясно, зачем она вообще и как ты хочешь ее улучшить. Что в ней плохого? То, что она без единого free? Так может она и есть аллокатор, и удалять не ее забота. Или ты намекаешь что функция большое_веселье должна была удалять, так опять не понятно зачем ей столько буферов в цикле если можно было бы одним обойтись, причем не обязательно динамическим. Да и статик/нестатик — как это влияет: разве функция не возвращает адрес из маллока? Ты что убрал статик — и сразу все починилось?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.