задачка на собеседовании
От: 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 мс?
Плюс ты должен показать, что можешь думать.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.