Re[7]: Как я завалил собеседование
От: Hottabych1  
Дата: 20.01.07 22:05
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, 0xd34df00d, Вы писали:


THE>>>Ну, пусть это будет AVP (Касперский)

LM>Возможно(все мои предположения сводились) к винде+офису.
LM>Но он там не прошел бы брейнбенч.

0>>Agnitum?

LM>Домохозяйки?

0>>Eset?

LM>Не знаю. Может потому, что я не домохозяйка.
Ставки сделаны, ставок больше нет, господа. Это был Яндекс...
Re[4]: Как я завалил собеседование
От: Hottabych1  
Дата: 20.01.07 22:11
Оценка:
Здравствуйте, skymaster, Вы писали:

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



H>>Теперь, думаю, я это запомню на всю жизнь


S>Ещё советую проштудировать перегрузку оператора присваивания.

S>Тоже может пригодится на собеседовании.
Так... пишу по памяти

A& A::operator=(const A &a)
{
...
}

Полагаю, так...
Re[5]: Как я завалил собеседование
От: THESERG  
Дата: 20.01.07 23:09
Оценка:
H>
H>A& A::operator=(const A &a)
H>{
H>...
H>}
H>

H>Полагаю, так...

держи ещё вопросов:
— какова трудоёмкость поиска (значения по ключу) в stl контейнере map
— ну там, совсем банальные вопросы: чем отличаются раннее связывание от позднего, TCP от UDP, select от poll
Re[4]: Как я завалил собеседование
От: DKM_MSFT  
Дата: 21.01.07 01:06
Оценка: +4
Здравствуйте, 0xd34df00d, Вы писали:

0>>>А по-моему, есть вещи, которые нельзя забывать никогда, как таблицу умножения... А еще есть вещи, говорящие о непонимании практически базовых концепций и принципов. И соискатель, может быть, прав в данной ситуации — ему нужно получить наиболее хорошо знающего работника.


У меня как-то был период, когда мне, в силу специфики проекта, приходилось писать код на 5 разных языках. Так я иногда синтаксис цикла for забывал для какого-нибудь языка, не говоря уже про более сложные вещи. Цикл for — это, вроде как, базовая концепция. Говорит ли это о том, что я ее не понимаю и мне пора на свалку?

H>>Согласен! Просто привык Си++ считать просто инструментом в работе. Например, мне нужно то-то... как там, значит, оно в Си++ делается? И лезу в справочник. После чего на следующий день благополучно это забываю. Насколько оправдан такой подход?


0>Имхо если постоянно открывать справочники (пусть даже это будет какое-нибудь контекстно-зависимое окошко в VS) по любому поводу, то очень много времени теряется.


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

0>Тут важна граница, ведь учить наизусть библиотеку, скажем, алгоритмов из STL — тоже не очень хорошо )


Да, и граница эта проходит на уровне понимания концепций, а отнюдь не на уровне синтаксиса, идиотских задач, вроде i += i++ + ++i, и прочего в этом роде.
Re[5]: Как я завалил собеседование
От: LuciferMoscow Россия  
Дата: 21.01.07 07:49
Оценка:
Здравствуйте, Hottabych1, Вы писали:

S>>Ещё советую проштудировать перегрузку оператора присваивания.

S>>Тоже может пригодится на собеседовании.
H>Так... пишу по памяти
H>
H>A& A::operator=(const A &a)
H>{
H>......// А тут что?
H>}
H>

H>Полагаю, так...
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[6]: Как я завалил собеседование
От: 0xd34df00d Россия  
Дата: 21.01.07 07:56
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

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


S>>>Ещё советую проштудировать перегрузку оператора присваивания.

S>>>Тоже может пригодится на собеседовании.
H>>Так... пишу по памяти
H>>
H>>A& A::operator=(const A &a)
H>>{
H>>......// А тут что?
H>>}
H>>

H>>Полагаю, так...
AFAIR:
1. Возвращаемое значение может быть любым
2. Но лучше, чтобы оно было ссылкой на объект типа A (в данном случае)
3. В самом конце тогда уж (если выполнять п. 2)
return *this;
And solder won't keep me together (c)
Re[8]: Как я завалил собеседование
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 21.01.07 08:11
Оценка:
Здравствуйте, Hottabych1, Вы писали:

THE>>>>Ну, пусть это будет AVP (Касперский)

LM>>Возможно(все мои предположения сводились) к винде+офису.
LM>>Но он там не прошел бы брейнбенч.

0>>>Agnitum?

LM>>Домохозяйки?

0>>>Eset?

LM>>Не знаю. Может потому, что я не домохозяйка.
H>Ставки сделаны, ставок больше нет, господа. Это был Яндекс...

Однозначно
Автор: Коваленко Дмитрий
Дата: 13.04.06
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[4]: Как я завалил собеседование
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 21.01.07 08:21
Оценка: :)
Здравствуйте, avbochagov, Вы писали:

КД>>Навеяло... а то, как пишется нормальный оператор копирования, я понял еще через пару лет


A>даже интересно стало! а можно пример, как было до понимания, и как стало после понимания?


Было
T& T::operator = (const T& x)
{
 this->a1 =  x.a1;
 this->a2 =  x.a2;
 this->a3 =  x.a3;
 this->a4 =  x.a4;

 return *this;
}//T::copy operator

Стало
T& T::operator = (const T& x)
{
 T tmp(x); // Copy constructor

 this->swap(tmp); // NO EXCEPTIONS !!!

 return *this;
}//T::copy operator




Правда в последнее время, мне в голову все чаще и чаще приходя мысли, что проектировать классы нужно так, чтобы у них вообще не было реализаций конструкторов и операторов копирования.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[7]: Как я завалил собеседование
От: skymaster  
Дата: 21.01.07 08:28
Оценка:
Здравствуйте, 0xd34df00d, Вы писали:

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


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


S>>>>Ещё советую проштудировать перегрузку оператора присваивания.

S>>>>Тоже может пригодится на собеседовании.
H>>>Так... пишу по памяти
H>>>
H>>>A& A::operator=(const A &a)
H>>>{
H>>>......// А тут что?
H>>>}
H>>>

H>>>Полагаю, так...
0>AFAIR:
0>1. Возвращаемое значение может быть любым
0>2. Но лучше, чтобы оно было ссылкой на объект типа A (в данном случае)
0>3. В самом конце тогда уж (если выполнять п. 2)
return *this;


Могу ошибаться, но если возвращаемое значение — ссылка на объект типа A,
надо ещё сделать проверку на присваивание самому себе:
A& A::operator=(const A &a)
{
   if (a != *this)
    {
       ....   
    }
  return *this;
}
Re[8]: Как я завалил собеседование
От: enzo  
Дата: 21.01.07 10:37
Оценка:
Здравствуйте, skymaster, Вы писали:


S>Могу ошибаться, но если возвращаемое значение — ссылка на объект типа A,

S> надо ещё сделать проверку на присваивание самому себе:
S>
S>A& A::operator=(const A &a)
S>{
S>   if (a != *this)
S>    {
S>       ....   
S>    }
S>  return *this;
S>}
S>


Во-первых, эту проверку следует делать всегда, независимо от типа возвращаемого значения.
Во-вторых, это у вас проверка по значению, с вызовом operator!=(). Её тоже иногда используют, но в большинстве случае следует проверять равенство ссылок.

A& A::operator=(const A &a)
{
   if (this != &a)
   {
      ....
   }
  return *this;
}
Re[6]: Как я завалил собеседование
От: Hottabych1  
Дата: 21.01.07 11:03
Оценка:
Здравствуйте, THESERG, Вы писали:

H>>
H>>A& A::operator=(const A &a)
H>>{
H>>...
H>>}
H>>

H>>Полагаю, так...

THE>держи ещё вопросов:

THE>- какова трудоёмкость поиска (значения по ключу) в stl контейнере map
THE>- ну там, совсем банальные вопросы: чем отличаются раннее связывание от позднего, TCP от UDP, select от poll
Снова играю по памяти, MSDN под рукой, но в него не лезу.
Так... map — это вроде дерево... если несортированное, то сложность поиска ничем не отличается от обычных списков. Перебирать каждый элемент и втупую сравнивать. Это O(n). Если сортированный, то на каждом шаге можно половину элементов отбрасывать (решаем, какую ветку дерева выбрать — левую или правую). То есть, это будет O(log2 n).
Раннее связывание — во время компиляции, позднее — во время выполнения. TCP гарантирует доставку, UDP — нет, это как вещание. Про select и poll не знаю...
Re: Как я завалил собеседование
От: Melo  
Дата: 21.01.07 11:03
Оценка:
Не расстраивайтесь.

По сути согласен с вами, те кто проводил собеседование неправы, IMHO, прекратив его после ошибки в одном (пусть и простом вопросе). Вам не повезло, вы попали на маньяков . А может просто у них был такой огромный конкурс на эту вакансию.
Re: Как я завалил собеседование
От: frik  
Дата: 21.01.07 11:27
Оценка:
Здравствуйте, Hottabych1, Вы писали:

меня тоже частенько грузят ООП, хотя в резюме я нигде его не пишу. как я понял это как таблица умножения -все это должны знать? и это проще всего спросить? или ценность есть в знании ООП, даже если нигде его не применял?
конечно если бы я каждый день его использовал, то может и помнил чтото, а так только из книжек без реальной практики
Re: А где же квиксорт?...
От: ZeVVs Россия http://www.sibirix.ru
Дата: 21.01.07 11:45
Оценка: :))) :)))
Не знаю, куда, может и в юмор. Но не смешно вообще...
Собеседование.
...
ПМ: Есть массив A. Необходимо отсортировать.
C: Дак есть же стандартный квиксорт.
ПМ: Ок, без проблем, давайте через квиксорт.
С: Дак я параметры не помню. Да и вообще, их за 30 секунд в MSDN посмотреть можно.
ПМ: Ок, без проблем. Вот компьютер, вот студия...
С: 1.сек.
ПМ: Ок не буду вас отвлекать. (отходит от компьютера)
.... спустя 15 минут ...
С: Готово.
ПМ: Отлично!
Смотрим код:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1 {
    class Program {
    
        static void Main(string[] args) {
            
            const int c = 10;
            int[] A = new int[c] {12, 123, 534, 123, 76, 34, 56, 23, 67, 34};
            //qsort((void*)A, (size_t)A, sizeof(int), compare);
            for (int i = 0; i < c; i++) {
                for (int j = i; j < c; j++) {
                    if (A[i] < A[j]) {
                        
                        int buf = A[i];
                        A[i] = A[j];
                        A[j] = buf;
                    }
                }
            }

            for (int i = 0; i < c; i++) {
                Console.WriteLine(A[i]);
            }            
        }
        /*
        int compare( const void *arg1, const void *arg2 )
        {            
            return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
        }
        */
    }
}

ПМ: А где же квиксо... А, понял... в комментариях...
Занавес.
This game has no name. It will never be the same.
Re[7]: Как я завалил собеседование
От: LuciferMoscow Россия  
Дата: 21.01.07 12:48
Оценка:
Здравствуйте, Hottabych1, Вы писали:

THE>>держи ещё вопросов:

THE>>- какова трудоёмкость поиска (значения по ключу) в stl контейнере map
H>Снова играю по памяти, MSDN под рукой, но в него не лезу.
H>Так... map — это вроде дерево... если несортированное, то сложность поиска ничем не отличается от обычных списков. Перебирать каждый элемент и втупую сравнивать. Это O(n). Если сортированный, то на каждом шаге можно половину элементов отбрасывать (решаем, какую ветку дерева выбрать — левую или правую). То есть, это будет O(log2 n).
Слив защитан. map всегда отсортирован
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[9]: Как я завалил собеседование
От: LuciferMoscow Россия  
Дата: 21.01.07 13:03
Оценка:
Здравствуйте, enzo, Вы писали:

S>> надо ещё сделать проверку на присваивание самому себе:

E>Во-первых, эту проверку следует делать всегда, независимо от типа возвращаемого значения.
Тут уже показывали фокус со swap. И никаких проверок не нужнл
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[8]: Как я завалил собеседование
От: Hottabych1  
Дата: 21.01.07 13:05
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

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


THE>>>держи ещё вопросов:

THE>>>- какова трудоёмкость поиска (значения по ключу) в stl контейнере map
H>>Снова играю по памяти, MSDN под рукой, но в него не лезу.
H>>Так... map — это вроде дерево... если несортированное, то сложность поиска ничем не отличается от обычных списков. Перебирать каждый элемент и втупую сравнивать. Это O(n). Если сортированный, то на каждом шаге можно половину элементов отбрасывать (решаем, какую ветку дерева выбрать — левую или правую). То есть, это будет O(log2 n).
LM>Слив защитан. map всегда отсортирован
Ага, глянул в доку и увидел, что map всегда сортирован, но было поздно — уже ответил
Re[9]: Как я завалил собеседование
От: LuciferMoscow Россия  
Дата: 21.01.07 13:08
Оценка:
Здравствуйте, Hottabych1, Вы писали:

LM>>Слив защитан. map всегда отсортирован

H>Ага, глянул в доку и увидел, что map всегда сортирован, но было поздно — уже ответил
Еще один воспрос: даны std::vector<int> и std::list<int>

Как наиболее быстрым способом найти в них число 10? Сколько операций для этого потребуется О?

P.S. В доку не смотреть
P.S.S. Рассмотреть оба случая: контейнеры сортированы\несортированы
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[5]: Как я завалил собеседование
От: avbochagov Россия  
Дата: 21.01.07 15:02
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

Одобрямс.

КД>Правда в последнее время, мне в голову все чаще и чаще приходя мысли, что проектировать классы нужно так, чтобы у них вообще не было реализаций конструкторов и операторов копирования.


Но это не всегда возможно.
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[9]: Как я завалил собеседование
От: skymaster  
Дата: 21.01.07 15:42
Оценка:
Здравствуйте, enzo, Вы писали:
]

E>Во-первых, эту проверку следует делать всегда, независимо от типа возвращаемого значения.

E>Во-вторых, это у вас проверка по значению, с вызовом operator!=(). Её тоже иногда используют, но в большинстве случае следует проверять равенство ссылок.

E>
E>A& A::operator=(const A &a)
E>{
E>   if (this != &a)
E>   {
E>      ....
E>   }
E>  return *this;
E>}
E>


Вы правы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.