или коллекция вопросов на собеседовании которую я тщательно
собирал. некоторые вопросы реально задавались, некоторые описаны
из рассказов коллег.
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-й нормальной формы
-достоинства и недостатки нормализации
-что такое ссылочная целостность
-что такое первичный ключ, внешний ключ
-в чем достоинства и недостатки использования триггеров
-что такое транзакция. виды изоляции транзакций
-разрешение конфликтов при одновременном изменении данных
Здравствуйте, Awaken, Вы писали:
A>или коллекция вопросов на собеседовании которую я тщательно A>собирал. некоторые вопросы реально задавались, некоторые описаны A>из рассказов коллег.
Это, конечно — !
зы: как приложение, хотелось бы посмотреть коллекцию ответов на коллекцию вопросов (проверить себя, узнать что-то новое и тэдэ)
Здравствуйте, 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)
Здравствуйте, Алекс, Вы писали:
A>>-для чего нужен виртуальный конструктор А>Я серьезно, может объяснишь, что-то я не очень врубаюсь что ты имеешь в виду
хъ
IS>поищи в с++ форуме — вопрос достаточно избитый.
1. Нельзя искать по форумам
2. В природе (по крайней мере в С++) такого понятия нет
3. Поиск это подтвердил. И так как уважаемый Awaken упомянул о нем в C++ разделе, а не в проектировании, например, можно сказать, что он лоханулся.
Здравствуйте, 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)
>В памяти?
Речь о том чтобы только можно было запустить только одну копию программы
Один из вариантов – использовать именованный объект ядра (например мьютекс)
хъ
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)
А>Техника "выделение ресурся есть инициализация" реализуется с помощью всевозможных враперов или умных указателей.
в общем да, но вопроса было именно два. в течение одного собеседования
А>Оператором delete ты хочешь сказать? (Вижу что хочешь! )
вот ты и сам понял
А>А зачем его в С++ тогда ты засунул?
спрашивают его именно по C++
A>>При создании массива объектов класс должен иметь конструктор
А>Не только при в этом случае. Конструктор по умолчанию должен быть для тех объектов, для которых нужна >инициализация по умолчанию. Например, класс без ctor по умолчанию нельзя использовать в std::map.
вероятно потому что map внутри использует массив.
А>А мы запретим арифметические операции над указателями!
вот в C# их поэтому и запретили
А>Вопрос должен звучать так: Какова архитектура виртуальной памяти под виндами и структура виртуального адресного >пространства процесса.
Здравствуйте, Алекс, Вы писали:
A>>>-когда класс должен иметь конструктор по умолчанию
>>>Вопрос не корректный, ИМХО.
A>>При создании массива объектов класс должен иметь конструктор A>>по умолчанию
А>Не только при в этом случае. Конструктор по умолчанию должен быть для тех объектов, для которых нужна инициализация по умолчанию. Например, класс без ctor по умолчанию нельзя использовать в std::map.
Как пишет Элджер: "Чем дольше я имею дело с С++, тем чаще мне кажется, что нарушение этих требований [наличие конструктора по умолчанию и рабочего оператора = ] — проявление злостного непрофессионализма, за которое следует наказывать парой лет каторжного программирования на BASIC."
>конструктора по умолчанию и рабочего оператора = ] — проявление злостного непрофессионализма, за которое следует >наказывать парой лет каторжного программирования на BASIC."
Здравствуйте, Awaken, Вы писали:
A>>Win32 A>>-Как распределяется доступная процессу память
>>Вопрос не корректный.
Действительно, он настолько всеобъемлющ, что на основании только одного этого вопроса можно либо сразу послать, либо сразу принять, к тому же в разных системах это по разному, если в тонкости лезть.
A>Меня два раза его спрашивали. Ответ – 2Gb в пользовательском режиме A>Остальное резервируется под ядро и совместимость с 16-бит. приложениями
Это так распределяется доступная процессу память ?
Ничего не скажешь, крутая 9x-овая трава!!!
Для NT- даже если ничего не сказать про то что в первой "половине" (2GB или 3GB, если boot.ini поправить) как устроено, в "той" части все четко и прозрачно описано где что находится, и "та" память также доступна процессу (контекст "вызвавшего потока" — один из полноправных контекстов при выполнении кода в режиме ядра). Прямо недоступно только то, что вызывается из System Working Threads (это другой поток, в контексте System), но все равно можно прочитать и оттуда при желании. Вот уж что совсем не доступно — так это специально созданные условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же 0xFFFF вниз от верхней границы UserMode).
А вот еще список вопросов. Некоторые из них провокационные
Объясните разницу между понятиями виртуальная функция и виртуальное наследование .
Объясните, чем отличаются глобальные статические функции от статических функций, членов классов.
Что общего, и чем обычно отличаются реализации конструкторов копирования, инициализации и перегруженной операции присваивания?
Сравните 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 ?
>условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же >0xFFFF вниз от верхней границы UserMode).
а кстати для чего используется этот блок 64Kb в старших адресах пользовательского раздела?
Здравствуйте, Awaken, Вы писали:
>>условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же >0xFFFF вниз от верхней границы UserMode).
A>а кстати для чего используется этот блок 64Kb в старших адресах пользовательского раздела?
Та же причина: "сторожевая" область, тоже искуственно введена для упрощения отслеживания ошибок.
Здравствуйте, Алекс, Вы писали:
A>>или коллекция вопросов на собеседовании которую я тщательно
А>Вопрос не корректный.
Дело не в корректный или некорректный. Дело в том, что эти вопросы задают. Меня как-то один клоун вполне серьёзно спрашивал что такое виртуальный конструктор. Я его переспросил может быть деструктор? Но похоже для него разницы особой не было, но интервью я тогда не прошёл
Вообще, во многих случаях интервьюирующим (особенно если это рекрутер или менеджер) нужно получить простой ответ, чем проще тем лучше, а не рассуждения на тему с примерами и выкладками. Нужно просто назвать несколько ключевых слов, которые есть в их списке
С другой стороны, такой вариает не проходит, если "следствие ведут знатоки". Тут лучше лезть в дебри чем дальше, тем лучше.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Awaken, Вы писали:
A>или коллекция вопросов на собеседовании которую я тщательно собирал. некоторые вопросы реально задавались, некоторые описаны из рассказов коллег.
...
Круто!
Взялся бы еще кто-нибудь из Зубров поотвечать на них, подробненько так, с предисторией... Такому человеку не грех и баллами скинуться всем форумом на первое место в топе Хотя, они и так там сидят . А вот другим почитать (и мне в том числе) было бы интересно/поучительно.