Re[10]: Непонятка с собеседованиями.
От: frogkiller Россия  
Дата: 28.08.07 11:37
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Ужас!

CC>За такое в глаз а потом по рукам...

О, великий гуру С++, объясни мне, недостойному, в чём я неправ.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[11]: Непонятка с собеседованиями.
От: elmal  
Дата: 28.08.07 13:08
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>О, великий гуру С++, объясни мне, недостойному, в чём я неправ.

Ну, на одном из собеседований у меня в свое время спрашивали — а что будет, если класс будет иметь виртуальный деструктор (да и вообще виртуальные функции), и кто-то додумается вот так мегаоптимально обнулить объект . Как-то было дело народ огреб на таком суперобнулении .
Re[12]: Непонятка с собеседованиями.
От: frogkiller Россия  
Дата: 28.08.07 13:28
Оценка:
Здравствуйте, elmal, Вы писали:

F>>О, великий гуру С++, объясни мне, недостойному, в чём я неправ.

E>Ну, на одном из собеседований у меня в свое время спрашивали — а что будет, если класс будет иметь виртуальный деструктор (да и вообще виртуальные функции), и кто-то додумается вот так мегаоптимально обнулить объект . Как-то было дело народ огреб на таком суперобнулении .

Это всё понятно, как только появляется vmt, будет абзац. Любую "мегаоптимизацию" надо применять с умом. Я тут
Автор: frogkiller
Дата: 28.08.07
уже отвечал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[13]: Непонятка с собеседованиями.
От: Sergey Россия  
Дата: 28.08.07 14:05
Оценка:
> F>>О, великий гуру С++, объясни мне, недостойному, в чём я неправ.
> E>Ну, на одном из собеседований у меня в свое время спрашивали — а что будет, если класс будет иметь виртуальный деструктор (да и вообще виртуальные функции), и кто-то додумается вот так мегаоптимально обнулить объект . Как-то было дело народ огреб на таком суперобнулении .
>
> Это всё понятно, как только появляется vmt, будет абзац. Любую "мегаоптимизацию" надо применять с умом. Я тут
Автор: frogkiller
Дата: 28.08.07
уже отвечал.


Ладно бы тут хоть оптимизация была А то ведь просто грязь на ровном месте, и ничего больше.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[14]: Непонятка с собеседованиями.
От: frogkiller Россия  
Дата: 28.08.07 14:20
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Ладно бы тут хоть оптимизация была А то ведь просто грязь на ровном месте, и ничего больше.


Объясни, пожалуйста, в чём именно грязь? Я уже слышал несколько утверждений, что это плохо, но пока не было ни одного объяснения (может, имеет смысл выделить ветку и перенести в C++).
В том, что в случае возможного наследования возникнет нежданный трабл? (На это я вроде бы ответил)
В том, что просто некрасиво? (Извините, на вкус и цвет...)
В том, что данные нужно инициализировать в списке инициализации конструктора? (Не вижу особого выигрыша, а при возможных изменениях в структуре придётся в нескольких местах править)
В том, что где-то может не работать? (Я не гуру, но вроде бы для POD-типов должно работать во всех промышленых реализациях)
В чём ещё?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[15]: Непонятка с собеседованиями.
От: Sergey Россия  
Дата: 28.08.07 15:07
Оценка: 1 (1) +1
> Объясни, пожалуйста, в чём именно грязь? Я уже слышал несколько утверждений, что это плохо, но пока не было ни одного объяснения (может, имеет смысл выделить ветку и перенести в C++).
> В том, что в случае возможного наследования возникнет нежданный трабл? (На это я вроде бы ответил)

Библиотеки у вас, надо полагать, никогда не меняются? Проблемы при развитии подобного кода возможны, кстати, не только из-за наследования.

> В том, что просто некрасиво? (Извините, на вкус и цвет...)


И некрасиво, кстати, тоже.

> В том, что данные нужно инициализировать в списке инициализации конструктора?


Не обязательно. Но уж тереть-то все подряд нулями тоже не следует.

> (Не вижу особого выигрыша, а при возможных изменениях в структуре придётся в нескольких местах править)


Ну а так вы при возможных изменениях можете AV словить. Это, вне всякого сомнения, значительно лучше, чем в нескольких местах править.

> В том, что где-то может не работать? (Я не гуру, но вроде бы для POD-типов должно работать во всех промышленых реализациях)


Это не POD-тип.

> В чём ещё?


Потенциально опасный код написан без всякой на то причины.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[8]: Непонятка с собеседованиями.
От: aqt  
Дата: 28.08.07 15:50
Оценка:
Здравствуйте, NailS, Вы писали:

A>>ну-ну.

A>>интересно что будет в Африке если негра не возьмут на работу потому что он черный?

NS>А если европейца не возьмут потому что он белый?

NS>Какой-то расизм у Вас однобокий.

Белый американец отсудил у негра 150 тысяч долларов за расовую дискриминацию. Тут http://www.lenta.ru/articles/2007/08/24/racism/
Re[16]: Непонятка с собеседованиями.
От: BulatZiganshin  
Дата: 28.08.07 15:52
Оценка:
>> (Не вижу особого выигрыша, а при возможных изменениях в структуре придётся в нескольких местах править)

S>Ну а так вы при возможных изменениях можете AV словить. Это, вне всякого сомнения, значительно лучше, чем в нескольких местах править.


это действительно лучше, чем оставить неинициализированным новое поле — такую ошибку проще обнаружить. вообще проблема в том, что C++ не предоставляет средств, гарантирующих инициализацию полей, и омстаётся надежда только на разного рода утилиты — чекеры, редакторы, компиляторы, макросистемы
Люди, я люблю вас! Будьте бдительны!!!
Re[7]: Непонятка с собеседованиями.
От: bastrakov Россия http://bastrakof.livejournal.com/
Дата: 28.08.07 16:03
Оценка: :)
Здравствуйте, BulatZiganshin, Вы писали:

B>>я обычно использовал вопрос (и сам несколько раз на него отвечал) "вот у нас есть текущая ситуация в проекте, попытайтесь ее решить". при этом можно рассматривать реально проблему, а (лучше) решенную проблему.

B>>один из примеров: "клиент жалуется, что программа работает медленно. ваши действия".
B>>и тут тебе и про оптимизацию кода, и про последовательность разбора ситуации, и про взаимодействия в команде и между проектами...

BZ>по-моему, это задача для тимлида, а не простого девелопера


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

во
Re[8]: Непонятка с собеседованиями.
От: BulatZiganshin  
Дата: 28.08.07 16:21
Оценка:
BZ>>по-моему, это задача для тимлида, а не простого девелопера

B>гм... теперь я знаю, почему наши девелоперы спокойно уходят тим-лидами.

B>но мне страшно, что ваши тим-лиды работают на уровне наших девелоперов.

как говорил один фидошник, директор местного отделения довольно крупного телекома — "это вопрос не моего оклада"
Люди, я люблю вас! Будьте бдительны!!!
Re[17]: Непонятка с собеседованиями.
От: Sergey Россия  
Дата: 28.08.07 20:03
Оценка: 1 (1)
Здравствуйте, BulatZiganshin, Вы писали:

S>>Ну а так вы при возможных изменениях можете AV словить. Это, вне всякого сомнения, значительно лучше, чем в нескольких местах править.


BZ>это действительно лучше, чем оставить неинициализированным новое поле — такую ошибку проще обнаружить. вообще проблема в том, что C++ не предоставляет средств, гарантирующих инициализацию полей, и омстаётся надежда только на разного рода утилиты — чекеры, редакторы, компиляторы, макросистемы


Ошибки, которые могут случиться при расширении подобного класса, одними AV не ограничиваются. Смотря чего в этот класс будет добавляться. Вполне реально, например хэндл потерять — если добавить в качестве члена данных обертку, создающую какой-нибудь семафор в конструкторе.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[5]: Непонятка с собеседованиями.
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 28.08.07 20:36
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>>>меня этот вопрос тоже интересует, хотя и немного с другой точки зрения — как произвести на работодателя впечатление что я хочу расти и развиваться (или не расти — в зависимости от его требований)

A>>Проблема еще в том, что почти все люди считают, что они растут и саморазвиваются.

BZ>а может так оно и есть? и разница в том, в каком они направлении развиваются, каким образом и каких успехов достигают? человек вообще обладает исключительной способностью замечать в себе все лучшие качества — это надо использовать


Возможно. Это сложный филосовский вопрос.

Тем не менее суровая правда жизни почему-то говорит что:
1) Программисты и вообще люди очень разные.
2) Бывают исключения, что человек делает что-то одно хорошо и что-то другое плохо, но обычно если люди которые все делают хорошо, и есть которые все делают плохо.
3) Различие между первыми и вторыми скорее в отношении к делу чем в интеллекте, знании языков программирования и прочее.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re: Непонятка с собеседованиями.
От: strcpy Россия  
Дата: 29.08.07 04:42
Оценка:
Мне кажется, что собеседование это нелепость.
Нужно дать человеку не очень сложную задачку по программированию и попросить его сделать её в realtime.
Cразу становится ясно, кто есть кто.

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

H>Привет всем. Попробую сформулировать проблему. Я до того, как сменил предыдущее место работы пару раз проваливал собеседования. Причем мне говорили, что выну практически ничего не знаете. После того, как устроился на работу (тоже с трудом) за полгода получил 2 повышения, через год стал системным архитектором. Ну и соответственно по деньгам повышали.

H> Мой знакомец собеседования проходит на ура, но на работе держится от полугода до года. Потом ему вежливо предлагают поискать другую. Собственно из него разработчик, как из меня балерина. Причем я знаю несколько людей, с подобными проблемами. Например у меня боец работает, брать его не хотели. После воплей нашего тех. директора я ему дал таки тестовое задание. Чел шел на разработчика GUI, остального сам писал что не знает, я ему дал задание написать драйвер. Не очень сложный, но все-таки. Справился быстрее, чем я ожидал. Сейчас уже полгода с ним ну никаких проблем. Тестеры говорят, что его модули тестить скучно .

H>Ну и собственно вопрос к работодателям: господа, может быть в вопросах на собеседовании и/или с тестами что-то не так?
Удвой число ошибок, если не получается добиться цели.
Re[9]: Непонятка с собеседованиями.
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 29.08.07 07:01
Оценка:
Здравствуйте, frogkiller, Вы писали:

I>>а как потом у вас значение sizeof(*this) использовалось? может кусочек кода покажете, действительно интересно где такое реально применимо


F>Например, так:


class SOCKET_OVERLAPPED : public WSAOVERLAPPED
{
 //...
    SOCKET_OVERLAPPED()
    {
        ZeroMemory(this, sizeof(*this));
    }
 //...
};


Поставил тебе +1, что бы ты сильно не расстраивался из за того, что тебя не догнали

Тут на форуме по плюсам тупые и умные вопросы придумывают. Я вот тоже, созерцая твой код, придумал
— Когда этот подход приведет к краху? Ну засада с VMT / виртуальным наследованием / нетривиальными членами класса очевидна.
— Когда он будет работать? Это тоже вроде понятно — когда нет того, что приведет к краху.
— Допустим в классе есть виртуальный деструктор. При каких условиях он все-таки сможет вызваться несмотря на такую "варварскую" инициализацию... вижу два случая. Не, лучше переформулировать так — в каких случаях не будет AV — вижу три сценария
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[18]: Непонятка с собеседованиями.
От: frogkiller Россия  
Дата: 29.08.07 08:20
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Ошибки, которые могут случиться при расширении подобного класса, одними AV не ограничиваются. Смотря чего в этот класс будет добавляться. Вполне реально, например хэндл потерять — если добавить в качестве члена данных обертку, создающую какой-нибудь семафор в конструкторе.


Коллеги, всё-таки не забывайте, для чего предназначен этот класс. Он передаётся в качестве overlaped-структуры в WSASend и служит для связи структуры и выделяемого буфера. Это единственное его назначение. Более того в GetQueuedCompletionStatus он доступен как LPOVERLAPPED. Соответственно, никаких dynamic_cast'ов и прочих полиморфных радостей жизни быть не может (error С2683).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[19]: Непонятка с собеседованиями.
От: CreatorCray  
Дата: 29.08.07 08:24
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Коллеги, всё-таки не забывайте, для чего предназначен этот класс. Он передаётся в качестве overlaped-структуры в WSASend и служит для связи структуры и выделяемого буфера. Это единственное его назначение. Более того в GetQueuedCompletionStatus он доступен как LPOVERLAPPED. Соответственно, никаких dynamic_cast'ов и прочих полиморфных радостей жизни быть не может (error С2683).


Ну так делай его struct а не class
Вообще нафига над ним подобные обертки делать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: Непонятка с собеседованиями.
От: strm Украина  
Дата: 29.08.07 08:36
Оценка:
aqt>P.S. Как ни странно, самые интересные работы как по деньгам, так и по задачам (крупные компании), я получал не проходя ни каких испытаний, достаточно было поговорить с руководителями отделов, и пообщаться в коллективе разработчиков.

+1 У меня тоже так было несколько раз. Причем были и тесты, но они не были решающим фактором.
Re[10]: Непонятка с собеседованиями.
От: frogkiller Россия  
Дата: 29.08.07 08:47
Оценка: 2 (2) :)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>- Допустим в классе есть виртуальный деструктор. При каких условиях он все-таки сможет вызваться несмотря на такую "варварскую" инициализацию... вижу два случая. Не, лучше переформулировать так — в каких случаях не будет AV — вижу три сценария


struct A
{
    int aa, bb, cc;
};

struct B : public A
{
    int dd;
    B()
    {
        ZeroMemory(this, sizeof(*this));
    }
    virtual ~B()
    {
        printf("~B()\r\n");
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    B bobj;
    A * aobjptr = (A*)(&bobj);
    B * b2objptr = (B*)(aobjptr);

    b2objptr->aa = 5;

    bobj.~B();                     // явный вызов
    ((B)(*b2objptr)).~B();        // конструктор копии не убивает vmt
    ((B&)(*b2objptr)).~B();        // ссылка
    //(*b2objptr).~B();            // ожидаемый AV :)
    
    ((B&)(*aobjptr)).~B();        // глюк MSVC71?
    
    return 0;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[20]: Непонятка с собеседованиями.
От: frogkiller Россия  
Дата: 29.08.07 08:54
Оценка:
Здравствуйте, CreatorCray, Вы писали:

F>>Коллеги, всё-таки не забывайте, для чего предназначен этот класс. Он передаётся в качестве overlaped-структуры в WSASend и служит для связи структуры и выделяемого буфера. Это единственное его назначение. Более того в GetQueuedCompletionStatus он доступен как LPOVERLAPPED. Соответственно, никаких dynamic_cast'ов и прочих полиморфных радостей жизни быть не может (error С2683).


CC>Ну так делай его struct а не class


А смысл? Это же не C#, тут поведение их идентично (ну кроме дефолтного доступа).

CC>Вообще нафига над ним подобные обертки делать?


Я же говорю, чтобы связать структуру overlapped и выделяемый для сокетной операции буфер. А потом синхронно их удалить. Как это ещё сделать? Неужели задавать внешнее отображение типа map? Ну и по мелочи, для всяких там аксессоров...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[11]: Непонятка с собеседованиями.
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 29.08.07 09:06
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>>- Допустим в классе есть виртуальный деструктор. При каких условиях он все-таки сможет вызваться несмотря на такую "варварскую" инициализацию... вижу два случая. Не, лучше переформулировать так — в каких случаях не будет AV — вижу три сценария


F>    B bobj;
F>    A * aobjptr = (A*)(&bobj);
F>    B * b2objptr = (B*)(aobjptr);

F>    b2objptr->aa = 5;

F>    bobj.~B();                     // явный вызов
F>    ((B)(*b2objptr)).~B();        // конструктор копии не убивает vmt
F>    ((B&)(*b2objptr)).~B();        // ссылка
F>    //(*b2objptr).~B();            // ожидаемый AV :)
    
F>    ((B&)(*aobjptr)).~B();        // глюк MSVC71?
    
F>    return 0;


Гы, про явный вызов деструктора я забыл +1

Я думал про возможное использование "супер-пупер" компилятора, который (в частных случаях)
— либо встроит код деструктора в точку вызова
— либо вычислит адрес деструктора без обращения к VMT

третий вариант
— из-за утечек памяти в программе, деструктор вообще не вызывается
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.