задачка на собеседовании
От: Mihon82  
Дата: 04.08.09 06:30
Оценка: :))) :))) :))
Всем привет!
Несколько дней назад ходил на собеседование и столкнулся с такой задачкой...

Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?

int sum = 0;
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
sum = sum + 1;
}
}


Понятия не имею как ее решить... даже не знаю с чего начать...

Помогите разобраться, плз!
Re: задачка на собеседовании
От: Ovl Россия  
Дата: 04.08.09 06:41
Оценка: 1 (1) +2
зависит от компилятора. может и 0, если он соптимизирует.
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re: задачка на собеседовании
От: bxt Россия indusov.net
Дата: 04.08.09 06:47
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Всем привет!

M>Несколько дней назад ходил на собеседование и столкнулся с такой задачкой...

M>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?


M>int sum = 0;

M>for(int i=0; i<2; i++) {
M> for(int j=0; j<3; j++) {
M> sum = sum + 1;
M> }
M>}

M>Понятия не имею как ее решить... даже не знаю с чего начать...

M>Помогите разобраться, плз!

Навскидку:
1 Гц означает одно исполнение такого процесса за одну секунду: 1 Гц = 1/с.
Если мы имеем 100 MГц, то это означает, что мы имеем 100*10^6 исполнений такого процесса за одну секунду.
Потом выясняется сколько тактов на сложение и присвоение * 6 (не помню и зависит от CPU). Дальше понятно, 100*10^6 за секунду, а X тактов за искомое время. Пропорция, ответ, апплодисменты
Re: задачка на собеседовании
От: Bobrik  
Дата: 04.08.09 06:48
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Всем привет!

M>Несколько дней назад ходил на собеседование и столкнулся с такой задачкой...

M>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?


M>int sum = 0;

M>for(int i=0; i<2; i++) {
M> for(int j=0; j<3; j++) {
M> sum = sum + 1;
M> }
M>}


M>Понятия не имею как ее решить... даже не знаю с чего начать...


M>Помогите разобраться, плз!


100 МГц — 20 млн. коротких операций в секунду.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Могу копать.
Могу не копать.
Могу лестницу сделать... только копать долго придется
Re: задачка на собеседовании
От: hydro  
Дата: 04.08.09 06:48
Оценка: +2
Здравствуйте, Mihon82, Вы писали:

M>Всем привет!

M>Несколько дней назад ходил на собеседование и столкнулся с такой задачкой...

M>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?


M>int sum = 0;

M>for(int i=0; i<2; i++) {
M> for(int j=0; j<3; j++) {
M> sum = sum + 1;
M> }
M>}


M>Понятия не имею как ее решить... даже не знаю с чего начать...


M>Помогите разобраться, плз


Я считаю, что эту задачу при таких исходных данных невозможно решить в принципе.
1. Не известен язык программирования. на котором написан код, следовательно мы не знаем, как он будет транслирован в машинные коды и будет ли он транслирован в них сразу вообще(java).
2. Я не специалист в железе, но по-моему у современных процессоров кроме тактовой частоты есть еще и характеристика количества операций в секунду, которая у разных процессоров соответственно разная. То есть не зная ее мы ничего вычислить не можем.

Задачу можно решить лишь добавив дополнительные условия, описанные выше.

Скорее всего вопрос был задан, чтобы:
1. Посмотреть как ты ее попытаешься решить. Как обычно, проверяют навыки решения проблем вместе с наличием логики и общей эрудиции.
2. Посмотреть, сможешь ли ты прямо сказать, что ее решить нельзя, то есть готов ли ты отстаивать свое мнение.
3. Какие доводы ты приведешь в пользу того, что задачу решить нельзя, то есть
Re: задачка на собеседовании
От: bxt Россия indusov.net
Дата: 04.08.09 06:48
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Всем привет!

M>Несколько дней назад ходил на собеседование и столкнулся с такой задачкой...

M>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?


M>int sum = 0;

M>for(int i=0; i<2; i++) {
M> for(int j=0; j<3; j++) {
M> sum = sum + 1;
M> }
M>}


M>Понятия не имею как ее решить... даже не знаю с чего начать...

M>Помогите разобраться, плз!

В догонку. Это примерно то что хотят услышать на собеседовании.
Re[2]: задачка на собеседовании
От: hydro  
Дата: 04.08.09 06:54
Оценка:
Здравствуйте, hydro, Вы писали:

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


M>>Всем привет!

M>>Несколько дней назад ходил на собеседование и столкнулся с такой задачкой...

M>>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?


M>>int sum = 0;

M>>for(int i=0; i<2; i++) {
M>> for(int j=0; j<3; j++) {
M>> sum = sum + 1;
M>> }
M>>}


M>>Понятия не имею как ее решить... даже не знаю с чего начать...


M>>Помогите разобраться, плз


H>Я считаю, что эту задачу при таких исходных данных невозможно решить в принципе.

H>1. Не известен язык программирования. на котором написан код, следовательно мы не знаем, как он будет транслирован в машинные коды и будет ли он транслирован в них сразу вообще(java).
H>2. Я не специалист в железе, но по-моему у современных процессоров кроме тактовой частоты есть еще и характеристика количества операций в секунду, которая у разных процессоров соответственно разная. То есть не зная ее мы ничего вычислить не можем.

H>Задачу можно решить лишь добавив дополнительные условия, описанные выше.


H>Скорее всего вопрос был задан, чтобы:

H>1. Посмотреть как ты ее попытаешься решить. Как обычно, проверяют навыки решения проблем вместе с наличием логики и общей эрудиции.
H>2. Посмотреть, сможешь ли ты прямо сказать, что ее решить нельзя, то есть готов ли ты отстаивать свое мнение.
H>3. Какие доводы ты приведешь в пользу того, что задачу решить нельзя, то есть

прошу прощения, не количество операций в секунду, а количество операций за такт
Re: задачка на собеседовании
От: Gradient http://www.x-trips.com/
Дата: 04.08.09 06:56
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Всем привет!

M>Несколько дней назад ходил на собеседование и столкнулся с такой задачкой...

M>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?


M>int sum = 0;

M>for(int i=0; i<2; i++) {
M> for(int j=0; j<3; j++) {
M> sum = sum + 1;
M> }
M>}


M>Понятия не имею как ее решить... даже не знаю с чего начать...


M>Помогите разобраться, плз!


Вариант 1) Для оценки берем модель сферического коня. а) при условии отсутствия оптимизации б) при условии что одна операция ++ выполняется за 1 такт (т.е 10^–8 с) считаем операции инкрементации для i, j, sum и умножаем на время такта.
Вариант 2) более практичный. Смотрим дизассемблированный код и конкретно понимаем как там и что компилятор соптимизировал, таким образом получаем оценку как для такой задачи, так и для группы задач где магические числа 2 и 3 могут варьироваться.
Вариант 3) тупо запускаем и засекаем
-----
Любимая фраза физика-теоретика: "Вот видите, мы ошиблись всего лишь на порядок".
Re: задачка на собеседовании
От: elmal  
Дата: 04.08.09 07:13
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Понятия не имею как ее решить... даже не знаю с чего начать...

На неизвестные условия берутся допущения, эти допущения указываются. Ответ дается с учетом нижней и верхней границы, в ответе могут фигурировать некоторые константы, которые берутся в допущении. Решается слету, не думая, максимум за 5 минут, критерий оценки — чтоб не было явной ахинеи. Если ответ такой устраивать не будет, радуемся, что не попали в контору, где собеседование проводят невменяемые люди, ничего хорошего там не жди.
А вообще, это задачка имеет смысл только для студентов вообще без опыта работы. Если ее дают всем подряд — еще одно подозрение на неадекватность.
Re[2]: задачка на собеседовании
От: frogkiller Россия  
Дата: 04.08.09 08:05
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>зависит от компилятора. может и 0, если он соптимизирует.


Я бы добавил, что зависит от настроек компилятора. В дебаге он, может, и не станет разворачивать циклы, но в релизе — наверняка развернёт. По крайней мере все основные: msvc, gcc, icc — так сделают, даже bcc — и то догадается
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: задачка на собеседовании
От: Bhmn  
Дата: 04.08.09 10:30
Оценка: +1 -3
Здравствуйте, Mihon82, Вы писали:

M>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?


M>int sum = 0;

M>for(int i=0; i<2; i++) {
M> for(int j=0; j<3; j++) {
M> sum = sum + 1;
M> }
M>}

Я бы принял такую задачку как тест на умение рассуждать и оценивать.
Ход мыслей примерно следующий.

Если что-то помните от институтского курса ассемблера, то код можно преобразовать к виду (сумма будет в ax):
xor ax, ax
xor ch, ch
lb1: xor cl, cl
lb2: inc ax
inc cl
cmp cl, 3
jne lb2
inc ch
cmp ch, 2
jne lb1

Тупо посчитаем инструкции:
xor 5, inc 27, cmp 15, jmp 15

Зададимся числом тактов на каждую инструкцию вашего абстрактного 100МГц-процессора (не сказали же, какой у вас процессор):
xor: 2, inc: 2, cmp: 5, jmp: 4

Суммируя, получаем ~200 тактов.
Поскольку на 100МГц один такт выполняется за 10^-8 секунд, то наши 200 тактов пролетят за 2 микросекунды — и это ответ.

После этого тема разговора может плавно перейти к поиску недочетов/ошибок в такой оценке, к оптимизации вручную, оптимизации компилятора, про современные процессоры и т.д. Мне кажется, смысл вопроса — узнать вашу эрудицию в этой области, а не получение конкретного ответа.
Re[2]: задачка на собеседовании
От: techgl  
Дата: 04.08.09 11:13
Оценка:
Здравствуйте, Bhmn, Вы писали:

B>После этого тема разговора может плавно перейти к поиску недочетов/ошибок в такой оценке, к оптимизации вручную, оптимизации компилятора, про современные процессоры и т.д. Мне кажется, смысл вопроса — узнать вашу эрудицию в этой области, а не получение конкретного ответа.

К чему тогда ассемблер? Во-первых, кто сказал что процессор арихитектуры x86? Зачем вы используете ассемблер, не зная хотя бы марки процессора? Чтобы показать "знания"?
Во-вторых, если так всем хочется считать такты, то хотя бы уточняйте наличие конвеера и как выглядит машинный код того, что непосредстенно пойдет на выполнение. Может там вообще цикла не будет, а будет константа, посчитанная в результате оптимизации?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: задачка на собеседовании
От: Mihon82  
Дата: 04.08.09 11:45
Оценка:
Здравствуйте, elmal, Вы писали:

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


M>>Понятия не имею как ее решить... даже не знаю с чего начать...

E>На неизвестные условия берутся допущения, эти допущения указываются. Ответ дается с учетом нижней и верхней границы, в ответе могут фигурировать некоторые константы, которые берутся в допущении. Решается слету, не думая, максимум за 5 минут, критерий оценки — чтоб не было явной ахинеи. Если ответ такой устраивать не будет, радуемся, что не попали в контору, где собеседование проводят невменяемые люди, ничего хорошего там не жди.
E>А вообще, это задачка имеет смысл только для студентов вообще без опыта работы. Если ее дают всем подряд — еще одно подозрение на неадекватность.

Самый прикол в том, что эта задача дается среди прочих во время тестирования... на нее предлжены 4 варианта ответа (все варианты числа без неизвестных), надо выбрать правильный... к сожалению, не помню эти варианты.
Re[3]: задачка на собеседовании
От: elmal  
Дата: 04.08.09 11:56
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Самый прикол в том, что эта задача дается среди прочих во время тестирования... на нее предлжены 4 варианта ответа (все варианты числа без неизвестных), надо выбрать правильный... к сожалению, не помню эти варианты.

Это явно показывает полную неадекватность собеседующих. Особенно если написал тест, и до свидания, если ответы совпали — говорим типа дальше. Я бы очень поостерегся с такими работать.
Re[3]: задачка на собеседовании
От: Bhmn  
Дата: 04.08.09 11:57
Оценка:
T>К чему тогда ассемблер? Во-первых, кто сказал что процессор арихитектуры x86? Зачем вы используете ассемблер, не зная хотя бы марки процессора? Чтобы показать "знания"?
T>Во-вторых, если так всем хочется считать такты, то хотя бы уточняйте наличие конвеера и как выглядит машинный код того, что непосредстенно пойдет на выполнение. Может там вообще цикла не будет, а будет константа, посчитанная в результате оптимизации?

Ну, если после предоставления варианта решения собеседник на меня накинется с такими вопросами, то можно и пободаться

А так — вопрос отпал.
Задача в тестах была, с готовыми вариантами.

Можно отвечать на удачу — это ж тесты!
Re[3]: задачка на собеседовании
От: Mr.Cat  
Дата: 04.08.09 12:00
Оценка:
Здравствуйте, Mihon82, Вы писали:
M>Самый прикол в том, что эта задача дается среди прочих во время тестирования... на нее предлжены 4 варианта ответа (все варианты числа без неизвестных), надо выбрать правильный... к сожалению, не помню эти варианты.
Ну тогда самый надежный вариант — это 0.
Re[2]: задачка на собеседовании
От: catBasilio  
Дата: 04.08.09 12:19
Оценка:
Здравствуйте, bxt, Вы писали:

bxt>Навскидку:

bxt>1 Гц означает одно исполнение такого процесса за одну секунду: 1 Гц = 1/с.
bxt>Если мы имеем 100 MГц, то это означает, что мы имеем 100*10^6 исполнений такого процесса за одну секунду.
bxt>Потом выясняется сколько тактов на сложение и присвоение * 6 (не помню и зависит от CPU). Дальше понятно, 100*10^6 за секунду, а X тактов за искомое время. Пропорция, ответ, апплодисменты

1. разные команды имеют разное время выполнения
2. некоторые команды могут выполняться параллельно, поэтому иногда компилатор подбирает такие сочетания.
3. компилятор может сгенерить абсолютно любой ассембленый код. С члучае с оптимизацией я почти уверен, что он сообще весь результат заменит константой.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[3]: задачка на собеседовании
От: Nik_1 Россия  
Дата: 04.08.09 12:21
Оценка:
Здравствуйте, Mihon82, Вы писали:

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


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


M>>>Понятия не имею как ее решить... даже не знаю с чего начать...

E>>На неизвестные условия берутся допущения, эти допущения указываются. Ответ дается с учетом нижней и верхней границы, в ответе могут фигурировать некоторые константы, которые берутся в допущении. Решается слету, не думая, максимум за 5 минут, критерий оценки — чтоб не было явной ахинеи. Если ответ такой устраивать не будет, радуемся, что не попали в контору, где собеседование проводят невменяемые люди, ничего хорошего там не жди.
E>>А вообще, это задачка имеет смысл только для студентов вообще без опыта работы. Если ее дают всем подряд — еще одно подозрение на неадекватность.

M>Самый прикол в том, что эта задача дается среди прочих во время тестирования... на нее предлжены 4 варианта ответа (все варианты числа без неизвестных), надо выбрать правильный... к сожалению, не помню эти варианты.


Ну тогда если вас туда не взяли — вам очень повезло. Сбережоте кучу своего времени и нервов.
Re[3]: задачка на собеседовании
От: Nik_1 Россия  
Дата: 04.08.09 12:23
Оценка:
Кстати, имя конторы в студию
Re: задачка на собеседовании
От: tonykent  
Дата: 04.08.09 12:31
Оценка:
M>Помогите разобраться, плз!
Надо просто вразуметельно показать знание multithreading/multitasking, основ ассемблера, строения процессора. Плюс оптимизации компилятора итд итп. Ну разве важны здесь реальные ответы — типа 15 мс?
Плюс ты должен показать, что можешь думать.
Re[2]: задачка на собеседовании
От: Vzhyk  
Дата: 04.08.09 14:31
Оценка:
bxt пишет:
>
> 1 Гц означает одно исполнение такого процесса за одну секунду: 1 Гц = 1/с.
> Если мы имеем 100 MГц, то это означает, что мы имеем 100*10^6 исполнений
> такого процесса за одну секунду.
> Потом выясняется сколько тактов на сложение и присвоение * 6 (не помню и
> зависит от CPU). Дальше понятно, 100*10^6 за секунду, а X тактов за
> искомое время. Пропорция, ответ, апплодисменты
Вы свободны. В смысле проходите мимо.

Правда и такого тупого вопроса я тоже бы не задал.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: задачка на собеседовании
От: alzt  
Дата: 04.08.09 14:39
Оценка:
Здравствуйте, tonykent, Вы писали:

M>>Помогите разобраться, плз!

T>Надо просто вразуметельно показать знание multithreading/multitasking, основ ассемблера, строения процессора. Плюс оптимизации компилятора итд итп. Ну разве важны здесь реальные ответы — типа 15 мс?
T>Плюс ты должен показать, что можешь думать.

Раз были варианты ответов, то показывать не требовалось.
Скорее всего какого-то разработчика заставили выдавить из себя тест с 20 вопросами.
Он как мог — так и изощрился, чтобы и вопросы оригинальные были, и что-то проверяли, как ему кажется.
Не умеет человек составлять вопросы, всё-таки ему платят за программирование, а не придумывание тестов.
Тут вся надежда на разбор полётов после теста, там можно будет и эрудицию показать и ум продемонстрировать. Да и просто узнать как они дошли до жизни такой.
Re[3]: задачка на собеседовании
От: bxt Россия indusov.net
Дата: 04.08.09 14:55
Оценка:
Здравствуйте, Vzhyk, Вы писали:

V>bxt пишет:

>>
>> 1 Гц означает одно исполнение такого процесса за одну секунду: 1 Гц = 1/с.
>> Если мы имеем 100 MГц, то это означает, что мы имеем 100*10^6 исполнений
>> такого процесса за одну секунду.
>> Потом выясняется сколько тактов на сложение и присвоение * 6 (не помню и
>> зависит от CPU). Дальше понятно, 100*10^6 за секунду, а X тактов за
>> искомое время. Пропорция, ответ, апплодисменты

V>Вы свободны. В смысле проходите мимо.

V>Правда и такого тупого вопроса я тоже бы не задал.
О том и речь
Re: задачка на собеседовании
От: zakima Канада  
Дата: 04.08.09 23:49
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Понятия не имею как ее решить... даже не знаю с чего начать...


Ответ: Запустить...
Re[4]: задачка на собеседовании
От: Mihon82  
Дата: 05.08.09 06:24
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Кстати, имя конторы в студию


Сорри, пока воздержусь от ответа...
Re: задачка на собеседовании
От: Denis Mingulov Финляндия http://denis.mingulov.com
Дата: 05.08.09 11:01
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>for(int i=0; i<2; i++) {

M> for(int j=0; j<3; j++) {

M>Понятия не имею как ее решить... даже не знаю с чего начать...

А вы уверены, что прочитали это правильно?

Это цитата или же вы по памяти писали?
Думаю, там внутренний цикл скорее всего был другой, где-нибудь i использовали.
Re[2]: задачка на собеседовании
От: swame  
Дата: 05.08.09 12:25
Оценка:
Здравствуйте, Denis Mingulov, Вы писали:

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


M>>for(int i=0; i<2; i++) {

M>> for(int j=0; j<3; j++) {

M>>Понятия не имею как ее решить... даже не знаю с чего начать...

DM>А вы уверены, что прочитали это правильно?

DM>Это цитата или же вы по памяти писали?

DM>Думаю, там внутренний цикл скорее всего был другой, где-нибудь i использовали.

Согласен, возможно в оригинале был, например, уход в бесконечный цикл.
Re: задачка на собеседовании
От: servancho Россия https://dedis.ru
Дата: 05.08.09 13:04
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Всем привет!

M>Несколько дней назад ходил на собеседование и столкнулся с такой задачкой...

Вы на какую должность балатировались?
Если руки золотые, не важно из какого места они растут.
Re[2]: задачка на собеседовании
От: _FRED_ Черногория
Дата: 06.08.09 05:16
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>зависит от компилятора. может и 0, если он соптимизирует.


А есть такие компиляторы, которые не смогли бы здесь соптимиздить©?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: задачка на собеседовании
От: Mihon82  
Дата: 06.08.09 05:33
Оценка:
Здравствуйте, Denis Mingulov, Вы писали:

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


M>>for(int i=0; i<2; i++) {

M>> for(int j=0; j<3; j++) {

M>>Понятия не имею как ее решить... даже не знаю с чего начать...

DM>А вы уверены, что прочитали это правильно?

DM>Это цитата или же вы по памяти писали?

DM>Думаю, там внутренний цикл скорее всего был другой, где-нибудь i использовали.


Писал по памяти... Возможно вы правы, но что изменится если цикл изменить на

int sum = 0;
for(int i=0; i<2; i++) {
for(;i<3;) {
sum = i++;
}
}

да, кстати, это Java.
Re[3]: задачка на собеседовании
От: Denis Mingulov Финляндия http://denis.mingulov.com
Дата: 06.08.09 05:52
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Писал по памяти... Возможно вы правы, но что изменится если цикл изменить на

Смотрите (хотя здесь уже писали это вообще-то, в соседнем ответе):
for(int i=0; i<2; i++) {
   for(int j=0; i<3; j++) {


for(int i=0; i<2; i++) {
   for(int j=0; j<3; i++) {


M>да, кстати, это Java.

предполагаю, что вы все-таки без компилятора задания выполняли
Re[3]: задачка на собеседовании
От: Ovl Россия  
Дата: 06.08.09 06:47
Оценка:
_FR>А есть такие компиляторы, которые не смогли бы здесь соптимиздить©?

есть наверное. к тому же , как правильно заметили — может зависеть от опций компилятора
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[3]: задачка на собеседовании
От: eaa Украина  
Дата: 06.08.09 06:48
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>А есть такие компиляторы, которые не смогли бы здесь соптимиздить©?

Конечно, есть куча всяких однокристалок и пр. где компиляторы С весьма кустарны.
Re[3]: задачка на собеседовании
От: fmiracle  
Дата: 06.08.09 07:28
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Писал по памяти... Возможно вы правы, но что изменится если цикл изменить на


Как что? Будет бесконечный цикл.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re: задачка на собеседовании
От: мыщъх США http://nezumi-lab.org
Дата: 06.08.09 16:42
Оценка:
Здравствуйте, Mihon82, Вы писали:

M> Сколько времени займет выполнение следующего кода на машине 100Мгц,

M> если предположить, что других задач в это время выполнятся не будет?
очередная задача на тему: угадать, что от нас хотят и что имел ввиду, тот кто ее составлял. кстати, если уж на то пошло, то загрузка данной программы из оперативной памяти в кэш займет больше времени, чем ее выполнение на всех архитектурах, где фигурирует цифра в 100МГЦ. а если предположить, что программа уже загружена в кэш, переходы предсказаны, переменные в регистрах, а не в памяти и компилятор оттранслировал ее без нормализации и совмещения циклов, ну это уж слишком.

но бывает вообще клиника. как вам нравится следующая задачка: что неправильного в этом коде?

foo(char *p1, char *p2)
{
while(*p1) if (*p1 == *p2) *p1 = 0; else p1++;
}

у меня были следующие варианты в порядке их появления в голове:

1) тормоз по p2, надо класть в локальную переменную, иначе компилер не поместит ее в регистр, хотя хз — может так и задумано?!

2) нету проверки на нуль-поитнеры. а они нужны?

3) нету return. а тип функии у нас не void;

4) а чего strchr() не используем?

5) ...

а теперь — внимание — правильный ответ.
ошибка в логике. функция режет строку по первому совпадению символа, игнорируя остальные.

я робко попытался чего-то возразить, но как-то не особенно успешно. "экзаменаторы" стояли на своем. даже притащили какой-то "авторитетный" сборник задач по информатике откуда они эту задачу и позаимствовали, опустив условие, в котором говорилось, что данная функция используется для отсечения расширения у имени файла.

теперь-то все встало на свои места. понятное дело, что расширение надо отсекать с конца, т.к. точек может быть больше одной. и как интересно я должен был угадать условие?

кстати, с утверждением (1) мои экзаменаторы так же спорили долго и нужно, перепробовав кучу компиляторов из которых это никто так и не заоптимизил (а должен?)
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: задачка на собеседовании
От: Lloyd Россия  
Дата: 06.08.09 16:49
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Писал по памяти... Возможно вы правы, но что изменится если цикл изменить на


M>int sum = 0;

M>for(int i=0; i<2; i++) {
M> for(;i<3;) {
M> sum = i++;
M> }
M>}

Несколько изменится время выполнения, с менее милисекунды до бесконечности.
Re[3]: задачка на собеседовании
От: DenLion Россия  
Дата: 06.08.09 18:40
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>да, кстати, это Java.

Контора не в Санкт-Петербурге случаем находится?
Уж больно знакомые тесты...
Re[4]: задачка на собеседовании
От: DP Россия  
Дата: 09.08.09 13:44
Оценка:
Здравствуйте, DenLion, Вы писали:

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


M>>да, кстати, это Java.

DL>Контора не в Санкт-Петербурге случаем находится?
DL>Уж больно знакомые тесты...
похоже на *e***perts =))
Re[5]: задачка на собеседовании
От: elmal  
Дата: 10.08.09 07:21
Оценка:
Здравствуйте, DP, Вы писали:

DP>похоже на *e***perts =))

Серьезно чтоль? Вроде по объявлениям выглядят вполне прилично, говорят в объявах, что их мегасистема хорошо внутри написана, я аж поработать там захотел (смущает правда то, что гордятся тем, что у них до черта сотрудников сертификаты имеют). Но если принимают на основании таких тестов, ужас.
Re[6]: задачка на собеседовании
От: DP Россия  
Дата: 10.08.09 07:40
Оценка:
Здравствуйте, elmal, Вы писали:

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


DP>>похоже на *e***perts =))

E>Серьезно чтоль? Вроде по объявлениям выглядят вполне прилично, говорят в объявах, что их мегасистема хорошо внутри написана, я аж поработать там захотел (смущает правда то, что гордятся тем, что у них до черта сотрудников сертификаты имеют). Но если принимают на основании таких тестов, ужас.

они олимпиадники. "знаний" выше крыши. готовьтесь к вопросам по компиляторам, олимпиадные, по информатике (число 342 в двоичную, например), ну и по языку тест.
со мной работает их бывший сотрудник, ушел и не жалеет об этом =)
зы, задача про "за сколько посчитает" там точно была. и формат был как указан в этом топике. ну плюс минус...
Re[7]: задачка на собеседовании
От: elmal  
Дата: 10.08.09 08:14
Оценка:
Здравствуйте, DP, Вы писали:

DP>они олимпиадники. "знаний" выше крыши. готовьтесь к вопросам по компиляторам, олимпиадные, по информатике (число 342 в двоичную, например), ну и по языку тест.

Кстати об олимпиадниках, всегда хотелось узнать, а в рабочем коде тоже олимпиадные приемы используют чтоль (я в школьные и студенческие годы такие гениальные алгоритмы выдавал — ууу, хорошо выправили у меня это ) ? Плюс всякие хитрости языка (тоже в школьные и студенческие годы этим увлекался). Если ответ да — лучше в CBOSS идти
Re[8]: задачка на собеседовании
От: DP Россия  
Дата: 10.08.09 09:32
Оценка:
Здравствуйте, elmal, Вы писали:

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


DP>>они олимпиадники. "знаний" выше крыши. готовьтесь к вопросам по компиляторам, олимпиадные, по информатике (число 342 в двоичную, например), ну и по языку тест.

E>Кстати об олимпиадниках, всегда хотелось узнать, а в рабочем коде тоже олимпиадные приемы используют чтоль (я в школьные и студенческие годы такие гениальные алгоритмы выдавал — ууу, хорошо выправили у меня это ) ? Плюс всякие хитрости языка (тоже в школьные и студенческие годы этим увлекался). Если ответ да — лучше в CBOSS идти

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

хитрости языка-платформы, имхо, лучше знать. бывает напорешься, например, на косячную поддержку женериков в .НЕТ... долго думаешь ))
Re: задачка на собеседовании
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.08.09 18:12
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?


Сколько угодно. Во-первых, компилятор может соптимизировать нафиг цикл, и просто подсчитать результат. Во-вторых, очень зависит от архитектуры процессора. Совсем тупому процессору понадобится по-очереди дергать из памяти то sum, то i, то j, и неизвестно, во сколько команд развернется каждая строка. Умный процессор может делать многие операции параллельно.
Re[2]: задачка на собеседовании
От: мыщъх США http://nezumi-lab.org
Дата: 11.08.09 10:46
Оценка:
Здравствуйте, Pzz, Вы писали:

M>>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?


Pzz>Сколько угодно. Во-первых, компилятор может соптимизировать нафиг цикл, и просто подсчитать результат.

а откуда известно, что там вообще есть компилятор? может это какой-то хитрожопый процессор с аппаратной поддержкой си-подобного синтаксиса


> Во-вторых, очень зависит от архитектуры процессора.

в том-то и оно. даже если предположить, что это x86, то это может быть и 486 и первопень и пень второй, и пень про. ну про у меня не было, а вот 100мгц четверки, первопни и урезанный п2 (целерон) — были. и время выполнения у них отличается очень существенно.

> Совсем тупому процессору понадобится по-очереди дергать из памяти то sum, то i, то j,

> и неизвестно, во сколько команд развернется каждая строка.
> Умный процессор может делать многие операции параллельно.
в том-то и оно, что зависимости по данным тут нет, т.е. sum можно выполнять одновременно с увеличением счетчика цикла. или уменьшением? оптимизатор выберет уменьшение, т.к. это сокращает кол-во команд на одну.

то есть как всегда — нужно угадать что думал экзаменатор, не умеющий внятно выражать свои мысли.

кстати, свежий случай из жизни. прохожу значит интервью с одной фирмой из гон-конга. прохожу чисто формально, потому как они филиал американской фирмы и ничего не решают, а только подчинаются, но вопросы тем не менее задают. короче задача. на решение 1 минута. у нас есть программа А которая берет на вход файл F_A_IN и выдает файлы F_A_OUT1 .. F_A_OUTn, которые "скармливаются" программе B, которая в свою очередь для каждого входного файла создает несколько выходных F_B_OUT1..F_B_OUTn, которые скармливаются C и т.д.
вопрос: как это сделать так, чтобы не создавать временные файлы, а заюзать стандартный коннвеер? ну я и предложил "упаковать" выходные файлы ну скажем в tar, тогда достаточно одного потока ввода/вывода на каждую программу, тем более что поддержка tar в минимальном объеме реализуется минут за пол-часа с отладкой.

ответ был признан неверным. правильный ответ такой: упрятать все файлы в один поток, но снабдить его заголовками типа File_name, len:xxx, data:yyyyyy;

ну я их спрашиваю: чем ваш кустарный формат принципально от tar-а отличается?! форматом заголовка? тем что его писать проще? ну да, писать проще, зато понимать сложнее, т.к. перехватить вывод и подсмотреть его содержимое штатными средствами не получится.

и потом, если уж разрабатывать свой кустаарный формат, вместо поля длины лучше использовать маркер конца, т.к. далеко не всегда длина блока данных известна до начала его вывода. в общем случае она не известна и данные придется копить в памяти или опять-таки создавать временный файл, что не есть гуд. но увы... экзаменаторы грят, что правильный ответ это _их_ ответ.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: задачка на собеседовании
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.08.09 14:31
Оценка: 4 (1) +1
Здравствуйте, мыщъх, Вы писали:

М>и потом, если уж разрабатывать свой кустаарный формат, вместо поля длины лучше использовать маркер конца, т.к. далеко не всегда длина блока данных известна до начала его вывода. в общем случае она не известна и данные придется копить в памяти или опять-таки создавать временный файл, что не есть гуд. но увы... экзаменаторы грят, что правильный ответ это _их_ ответ.


О чем часто забывают, процесс трудоустройства — это процесс взаимного отбора работника и работодателя. Чем хороши такие дебильные тесты, они существенно облегчают отсеивание тех контор, в которые не стоит идти работать
Re: задачка на собеседовании
От: carpenter Голландия  
Дата: 12.08.09 06:52
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Всем привет!

M>Несколько дней назад ходил на собеседование и столкнулся с такой задачкой...


M>Помогите разобраться, плз!


Правильный ответ — досвидос
Весь мир — Кремль, а люди в нем — агенты
Re: задачка на собеседовании
От: Она На Нас Ий Россия  
Дата: 12.08.09 12:49
Оценка:
Здравствуйте, Mihon82, Вы писали:

M>Помогите разобраться, плз!


Решение всякой задачи начинается со сверки часов и определения используемых терминов
(составления Glossary).

Далее уточняется постановка задачи, цели её решения
(как в начальной школе — Что дано? Что требуется получить? Для чего?)

В частности, задача недопределена:
Какова скорость перемещения процессора в пространстве?
Какова размерность пространства?
Температурный режим?
В каких единицах измерения?

Далее уточняются имеющие средства для достижения поставленных в задаче целей

Ну и т.д.
Re[2]: задачка на собеседовании
От: Она На Нас Ий Россия  
Дата: 12.08.09 13:03
Оценка:
Здравствуйте, Она На Нас Ий, Вы писали:

ОНН>Далее уточняются имеющие средства для достижения поставленных в задаче целей


ОНН>Ну и т.д.


И не забываем про 3 "И" в решении задач в ИТ:
— итеративность (возврашаемся в начало и пересоставляем глоссарий и т.д.)
— интерактивность (постояно разговариваем с собеседником, не даём ему отвлекаться)
— инкрементальность (постоянно наращиваем по мелочи к уже представленному прототипу решения)
Re[7]: задачка на собеседовании
От: DenLion Россия  
Дата: 14.08.09 21:50
Оценка:
Здравствуйте, DP, Вы писали:

DP>со мной работает их бывший сотрудник, ушел и не жалеет об этом =)

Собеседование туда проходил. Многие вещи понравились в тестах, поскольку заставили
пошевелить мозгами. Многие вызвали недоумение своей неожиданностью.

Личный разговор с тех. специалистом выше всяческих похвал. Он показал мне громадную
дыру в знаниях. Латаю до сих пор За что ему громадное спасибо.

Не понравилась работа HR. После стандартного "Спасибо, мы с вами свяжемся" я о них больше
не слышал. Неприятно. Когда я попросил рассказать об условиях работы и возможной денежной компенсации,
проекте, технологиях и т. д. (непонятно почему это не было сделано вначале), на меня странно посмотрели и
нехотя стали рассказывать кое-какие крохи. Сложилось ощущение, что моего мнения никто и не
спрашивал особо. Тестировали только меня. Такая самонадеянность немного показалась неадекватной...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.