Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, 0xd34df00d, Вы писали:
THE>>>Ну, пусть это будет AVP (Касперский) LM>Возможно(все мои предположения сводились) к винде+офису. LM>Но он там не прошел бы брейнбенч.
0>>Agnitum? LM>Домохозяйки?
0>>Eset? LM>Не знаю. Может потому, что я не домохозяйка.
Ставки сделаны, ставок больше нет, господа. Это был Яндекс...
Здравствуйте, skymaster, Вы писали:
S>Здравствуйте, Hottabych1, Вы писали:
H>>Теперь, думаю, я это запомню на всю жизнь
S>Ещё советую проштудировать перегрузку оператора присваивания. S>Тоже может пригодится на собеседовании.
Так... пишу по памяти
держи ещё вопросов:
— какова трудоёмкость поиска (значения по ключу) в stl контейнере map
— ну там, совсем банальные вопросы: чем отличаются раннее связывание от позднего, TCP от UDP, select от poll
Здравствуйте, 0xd34df00d, Вы писали:
0>>>А по-моему, есть вещи, которые нельзя забывать никогда, как таблицу умножения... А еще есть вещи, говорящие о непонимании практически базовых концепций и принципов. И соискатель, может быть, прав в данной ситуации — ему нужно получить наиболее хорошо знающего работника.
У меня как-то был период, когда мне, в силу специфики проекта, приходилось писать код на 5 разных языках. Так я иногда синтаксис цикла for забывал для какого-нибудь языка, не говоря уже про более сложные вещи. Цикл for — это, вроде как, базовая концепция. Говорит ли это о том, что я ее не понимаю и мне пора на свалку?
H>>Согласен! Просто привык Си++ считать просто инструментом в работе. Например, мне нужно то-то... как там, значит, оно в Си++ делается? И лезу в справочник. После чего на следующий день благополучно это забываю. Насколько оправдан такой подход?
0>Имхо если постоянно открывать справочники (пусть даже это будет какое-нибудь контекстно-зависимое окошко в VS) по любому поводу, то очень много времени теряется.
Это если ты секретарь-машинистка, то у тебя много времени теряется и ты становишься профнепригоден. Программист же, если его задачу нельзя отнести к категории самых элементарных, до 95% времени может потратить на размышления, чтения справочников и интернета, проверки вариантов, таймирование, тестирование, отладку, общение с коллегами и начальством итп.
0>Тут важна граница, ведь учить наизусть библиотеку, скажем, алгоритмов из STL — тоже не очень хорошо )
Да, и граница эта проходит на уровне понимания концепций, а отнюдь не на уровне синтаксиса, идиотских задач, вроде i += i++ + ++i, и прочего в этом роде.
Здравствуйте, Hottabych1, Вы писали:
S>>Ещё советую проштудировать перегрузку оператора присваивания. S>>Тоже может пригодится на собеседовании. H>Так... пишу по памяти H>
H>A& A::operator=(const A &a)
H>{
H>......// А тут что?
H>}
H>
Здравствуйте, 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)
Здравствуйте, Hottabych1, Вы писали:
THE>>>>Ну, пусть это будет AVP (Касперский) LM>>Возможно(все мои предположения сводились) к винде+офису. LM>>Но он там не прошел бы брейнбенч.
0>>>Agnitum? LM>>Домохозяйки?
0>>>Eset? LM>>Не знаю. Может потому, что я не домохозяйка. H>Ставки сделаны, ставок больше нет, господа. Это был Яндекс...
Здравствуйте, avbochagov, Вы писали:
КД>>Навеяло... а то, как пишется нормальный оператор копирования, я понял еще через пару лет
A>даже интересно стало! а можно пример, как было до понимания, и как стало после понимания?
T& T::operator = (const T& x)
{
T tmp(x); // Copy constructorthis->swap(tmp); // NO EXCEPTIONS !!!return *this;
}//T::copy operator
Правда в последнее время, мне в голову все чаще и чаще приходя мысли, что проектировать классы нужно так, чтобы у них вообще не было реализаций конструкторов и операторов копирования.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, 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;
}
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;
}
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 не знаю...
По сути согласен с вами, те кто проводил собеседование неправы, IMHO, прекратив его после ошибки в одном (пусть и простом вопросе). Вам не повезло, вы попали на маньяков . А может просто у них был такой огромный конкурс на эту вакансию.
меня тоже частенько грузят ООП, хотя в резюме я нигде его не пишу. как я понял это как таблица умножения -все это должны знать? и это проще всего спросить? или ценность есть в знании ООП, даже если нигде его не применял?
конечно если бы я каждый день его использовал, то может и помнил чтото, а так только из книжек без реальной практики
Не знаю, куда, может и в юмор. Но не смешно вообще...
Собеседование.
...
ПМ: Есть массив 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 );
}
*/
}
}
ПМ: А где же квиксо... А, понял... в комментариях...
Занавес.
Здравствуйте, Hottabych1, Вы писали:
THE>>держи ещё вопросов: THE>>- какова трудоёмкость поиска (значения по ключу) в stl контейнере map H>Снова играю по памяти, MSDN под рукой, но в него не лезу. H>Так... map — это вроде дерево... если несортированное, то сложность поиска ничем не отличается от обычных списков. Перебирать каждый элемент и втупую сравнивать. Это O(n). Если сортированный, то на каждом шаге можно половину элементов отбрасывать (решаем, какую ветку дерева выбрать — левую или правую). То есть, это будет O(log2 n).
Слив защитан. map всегда отсортирован
Здравствуйте, enzo, Вы писали:
S>> надо ещё сделать проверку на присваивание самому себе: E>Во-первых, эту проверку следует делать всегда, независимо от типа возвращаемого значения.
Тут уже показывали фокус со swap. И никаких проверок не нужнл
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, Hottabych1, Вы писали:
THE>>>держи ещё вопросов: THE>>>- какова трудоёмкость поиска (значения по ключу) в stl контейнере map H>>Снова играю по памяти, MSDN под рукой, но в него не лезу. H>>Так... map — это вроде дерево... если несортированное, то сложность поиска ничем не отличается от обычных списков. Перебирать каждый элемент и втупую сравнивать. Это O(n). Если сортированный, то на каждом шаге можно половину элементов отбрасывать (решаем, какую ветку дерева выбрать — левую или правую). То есть, это будет O(log2 n). LM>Слив защитан. map всегда отсортирован
Ага, глянул в доку и увидел, что map всегда сортирован, но было поздно — уже ответил
Здравствуйте, Hottabych1, Вы писали:
LM>>Слив защитан. map всегда отсортирован H>Ага, глянул в доку и увидел, что map всегда сортирован, но было поздно — уже ответил
Еще один воспрос: даны std::vector<int> и std::list<int>
Как наиболее быстрым способом найти в них число 10? Сколько операций для этого потребуется О?
P.S. В доку не смотреть
P.S.S. Рассмотреть оба случая: контейнеры сортированы\несортированы
Одобрямс.
КД>Правда в последнее время, мне в голову все чаще и чаще приходя мысли, что проектировать классы нужно так, чтобы у них вообще не было реализаций конструкторов и операторов копирования.
Здравствуйте, enzo, Вы писали:
]
E>Во-первых, эту проверку следует делать всегда, независимо от типа возвращаемого значения. E>Во-вторых, это у вас проверка по значению, с вызовом operator!=(). Её тоже иногда используют, но в большинстве случае следует проверять равенство ссылок.
E>