Здравствуйте, 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 тактов за искомое время. Пропорция, ответ, апплодисменты
Здравствуйте, 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>>
Могу копать.
Могу не копать.
Могу лестницу сделать... только копать долго придется
Здравствуйте, 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. Какие доводы ты приведешь в пользу того, что задачу решить нельзя, то есть
Здравствуйте, 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>Помогите разобраться, плз!
В догонку. Это примерно то что хотят услышать на собеседовании.
Здравствуйте, 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. Какие доводы ты приведешь в пользу того, что задачу решить нельзя, то есть
прошу прощения, не количество операций в секунду, а количество операций за такт
Здравствуйте, 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) тупо запускаем и засекаем
-----
Любимая фраза физика-теоретика: "Вот видите, мы ошиблись всего лишь на порядок".
Здравствуйте, Mihon82, Вы писали:
M>Понятия не имею как ее решить... даже не знаю с чего начать...
На неизвестные условия берутся допущения, эти допущения указываются. Ответ дается с учетом нижней и верхней границы, в ответе могут фигурировать некоторые константы, которые берутся в допущении. Решается слету, не думая, максимум за 5 минут, критерий оценки — чтоб не было явной ахинеи. Если ответ такой устраивать не будет, радуемся, что не попали в контору, где собеседование проводят невменяемые люди, ничего хорошего там не жди.
А вообще, это задачка имеет смысл только для студентов вообще без опыта работы. Если ее дают всем подряд — еще одно подозрение на неадекватность.
Здравствуйте, Ovl, Вы писали:
Ovl>зависит от компилятора. может и 0, если он соптимизирует.
Я бы добавил, что зависит от настроек компилятора. В дебаге он, может, и не станет разворачивать циклы, но в релизе — наверняка развернёт. По крайней мере все основные: msvc, gcc, icc — так сделают, даже bcc — и то догадается
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, 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
Зададимся числом тактов на каждую инструкцию вашего абстрактного 100МГц-процессора (не сказали же, какой у вас процессор):
xor: 2, inc: 2, cmp: 5, jmp: 4
Суммируя, получаем ~200 тактов.
Поскольку на 100МГц один такт выполняется за 10^-8 секунд, то наши 200 тактов пролетят за 2 микросекунды — и это ответ.
После этого тема разговора может плавно перейти к поиску недочетов/ошибок в такой оценке, к оптимизации вручную, оптимизации компилятора, про современные процессоры и т.д. Мне кажется, смысл вопроса — узнать вашу эрудицию в этой области, а не получение конкретного ответа.
Здравствуйте, Bhmn, Вы писали:
B>После этого тема разговора может плавно перейти к поиску недочетов/ошибок в такой оценке, к оптимизации вручную, оптимизации компилятора, про современные процессоры и т.д. Мне кажется, смысл вопроса — узнать вашу эрудицию в этой области, а не получение конкретного ответа.
К чему тогда ассемблер? Во-первых, кто сказал что процессор арихитектуры x86? Зачем вы используете ассемблер, не зная хотя бы марки процессора? Чтобы показать "знания"?
Во-вторых, если так всем хочется считать такты, то хотя бы уточняйте наличие конвеера и как выглядит машинный код того, что непосредстенно пойдет на выполнение. Может там вообще цикла не будет, а будет константа, посчитанная в результате оптимизации?
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, Mihon82, Вы писали:
M>>Понятия не имею как ее решить... даже не знаю с чего начать... E>На неизвестные условия берутся допущения, эти допущения указываются. Ответ дается с учетом нижней и верхней границы, в ответе могут фигурировать некоторые константы, которые берутся в допущении. Решается слету, не думая, максимум за 5 минут, критерий оценки — чтоб не было явной ахинеи. Если ответ такой устраивать не будет, радуемся, что не попали в контору, где собеседование проводят невменяемые люди, ничего хорошего там не жди. E>А вообще, это задачка имеет смысл только для студентов вообще без опыта работы. Если ее дают всем подряд — еще одно подозрение на неадекватность.
Самый прикол в том, что эта задача дается среди прочих во время тестирования... на нее предлжены 4 варианта ответа (все варианты числа без неизвестных), надо выбрать правильный... к сожалению, не помню эти варианты.
Здравствуйте, Mihon82, Вы писали:
M>Самый прикол в том, что эта задача дается среди прочих во время тестирования... на нее предлжены 4 варианта ответа (все варианты числа без неизвестных), надо выбрать правильный... к сожалению, не помню эти варианты.
Это явно показывает полную неадекватность собеседующих. Особенно если написал тест, и до свидания, если ответы совпали — говорим типа дальше. Я бы очень поостерегся с такими работать.
T>К чему тогда ассемблер? Во-первых, кто сказал что процессор арихитектуры x86? Зачем вы используете ассемблер, не зная хотя бы марки процессора? Чтобы показать "знания"? T>Во-вторых, если так всем хочется считать такты, то хотя бы уточняйте наличие конвеера и как выглядит машинный код того, что непосредстенно пойдет на выполнение. Может там вообще цикла не будет, а будет константа, посчитанная в результате оптимизации?
Ну, если после предоставления варианта решения собеседник на меня накинется с такими вопросами, то можно и пободаться
А так — вопрос отпал.
Задача в тестах была, с готовыми вариантами.
Здравствуйте, Mihon82, Вы писали: M>Самый прикол в том, что эта задача дается среди прочих во время тестирования... на нее предлжены 4 варианта ответа (все варианты числа без неизвестных), надо выбрать правильный... к сожалению, не помню эти варианты.
Ну тогда самый надежный вариант — это 0.
Здравствуйте, bxt, Вы писали:
bxt>Навскидку: bxt>1 Гц означает одно исполнение такого процесса за одну секунду: 1 Гц = 1/с. bxt>Если мы имеем 100 MГц, то это означает, что мы имеем 100*10^6 исполнений такого процесса за одну секунду. bxt>Потом выясняется сколько тактов на сложение и присвоение * 6 (не помню и зависит от CPU). Дальше понятно, 100*10^6 за секунду, а X тактов за искомое время. Пропорция, ответ, апплодисменты
1. разные команды имеют разное время выполнения
2. некоторые команды могут выполняться параллельно, поэтому иногда компилатор подбирает такие сочетания.
3. компилятор может сгенерить абсолютно любой ассембленый код. С члучае с оптимизацией я почти уверен, что он сообще весь результат заменит константой.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Здравствуйте, Mihon82, Вы писали:
M>Здравствуйте, elmal, Вы писали:
E>>Здравствуйте, Mihon82, Вы писали:
M>>>Понятия не имею как ее решить... даже не знаю с чего начать... E>>На неизвестные условия берутся допущения, эти допущения указываются. Ответ дается с учетом нижней и верхней границы, в ответе могут фигурировать некоторые константы, которые берутся в допущении. Решается слету, не думая, максимум за 5 минут, критерий оценки — чтоб не было явной ахинеи. Если ответ такой устраивать не будет, радуемся, что не попали в контору, где собеседование проводят невменяемые люди, ничего хорошего там не жди. E>>А вообще, это задачка имеет смысл только для студентов вообще без опыта работы. Если ее дают всем подряд — еще одно подозрение на неадекватность.
M>Самый прикол в том, что эта задача дается среди прочих во время тестирования... на нее предлжены 4 варианта ответа (все варианты числа без неизвестных), надо выбрать правильный... к сожалению, не помню эти варианты.
Ну тогда если вас туда не взяли — вам очень повезло. Сбережоте кучу своего времени и нервов.
M>Помогите разобраться, плз!
Надо просто вразуметельно показать знание multithreading/multitasking, основ ассемблера, строения процессора. Плюс оптимизации компилятора итд итп. Ну разве важны здесь реальные ответы — типа 15 мс?
Плюс ты должен показать, что можешь думать.
bxt пишет: > > 1 Гц означает одно исполнение такого процесса за одну секунду: 1 Гц = 1/с. > Если мы имеем 100 MГц, то это означает, что мы имеем 100*10^6 исполнений > такого процесса за одну секунду. > Потом выясняется сколько тактов на сложение и присвоение * 6 (не помню и > зависит от CPU). Дальше понятно, 100*10^6 за секунду, а X тактов за > искомое время. Пропорция, ответ, апплодисменты
Вы свободны. В смысле проходите мимо.
Правда и такого тупого вопроса я тоже бы не задал.
Здравствуйте, tonykent, Вы писали:
M>>Помогите разобраться, плз! T>Надо просто вразуметельно показать знание multithreading/multitasking, основ ассемблера, строения процессора. Плюс оптимизации компилятора итд итп. Ну разве важны здесь реальные ответы — типа 15 мс? T>Плюс ты должен показать, что можешь думать.
Раз были варианты ответов, то показывать не требовалось.
Скорее всего какого-то разработчика заставили выдавить из себя тест с 20 вопросами.
Он как мог — так и изощрился, чтобы и вопросы оригинальные были, и что-то проверяли, как ему кажется.
Не умеет человек составлять вопросы, всё-таки ему платят за программирование, а не придумывание тестов.
Тут вся надежда на разбор полётов после теста, там можно будет и эрудицию показать и ум продемонстрировать. Да и просто узнать как они дошли до жизни такой.
Здравствуйте, Vzhyk, Вы писали:
V>bxt пишет: >> >> 1 Гц означает одно исполнение такого процесса за одну секунду: 1 Гц = 1/с. >> Если мы имеем 100 MГц, то это означает, что мы имеем 100*10^6 исполнений >> такого процесса за одну секунду. >> Потом выясняется сколько тактов на сложение и присвоение * 6 (не помню и >> зависит от CPU). Дальше понятно, 100*10^6 за секунду, а X тактов за >> искомое время. Пропорция, ответ, апплодисменты
V>Вы свободны. В смысле проходите мимо. V>Правда и такого тупого вопроса я тоже бы не задал.
О том и речь
Здравствуйте, Mihon82, Вы писали:
M>for(int i=0; i<2; i++) { M> for(int j=0; j<3; j++) {
M>Понятия не имею как ее решить... даже не знаю с чего начать...
А вы уверены, что прочитали это правильно?
Это цитата или же вы по памяти писали?
Думаю, там внутренний цикл скорее всего был другой, где-нибудь i использовали.
Здравствуйте, 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 использовали.
Согласен, возможно в оригинале был, например, уход в бесконечный цикл.
Здравствуйте, 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++;
}
}
Здравствуйте, 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.
предполагаю, что вы все-таки без компилятора задания выполняли
Здравствуйте, Mihon82, Вы писали:
M> Сколько времени займет выполнение следующего кода на машине 100Мгц, M> если предположить, что других задач в это время выполнятся не будет?
очередная задача на тему: угадать, что от нас хотят и что имел ввиду, тот кто ее составлял. кстати, если уж на то пошло, то загрузка данной программы из оперативной памяти в кэш займет больше времени, чем ее выполнение на всех архитектурах, где фигурирует цифра в 100МГЦ. а если предположить, что программа уже загружена в кэш, переходы предсказаны, переменные в регистрах, а не в памяти и компилятор оттранслировал ее без нормализации и совмещения циклов, ну это уж слишком.
но бывает вообще клиника. как вам нравится следующая задачка: что неправильного в этом коде?
у меня были следующие варианты в порядке их появления в голове:
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.
Здравствуйте, Mihon82, Вы писали:
M>Писал по памяти... Возможно вы правы, но что изменится если цикл изменить на
M>int sum = 0; M>for(int i=0; i<2; i++) { M> for(;i<3;) { M> sum = i++; M> } M>}
Несколько изменится время выполнения, с менее милисекунды до бесконечности.
Здравствуйте, DenLion, Вы писали:
DL>Здравствуйте, Mihon82, Вы писали:
M>>да, кстати, это Java. DL>Контора не в Санкт-Петербурге случаем находится? DL>Уж больно знакомые тесты...
похоже на *e***perts =))
Здравствуйте, DP, Вы писали:
DP>похоже на *e***perts =))
Серьезно чтоль? Вроде по объявлениям выглядят вполне прилично, говорят в объявах, что их мегасистема хорошо внутри написана, я аж поработать там захотел (смущает правда то, что гордятся тем, что у них до черта сотрудников сертификаты имеют). Но если принимают на основании таких тестов, ужас.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, DP, Вы писали:
DP>>похоже на *e***perts =)) E>Серьезно чтоль? Вроде по объявлениям выглядят вполне прилично, говорят в объявах, что их мегасистема хорошо внутри написана, я аж поработать там захотел (смущает правда то, что гордятся тем, что у них до черта сотрудников сертификаты имеют). Но если принимают на основании таких тестов, ужас.
они олимпиадники. "знаний" выше крыши. готовьтесь к вопросам по компиляторам, олимпиадные, по информатике (число 342 в двоичную, например), ну и по языку тест.
со мной работает их бывший сотрудник, ушел и не жалеет об этом =)
зы, задача про "за сколько посчитает" там точно была. и формат был как указан в этом топике. ну плюс минус...
Здравствуйте, DP, Вы писали:
DP>они олимпиадники. "знаний" выше крыши. готовьтесь к вопросам по компиляторам, олимпиадные, по информатике (число 342 в двоичную, например), ну и по языку тест.
Кстати об олимпиадниках, всегда хотелось узнать, а в рабочем коде тоже олимпиадные приемы используют чтоль (я в школьные и студенческие годы такие гениальные алгоритмы выдавал — ууу, хорошо выправили у меня это ) ? Плюс всякие хитрости языка (тоже в школьные и студенческие годы этим увлекался). Если ответ да — лучше в CBOSS идти
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, DP, Вы писали:
DP>>они олимпиадники. "знаний" выше крыши. готовьтесь к вопросам по компиляторам, олимпиадные, по информатике (число 342 в двоичную, например), ну и по языку тест. E>Кстати об олимпиадниках, всегда хотелось узнать, а в рабочем коде тоже олимпиадные приемы используют чтоль (я в школьные и студенческие годы такие гениальные алгоритмы выдавал — ууу, хорошо выправили у меня это ) ? Плюс всякие хитрости языка (тоже в школьные и студенческие годы этим увлекался). Если ответ да — лучше в CBOSS идти
трудно сказать что-либо. вообще это в помощь мышлению наверное, чтобы однобоко не писать.
программирование все же — искусство, а не тупое стучание по клавишам ))))
хитрости языка-платформы, имхо, лучше знать. бывает напорешься, например, на косячную поддержку женериков в .НЕТ... долго думаешь ))
Здравствуйте, Mihon82, Вы писали:
M>Сколько времени займет выполнение следующего кода на машине 100Мгц, если предположить, что других задач в это время выполнятся не будет?
Сколько угодно. Во-первых, компилятор может соптимизировать нафиг цикл, и просто подсчитать результат. Во-вторых, очень зависит от архитектуры процессора. Совсем тупому процессору понадобится по-очереди дергать из памяти то sum, то i, то j, и неизвестно, во сколько команд развернется каждая строка. Умный процессор может делать многие операции параллельно.
Здравствуйте, 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.
Здравствуйте, мыщъх, Вы писали:
М>и потом, если уж разрабатывать свой кустаарный формат, вместо поля длины лучше использовать маркер конца, т.к. далеко не всегда длина блока данных известна до начала его вывода. в общем случае она не известна и данные придется копить в памяти или опять-таки создавать временный файл, что не есть гуд. но увы... экзаменаторы грят, что правильный ответ это _их_ ответ.
О чем часто забывают, процесс трудоустройства — это процесс взаимного отбора работника и работодателя. Чем хороши такие дебильные тесты, они существенно облегчают отсеивание тех контор, в которые не стоит идти работать
Здравствуйте, Mihon82, Вы писали:
M>Помогите разобраться, плз!
Решение всякой задачи начинается со сверки часов и определения используемых терминов
(составления Glossary).
Далее уточняется постановка задачи, цели её решения
(как в начальной школе — Что дано? Что требуется получить? Для чего?)
В частности, задача недопределена:
Какова скорость перемещения процессора в пространстве?
Какова размерность пространства?
Температурный режим?
В каких единицах измерения?
Далее уточняются имеющие средства для достижения поставленных в задаче целей
Здравствуйте, Она На Нас Ий, Вы писали:
ОНН>Далее уточняются имеющие средства для достижения поставленных в задаче целей
ОНН>Ну и т.д.
И не забываем про 3 "И" в решении задач в ИТ:
— итеративность (возврашаемся в начало и пересоставляем глоссарий и т.д.)
— интерактивность (постояно разговариваем с собеседником, не даём ему отвлекаться)
— инкрементальность (постоянно наращиваем по мелочи к уже представленному прототипу решения)
Здравствуйте, DP, Вы писали:
DP>со мной работает их бывший сотрудник, ушел и не жалеет об этом =)
Собеседование туда проходил. Многие вещи понравились в тестах, поскольку заставили
пошевелить мозгами. Многие вызвали недоумение своей неожиданностью.
Личный разговор с тех. специалистом выше всяческих похвал. Он показал мне громадную
дыру в знаниях. Латаю до сих пор За что ему громадное спасибо.
Не понравилась работа HR. После стандартного "Спасибо, мы с вами свяжемся" я о них больше
не слышал. Неприятно. Когда я попросил рассказать об условиях работы и возможной денежной компенсации,
проекте, технологиях и т. д. (непонятно почему это не было сделано вначале), на меня странно посмотрели и
нехотя стали рассказывать кое-какие крохи. Сложилось ощущение, что моего мнения никто и не
спрашивал особо. Тестировали только меня. Такая самонадеянность немного показалась неадекватной...