Re[5]: Задачи и вопросы на интервью
От: little_alex  
Дата: 27.02.05 14:00
Оценка:
V>Здравствуйте, BioUnit, Вы писали:


BU>>Но загвоздка есть в том, что Земля вертиться, а сл-но "туда" не все равно как лететь.

V>Но ведь вместе с землей вращается и атмосфера, опираясь на которую летит самолет!

Это не важно RTFM 'Сила Кориолиса' 2m[VxW] =0 при V=0

Впрочем все это
Re[6]: Задачи и вопросы на интервью
От: minorlogic Украина  
Дата: 27.02.05 14:33
Оценка:
#include <windows.h>
#include <stdio.h>

struct element
{
struct element *pElementNext;
int value;
};

struct element elementsCollection[20];

int element_delete_by_ref( struct element *pCurrentElement )
{
struct element *pNextElement;

pNextElement = pCurrentElement->pElementNext;
pCurrentElement->value = pNextElement->value;
pCurrentElement->pElementNext = pNextElement->pElementNext;

return 0;
}

int element_print_all( struct element *pCurrentElement)
{
struct element *pNextElement = pCurrentElement;
while(pNextElement->pElementNext != NULL)
{
printf("%d\n",pNextElement->value);
pNextElement = pNextElement->pElementNext;
}
// print last element
printf("%d\n",pNextElement->value);
return 0;
}

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

int add( struct element *pCurrentElement, struct element *pNewElement)
{
struct element *pNextElement;
pNewElement->pElementNext = pCurrentElement->pElementNext;
pCurrentElement->pElementNext = pNewElement;
return 0;
}




int main(void)
{
elementsCollection[0].value = 1;
elementsCollection[0].pElementNext = &elementsCollection[1];

elementsCollection[1].value = 3;
elementsCollection[1].pElementNext = &elementsCollection[2];

elementsCollection[2].value = 2;
elementsCollection[2].pElementNext = &elementsCollection[3];

elementsCollection[3].value = 5;
elementsCollection[3].pElementNext = NULL;

struct element *usefull_element = &elementsCollection[3];

element_print_all(&elementsCollection[0]);
element_delete_by_ref(&elementsCollection[2]);
printf("\n\n");


add( usefull_element, &elementsCollection[4]);
add( usefull_element, &elementsCollection[5]);


element_print_all(&elementsCollection[0]);

ExitProcess(0);
}


ЧТО имеено нам даст пометка элементов ?
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[7]: Задачи и вопросы на интервью
От: Roman Pushkin Россия  
Дата: 27.02.05 15:31
Оценка:
Здравствуйте, minorlogic, Вы писали:

<skipped>

M>ЧТО имеено нам даст пометка элементов ?


Ну ты утомил меня, парень :) В общем, раз ты такой крутой, буду рад увидеть твой вариант (читай внимательно задание). Точка.
.
Re[2]: Задачи и вопросы на интервью
От: kliff Россия http://www.esignal.ru
Дата: 27.02.05 16:12
Оценка:
Здравствуйте, Roman Pushkin, Вы писали:

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


A>>
  • Имеется односвязанный список, из которого нужно удалить последний элемент. Указатель на последний элемент имеется. Вопрос: как удалить элемент, не имея указателя на голову списка и/или предшествующие элементы?

    RP>Кто-нибудь знает как решить задачку?


    ты уверен что у нее есть решение? не вижу возможности добраться до предыдущего элемента — после физического удаления элемента будет нарушена ссылочная целостноть. К постановке задачи не подкопаешься — разве что список циклический.
  • Re[8]: Задачи и вопросы на интервью
    От: minorlogic Украина  
    Дата: 27.02.05 16:32
    Оценка:
    Здравствуйте, Roman Pushkin, Вы писали:

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


    RP><skipped>


    M>>ЧТО имеено нам даст пометка элементов ?


    RP>Ну ты утомил меня, парень В общем, раз ты такой крутой, буду рад увидеть твой вариант (читай внимательно задание). Точка.


    Странный тон , учитывая что мы не знакомы не НАХОДИТЕ ЛИ ?
    По предыдущему посту я не понял , ВЫ согласны с тем что это решение имеет некоторые побочные эфекты, или это значит что я пишу полную чушь, которую даже не стоит коментировать ?

    В любом случае я тоже устал писать одно и тоже в третий раз .
    Ищу работу, 3D, SLAM, computer graphics/vision.
    Re[9]: Задачи и вопросы на интервью
    От: Roman Pushkin Россия  
    Дата: 27.02.05 17:52
    Оценка:
    Здравствуйте, minorlogic, Вы писали:

    M>Странный тон , учитывая что мы не знакомы не НАХОДИТЕ ЛИ ?

    M>По предыдущему посту я не понял , ВЫ согласны с тем что это решение имеет некоторые побочные эфекты, или это значит что я пишу полную чушь, которую даже не стоит коментировать ?

    M>В любом случае я тоже устал писать одно и тоже в третий раз .


    Я признаю, что я зря родился на свет, согласен что я грубиян, ничтожество, бездарность и моральный урод. Но это уже, кажется, оффтоп.
    А по существу — решением было создать функцию (!), а не программировать второе издание System.Collections
    .
    Re[3]: Задачи и вопросы на интервью
    От: alexanderfedin США http://alexander-fedin.pixels.com/
    Дата: 28.02.05 02:29
    Оценка:
    Здравствуйте, kliff, Вы писали:

    A>>>
  • Имеется односвязанный список, из которого нужно удалить последний элемент. Указатель на последний элемент имеется. Вопрос: как удалить элемент, не имея указателя на голову списка и/или предшествующие элементы?

    RP>>Кто-нибудь знает как решить задачку?


    K>ты уверен что у нее есть решение? не вижу возможности добраться до предыдущего элемента — после физического удаления элемента будет нарушена ссылочная целостноть. К постановке задачи не подкопаешься — разве что список циклический.


    Внесу некоторую ясность: я спросил про циклический список, но мастдаец заметил, что "может быть список и циклический, но размер его таков, что итерирование по нему займет слишком много времени" (дословно). Я предложил либо маркер на элементе списка, либо элементы — матрешки (wrappers), у которых можно заменить содержимое: был Node, стал NullNode.
    Такой ответ его вполне удовлетворил.
  • Respectfully,
    Alexander Fedin.
    Re: Задачи и вопросы на интервью
    От: alexanderfedin США http://alexander-fedin.pixels.com/
    Дата: 28.02.05 03:16
    Оценка:
    Здравствуйте, alexanderfedin, Вы писали:

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

    A>Ответов сейчас давать не буду, предоставляя возможность подумать.

    Моя анкета для MS с ответами и задачами
    То, что было на телефонном интервью, в анкете отсутствует (неисправность телевизора, etc.)
    Respectfully,
    Alexander Fedin.
    Re: Задачи и вопросы на интервью
    От: alexanderfedin США http://alexander-fedin.pixels.com/
    Дата: 14.03.05 02:28
    Оценка:
    Здравствуйте, alexanderfedin, Вы писали:

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


    Совсем свежее, с face-to-face интервью у Майкрософта:
    1. Есть счетчик километража в автомобиле. И вот, одному ненормальному пришло в голову сделать разряды этого счетчика не по основанию 10, а для каждого разряда своё: 4, 6, 2, 7, 10, 3. Вопрос: как это реализовать и какие тест кейзы вы можете предложить для такого счетчика?
    2. Имеется сортированный односвязанный список. Вставить в него новый элемент.
    3. Имеется числовая последовательность: 1, 1, 2, 3, 5, 8, 13,.. Написать алгоритм для продолжения последовательности.
    4. Имеется список точек на плоскости с целочисленными координатами. Найти первые такие две точки, чтобы точка, лежащая посередине между ними, имела целочисленные координаты. Написать максимально простой алгоритм.
    Respectfully,
    Alexander Fedin.
    Re[2]: Задачи и вопросы на интервью
    От: Pavel Dvorkin Россия  
    Дата: 14.03.05 02:55
    Оценка:
    Здравствуйте, kittown, Вы писали:


    >> 8. Написать функцию обмена значений двух целых переменных с

    >> минимальными затратами памяти и времени. Примечание:
    >> команды/функции обмена значений переменных не существует

    K>Баянище. a = b — a; b = b — a; a = a + b;



    Некорректное решение. На IBM PC это будет работать, так как на нем нет переполнения с фиксированной точкой. На других машинах может вызвать исключение.

    Правильно

    a = a ^ b; b = a ^ b; a = a ^ b;
    With best regards
    Pavel Dvorkin
    Re[3]: Задачи и вопросы на интервью
    От: kittown  
    Дата: 14.03.05 07:48
    Оценка: +1
    Pavel Dvorkin wrote:
    >
    > Здравствуйте, kittown, Вы писали:
    >
    >> > 8. Написать функцию обмена значений двух целых переменных с
    >> > минимальными затратами памяти и времени. Примечание:
    >> > команды/функции обмена значений переменных не существует
    >
    > K>Баянище. a = b — a; b = b — a; a = a + b;
    >
    > Некорректное решение. На IBM PC это будет работать, так как на нем нет
    > переполнения с фиксированной точкой. На других машинах может вызвать
    > исключение.

    Во-1, перед ответом полезно почитать весь тред — ничего нового не
    сказано. Во-2, это все равно будет работать на определенном
    множестве значений. Для них это решение корректно, нехватает
    лишь оговорки про ограниченность множества. Собственно как
    и при практически любой арифметической операции.

    Mikhail
    Posted via RSDN NNTP Server 1.9
    Re: Задачи и вопросы на интервью
    От: nopal  
    Дата: 15.03.05 10:43
    Оценка:
    Здравствуйте, alexanderfedin, Вы писали:

    а вот какое тестовое задание было у меня 2 года назад: написать программу, которая использует метаданные MS SQL Server. используя системные таблицы сервера нужно было вывести список баз, список таблиц, список полей в таблицах,....
    ... << RSDN@Home 1.1.3 stable >>
    Re: Задачи и вопросы на интервью
    От: _Hooter Россия  
    Дата: 18.03.05 20:53
    Оценка:
    Здравствуйте, alexanderfedin, Вы писали:

    A>Если у кого-то есть подобные задачи и вопросы — присоединяйтесь.


    Один из стандартных вопросов на знание SQL:

    Есть таблица с ключевым полем ID. Ключевое поле содержит челые числа. Например, 1, 2, 3, 4, 7, 8, 10, 11,...

    Задание: написать запрос для нахождения "дырки" в последовательности идентификаторов.
    Re[2]: Задачи и вопросы на интервью
    От: ilya_ny  
    Дата: 20.03.05 21:25
    Оценка:
    Здравствуйте, _Hooter, Вы писали:

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


    A>>Если у кого-то есть подобные задачи и вопросы — присоединяйтесь.


    _H>Один из стандартных вопросов на знание SQL:


    _H>Есть таблица с ключевым полем ID. Ключевое поле содержит челые числа. Например, 1, 2, 3, 4, 7, 8, 10, 11,...


    _H>Задание: написать запрос для нахождения "дырки" в последовательности идентификаторов.



    вот что я сваял за пару минут. возвращает не ВСЕ дырки, а НЕКОТОРЫЕ.
    есть ли оптимальнее решение?


    //создаем таблицу
    create table #test (id int)
    
    //заполняем значениями
    insert #test(id) values (2)
    insert #test(id) values (3)
    insert #test(id) values (4)
    insert #test(id) values (7)
    insert #test(id) values (8)
    insert #test(id) values (9)
    
    
    //собственно решение
    select t1.id + 1
    from #test t1
    where 
    t1.id != (select max(id) from #test)  
    and
    not exists
    (
        select 1 from #test t2 where t2.id = t1.id + 1
    )
    
    
    //удаляем таблицу
    drop table #test
    Re[2]: Задачи и вопросы на интервью
    От: ilya_ny  
    Дата: 20.03.05 21:32
    Оценка:
    Здравствуйте, nopal, Вы писали:

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


    N>а вот какое тестовое задание было у меня 2 года назад: написать программу, которая использует метаданные MS SQL Server. используя системные таблицы сервера нужно было вывести список баз, список таблиц, список полей в таблицах,....


    я думаю такое можно задавать только администратору бд

    можно это также сделать через ADO.NET...
    Re[3]: Задачи и вопросы на интервью
    От: _Hooter Россия  
    Дата: 21.03.05 19:35
    Оценка:
    Здравствуйте, ilya_ny, Вы писали:

    _H>>Есть таблица с ключевым полем ID. Ключевое поле содержит челые числа. Например, 1, 2, 3, 4, 7, 8, 10, 11,...

    _H>>Задание: написать запрос для нахождения "дырки" в последовательности идентификаторов.

    _>вот что я сваял за пару минут. возвращает не ВСЕ дырки, а НЕКОТОРЫЕ.

    _>есть ли оптимальнее решение?
    _>
    _>
    _>//собственно решение
    _>select t1.id + 1
    _>from #test t1
    _>where 
    _>t1.id != (select max(id) from #test)  
    _>and
    _>not exists
    _>(
    _>    select 1 from #test t2 where t2.id = t1.id + 1
    _>)
    _>
    _>


    Често говоря, я не совсем понял, что значит "некоторые", так как не разбирался в твоем решении. Скорее всего оно правильное.

    Но надо написать запрос для нахождения не "дырок", а "дырки". Всего одной.

    Я должен уточнить: с помощью запроса надо найти первую "дырку" в последовательности. Если отсутствие этого уточнения кого-то ввело в заблуждение — прошу прощения.

    А решение такое:
    select min(f1.id)
    from table1 f1 left join table1 f2 on f1.id + 1= f2.id
    where f2.id is null;


    Или нечто похожее. Но идея, надеюсь, понятна...
    После выполнения запроса поле будет содержать некое значение, которое будет на 1 меньше, чем значение первой дырки.
    Re[4]: Задачи и вопросы на интервью
    От: ilya_ny  
    Дата: 21.03.05 23:28
    Оценка:
    Здравствуйте, _Hooter, Вы писали:

    _H>Често говоря, я не совсем понял, что значит "некоторые", так как не разбирался в твоем решении. Скорее всего оно правильное.


    некоторые — это значит, что если пропущено больше два и более чисел подряд, то вернется первое пропущенное, а не все пропущенные.

    Пример: 1, 2, 5, 6, 9, 10
    пропущены (3, 4) и (7, 8)
    вернутся 3 и 7


    _H>Но надо написать запрос для нахождения не "дырок", а "дырки". Всего одной.


    _H>Я должен уточнить: с помощью запроса надо найти первую "дырку" в последовательности. Если отсутствие этого уточнения кого-то ввело в заблуждение — прошу прощения.


    Если в моем рещениие написать min, то будет твой-же результат

    твое рещение почти верно — надо min(f1.id + 1) возвращать, а не min(f1.id)
    ну и конечо оно проще

    select f1.id + 1
    from #test f1 left join #test f2 on f1.id + 1= f2.id
    where f2.id is null
    Re[3]: Задачи и вопросы на интервью
    От: Alexxxx  
    Дата: 22.03.05 02:42
    Оценка:
    Здравствуйте, access_v, Вы писали:


    >>> 8. Написать функцию обмена значений двух целых переменных с

    >>> минимальными затратами памяти и времени. Примечание:
    >>> команды/функции обмена значений переменных не существует

    K>>Баянище. a = b — a; b = b — a; a = a + b;


    _>Ещё ксоркой можно. Но на самом деле всё равно временный объект будет создан (в самом тривиальном случае это будет регистр процессора). Так что выгода такого изврата очень сомнительна.


    Я бы сделал вот так: a = b ^ a; b = a ^ b; a = a ^ b;
    Работать будет быстрее и будет исключена вероятность потери данных при больших значениях.
    Re[2]: Задачи и вопросы на интервью
    От: Olegator  
    Дата: 23.03.05 10:07
    Оценка:
    Здравствуйте, alexanderfedin, Вы писали:

    A>Имеется сортированный односвязанный список. Вставить в него новый элемент.


    Список:
    
    +-----+  +-----+  +-----+
    |  a  |->|  b  |->|  c  |->...
    +-----+  +-----+  +-----+               +-----+  +-----+  +-----+  +-----+
                     ^                 =>   |  a  |->|  b  |->|  z  |->|  c  |->...
                     |                      +-----+  +-----+  +-----+  +-----+
                  +-----+
                  |  z  |
                  +-----+
    
    b <= z <= c (по возрастанию)
    b >= z >= c (по убыванию)


    A>Имеется числовая последовательность: 1, 1, 2, 3, 5, 8, 13,.. Написать алгоритм для продолжения последовательности.


    #include <iostream>
    
    unsigned GetNextFibonachi(unsigned current)
    {
        static unsigned previous = 8;
    
        unsigned res = current + previous;
        previous = current;
        return res;
    }
    
    int main()
    {
        for(int i = 13; i < 1000; )
        {
            i = GetNextFibonachi(i);
            std::cout << i << std::endl;
        }
    
    
        return 0;
    }


    A>Имеется список точек на плоскости с целочисленными координатами. Найти первые такие две точки, чтобы точка, лежащая посередине между ними, имела целочисленные координаты. Написать максимально простой алгоритм.


    Что-то типа этого:
    #include <iostream>
    #include <utility>
    
    int main()
    {
        typedef std::pair<int, int> coord;
    
        coord points[2][2];
        bool found[2][2] = {false};
    
        for(int i = 0; i < 5; i++) // достаточно первых пяти точек
        {
            int x, y, xt, yt;
            std::cin >> x >> y; // пусть координаты подаются на stdin
            xt = x & 1, yt = y & 1; // выясняем чётность
            
            if(found[xt][yt])
            {
                std::cout << '(' << x << "; " << y << ") - ("
                          << points[xt][yt].first << "; " << points[xt][yt].second << ")\n";
                break;
            }
            else
            {
                points[xt][yt] = std::make_pair(x, y);
                found[xt][yt] = true;
            }
        }
    
        return 0;
    }
    ... << RSDN@Home 1.1.4 beta 4 rev. 303>>
    Re[2]: Задачи и вопросы на интервью
    От: Eugeny__ Украина  
    Дата: 28.03.05 07:37
    Оценка:
    Здравствуйте, kittown, Вы писали:


    >> 2. Имеется односвязанный список, из которого нужно удалить последний

    >> элемент. Указатель на последний элемент имеется. Вопрос: как
    >> удалить элемент, не имея указателя на голову списка и/или
    >> предшествующие элементы?

    K>Если список циклический, очевидно. Если в элементе можно пометить,

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

    K>Но "просто удалить" элемент (free, delete) можно конечно всегда.


    Не всегда Напишешь пример для С# и java?
    ... << RSDN@Home 1.1.3 stable >> Winamp: silent
    Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
    There is no such thing as a winnable war.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.