Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 12:16
Оценка: 252 (39)
или коллекция вопросов на собеседовании которую я тщательно
собирал. некоторые вопросы реально задавались, некоторые описаны
из рассказов коллег.

C++
-для чего нужен виртуальный деструктор
-чем отличается вызов виртуального деструктора от обычной виртуальной
функции
-чем отличаются const char* ptr и char const *ptr
-чем чреват выброс исключения из конструктора, деструктора
-в чем потенциальная опасность конструктора копирования по умолчанию
-чем отличаются операторы приведения типа static_cast, reinterpret_cast, dynamic_cast, const_cast
-метод const. класс const. ключевое слово mutable.
-как определить чисто виртуальную функцию, абстрактный базовый класс
-как организовать освобождение ресурсов при выходе из функции/метода
-как запретить создание объектов в куче
-как предотвратить утечки памяти связанные с с забывчивостью вызывать Delete
-как запретить удаление объекта класса
-как запретить наследование от данного класса
-что такое виртуальный базовый класс (виртуальное наследование)
-что такое частичная специализация шаблона
-для чего нужен виртуальный конструктор
-как удалить массив объектов
-в каких случаях вызывается конструктор копирования
-что такое конструктор конверсии. ключевое слово explicit.
-в каких случаях переменная класса должна быть проинициализирована в списке инициализации конструктора
-когда класс должен иметь конструктор по умолчанию
-когда можно вернуть из функции ссылку на локальный объект
-почему в C++ нельзя реализовать автоматическую сборку мусора?

STL
-Как выбрать подходящий для задачи STL-контейнер
-Что такое функтор. Что такое алгоритм
-Какие есть способы поиска в контейнерах
-В чем разница между stack, queue и другими контейнерами
-Что такое распределители (allocators)

COM и ATL
-Что такое апартамент. В чем разница между однопоточным и многопоточным апартаментом.
-Что такое суррогатный процесс
-Как передать указатель на интерфейс из одного потока в другой в STA
-Виды маршалинга , их достоинства и недостатки
-Какие есть способы передачи массива структур в COM-сервер.
-Передача блоков данных переменной длины.
-Кто должен распределять и освобождать память при передаче строк BSTR
-Как получить на клиенте данные из буфера, распределенного в COM-сервере
-Как в ATL создать многопоточный объект (MTA)
-Какой интерфейс в ATL используется для передачи клиенту информации об ошибках?
-Как организовать передачу callback-вызовов от COM-сервера к клиенту ?


Win32
-Как распределяется доступная процессу память
-Чем отличается семафор от мьютекса
-Какие средства межпроцессной коммуникации вы знаете, их достоинства и недостатки?
-Как создать единственный экземпляр приложения в памяти (singleton)
-Как происходит создание отображаемого в память файла
-Как передать процессу указатель на память распределенную в другом
процессе
-Как сигнализировать другому потоку о его завершении и как дождаться его завершения из вызывающего потока

Объектно-ориентированное проектирование
-Что такое полиморфизм
-Что такое is-a и has-a отношения
-Знакомы ли вам паттерны проектирования

Базы данных
-что такое нормализация
-свойства 3-й нормальной формы
-достоинства и недостатки нормализации
-что такое ссылочная целостность
-что такое первичный ключ, внешний ключ
-в чем достоинства и недостатки использования триггеров
-что такое транзакция. виды изоляции транзакций
-разрешение конфликтов при одновременном изменении данных
Re: Для чего нужен виртуальный конструктор?
От: Sergey S. Беларусь  
Дата: 26.11.02 12:41
Оценка: 3 (1)
Здравствуйте, Awaken, Вы писали:

A>или коллекция вопросов на собеседовании которую я тщательно

A>собирал. некоторые вопросы реально задавались, некоторые описаны
A>из рассказов коллег.

Это, конечно — !

зы: как приложение, хотелось бы посмотреть коллекцию ответов на коллекцию вопросов (проверить себя, узнать что-то новое и тэдэ)
Re: Для чего нужен виртуальный конструктор?
От: Алекс Россия http://wise-orm.com
Дата: 26.11.02 12:54
Оценка:
Здравствуйте, Awaken, Вы писали:

A>или коллекция вопросов на собеседовании которую я тщательно

A>собирал. некоторые вопросы реально задавались, некоторые описаны
A>из рассказов коллег.

A>-как организовать освобождение ресурсов при выходе из функции/метода

A>-как предотвратить утечки памяти связанные с с забывчивостью вызывать Delete

ИМХО, два одинаковы вопроса

A>-как запретить удаление объекта класса


Не понял! Что, создать можно а удалить нельзя?

A>-для чего нужен виртуальный конструктор


Я серьезно, может объяснишь, что-то я не очень врубаюсь что ты имеешь в виду

A>-когда класс должен иметь конструктор по умолчанию


Вопрос не корректный, ИМХО.

A>-почему в C++ нельзя реализовать автоматическую сборку мусора?


Можно.

A>COM и ATL

A>-Как передать указатель на интерфейс из одного потока в другой в STA

Вопрос не корректный.

A>-Какие есть способы передачи массива структур в COM-сервер.


А почуму именно в, а не из?

A>-Как в ATL создать многопоточный объект (MTA)


Может как написать кокласс, поддерживающий многопоточность?

A>-Как организовать передачу callback-вызовов от COM-сервера к клиенту ?


callback и events — разные вещи. Уточни.

A>

A>Win32
A>-Как распределяется доступная процессу память

Вопрос не корректный.

A>-Как создать единственный экземпляр приложения в памяти (singleton)


В памяти?
Re[2]: Для чего нужен виртуальный конструктор?
От: Igor Soukhov  
Дата: 26.11.02 13:06
Оценка:
Здравствуйте, Алекс, Вы писали:

A>>-для чего нужен виртуальный конструктор

А>Я серьезно, может объяснишь, что-то я не очень врубаюсь что ты имеешь в виду

поищи в с++ форуме — вопрос достаточно избитый.
* thriving in a production environment *
Re: Для чего нужен виртуальный конструктор?
От: Mink Россия  
Дата: 26.11.02 13:18
Оценка:
Здравствуйте, Awaken, Вы писали:


A>C++

A>-чем отличаются const char* ptr и char const *ptr

Ответ: ничем.

Может имелось в виду const char* ptr и char* const ptr?
Сила, она в ньютонах
Re[3]: Для чего нужен виртуальный конструктор?
От: Алекс Россия http://wise-orm.com
Дата: 26.11.02 13:19
Оценка: -2
Здравствуйте, Igor Soukhov, Вы писали:

хъ

IS>поищи в с++ форуме — вопрос достаточно избитый.


1. Нельзя искать по форумам
2. В природе (по крайней мере в С++) такого понятия нет
3. Поиск это подтвердил. И так как уважаемый Awaken упомянул о нем в C++ разделе, а не в проектировании, например, можно сказать, что он лоханулся.
Re[2]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 13:46
Оценка:
Здравствуйте, Awaken, Вы писали:

A>или коллекция вопросов на собеседовании которую я тщательно

A>собирал. некоторые вопросы реально задавались, некоторые описаны
A>из рассказов коллег.

A>-как организовать освобождение ресурсов при выходе из функции/метода

A>-как предотвратить утечки памяти связанные с с забывчивостью вызывать Delete

>ИМХО, два одинаковы вопроса


ИМХО разные.

Ответ на первый вопрос: использовать идиому «захват ресурсов при инициализации»

Ответ на второй: рассказать про умные указатели, вскользь упомянув про
паттерн Прокси чтоб показать какой ты умный

A>-как запретить удаление объекта класса


>Не понял! Что, создать можно а удалить нельзя?


Имеется в виду – запретить пользоваться Delete.

A>-для чего нужен виртуальный конструктор


>Я серьезно, может объяснишь, что-то я не очень врубаюсь что ты имеешь в >виду


Вопрос часто встречается на интервью по C++. Это просто подколка.
На самом деле есть такой паттерн, но к C++ не имеет отношение

A>-когда класс должен иметь конструктор по умолчанию


>Вопрос не корректный, ИМХО.


При создании массива объектов класс должен иметь конструктор
по умолчанию

A>-почему в C++ нельзя реализовать автоматическую сборку мусора?


>Можно.

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

A>COM и ATL

A>-Как передать указатель на интерфейс из одного потока в другой в STA

>Вопрос не корректный.


Тут надо рассказать про функции CoInterThreadMarshalInterfaceInStream и
CoGetInterfaceAndReleaseStream, не запутавшись в названиях

A>-Какие есть способы передачи массива структур в COM-сервер.


>А почуму именно в, а не из?


Имеется в виду описание структур в IDL и как ее засунуть в VARIANT

A>-Как в ATL создать многопоточный объект (MTA)


>Может как написать кокласс, поддерживающий многопоточность?


A>-Как организовать передачу callback-вызовов от COM-сервера к клиенту ?


>callback и events — разные вещи. Уточни.


Рассказать о IConnectionPoint, Advise, etc

A>

A>Win32
A>-Как распределяется доступная процессу память

>Вопрос не корректный.


Меня два раза его спрашивали. Ответ – 2Gb в пользовательском режиме
Остальное резервируется под ядро и совместимость с 16-бит. приложениями

A>-Как создать единственный экземпляр приложения в памяти (singleton)


>В памяти?


Речь о том чтобы только можно было запустить только одну копию программы
Один из вариантов – использовать именованный объект ядра (например мьютекс)
Re[2]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 13:47
Оценка:
M>Может имелось в виду const char* ptr и char* const ptr?

да. это опечатка.
Re[3]: Для чего нужен виртуальный конструктор?
От: Алекс Россия http://wise-orm.com
Дата: 26.11.02 13:57
Оценка: :)
Здравствуйте, Awaken, Вы писали:

хъ

A>ИМХО разные.


A>Ответ на первый вопрос: использовать идиому «захват ресурсов при инициализации»


A>Ответ на второй: рассказать про умные указатели, вскользь упомянув про

A>паттерн Прокси чтоб показать какой ты умный

Техника "выделение ресурся есть инициализация" реализуется с помощью всевозможных враперов или умных указателей.

A>>-как запретить удаление объекта класса


>>Не понял! Что, создать можно а удалить нельзя?


A>Имеется в виду – запретить пользоваться Delete.


Оператором delete ты хочешь сказать? (Вижу что хочешь! )

хъ

A>Вопрос часто встречается на интервью по C++. Это просто подколка.

A>На самом деле есть такой паттерн, но к C++ не имеет отношение

А зачем его в С++ тогда ты засунул?

A>>-когда класс должен иметь конструктор по умолчанию


>>Вопрос не корректный, ИМХО.


A>При создании массива объектов класс должен иметь конструктор

A>по умолчанию

Не только при в этом случае. Конструктор по умолчанию должен быть для тех объектов, для которых нужна инициализация по умолчанию. Например, класс без ctor по умолчанию нельзя использовать в std::map.

хъ

A>Реализовать то можно но нет гарантии что программист не нарушит этот механизм. Правильный ответ – из-за наличия арифметических операций над

A>указателями сборщик мусора не сможет узнать есть ли еще ссылки на объект или нет

А мы запретим арифметические операции над указателями!

хъ

A>Меня два раза его спрашивали. Ответ – 2Gb в пользовательском режиме

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

Вопрос должен звучать так: Какова архитектура виртуальной памяти под виндами и структура виртуального адресного пространства процесса.

A>>-Как создать единственный экземпляр приложения в памяти (singleton)


хъ
Re[4]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 14:08
Оценка: :)
А>Техника "выделение ресурся есть инициализация" реализуется с помощью всевозможных враперов или умных указателей.

в общем да, но вопроса было именно два. в течение одного собеседования

А>Оператором delete ты хочешь сказать? (Вижу что хочешь! )


вот ты и сам понял

А>А зачем его в С++ тогда ты засунул?


спрашивают его именно по C++

A>>При создании массива объектов класс должен иметь конструктор


А>Не только при в этом случае. Конструктор по умолчанию должен быть для тех объектов, для которых нужна >инициализация по умолчанию. Например, класс без ctor по умолчанию нельзя использовать в std::map.


вероятно потому что map внутри использует массив.


А>А мы запретим арифметические операции над указателями!


вот в C# их поэтому и запретили

А>Вопрос должен звучать так: Какова архитектура виртуальной памяти под виндами и структура виртуального адресного >пространства процесса.


ты бы с легкостью прошел это интервью
Re[4]: Для чего нужен виртуальный конструктор?
От: Mink Россия  
Дата: 26.11.02 14:08
Оценка:
Здравствуйте, Алекс, Вы писали:

A>>>-когда класс должен иметь конструктор по умолчанию


>>>Вопрос не корректный, ИМХО.


A>>При создании массива объектов класс должен иметь конструктор

A>>по умолчанию

А>Не только при в этом случае. Конструктор по умолчанию должен быть для тех объектов, для которых нужна инициализация по умолчанию. Например, класс без ctor по умолчанию нельзя использовать в std::map.


Как пишет Элджер: "Чем дольше я имею дело с С++, тем чаще мне кажется, что нарушение этих требований [наличие конструктора по умолчанию и рабочего оператора = ] — проявление злостного непрофессионализма, за которое следует наказывать парой лет каторжного программирования на BASIC."
Сила, она в ньютонах
Re[5]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 14:16
Оценка:
>конструктора по умолчанию и рабочего оператора = ] — проявление злостного непрофессионализма, за которое следует >наказывать парой лет каторжного программирования на BASIC."

уж лучше на языке 1С
Re[3]: Для чего нужен виртуальный конструктор?
От: vasketsov Россия http://ntprog.by.ru
Дата: 26.11.02 14:18
Оценка:
Здравствуйте, Awaken, Вы писали:

A>>Win32

A>>-Как распределяется доступная процессу память

>>Вопрос не корректный.

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

A>Меня два раза его спрашивали. Ответ – 2Gb в пользовательском режиме

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

Это так распределяется доступная процессу память ?
Ничего не скажешь, крутая 9x-овая трава!!!

Для NT- даже если ничего не сказать про то что в первой "половине" (2GB или 3GB, если boot.ini поправить) как устроено, в "той" части все четко и прозрачно описано где что находится, и "та" память также доступна процессу (контекст "вызвавшего потока" — один из полноправных контекстов при выполнении кода в режиме ядра). Прямо недоступно только то, что вызывается из System Working Threads (это другой поток, в контексте System), но все равно можно прочитать и оттуда при желании. Вот уж что совсем не доступно — так это специально созданные условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же 0xFFFF вниз от верхней границы UserMode).
Васкецов Сергей
http://registry.km.ru
Re[5]: Для чего нужен виртуальный конструктор?
От: Dima2  
Дата: 26.11.02 14:19
Оценка: 73 (11)
А вот еще список вопросов. Некоторые из них провокационные


Объясните разницу между понятиями виртуальная функция и виртуальное наследование .
Объясните, чем отличаются глобальные статические функции от статических функций, членов классов.
Что общего, и чем обычно отличаются реализации конструкторов копирования, инициализации и перегруженной операции присваивания?
Сравните 2 способа перегрузки операций: как метод класса и как внешнюю функцию-друг .
Как создать в классе виртуальные конструкторы и деструктор?
Может ли шаблонный (темплэйтный) класс быть абстрактным? Почему?
В чем специфика перегрузки операций "sizeof", "typeid", "new" и "delete"? Чем она вызвана?
Сравните особенности перегрузки операций "()" и "[]".
Дайте развернутое сравнение работы со строками в стиле С (char*) и С++ (string).
Дайте развернутое сравнение работы с динамической памятью в С и С++.
Дайте развернутое сравнение стандартных средств ввода-вывода в С и С++.
Что означает оператор throw без параметра?
Расскажите, какие бывают итераторы и чем они отличаются.
В чем различие между модификаторами register, const и volatile?
Как написать функцию, принимающую заранее неизвестное число аргументов?
В чем разница между конструкциями "extern" и "extern "C""?
В чем, в рамках традиционного С++, различие между using и include?
Сравните использование макросов, inline-функций и template-функций.
Как грамотно организовать нетривиальную сортировку средствами стандартных библиотек С и С++ (сравните подходы)?
Расскажите, что и как нужно сделать, что бы объекты написанного Вами класса можно было помещать в cout и читать из cin?
Сравните различные формы операций приведения типа (в стиле С и в стиле С++). Расскажите о перегрузке этих операций.
У каждого класса есть некоторые особые функции-члены, вызовы которых могут вставляться компилятором в код без явного на то указания программиста. Перечислите такие функции, члены и случаи, когда могут возникать неявные вызовы.
Как задать значения аргументов функций по умолчанию? Каковы плюсы и минусы использования этой возможности С++? Каковы ее альтернативы?
При написании оператора catch мы можем в качестве типа его аргумента написать непосредственно тип исключения, указатель на тип исключения либо ссылку на тип исключения. Сравните эти подходы.
В каком порядке вычисляются аргументы функции при ее вызове: слева направо, справа налево или еще как-нибудь? Например, в каком порядке будут вычислены аргументы в следующем примере: f(5+I, ++I); ?
Если при создании переменной программист ее явно не инициализировал, то, в некоторых случаях, компилятор сам даст ей некое, заранее известное начальное значение, а в некоторых случаях начальное значение будет непредсказуемо. От чего это зависит?
От чего зависит порядок создания (последовательность вызова конструкторов) глобальных переменных? Какие практические выводы из этого следуют?
Есть код:
f(){return 3.5;}
...
double d = f()
Чему равно значение d ? Почему?
Объясните разницу между понятиями "анонимное пространство имен" и "анонимное перечисление".
Что произойдет, если исключение будет выброшено изнутри конструктора?
Что из себя представляет и для чего применяется специализация шаблонов?
В чем специфика применения операции delete к указателям на функции?
Что такое и как используется this ?
Для чего применяется предварительное объявление (forward declaration) классов?
Какие директивы препроцессора обычно используются для предотвращения повторного включения заголовочного файла?
Какие конструкции для организации ветвления предоставляет программистам С++?
Какие конструкции для организации циклов предоставляет программистам С++?
Что такое полиморфизм? Наличие какие конструкций в С++ позволяет утверждать, что этот язык поддерживает полиморфизм? Для чего используется полиморфизм?
Что такое lvalue ?
Для чего в C++ используется ключевое слово finaly ?
Сравните операторы continue и break.
Что такое и для чего нужны триграфы?
В чем отличие и что общее в специфике перегрузки конструкторов и деструкторов?
Что такое и как используется анонимное объединение?
Можно ли в С++ (если да — то как) написать такой класс, от которого нельзя пронаследовать в дальнейшем никакой другой класс?
Даны два класса, один из которых является наследником от второго. Напишите, как должны выглядеть конструкторы копирования-инициализации для этих классов (составьте пример).
В чем специфика операций || и && ? В чем специфика перегрузки этих операций?
Сравните понятия "статическая переменная" и "статическая переменная — член класса".
В чем опасность использования макросов? Приведите примеры.
Сравните операторы throw и return.
Как инициализировать переменную, являющуюся приватным статическим членом класса?
Для чего нужен и как используется класс auto_ptr ?
Re[4]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 14:22
Оценка:
>условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же >0xFFFF вниз от верхней границы UserMode).

а кстати для чего используется этот блок 64Kb в старших адресах пользовательского раздела?
Re[5]: Для чего нужен виртуальный конструктор?
От: Dima2  
Дата: 26.11.02 14:52
Оценка: 12 (1)
Здравствуйте, Awaken

Слушай, а ты за что мне ноль отвалил?
Чем тебе вопросы неугодили?
Ты же с этими вопросами уже второй месяц носишся.
Re[5]: Для чего нужен виртуальный конструктор?
От: vasketsov Россия http://ntprog.by.ru
Дата: 26.11.02 16:42
Оценка:
Здравствуйте, Awaken, Вы писали:

>>условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же >0xFFFF вниз от верхней границы UserMode).


A>а кстати для чего используется этот блок 64Kb в старших адресах пользовательского раздела?


Та же причина: "сторожевая" область, тоже искуственно введена для упрощения отслеживания ошибок.
Васкецов Сергей
http://registry.km.ru
Re[2]: Для чего нужен виртуальный конструктор?
От: IT Россия linq2db.com
Дата: 26.11.02 18:14
Оценка:
Здравствуйте, Алекс, Вы писали:

A>>или коллекция вопросов на собеседовании которую я тщательно


А>Вопрос не корректный.


Дело не в корректный или некорректный. Дело в том, что эти вопросы задают. Меня как-то один клоун вполне серьёзно спрашивал что такое виртуальный конструктор. Я его переспросил может быть деструктор? Но похоже для него разницы особой не было, но интервью я тогда не прошёл

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

С другой стороны, такой вариает не проходит, если "следствие ведут знатоки". Тут лучше лезть в дебри чем дальше, тем лучше.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Для чего нужен виртуальный конструктор?
От: IT Россия linq2db.com
Дата: 26.11.02 18:24
Оценка:
Здравствуйте, Awaken, Вы писали:

A>или коллекция вопросов на собеседовании которую я тщательно собирал. некоторые вопросы реально задавались, некоторые описаны из рассказов коллег.


Я вот тут тоже пытался изобразить что-то год назад, но воз пока и ныне там.
http://www.rsdn.ru/?article/interview/?cpp.xml

Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?
Если нам не помогут, то мы тоже никого не пощадим.
Re: Для чего нужен виртуальный конструктор?
От: Gosha Украина  
Дата: 26.11.02 21:20
Оценка:
Здравствуйте, Awaken, Вы писали:

...
Круто!
Взялся бы еще кто-нибудь из Зубров поотвечать на них, подробненько так, с предисторией... Такому человеку не грех и баллами скинуться всем форумом на первое место в топе Хотя, они и так там сидят . А вот другим почитать (и мне в том числе) было бы интересно/поучительно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.