Сходил в компанию, знаменитую своими сложными собеседованиями.
надеюсь вопросы не могут являться тайной, иначе грош цена таким вопросам,
если знание ответов заранее дает 100% прохождение собеседования
итак, вопросы:
C++ и STL:
-чем отличаются list и vector
-как отсортировать vector по убыванию
написал код с функтором переопределяющим сравнение.
дальше было вопрос
-чем функтор лучше функции (в частности, эффективнее ли)
-в каких случаях функцтор или функция не инлайнится?
-как отсортировать список?
-почему алгоритм sort не примениним к контейнеру list?
Design patterns:
-что такое синглтон (попросили написать код)
-как избежать рейс кондишена при инициализации синглтона
пришлось объяснять про double-checked locking,
попутно возникли вопросы про блокировку и мьютексы
-чем отличается критическая секция от мьютекса
(это их любимый вопрос -я до сих пор НЕ ЗНАЮ, как внутри работает критическая секция,
знаю только что она быстрее и ее нельзя шарить между процессами)
-абстрактная фабрика, когда применять? попросили нарисовать UML диаграмму,
и придумать пример из жизни.
придумал кодогенератор генерирующий одни и те же конструкции на разных языках программирования :
JavaFactory, CSharpFactory, CPlusFactory
-паттерн композит, нарисуйте диаграмму
-как реализовать глубокое копирование вышеуказанного паттерна, с помощью виртуального конструктора.
здесь суть в том что возникает проблема с возможными циклическими ссылками на объекты,
и нужно копировать все объекты только один раз. эту задачу я не решил за приемлимое время
по моему тут нужно придумать что-то типа раскраски графа, чтоб отмечать вершины которые мы уже посетили.
далее были вопросы по менеджерским качествам:
-как организовать работу удаленных друг от друга команд
-какое взаимодействие когда использовать (почта, телефон, IM)
-как организовывать митинги, сколько времени тратить на обсуждения
немного поговорили по английски (с этим у меня все ок, на программерские темы могу трындеть сколько угодно,
да и просто "о жизни" тоже)
итог — я похоже не очень удовлетворил их ожидания. а мне в свою очередь не очень понравилось содержание работы.
на том мы и расстались.
а динамический прокси сервер не попросили написать в online режиме?
к вопросу о том, на кого вы апплицировались с такими разнообразными вопросами и нетривиальными заковырками? случаем не на техн. директора?
Здравствуйте, Awaken, Вы писали:
A>Сходил в компанию, знаменитую своими сложными собеседованиями. A>надеюсь вопросы не могут являться тайной, иначе грош цена таким вопросам, A>если знание ответов заранее дает 100% прохождение собеседования A>итак, вопросы: A>C++ и STL: A>-чем отличаются list и vector A>-как отсортировать vector по убыванию A>написал код с функтором переопределяющим сравнение. A>дальше было вопрос A>-чем функтор лучше функции (в частности, эффективнее ли) A>-в каких случаях функцтор или функция не инлайнится? A>-как отсортировать список? A>-почему алгоритм sort не примениним к контейнеру list? A>Design patterns: A>-что такое синглтон (попросили написать код) A>-как избежать рейс кондишена при инициализации синглтона A>пришлось объяснять про double-checked locking, A>попутно возникли вопросы про блокировку и мьютексы A>-чем отличается критическая секция от мьютекса A>(это их любимый вопрос -я до сих пор НЕ ЗНАЮ, как внутри работает критическая секция, A>знаю только что она быстрее и ее нельзя шарить между процессами) A>-абстрактная фабрика, когда применять? попросили нарисовать UML диаграмму, A>и придумать пример из жизни. A>придумал кодогенератор генерирующий одни и те же конструкции на разных языках программирования : A>JavaFactory, CSharpFactory, CPlusFactory A>-паттерн композит, нарисуйте диаграмму A>-как реализовать глубокое копирование вышеуказанного паттерна, с помощью виртуального конструктора. A>здесь суть в том что возникает проблема с возможными циклическими ссылками на объекты, A>и нужно копировать все объекты только один раз. эту задачу я не решил за приемлимое время A>по моему тут нужно придумать что-то типа раскраски графа, чтоб отмечать вершины которые мы уже посетили. A>далее были вопросы по менеджерским качествам: A>-как организовать работу удаленных друг от друга команд A>-какое взаимодействие когда использовать (почта, телефон, IM) A>-как организовывать митинги, сколько времени тратить на обсуждения A>немного поговорили по английски (с этим у меня все ок, на программерские темы могу трындеть сколько угодно, A>да и просто "о жизни" тоже) A>итог — я похоже не очень удовлетворил их ожидания. а мне в свою очередь не очень понравилось содержание работы. A>на том мы и расстались.
B> к вопросу о том, на кого вы апплицировались с такими разнообразными вопросами и нетривиальными заковырками? случаем не на >техн. директора?
senior developer, C++
Кстати есть слухи что вопросы носят характер эрудированности и некоторые сотрудники банально заучивали ответы на вопросы и таким образом проходили собеседование на ура. А ты межде упрочим вопросы зря засветил , как на мой взгляд
M>Кстати есть слухи что вопросы носят характер эрудированности и некоторые сотрудники банально заучивали ответы на вопросы и таким образом проходили собеседование на ура. А ты межде упрочим вопросы зря засветил , как на мой взгляд
я таких вопросов сам могу навыдумывать тонну.. пусть обращаются
а собеседовал Сергей Л.
Здравствуйте, Awaken, Вы писали:
A>Сходил в компанию, знаменитую своими сложными собеседованиями. A>итог — я похоже не очень удовлетворил их ожидания. а мне в свою очередь не очень понравилось содержание работы. A>на том мы и расстались.
Интересно все же, каких таких спецов они все же ищут и кого в результате находят?
Здравствуйте, Awaken, Вы писали:
A>Сходил в компанию, знаменитую своими сложными собеседованиями. A>надеюсь вопросы не могут являться тайной, иначе грош цена таким вопросам, A>если знание ответов заранее дает 100% прохождение собеседования
... A>итог — я похоже не очень удовлетворил их ожидания. а мне в свою очередь не очень понравилось содержание работы. A>на том мы и расстались.
похоже "знаменит" одесский офис лучше приежай во львовский а еще лучше приежай во львов, там в районе привокзальной куча офисов есть, и скорее всего найдеш работу где будут платить лучше чем логика
Здравствуйте, The Lex, Вы писали:
A>>итог — я похоже не очень удовлетворил их ожидания. а мне в свою очередь не очень понравилось содержание работы. A>>на том мы и расстались.
TL>Интересно все же, каких таких спецов они все же ищут и кого в результате находят?
У меня лично складывается впечатление что некоторые одесские конторы впали в "звездную" стадию.
Я безусловно понимаю что требования к кандидатам ростут с ростом зарплат, но все же...
Зачем устраивать кандидатам "порки" если все равно этих знаний на работе реально не требуется.
Т.к. Одесса большая деревня, я лично знаю минимум по 2-3 человека, их уровень и примерно кто чем занимается...
И после этого приходишь в контору... а там те собеседование на тему "как космические корабли бороздят..."
A>а много ли у вас айтишних контор? мне кажется, в Одессе их гораздо больше.
мне кажется Вы ошибаетесь. Сходу вспоминаю до 7 "старых" контор с населением 100 и больше человек, кроме того есть определённое количество "захожих" контор из других городов, которые только начинают развивать совй бизнес.
А я прошел у них соббеседование
Да, было очень долго, около 2-ух часов, да прошлись по всему, тестировали меня два человека. Как зовут к сожалению сейчас не помню.
Но вопросы были вполне адекватные.
Но выбрал другую компанию, но в сл. если передумаю рассматриваю Логику как вполне приемлемый вариант для работы.
Здравствуйте, justinian, Вы писали:
J>Здравствуйте, Awaken, Вы писали:
A>>Сходил в компанию, знаменитую своими сложными собеседованиями.
J>Судя по вопросам, контора — чисто Виндусовая?
Судя по нашему (Львовскому) офису чисто линуксовая... ( практически )
Здравствуйте, Awaken, Вы писали:
C>>похоже "знаменит" одесский офис лучше приежай во львовский а еще лучше приежай во львов, там в районе привокзальной куча офисов есть, и скорее
A>а много ли у вас айтишних контор? мне кажется, в Одессе их гораздо больше.
Здравствуйте, messir_kelvin, Вы писали:
TL>>Интересно все же, каких таких спецов они все же ищут и кого в результате находят?
_>У меня лично складывается впечатление что некоторые одесские конторы впали в "звездную" стадию.
В Киеве ситуация аналогичная по отзывам многих — и моим в том числе...
Здравствуйте, Awaken, Вы писали:
A>Сходил в компанию, знаменитую своими сложными собеседованиями. A>надеюсь вопросы не могут являться тайной, иначе грош цена таким вопросам, A>если знание ответов заранее дает 100% прохождение собеседования A>итак, вопросы:
Хм...А что в этих вопросах такого специфического ? Я, правда, по собеседованиям не ходил (устраивает текущее место), но все перечисленные вопросы вполне просты, на мой взгляд.
Для копирования сложных композит паттернов виртуальный конструктор не пойдет. Лучше сделать метамодель для иерархии классов, входящих в данный паттерн. В этом случае операцию клонирования можно отделить и вынести за пределы иерархии классов паттерна. Т.е. сам паттерн будет сугубо пассивным хранилещем данных, а все операции с ним будут делаться внешними методами (импользуя метамодель) Это добавляет большей гибкости и абстрактности, так как опреции типа клонирования будут зависить лишь от метамодели и не зависить от самой модели. Т.е. добавление новых классов в иерархию не потребует дописывания алгоритма клонирования.
Я такой подход использовал при создании importer-а из Rational Rose в другой тул. Сей импортер должен был читать Rose файлы напрямую. Это потребовало создания внутреннего представления для файлов, которое как раз и является сложной разновидностью паттерна композит с перекрестным ссылками (в том числе и циклическими). Метамодель + вспомогательные шаблоны были написаны вручную (~ 4000 строк кода). Потом была нарисована UML модели внутреннего представления для Rose-файлов. Затем был написан небольшой кодогенератор (~2000 строк кода), который из этой модели генерил С++ классы + код, инициализирующий метамодель. Объем генеренного кода уже порядка 30 000 строк. В общем, за две недели получилось полноценное и эффективное внутреннее представление, с поддержкой таких операций, как сериализация/десеарилизация/клонирование/обход и т.д, которые зависят лишь от метамодели. Это позволило впоследствии дополнять и уточнять модель без переписывания этих методов.
Здравствуйте, Awaken, Вы писали:
A>-в каких случаях функцтор или функция не инлайнится?
Вопрос поставил в тупик. Хотя идеи есть.
A>-почему алгоритм sort не примениним к контейнеру list?
Блин, неужно random_access_iterator хочет?!
A>-как избежать рейс кондишена при инициализации синглтона A>пришлось объяснять про double-checked locking, A>попутно возникли вопросы про блокировку и мьютексы
А на некоторых процах не работает
A>-чем отличается критическая секция от мьютекса A>(это их любимый вопрос -я до сих пор НЕ ЗНАЮ, как внутри работает критическая секция, A>знаю только что она быстрее и ее нельзя шарить между процессами)
Крит. секция — не объект ядра
A>-абстрактная фабрика, когда применять? попросили нарисовать UML диаграмму,
УМЛ не нарисую.
A>и придумать пример из жизни. A>придумал кодогенератор генерирующий одни и те же конструкции на разных языках программирования : A>JavaFactory, CSharpFactory, CPlusFactory
Баян.
A>-паттерн композит, нарисуйте диаграмму
Кажись я декоратор нарисовал.
A>-как реализовать глубокое копирование вышеуказанного паттерна, с помощью виртуального конструктора.
См. предыдущий ответ
P.S. В целом приятное впечатление(хотя возможно это такая подача автора)
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, Awaken, Вы писали:
A>>-в каких случаях функцтор или функция не инлайнится? LM>Вопрос поставил в тупик. Хотя идеи есть.
Когда внутренний профайлер считает инлайн невыгодным, когда на функцию могут быть указатели, когда так захотел компилер.
A>>-почему алгоритм sort не примениним к контейнеру list? LM>Блин, неужно random_access_iterator хочет?!
Ну, можно было и догадаться пузырьком сортировать, если рандома нет!
A>>-как избежать рейс кондишена при инициализации синглтона A>>пришлось объяснять про double-checked locking, A>>попутно возникли вопросы про блокировку и мьютексы LM>А на некоторых процах не работает
Обычно volatile помогает. Double check locking обычно используется для улучшения перформанса. Принцип — лучше недолочить, чем перелочить.
A>>-чем отличается критическая секция от мьютекса A>>(это их любимый вопрос -я до сих пор НЕ ЗНАЮ, как внутри работает критическая секция, A>>знаю только что она быстрее и ее нельзя шарить между процессами) LM>Крит. секция — не объект ядра
А Вы видели исходники ядра? Лучше все-таки сначала их увидеть
A>>-абстрактная фабрика, когда применять? попросили нарисовать UML диаграмму, LM>УМЛ не нарисую.
Да UML очень легко рисовать. Поверьте, художественный дар совсем не требуется. Вот Мону Лизу нарисовать гораздо сложнее, а в UML все квадратно-прямоугольное, кроме треугольников наследования.
A>>-как реализовать глубокое копирование вышеуказанного паттерна, с помощью виртуального конструктора. LM>См. предыдущий ответ
Все просто — надо сделать виртуальный конструктор и реализовать там глубокое копирование.
LM>P.S. В целом приятное впечатление(хотя возможно это такая подача автора)
Мало они издевались, мало. Не попросили написать оператор перегрузки постфиксного ++, создать указатель на виртуальную функцию-член с неограниченным количеством параметров, применить паттерн FactoryMethod для уничтожения объектов и написать собственную реализацию мьютекса на вижуал бейсике
Здравствуйте, AntZ, Вы писали:
LM>>P.S. В целом приятное впечатление(хотя возможно это такая подача автора) AZ>Мало они издевались, мало. Не попросили написать оператор перегрузки постфиксного ++, создать указатель на виртуальную функцию-член с неограниченным количеством параметров, применить паттерн FactoryMethod для уничтожения объектов и написать собственную реализацию мьютекса на вижуал бейсике
А потом предложить зарплату в 800$
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, _Obelisk_, Вы писали: M>....
M>И это вы только реализовывали патерн композит ? Гм, заставляет задуматься ...
В смысле две недели — это долго ? Дык за это время была написана метамодель, генератор и нарисована модель, из которой сгенерилось порядка 150 классов. Парсер для Rose-их файлов написался за день. Если сможете сделать быстрее — попробуйте
_O_>Хм...А что в этих вопросах такого специфического ? Я, правда, по собеседованиям не ходил (устраивает текущее место), но все перечисленные вопросы вполне просты, на мой взгляд. _O_>Для копирования сложных композит паттернов виртуальный конструктор не пойдет. Лучше сделать метамодель для иерархии классов, входящих в данный паттерн. В этом случае операцию клонирования можно отделить и вынести за пределы иерархии классов паттерна. Т.е. сам паттерн будет сугубо пассивным хранилещем данных, а все операции с ним будут делаться внешними методами (импользуя метамодель) Это добавляет большей гибкости и абстрактности, так как опреции типа клонирования будут зависить лишь от метамодели и не зависить от самой модели. Т.е. добавление новых классов в иерархию не потребует дописывания алгоритма клонирования.
Нет, лучше сделать активную виртуальную модель иерархии классов путем пассивной абстракции данных и корреляции паттернов на базе метамодели знаний полученной в результате корреляции объектно-ориентированного подхода с абстрактно-реляционной парадигмой данных. В этом случае клонирование метамодели не нарушает нормализацию виртуального наследования и обеспечивает проактивный подход к абстракции иерархической инкапсуляции.
AZ>Нет, лучше сделать активную виртуальную модель иерархии классов путем пассивной абстракции данных и корреляции паттернов на базе метамодели знаний полученной в результате корреляции объектно-ориентированного подхода с абстрактно-реляционной парадигмой данных. В этом случае клонирование метамодели не нарушает нормализацию виртуального наследования и обеспечивает проактивный подход к абстракции иерархической инкапсуляции.
С точки зрения банальной эрудиции, не каждый индивидум, поражающий абстракт, способен игнорировать тенденцию парадоксальных эмоций.
Здравствуйте, AntZ, Вы писали:
AZ>Нет, лучше сделать активную виртуальную модель иерархии классов путем пассивной абстракции данных и корреляции паттернов на базе метамодели знаний полученной в результате корреляции объектно-ориентированного подхода с абстрактно-реляционной парадигмой данных. В этом случае клонирование метамодели не нарушает нормализацию виртуального наследования и обеспечивает проактивный подход к абстракции иерархической инкапсуляции.
Блин, я ведь серьезно писал. Должным образом реализованная метамодель, описывающая иерархию классов, входящих в реализацию паттерна composite решает проблемы с клонированием. Я ведь разработкой CASE средства на базе UML2 занимаюсь. Тут всех этих паттернов дофига имеется
Скажем, сама метамодель UML является вариацией паттерна composite, если рассматривать граф индуцированный ассоциациями типа Composition.
.
_O_>Блин, я ведь серьезно писал. Должным образом реализованная метамодель, описывающая иерархию классов, входящих в реализацию паттерна composite решает проблемы с клонированием. Я ведь разработкой CASE средства на базе UML2 занимаюсь. Тут всех этих паттернов дофига имеется _O_>Скажем, сама метамодель UML является вариацией паттерна composite, если рассматривать граф индуцированный ассоциациями типа Composition.
Вы, как декабристы, страшно далеки от народа.
Я плохо понимаю, что такое "граф индуцированный ассоциациями типа Composition", но очевидно, что это очень круто. Я также очень советую посетить эту компанию и "построить" их по полной программе, пусть знают, что ничего не понимают в паттернах! Думаю, они будут рыдать, когда осознают, что так мало знают о том, что знает любой разработчик CASE средств на базе UML2 в институте системного программирования
Здравствуйте, AntZ, Вы писали:
AZ>Вы, как декабристы, страшно далеки от народа. AZ>Я плохо понимаю, что такое "граф индуцированный ассоциациями типа Composition", но очевидно, что это очень круто. Я также очень советую посетить эту компанию и "построить" их по полной программе, пусть знают, что ничего не понимают в паттернах! Думаю, они будут рыдать, когда осознают, что так мало знают о том, что знает любой разработчик CASE средств на базе UML2 в институте системного программирования
Блин, мы не теорией занимаемся (хоть мы и в ИСПе), мы на Telelogic работаем. Сейчас разработка всех продуктов из этой серии (http://www.telelogic.com/products/tau/index.cfm) на нас. У нас два релиза в год выходит. Мы делаем практические вещи.
И я не хочу никого строить, я действительно полагаю, что метамодель здесь поможет. Просто мне казалось, что такие понятия как граф, модель, метамодель, UML и т.д. программисты должны знать.
Господа, тут в ветке переодически упоминается слово "виртуальный конструктор", причём так как будто это чтото обыденное... в Дельфи это вроде как действительно обыденное, а вот в С++ я не знаю...
N>>Но выбрал другую компанию, но в сл. если передумаю рассматриваю Логику как вполне приемлемый вариант для работы.
M>На чем остановились если не секрет ?
Здравствуйте, Denis, Вы писали:
D>Господа, тут в ветке переодически упоминается слово "виртуальный конструктор", причём так как будто это чтото обыденное... в Дельфи это вроде как действительно обыденное, а вот в С++ я не знаю...
_O_>Скажем, сама метамодель UML является вариацией паттерна composite, если рассматривать граф индуцированный ассоциациями типа Composition.
это вы серьёзно написали?
Здравствуйте, De-Bill, Вы писали: DB>С точки зрения банальной эрудиции, не каждый индивидум, поражающий абстракт, способен игнорировать тенденцию парадоксальных эмоций.
Здравствуйте, Denis, Вы писали:
_O_>>Скажем, сама метамодель UML является вариацией паттерна composite, если рассматривать граф индуцированный ассоциациями типа Composition. D>это вы серьёзно написали?
Угу. Если расмматривать в метамодели лишь ассоциации тип а Composition то так и будет: класс содержит атрибуты, операции и т.д. Операция содержит параметры и реализацию и т.д. Иными словами, метамодель UML рассмотренная с позиции что чего содержит будет вариацией на тему сего паттерна.
A>>>(это их любимый вопрос -я до сих пор НЕ ЗНАЮ, как внутри работает критическая секция, A>>>знаю только что она быстрее и ее нельзя шарить между процессами) LM>>Крит. секция — не объект ядра AZ>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть
я по ядрам не лазаю. а ребята из Логики похоже лазают
возможно, внутри используется какой-нить обхект ядра (Event ?)
D>Господа, тут в ветке переодически упоминается слово "виртуальный конструктор", причём так как будто это чтото обыденное... в Дельфи это вроде как >действительно обыденное, а вот в С++ я не знаю...
class Base
{
public:
virtual Base* Clone()=0; // это он
};
Здравствуйте, Denis, Вы писали:
D>>>..."виртуальный конструктор"...
A>>
A>>class Base
A>>{
A>>public:
A>> virtual Base* Clone()=0; // это он
A>>};
A>>
D>хм... это помойму просто метод Clone , как минимум второй части понятия ("конструктор") я не вижу тут D>и второе, откуда взялся такой термит-то?
Не видишь — смотри внимательней http://en.wikipedia.org/wiki/Virtual_constructor
Здравствуйте, minorlogic, Вы писали:
_>>А потом предложить зарплату в 800$ M>Для некоторых регионов это очень много , для других мало. Шутка неясна
"Шутка" заключается в том, что некоторые фирмы специально валят претендентов чтобы опустить их до минимального уровня ЗП.
А потом оказывается что вопросы на собеседовании ничего общего с работой не имеют...
Wow, прикольно почитать какое у нас сложное собеседование
А что вы хотели на позицию Senior C++ Developer?
Кстати, на позицию developer мы можем вас взять.
Насчет вопросов не беспокойтесь — у нас еще много есть, а если кончатся новые придумаем.
Ну а теперь собственно по вопросам.
Честно говоря просто удивлен, что они вызывают такой ажиотаж, чтобы на них ответить достаточно прочитать Страуструпа и Рихтера, а также уметь работать с алгоритмами и находить практические решения. Это не Rocket Science, как любит говорить один наш сотрудник .
В частности, страшная задача с глубоким клонированием в нашей постановке решается в 7 строк на С++. Если бы мы поставили ее более формально, не начиная разговор с шаблона "композит" и т.п. ее мог бы решить человек, имеющий просто хороший опыт программирования на С++. Но Senior Developer тем и должен отличаться, чтобы свести не прямо или не четко поставленную задачу к пригодной для решения. Иначе, извините, это не Senior Developer, ему надо будет все время помогать.
По ОО шаблонам и UML конечно сложнее, тут нужен какой-то опыт в проектировании, чтобы суметь правильно применить и объяснить, но классику (Booch и GoF) надо читать, конечно есть еще куча других, но это основы. Опять таки senior наверное должен это знать.
Еще одна вещь, которую хочется упомянуть, хотя это не относится к данному случаю это мотивация кандидатов на интервью.
По моему, если человек уж собрался на интервью, нашел время и т.п. он должен очень хорошо знать зачем он туда идет. Есть 2 причины, которые могу понять:
1. Найти работу
2. На людей посмотреть и себя показать
И в том и в другом случае, человек должен готовиться, настраиваться и на интервью работать на 200% и стараться проявить себя с самой лучшей стороны.
Тем более удивляет, когда человек затрудняется написать простую задачу на переверот списка (О, еще одну засветили ), и совершенно отказывается от борьбы при любом мало мальски нестандартном вопросе.
Так что приходите на собеседование — будем рады вас видеть. В Одессе у нас в основном Windows разработка, но мое личное убеждение, что если человек хорош и мотивирован, то он быстро войдет в курс дела на любой платформе.
Здравствуйте, Awaken, Вы писали:
A>возможно, внутри используется какой-нить обхект ядра (Event ?)
крит секция не обьект ядра, более того захват крит. секции(если она свободна)
можно реализовать обычным интерлоком, но вот если занята- то без ядра тут никак,
какой-нибудь аналог слипов придётся ставить.
Здравствуйте, Sni4ok, Вы писали:
A>>возможно, внутри используется какой-нить обхект ядра (Event ?) S>крит секция не обьект ядра, более того захват крит. секции(если она свободна) S>можно реализовать обычным интерлоком, но вот если занята- то без ядра тут никак, S>какой-нибудь аналог слипов придётся ставить.
В крит. секции может использоваться спинлок, который позволяет (неэффективно) ждать пока секция не разблокируется без участия ядра.
Здравствуйте, ZergIII, Вы писали:
ZII>Wow, прикольно почитать какое у нас сложное собеседование
Ну и как вы предлагаете "как избегать рейс кондишена при инициализации синглтона"?
Я бы лично ответил, что синглтоны надо инициировать вручную до того,
как будет создан второй поток. Наверное бы не прошел ваше интервью...
Здравствуйте, bkat, Вы писали:
B>Ну и как вы предлагаете "как избегать рейс кондишена при инициализации синглтона"?
я бы предложил использовать глобальный обьект синхронизации для защиты метода instance() (или той функции которая возвращает синглетон- суть инстанц),
так как зачастую синглетоны нужно инициализировать далеко не всегда, а только по требованию.
ZII>Так что приходите на собеседование — будем рады вас видеть. В Одессе у нас в основном Windows разработка, но мое личное убеждение, что если человек хорош и мотивирован, то он быстро войдет в курс дела на любой платформе.
Нет, уж лучше Вы к нам!
У нас редко так извращенно пытают людей
Здравствуйте, Sni4ok, Вы писали:
S>Здравствуйте, bkat, Вы писали:
B>>Ну и как вы предлагаете "как избегать рейс кондишена при инициализации синглтона"?
S>я бы предложил использовать глобальный обьект синхронизации для защиты метода instance() (или той функции которая возвращает синглетон- суть инстанц), S>так как зачастую синглетоны нужно инициализировать далеко не всегда, а только по требованию.
Может вопрос мой глупый , но кто будет синхронизировать создание глобального объекта синхронизации ? Или он будет создаваться при инициализации dll ?
Давайте лучше к нам , к нас не ставят задач завалить человека на собеседовании, приятная дружеская атмосфера. Мы не требуем знаний пеергрузки постфиксного и префиксного инкремента (не потому что это сложно , потому что безполезно) и т.п.
Мы ищем людей которые могут решать задачи а не проходить брейнбенч, а поверьте мне это большая разница!
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, Sni4ok, Вы писали:
M>Может вопрос мой глупый , но кто будет синхронизировать создание глобального объекта синхронизации ? Или он будет создаваться при инициализации dll ?
глобальные обьекты создаются до входа в main, а при загрузке dll до process_attach
Здравствуйте, BulatZiganshin, Вы писали:
BZ>Здравствуйте, minorlogic, Вы писали:
M>>Давайте лучше к нам , к нас не ставят задач завалить человека на собеседовании
BZ>и ты можешь сказать, какие из этих вопросов ты расценил как попытку завалить Сеньора Программиста?
Я в целом не про эти вопросы , но скажем так ... у нас в компании собеседования проводятся несколько по другому и нравятся мне больше .
Здравствуйте, minorlogic, Вы писали:
M>Мы ищем людей которые могут решать задачи а не проходить брейнбенч, а поверьте мне это большая разница!
Пусть кто-то скажет, что люди которые у нас работают не умеют решать задачи
Уважаемый, мы брейнбенч-подобные вопросы используем только для предварительной фильтрации и не требуем 100% правильных ответов. Просто экономия времени. Мне кажется, что если человек из 20 вопросов по С++ правильно отвечает только на 10 (причем уверяю вас, мы не задаем супер сложные вопросы или вопросы с подковырками) то это говорит либо о том, что он только недавно начал учить С++, либо (если у него опыт на С++ 5 лет), что его желание развиваться и поднимать свой технический уровень под большим вопросом.
А насчет задач — какая из упомянутых здесь на ваш взгляд не проверяет способность человека решать реальные практические задачи?
Здравствуйте, ZergIII, Вы писали:
ZII>А насчет задач — какая из упомянутых здесь на ваш взгляд не проверяет способность человека решать реальные практические задачи?
Да сами по себе это задачи как задачи.
На какие-то можно дать однозначный ответ.
По поводу других можно просто пообщаться.
Но в такой комбинации они вызывают у меня лично откровенное недоумение.
Спрашивать про отличие списка от вектора и как отсортировать список — это одно.
Организация работы удаленных друг от друга команд и организация митингов — это уже совсем иное.
Вам осталось только попросить польку станцевать и стих наизусть рассказать.
А что? На корпоративных вечеринках тоже может быть очень важным
Здравствуйте, ZergIII, Вы писали:
ZII>А насчет задач — какая из упомянутых здесь на ваш взгляд не проверяет способность человека решать реальные практические задачи?
Все вопросы по "Design patterns" как пример, никак не связано со способностью решать задаси а проверяет только любознательность.
Здравствуйте, S-SH, Вы писали:
SS>Здравствуйте, _Obelisk_, Вы писали:
_O_>>мы на Telelogic работаем
SS>Год или два назад вы говорили, что договор с ними заканчивается. Не случилось?
Здравствуйте, S-SH, Вы писали:
SS>Год или два назад вы говорили, что договор с ними заканчивается. Не случилось?
Неа. Договор продляется каждые два года. Правда теперь Telelogic купила IBM и что в следующем году будет не совсем ясно. Не знаю, какова политика IBM в отношении субконтрактеров.
Здравствуйте, _Obelisk_, Вы писали:
_O_>Правда теперь Telelogic купила IBM и что в следующем году будет не совсем ясно. Не знаю, какова политика IBM в отношении субконтрактеров.
Upon acquisition close, Telelogic will become part of the Rational Software division of IBM, reporting to Dr. Danny Sabbah, general manager of IBM Rational Software.
Я-то надеялся, что Розу теперь окончательно похоронят, ан нет, силен еще пиар Буча с компанией. Ну и то, что Розу в свое время продали в гос. учреждения, вероятно, тоже сыграло роль.
Здравствуйте, S-SH, Вы писали:
SS>Я-то надеялся, что Розу теперь окончательно похоронят, ан нет, силен еще пиар Буча с компанией. Ну и то, что Розу в свое время продали в гос. учреждения, вероятно, тоже сыграло роль.
Ее похоронят. Потому и Telelogic купили. Сейчас у нас есть несколько линеек продуктов — System Architect (досталось от Popkin Software), Rhapsody, Statemate (оба от ILogix-а), Tau, SDL Suite, TTCN Suite плюс еще ряд уже неподдерживаемых продуктов. На базе всего этого IBM что-то фундаментально новое будет делать, ибо ресурсов у них дофига (по словам наших шведов).
Здравствуйте, ZergIII, Вы писали:
ZII>А насчет задач — какая из упомянутых здесь на ваш взгляд не проверяет способность человека решать реальные практические задачи?
На мой взгляд, Ваши задания сильно оторваны от практики. Мне кажется, на собеседовании надо задавать только те вопросы, ответы на которые могут как-то охарактеризовать кандидата. Т.е. каждый вопрос должен быть некоторым критерием. И если кандидат ему не соответствует (т.е. не отвечает на вопрос), то продолжать собеседование бесполезно. Какой вывод Вы можете сделать, если кандидат не ответит на Ваш вопрос? Да никакого! Ну, не знает человек, в каких случаях функтор не инлайнится — и что с того?
Кроме того, Ваши задачи даны не в той постановке, как они встречаются на практике. Например, человек может зазубрить паттерны и красиво рисовать их UML-диаграммы, но стоит ему столкнуться с задачей, где потребуется Абстрактная Фабрика или Компоновщик, и он предпочтет switch или мешанину из dynamic_cast'ов. Лучшей дайте ему какое-нибудь практическое задание (взятое из Вашей практики) и попросите решить. А затем обсудите с ним решение, а заодно и паттерны. Из решения будет гораздо лучше видно, умеет человек проектировать (хотя бы на микроуровне) или нет. А абстрактные рассуждение ни о чем не говорят.
BZ>>и ты можешь сказать, какие из этих вопросов ты расценил как попытку завалить Сеньора Программиста?
M>Я в целом не про эти вопросы , но скажем так ... у нас в компании собеседования проводятся несколько по другому и нравятся мне больше .
Хочу немного прокомментировать.
Мне и самому больше нравятся интревью, где пытаются выяснить прежде всего то,
как человек умеет решать поставленные задачи, обучаться, общий уровень интеллекта и т.д.
Если в компанию придёт разработчик у которого с этим всё впорядке, то компания уж точно не проиграет,
пусть даже он не сможет начертить UML-диаграмму какого-нибудь патерна.
То есть, в интревью делать упор на общие скиллы, а не на конкретику.
Но. Как тогда отличить developer-а от senior-developer-а? Приходит человек. Он успешно проходит тест
на всё вышеперечисленное. Кто он? Простой разработчик или всё же senior? Непонятно. Тут то и
идут в ход паттерны, страуструпы с александруску и т.д. Всё же senior должет быть больше, чем
просто хороший разработчик, умеющий решать поставленные задачи.
Для него недостаточно просто общего тестирования.
_O_>Неа. Договор продляется каждые два года. Правда теперь Telelogic купила IBM и что в следующем году будет не совсем ясно. Не знаю, какова политика IBM в отношении субконтрактеров.
Большой шанс, что IBM возьмёт вас своими контракторами. С нами так и было.
Здравствуйте, iFuzzy, Вы писали:
F>Но. Как тогда отличить developer-а от senior-developer-а? Приходит человек. Он успешно проходит тест F>на всё вышеперечисленное. Кто он? Простой разработчик или всё же senior? Непонятно. Тут то и F>идут в ход паттерны, страуструпы с александруску и т.д. Всё же senior должет быть больше, чем F>просто хороший разработчик, умеющий решать поставленные задачи.
На мой взгляд, senior developer должен уметь решать более сложные задачи.
Кроме того, senior должен уметь писать спецификацию и дизайн-документ с описанием технического решения. Если человек этого не умеет, то, скорее, он не senior.
Здравствуйте, Awaken, Вы писали:
A>>>>(это их любимый вопрос -я до сих пор НЕ ЗНАЮ, как внутри работает критическая секция, A>>>>знаю только что она быстрее и ее нельзя шарить между процессами) LM>>>Крит. секция — не объект ядра AZ>>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть
A>я по ядрам не лазаю. а ребята из Логики похоже лазают A>возможно, внутри используется какой-нить обхект ядра (Event ?)
ИМХО — Для ответа на этот вопрос "лазать по ядрам" не обязательно. Всё доступно описано в книге "Внутренне устройство Win2000, WinXP, Win2003" Соломон, Руссинович. Даёться описание критической секции внутреннего устройства, а также внутрисистемное название Event-а, что используеться внутри критических секций.
N>>Не секрет. Luxoft. M> а тут как собеседование юыло ?
Тут тоже хорошо было, не два часа слава богу, но по основным концепциям пробежались. Поговорили о проектах.
Потом ещё с HR поговорили.
M> кто собеседовал ?
Михаил.
Здравствуйте, iFuzzy, Вы писали:
F>Но. Как тогда отличить developer-а от senior-developer-а? Приходит человек. Он успешно проходит тест
Как а вы еще не знаете , у senior-developer-а малиновые штаны !!!!
P.S. Особенно меня потешают фирмы где всерьез любят buzzwords типа "senior-developer". Да платите мне нормально и называйте хоть сержантом срочных войск
Здравствуйте, Кирилл Лебедев, Вы писали:
КЛ>Кроме того, senior должен уметь писать спецификацию и дизайн-документ с описанием технического решения. Если человек этого не умеет, то, скорее, он не senior.
Прикольный уровень диалога , спорите о терминах о которых имеете смутное представление ? Это забавно читать.
Здравствуйте, nen777w, Вы писали:
N>>>Не секрет. Luxoft. M>> а тут как собеседование юыло ? N>Тут тоже хорошо было, не два часа слава богу, но по основным концепциям пробежались. Поговорили о проектах. N>Потом ещё с HR поговорили.
M>> кто собеседовал ? N>Михаил.
И ты уверен что работаешь в люксофте ? Ты не путаешь ничего ?
Здравствуйте, bkat, Вы писали:
B>Спрашивать про отличие списка от вектора и как отсортировать список — это одно. B>Организация работы удаленных друг от друга команд и организация митингов — это уже совсем иное.
По поводу второго вопроса: просто хотелось посмотреть на опыт работы человека с западными заказчиками, общее здравомыслие и, возможно, его дальнейшие перспективы
На это не был сделан упор, да и потратили то на это 3 мин всего.
Здравствуйте, minorlogic, Вы писали:
M>Все вопросы по "Design patterns" как пример, никак не связано со способностью решать задаси а проверяет только любознательность.
Опять таки, Senior должен еще и уметь объяснить свои мысли. Кроме того, любознательность — то, что делает человека Senior-ом рано или поздно.
Здравствуйте, minorlogic, Вы писали:
M>P.S. Особенно меня потешают фирмы где всерьез любят buzzwords типа "senior-developer". Да платите мне нормально и называйте хоть сержантом срочных войск
Senior — это позиция, которая предполагает определенный уровень знаний и умений и соответственно определяет роль на которую можно поставить человека на проекте. Можно конечно сказать, что на данную роль нужен человек, который имеет опыт работы от 5 лет, знает С++, шаблоны проектирования, умееет ..., применяет ..., и т.д. и т.п.
А можно просто сказать: нам нужен Senior со специализацией скажем в DSP или еще чем-то. Намного проще и читабельней.
Так что здесь проблема в том, что нет общего между компаниями стандарта кто такой Senior, Developer или Junior. Кроме того, многие компании пытаются "подкупить кандидата" позицией, типа мы тебя берем на Senior Developer но получать ты будешь столько же Вот и получается потом, что на собеседование приходят сеньоры, а уходят джуниоры
Здравствуйте, ZergIII, Вы писали:
M>>Все вопросы по "Design patterns" как пример, никак не связано со способностью решать задаси а проверяет только любознательность.
ZII>Опять таки, Senior должен еще и уметь объяснить свои мысли. Кроме того, любознательность — то, что делает человека Senior-ом рано или поздно.
Уважаемый ZergIII, вы здесь уже неоднократно высказываете свои мысли по поводу того, что должен знать Senior.
Не могли бы вы озвучить так же и ваши мысли о заработной плате, которую должа обеспечить фирмы приглашающая на работы Senior'а с такими скиллами.
И как эта сумма соотносится с суммой, которую готова предложить ваша компания?
Здравствуйте, ZergIII, Вы писали:
ZII>Опять таки, Senior должен еще и уметь объяснить свои мысли. Кроме того, любознательность — то, что делает человека Senior-ом рано или поздно.
Был бы рад если мотивация вопросов именно такая. Больше встречаю "собеседователей" "как вы не знаете что такое сингелтон ??? ну не...".
За вас рад !
Здравствуйте, AntZ, Вы писали:
A>>>-в каких случаях функцтор или функция не инлайнится? LM>>Вопрос поставил в тупик. Хотя идеи есть. AZ>Когда внутренний профайлер считает инлайн невыгодным, когда на функцию могут быть указатели, когда так захотел компилер.
Понял. Значит первоначальный вариант про погоду на Марсе был верным
A>>>-почему алгоритм sort не примениним к контейнеру list? LM>>Блин, неужно random_access_iterator хочет?! AZ>Ну, можно было и догадаться пузырьком сортировать, если рандома нет!
Вроде так и должно быть.(У list-а есть свой метод sort?)
A>>>-как избежать рейс кондишена при инициализации синглтона A>>>пришлось объяснять про double-checked locking, A>>>попутно возникли вопросы про блокировку и мьютексы LM>>А на некоторых процах не работает AZ>Обычно volatile помогает. Double check locking обычно используется для улучшения перформанса. Принцип — лучше недолочить, чем перелочить.
На этих нет Если нужно, то линк найду.
A>>>-чем отличается критическая секция от мьютекса A>>>(это их любимый вопрос -я до сих пор НЕ ЗНАЮ, как внутри работает критическая секция, A>>>знаю только что она быстрее и ее нельзя шарить между процессами) LM>>Крит. секция — не объект ядра AZ>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть
Я книгу Рихтера видел
A>>>-абстрактная фабрика, когда применять? попросили нарисовать UML диаграмму, LM>>УМЛ не нарисую. AZ>Да UML очень легко рисовать. Поверьте, художественный дар совсем не требуется. Вот Мону Лизу нарисовать гораздо сложнее, а в UML все квадратно-прямоугольное, кроме треугольников наследования.
Я банально нотацию(кроме наследования) не помню.
A>>>-как реализовать глубокое копирование вышеуказанного паттерна, с помощью виртуального конструктора. LM>>См. предыдущий ответ AZ>Все просто — надо сделать виртуальный конструктор и реализовать там глубокое копирование.
А может метод Clone?
LM>>P.S. В целом приятное впечатление(хотя возможно это такая подача автора) AZ>Мало они издевались, мало. Не попросили написать оператор перегрузки постфиксного ++, создать указатель на виртуальную функцию-член с неограниченным количеством параметров, применить паттерн FactoryMethod для уничтожения объектов и написать собственную реализацию мьютекса на вижуал бейсике
Нормально.
Здравствуйте, Кирилл Лебедев, Вы писали:
ZII>>А насчет задач — какая из упомянутых здесь на ваш взгляд не проверяет способность человека решать реальные практические задачи? КЛ>На мой взгляд, Ваши задания сильно оторваны от практики. Мне кажется, на собеседовании надо задавать только те вопросы, ответы на которые могут как-то охарактеризовать кандидата. Т.е. каждый вопрос должен быть некоторым критерием. И если кандидат ему не соответствует (т.е. не отвечает на вопрос), то продолжать собеседование бесполезно.
Хм, ну это жестко, надо быть 100% уверенным в своих критериях, чтобы следовать таким правилам. Вряд ли можно найти кандидата полностью соответствующего требованиям.
КЛ>Какой вывод Вы можете сделать, если кандидат не ответит на Ваш вопрос? Да никакого! Ну, не знает человек, в каких случаях функтор не инлайнится — и что с того?
Всего лишь уровень знания С++ и понимания как он работает.
КЛ>Кроме того, Ваши задачи даны не в той постановке, как они встречаются на практике. Например, человек может зазубрить паттерны и красиво рисовать их UML-диаграммы, но стоит ему столкнуться с задачей, где потребуется Абстрактная Фабрика или Компоновщик, и он предпочтет switch или мешанину из dynamic_cast'ов. Лучшей дайте ему какое-нибудь практическое задание (взятое из Вашей практики) и попросите решить. А затем обсудите с ним решение, а заодно и паттерны. Из решения будет гораздо лучше видно, умеет человек проектировать (хотя бы на микроуровне) или нет. А абстрактные рассуждение ни о чем не говорят.
В целом мысль хорошая и я ее поддерживаю, однако есть но:
Задачу из практики на собеседовании дать затруднительно, это просто займет очень много времени. Буду действительно рад увидеть пример обратного. Для этого подходят тестовые задания, но с ними есть проблемы. Я знаком с задачами на собеседовании в MS, HP и нескольких других славных компаниях. Они тоже не дают задач из практики.
Впрочем, не думаю, что у нас прошел кто-то, кто банально заучил шаблоны и мы этого не заметили. А даже если так — для этого есть испытательный срок.
Здравствуйте, LuciferMoscow, Вы писали:
AZ>>Когда внутренний профайлер считает инлайн невыгодным, когда на функцию могут быть указатели, когда так захотел компилер. LM>Понял. Значит первоначальный вариант про погоду на Марсе был верным
Ну, возможно имелось в виду при каких условиях он точно не заинлайнится.
LM>У list-а есть свой метод sort?
Есть.
LM>>>Крит. секция — не объект ядра AZ>>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть LM>Я книгу Рихтера видел
А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена.
LM>Я банально нотацию(кроме наследования) не помню.
Аналогичен до безобразия
AZ>>Все просто — надо сделать виртуальный конструктор и реализовать там глубокое копирование. LM>А может метод Clone?
Виртуальным конструктором как раз и занывают метод клонирования. Дебильное название ИМХО.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Эх, ладно... Встряну.
A>-чем функтор лучше функции (в частности, эффективнее ли) A>-в каких случаях функцтор или функция не инлайнится?
Хм.. Насколько я понимаю сильно от компилятора зависит. Кроме того это вроде как рекомендация компилятору, но функтор встроится вероятнее. Наличие ссылок на функию может повлиять, хотя — хз я не разработчик компиляторов.
A>Design patterns: A>-что такое синглтон (попросили написать код) A>-как избежать рейс кондишена при инициализации синглтона
Я бы ответил: не использовать сингтон . Уж лучше за собой через параметры функций таскать, чем иметь потом секс с трудноуловимой и трудно воспроизводимой ошибкой.
A>пришлось объяснять про double-checked locking, A>попутно возникли вопросы про блокировку и мьютексы
A>далее были вопросы по менеджерским качествам: A>-как организовать работу удаленных друг от друга команд A>-какое взаимодействие когда использовать (почта, телефон, IM) A>-как организовывать митинги, сколько времени тратить на обсуждения
Вот не пойму, каким боком качества управленца к сеньору . Такие вопросы ИМХО даже тим лида не особо беспокоят, это скорее уровень ПМа.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Здравствуйте, CreatorCray, Вы писали:
LM>>У list-а есть свой метод sort? CC>Есть.
Значит нуно юзать его
LM>>>>Крит. секция — не объект ядра AZ>>>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть LM>>Я книгу Рихтера видел CC>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена.
Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине
AZ>>>Все просто — надо сделать виртуальный конструктор и реализовать там глубокое копирование. LM>>А может метод Clone? CC>Виртуальным конструктором как раз и занывают метод клонирования. Дебильное название ИМХО.
ИМХО, нет. Вот оно:
ISomething* CreateSomething(const std::string& strName)
{
if ( strName == "pig" )
return new Pig;
if ( strName == "cat" )
return new Cat;
if ( strName == "xxx" )
return new BritneySpears;
}
A>>-что такое синглтон (попросили написать код) A>>-как избежать рейс кондишена при инициализации синглтона
DC>Я бы ответил: не использовать сингтон . Уж лучше за собой через параметры функций таскать, чем иметь потом секс с трудноуловимой и трудно воспроизводимой ошибкой.
Это ответ из серии лечения перхоти при помощи гильотины. Очень помогает. Да элементарно, надо в MySingletonClass::GetInstance() встроить критическую секцию или мьютекс, после лока мьютекса проверять, а не создан ли уже объект в соседнем треде.
A>>пришлось объяснять про double-checked locking, A>>попутно возникли вопросы про блокировку и мьютексы
Абсолютно логично, против рейсов помогают правильные локи.
DC>Вот не пойму, каким боком качества управленца к сеньору . Такие вопросы ИМХО даже тим лида не особо беспокоят, это скорее уровень ПМа.
Ну, они очень любят играть игры в "Синьоров". Сеньер — это всего лишь слово, только некоторые вкладывают в него смысл, как обычный программер, только "в десять раз круче".
LM>>>У list-а есть свой метод sort? CC>>Есть. LM>Значит нуно юзать его
LM>>>>>Крит. секция — не объект ядра AZ>>>>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть LM>>>Я книгу Рихтера видел CC>>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена. LM>Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине
Кстати, 2 СС, в "винде" используется не семафор, а евент
Это к вопросу об исходниках ядра, которые, в общем то, к критической секции никакого отношения не имеют.
AZ>>>>Все просто — надо сделать виртуальный конструктор и реализовать там глубокое копирование. LM>>>А может метод Clone? CC>>Виртуальным конструктором как раз и занывают метод клонирования. Дебильное название ИМХО. LM>ИМХО, нет. Вот оно:
LM>
LM>ISomething* CreateSomething(const std::string& strName)
LM>{
LM> if ( strName == "pig" )
LM> return new Pig;
LM> if ( strName == "cat" )
LM> return new Cat;
LM> if ( strName == "xxx" )
LM> return new BritneySpears;
LM>}
LM>
Нет, это фабрика классов. Виртуальный конструктор — это метод Create мета-класса. Поскольку рефрексии в С++ вообще никаким боком нет, то можно съэмулировать примерно так:
struct CAnyType;
struct CMyType /*: public CAnyType*/;
struct CAnyTypeRef
{
virtual CAnyType *Create() const;
};
struct CMyTypeRef
{
virtual CAnyType *Create() const;
/* virtual CMyType *Create() const; - Must have, but C++ not allow it*/
};
struct CAnyType
{
static CAnyTypeRef *GetRuntimeClass() const;
};
Самая засада в том, что каждый последующий член иерархии мета-классов должен по идее предоставлять полный набор Create методов, которые позволили бы создать финальный объект из указателя на любой класса иерархии — т.е. перекрывать все Create базовых классов. Ну а поскольку в С++ функции не дискриминируются по возвращаемому значению, то тут придется либо извращаеться, либо тупо забить и заставить мета-классы возвращать только указатель на базу.
Пример — class of в дельфи, CRuntimeClass в MFC.
А метод Clone — это весьма специфический виртуальный оператор присваивания, паттерн Prototype.
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, LuciferMoscow, Вы писали:
A>>>-почему алгоритм sort не примениним к контейнеру list? LM>>Блин, неужно random_access_iterator хочет?!
M>прикольно если реализация пользует advance
Прикольно, но реализация sort, соответствующая стандарту, должна гарантировать сложность алгоритма n*log(n). Очевидно, что используя advance, таких гарантий дать нельзя. Кроме того, по стандарту sort таки требует RandomAccessIterator. См. ISO/IEC 14882:2003 — пп. 25.3.1.1
Здравствуйте, LuciferMoscow, Вы писали: LM>>>>>Крит. секция — не объект ядра AZ>>>>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть LM>>>Я книгу Рихтера видел CC>>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена. LM>Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине
Здается мне, бонус может быть достигнут не только на многопроцессорной машине. Если объект синхронизации не занят, то в случае использования объектов ядра в любом случае будет переход в режим ядра, простите за тафталогию(дорогая операция), а в случае критической секции — нет.
Поправьте меня, если ошибаюсь.
_>Здравствуйте, LuciferMoscow, Вы писали: LM>>>>>>Крит. секция — не объект ядра AZ>>>>>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть LM>>>>Я книгу Рихтера видел CC>>>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена. LM>>Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине _>Здается мне, бонус может быть достигнут не только на многопроцессорной машине. Если объект синхронизации не занят, то в случае использования объектов ядра в любом случае будет переход в режим ядра, простите за тафталогию(дорогая операция), а в случае критической секции — нет. _>Поправьте меня, если ошибаюсь.
Поправим, ошибаетесь. Тут говорится только про критическую секцию. Прочитайте про спинлоки http://gzip.rsdn.ru/Forum/Info/FAQ.winapi.criticalsection.spin.asp — как раз они и дают некоторую вероятность обойтись без переключения контекста _только_ в случае многопроцессорной машины.
Здравствуйте, AntZ, Вы писали:
A>>>-что такое синглтон (попросили написать код) A>>>-как избежать рейс кондишена при инициализации синглтона
DC>>Я бы ответил: не использовать сингтон . Уж лучше за собой через параметры функций таскать, чем иметь потом секс с трудноуловимой и трудно воспроизводимой ошибкой.
AZ>Это ответ из серии лечения перхоти при помощи гильотины. Очень помогает. Да элементарно, надо в MySingletonClass::GetInstance() встроить критическую секцию или мьютекс, после лока мьютекса проверять, а не создан ли уже объект в соседнем треде.
А не покажешь, как это делается?
A>>>пришлось объяснять про double-checked locking, A>>>попутно возникли вопросы про блокировку и мьютексы
AZ>Абсолютно логично, против рейсов помогают правильные локи.
Здравствуйте, Andrew S, Вы писали:
_>>Здравствуйте, LuciferMoscow, Вы писали: LM>>>>>>>Крит. секция — не объект ядра AZ>>>>>>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть LM>>>>>Я книгу Рихтера видел CC>>>>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена. LM>>>Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине _>>Здается мне, бонус может быть достигнут не только на многопроцессорной машине. Если объект синхронизации не занят, то в случае использования объектов ядра в любом случае будет переход в режим ядра, простите за тафталогию(дорогая операция), а в случае критической секции — нет. _>>Поправьте меня, если ошибаюсь.
AS>Поправим, ошибаетесь. Тут говорится только про критическую секцию. Прочитайте про спинлоки http://gzip.rsdn.ru/Forum/Info/FAQ.winapi.criticalsection.spin.asp — как раз они и дают некоторую вероятность обойтись без переключения контекста _только_ в случае многопроцессорной машины.
1. Ссылку не вижу
2. Не могу согласиться. Да, если ресурс не может быть занят сразу, то в случае однопроцессорной машины спин-блокировки не происходит и сразу будет переход в режим ядра. Но, если ресурс свободен, то перехода в режим ядра не будет, потому как незачем. В таком случае имеем выигрыш.
_>>>Здравствуйте, LuciferMoscow, Вы писали: LM>>>>>>>>Крит. секция — не объект ядра AZ>>>>>>>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть LM>>>>>>Я книгу Рихтера видел CC>>>>>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена. LM>>>>Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине _>>>Здается мне, бонус может быть достигнут не только на многопроцессорной машине. Если объект синхронизации не занят, то в случае использования объектов ядра в любом случае будет переход в режим ядра, простите за тафталогию(дорогая операция), а в случае критической секции — нет. _>>>Поправьте меня, если ошибаюсь.
AS>>Поправим, ошибаетесь. Тут говорится только про критическую секцию. Прочитайте про спинлоки http://gzip.rsdn.ru/Forum/Info/FAQ.winapi.criticalsection.spin.asp — как раз они и дают некоторую вероятность обойтись без переключения контекста _только_ в случае многопроцессорной машины. _>1. Ссылку не вижу
_>2. Не могу согласиться. Да, если ресурс не может быть занят сразу, то в случае однопроцессорной машины спин-блокировки не происходит и сразу будет переход в режим ядра. Но, если ресурс свободен, то перехода в режим ядра не будет, потому как незачем. В таком случае имеем выигрыш.
Спин-блокировка это совсем не то, что вы думаете. Быстрая проверка на занятость есть и для однопроцессорной критической секции, а спинлок — это совершенно другое. Почитайте еще вот тут — http://www.rsdn.ru/article/baseserv/critsec.xml
Здравствуйте, Andrew S, Вы писали:
_>>>>Здравствуйте, LuciferMoscow, Вы писали: LM>>>>>>>>>Крит. секция — не объект ядра AZ>>>>>>>>А Вы видели исходники ядра? Лучше все-таки сначала их увидеть LM>>>>>>>Я книгу Рихтера видел CC>>>>>>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена. LM>>>>>Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине _>>>>Здается мне, бонус может быть достигнут не только на многопроцессорной машине. Если объект синхронизации не занят, то в случае использования объектов ядра в любом случае будет переход в режим ядра, простите за тафталогию(дорогая операция), а в случае критической секции — нет. _>>>>Поправьте меня, если ошибаюсь.
AS>>>Поправим, ошибаетесь. Тут говорится только про критическую секцию. Прочитайте про спинлоки http://gzip.rsdn.ru/Forum/Info/FAQ.winapi.criticalsection.spin.asp — как раз они и дают некоторую вероятность обойтись без переключения контекста _только_ в случае многопроцессорной машины. _>>1. Ссылку не вижу
AS>Я тоже. А так? http://www.rsdn.ru/Forum/Info/FAQ.winapi.criticalsection.spin.aspx
Так вижу, спасибо. Обязательно почитаю, но чуть позже.
_>>2. Не могу согласиться. Да, если ресурс не может быть занят сразу, то в случае однопроцессорной машины спин-блокировки не происходит и сразу будет переход в режим ядра. Но, если ресурс свободен, то перехода в режим ядра не будет, потому как незачем. В таком случае имеем выигрыш.
AS>Спин-блокировка это совсем не то, что вы думаете. Быстрая проверка на занятость есть и для однопроцессорной критической секции, а спинлок — это совершенно другое. Почитайте еще вот тут — http://www.rsdn.ru/article/baseserv/critsec.xml
.
И тут почитаю тоже.
Вопрос вот в чем: если все-таки у однопроцессорной критической секции есть быстрая проверка на занятость, то не будет ли в случае незанятого ресурса захват критической секции быстрее, чем объекта ядра ?
Спасибо.
_>>>2. Не могу согласиться. Да, если ресурс не может быть занят сразу, то в случае однопроцессорной машины спин-блокировки не происходит и сразу будет переход в режим ядра. Но, если ресурс свободен, то перехода в режим ядра не будет, потому как незачем. В таком случае имеем выигрыш.
AS>>Спин-блокировка это совсем не то, что вы думаете. Быстрая проверка на занятость есть и для однопроцессорной критической секции, а спинлок — это совершенно другое. Почитайте еще вот тут — http://www.rsdn.ru/article/baseserv/critsec.xml
. _>И тут почитаю тоже. _>Вопрос вот в чем: если все-таки у однопроцессорной критической секции есть быстрая проверка на занятость, то не будет ли в случае незанятого ресурса захват критической секции быстрее, чем объекта ядра ? _>Спасибо.
Будет. Но тут говорилось про другое — предназначение спинлока в критической секции. Смысл в том, что на однопроцессорной машине он бесполезен (а точнее, вреден). Поэтому однопроцессорные и многопроцессорные машины помимо разных HAL имеют еще и как минимум разный native рантайм.
Здравствуйте, Andrew S, Вы писали:
_>>>>2. Не могу согласиться. Да, если ресурс не может быть занят сразу, то в случае однопроцессорной машины спин-блокировки не происходит и сразу будет переход в режим ядра. Но, если ресурс свободен, то перехода в режим ядра не будет, потому как незачем. В таком случае имеем выигрыш.
AS>>>Спин-блокировка это совсем не то, что вы думаете. Быстрая проверка на занятость есть и для однопроцессорной критической секции, а спинлок — это совершенно другое. Почитайте еще вот тут — http://www.rsdn.ru/article/baseserv/critsec.xml
. _>>И тут почитаю тоже. _>>Вопрос вот в чем: если все-таки у однопроцессорной критической секции есть быстрая проверка на занятость, то не будет ли в случае незанятого ресурса захват критической секции быстрее, чем объекта ядра ? _>>Спасибо.
AS>Будет. Но тут говорилось про другое — предназначение спинлока в критической секции. Смысл в том, что на однопроцессорной машине он бесполезен (а точнее, вреден). Поэтому однопроцессорные и многопроцессорные машины помимо разных HAL имеют еще и как минимум разный native рантайм.
ОК. Резюмирую так:
1. Спин-блокировка на многопроцессорной машине дает преимущество, на однопроцессорной бесполезна.
2. Критические секции могут быть эффективнее объектов ядра как на многопроцессорных машинах, так и на однопроцессорных.
Согласны?
Здравствуйте, ZergIII, Вы писали:
ZII>Уважаемый, мы брейнбенч-подобные вопросы используем только для предварительной фильтрации и не требуем 100% правильных ответов. Просто экономия времени. Мне кажется, что если человек из 20 вопросов по С++ правильно отвечает только на 10 (причем уверяю вас, мы не задаем супер сложные вопросы или вопросы с подковырками) то это говорит либо о том, что он только недавно начал учить С++, либо (если у него опыт на С++ 5 лет), что его желание развиваться и поднимать свой технический уровень под большим вопросом.
К слову сказать, я вот сеньор.
Только.. ну, как бы сказать, чтобы не обидеть.
Контора, которая выдает браинбенч-подобные вопросы в лоб (не важно, для фильтрации ли или в каких других целях) моментально перемещается в мой собственный черный список.
Так что смотрите, как бы чего лишнего не "отфильтровать"
Здравствуйте, serg_joker, Вы писали:
_>Прикольно, но реализация sort, соответствующая стандарту, должна гарантировать сложность алгоритма n*log(n). Очевидно, что используя advance, таких гарантий дать нельзя. Кроме того, по стандарту sort таки требует RandomAccessIterator. См. ISO/IEC 14882:2003 — пп. 25.3.1.1
_>PS: Привет, Миша
Ради твоей регистрации можно было разводить провокаци !!! Даже Сергей. Л. появился
Привет!
A>>-чем функтор лучше функции (в частности, эффективнее ли) A>>-в каких случаях функцтор или функция не инлайнится?
DC>Хм.. Насколько я понимаю сильно от компилятора зависит. Кроме того это вроде как рекомендация компилятору, но функтор встроится вероятнее. Наличие >ссылок на функию может повлиять, хотя — хз я не разработчик компиляторов.
инлайн это такая необязательная штука, которую компилятор может выполнять, а может и нет.
например в VC++ целых три режима оптимизации, связанных только с инлайнами (+ __forceinline)
имхо такие вопросы стоит задавать только разработчикам компиляторов, если хотите услышать внятный ответ. у остальных ответ будет
носить характер домыслов
AS>>Будет. Но тут говорилось про другое — предназначение спинлока в критической секции. Смысл в том, что на однопроцессорной машине он бесполезен (а точнее, вреден). Поэтому однопроцессорные и многопроцессорные машины помимо разных HAL имеют еще и как минимум разный native рантайм. _>ОК. Резюмирую так: _>1. Спин-блокировка на многопроцессорной машине дает преимущество, на однопроцессорной бесполезна. _>2. Критические секции могут быть эффективнее объектов ядра как на многопроцессорных машинах, так и на однопроцессорных. _>Согласны?
Ну а кто другое говорил? Это очевидно любому, кто прочитал хотя бы Рихтера
Здравствуйте, Andrew S, Вы писали:
AS>>>Будет. Но тут говорилось про другое — предназначение спинлока в критической секции. Смысл в том, что на однопроцессорной машине он бесполезен (а точнее, вреден). Поэтому однопроцессорные и многопроцессорные машины помимо разных HAL имеют еще и как минимум разный native рантайм. _>>ОК. Резюмирую так: _>>1. Спин-блокировка на многопроцессорной машине дает преимущество, на однопроцессорной бесполезна. _>>2. Критические секции могут быть эффективнее объектов ядра как на многопроцессорных машинах, так и на однопроцессорных. _>>Согласны?
AS>Ну а кто другое говорил? Это очевидно любому, кто прочитал хотя бы Рихтера
Привожу цитату от постов выше по теме: CC>>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена. >Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине
Лично у меня сложилось впечатление, что автор считает, что бонус от критической секции есть только на многопроцессорной машине. Возможно, я не правильно воспринял или автор не до конца высказал мысль.
Здравствуйте, AntZ, Вы писали:
A>>>-что такое синглтон (попросили написать код) A>>>-как избежать рейс кондишена при инициализации синглтона
DC>>Я бы ответил: не использовать сингтон . Уж лучше за собой через параметры функций таскать, чем иметь потом секс с трудноуловимой и трудно воспроизводимой ошибкой.
AZ>Это ответ из серии лечения перхоти при помощи гильотины. Очень помогает. Да элементарно, надо в MySingletonClass::GetInstance() встроить критическую секцию или мьютекс, после лока мьютекса проверять, а не создан ли уже объект в соседнем треде.
Понимаешь, мне еще толком не приходилось ковыряться с многозадачностью. Но тут есть 2 момента которые я точно знаю: 1. В С++ нет нормальных примитивов, они дай бог придут в С++х0; 2. Синглтон достаточно простой механизм и в некоторых случаях он не только решает поставленную задачу, но еще и создает море трудностей. Исходя из этого я делаю заключение, что использовать синглтона в многопоточной среде не самое хорошее архитектурное решение, мало того если еще это критично по скорости, то локи могут еще и не подойти.
A>>>пришлось объяснять про double-checked locking, A>>>попутно возникли вопросы про блокировку и мьютексы
AZ>Абсолютно логично, против рейсов помогают правильные локи.
Я в этой теме не очень, но знаю что тут надо бороться с компилятором, чтоб он не дай бог не переупорядочил операции в ходе оптимизаций.
DC>>Вот не пойму, каким боком качества управленца к сеньору . Такие вопросы ИМХО даже тим лида не особо беспокоят, это скорее уровень ПМа.
AZ>Ну, они очень любят играть игры в "Синьоров". Сеньер — это всего лишь слово, только некоторые вкладывают в него смысл, как обычный программер, только "в десять раз круче".
Да хоть в 30 раз, причем тут чисто управленческие качества? Это ведь к программированию не имеет никакого отношения. Это все равно что спросить как правильно построить выкройку и какую ткань лучше использовать для конкретной вещи. Ну что слабо ответить на эту тему? ИМХО это абсурд, этих вопросов можно было ожидать для ПМа, ну, накрайняк, для тимлида.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
> A>>>пришлось объяснять про double-checked locking, > A>>>попутно возникли вопросы про блокировку и мьютексы > > AZ>Абсолютно логично, против рейсов помогают правильные локи. > > Я в этой теме не очень, но знаю что тут надо бороться с компилятором, чтоб он не дай бог не переупорядочил операции в ходе оптимизаций.
Все гораздо хуже. Если инструкции не переупорядочил компилятор, это вполне может сделать процессор. Причем когда первый раз это проявится, будешь долго смотреть в отладчик и недоумевать, как оно в этом безобидном double-checked lock'е могло упасть
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
S>Все гораздо хуже. Если инструкции не переупорядочил компилятор, это вполне может сделать процессор. Причем когда первый раз это проявится, будешь >долго смотреть в отладчик и недоумевать, как оно в этом безобидном double-checked lock'е могло упасть
переупорядочивание подавляется с помощью memory barriers
AS>>>>Будет. Но тут говорилось про другое — предназначение спинлока в критической секции. Смысл в том, что на однопроцессорной машине он бесполезен (а точнее, вреден). Поэтому однопроцессорные и многопроцессорные машины помимо разных HAL имеют еще и как минимум разный native рантайм. _>>>ОК. Резюмирую так: _>>>1. Спин-блокировка на многопроцессорной машине дает преимущество, на однопроцессорной бесполезна. _>>>2. Критические секции могут быть эффективнее объектов ядра как на многопроцессорных машинах, так и на однопроцессорных. _>>>Согласны?
AS>>Ну а кто другое говорил? Это очевидно любому, кто прочитал хотя бы Рихтера
_>Привожу цитату от постов выше по теме: CC>>>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена. >>Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине _>Лично у меня сложилось впечатление, что автор считает, что бонус от критической секции есть только на многопроцессорной машине. Возможно, я не правильно воспринял или автор не до конца высказал мысль.
Именно в приведенной цитате очевидно, о чем говорится. Нужное выделено. Трактовать это как либо еще (и тем более уж где тут сравнение скорости критической секции и объекта ядра) — довольно сложно.
>S>Все гораздо хуже. Если инструкции не переупорядочил компилятор, это вполне может сделать процессор. Причем когда первый раз это проявится, будешь >долго смотреть в отладчик и недоумевать, как оно в этом безобидном double-checked lock'е могло упасть > > переупорядочивание подавляется с помощью memory barriers
Я вообще-то в курсе
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Andrew S, Вы писали:
AS>>>>>Будет. Но тут говорилось про другое — предназначение спинлока в критической секции. Смысл в том, что на однопроцессорной машине он бесполезен (а точнее, вреден). Поэтому однопроцессорные и многопроцессорные машины помимо разных HAL имеют еще и как минимум разный native рантайм. _>>>>ОК. Резюмирую так: _>>>>1. Спин-блокировка на многопроцессорной машине дает преимущество, на однопроцессорной бесполезна. _>>>>2. Критические секции могут быть эффективнее объектов ядра как на многопроцессорных машинах, так и на однопроцессорных. _>>>>Согласны?
AS>>>Ну а кто другое говорил? Это очевидно любому, кто прочитал хотя бы Рихтера
_>>Привожу цитату от постов выше по теме: CC>>>>А толку. В винде в критической секции используется семафор, который используется если критическая секция уже захвачена. >>>Но в начале могут быть спинлоки. Дает бонус на многопроцессорной машине _>>Лично у меня сложилось впечатление, что автор считает, что бонус от критической секции есть только на многопроцессорной машине. Возможно, я не правильно воспринял или автор не до конца высказал мысль.
AS>Именно в приведенной цитате очевидно, о чем говорится. Нужное выделено. Трактовать это как либо еще (и тем более уж где тут сравнение скорости критической секции и объекта ядра) — довольно сложно.
Прошу прощения, я был невнимателен.
Здравствуйте, Awaken, Вы писали:
A>Сходил в компанию, знаменитую своими сложными собеседованиями. A>надеюсь вопросы не могут являться тайной, иначе грош цена таким вопросам, A>если знание ответов заранее дает 100% прохождение собеседования A>итак, вопросы: A>C++ и STL: A>-чем отличаются list и vector A>-как отсортировать vector по убыванию A>написал код с функтором переопределяющим сравнение. A>дальше было вопрос A>-чем функтор лучше функции (в частности, эффективнее ли) A>-в каких случаях функцтор или функция не инлайнится? A>-как отсортировать список? A>-почему алгоритм sort не примениним к контейнеру list? A>Design patterns: A>-что такое синглтон (попросили написать код) A>-как избежать рейс кондишена при инициализации синглтона A>пришлось объяснять про double-checked locking, A>попутно возникли вопросы про блокировку и мьютексы A>-чем отличается критическая секция от мьютекса A>(это их любимый вопрос -я до сих пор НЕ ЗНАЮ, как внутри работает критическая секция, A>знаю только что она быстрее и ее нельзя шарить между процессами) A>-абстрактная фабрика, когда применять? попросили нарисовать UML диаграмму, A>и придумать пример из жизни. A>придумал кодогенератор генерирующий одни и те же конструкции на разных языках программирования : A>JavaFactory, CSharpFactory, CPlusFactory A>-паттерн композит, нарисуйте диаграмму A>-как реализовать глубокое копирование вышеуказанного паттерна, с помощью виртуального конструктора. A>здесь суть в том что возникает проблема с возможными циклическими ссылками на объекты, A>и нужно копировать все объекты только один раз. эту задачу я не решил за приемлимое время A>по моему тут нужно придумать что-то типа раскраски графа, чтоб отмечать вершины которые мы уже посетили. A>далее были вопросы по менеджерским качествам: A>-как организовать работу удаленных друг от друга команд A>-какое взаимодействие когда использовать (почта, телефон, IM) A>-как организовывать митинги, сколько времени тратить на обсуждения A>немного поговорили по английски (с этим у меня все ок, на программерские темы могу трындеть сколько угодно, A>да и просто "о жизни" тоже) A>итог — я похоже не очень удовлетворил их ожидания. а мне в свою очередь не очень понравилось содержание работы. A>на том мы и расстались.
ну вот.. в контору взяли — а там шум, рабочие всякие шастают, верно?
ирония судьбы, не иначе.
Здравствуйте, ZergIII, Вы писали:
ZII>Wow, прикольно почитать какое у нас сложное собеседование ZII>А что вы хотели на позицию Senior C++ Developer?
странно и нелогично выглядит появление здесь работодателя, с заявлениями в таком тоне (видно, как вы относитесь к людям в частности).
уж чего, а популярности это никак вам не добавит.
Здравствуйте, Cyberax, Вы писали:
C>В крит. секции может использоваться спинлок, который позволяет (неэффективно) ждать пока секция не разблокируется без участия ядра.
Но именно это "неэффективное" ожидание может спасти от ещё более неэффективного "засыпания" потока.
Здравствуйте, addword, Вы писали:
C>>В крит. секции может использоваться спинлок, который позволяет (неэффективно) ждать пока секция не разблокируется без участия ядра. A>Но именно это "неэффективное" ожидание может спасти от ещё более неэффективного "засыпания" потока.
Если потоки засыпают — значит это кому-то нужно Т.е. его time slice будет использован каким-то другим потоком для выполнения какой-то полезной работы. В случае же со spinlock'ом мы просто будем бесполезно греть окружающую среду.
Следовательно, спинлоки имеет смысл использовать только при небольшой вероятности lock contention'а.
Здравствуйте, Кирилл Лебедев, Вы писали:
КЛ>Здравствуйте, ZergIII, Вы писали:
ZII>>А насчет задач — какая из упомянутых здесь на ваш взгляд не проверяет способность человека решать реальные практические задачи? КЛ>На мой взгляд, Ваши задания сильно оторваны от практики. Мне кажется, на собеседовании надо задавать только те вопросы, ответы на которые могут как-то охарактеризовать кандидата. Т.е. каждый вопрос должен быть некоторым критерием. И если кандидат ему не соответствует (т.е. не отвечает на вопрос), то продолжать собеседование бесполезно. Какой вывод Вы можете сделать, если кандидат не ответит на Ваш вопрос? Да никакого! Ну, не знает человек, в каких случаях функтор не инлайнится — и что с того?
КЛ>Кроме того, Ваши задачи даны не в той постановке, как они встречаются на практике. Например, человек может зазубрить паттерны и красиво рисовать их UML-диаграммы, но стоит ему столкнуться с задачей, где потребуется Абстрактная Фабрика или Компоновщик, и он предпочтет switch или мешанину из dynamic_cast'ов. Лучшей дайте ему какое-нибудь практическое задание (взятое из Вашей практики) и попросите решить. А затем обсудите с ним решение, а заодно и паттерны. Из решения будет гораздо лучше видно, умеет человек проектировать (хотя бы на микроуровне) или нет. А абстрактные рассуждение ни о чем не говорят.
Здравствуйте, Кирилл Лебедев, Вы писали:
КЛ>На мой взгляд, Ваши задания сильно оторваны от практики. Мне кажется, на собеседовании надо задавать только те вопросы, ответы на которые могут как-то охарактеризовать кандидата. Т.е. каждый вопрос должен быть некоторым критерием. И если кандидат ему не соответствует (т.е. не отвечает на вопрос), то продолжать собеседование бесполезно. Какой вывод Вы можете сделать, если кандидат не ответит на Ваш вопрос? Да никакого! Ну, не знает человек, в каких случаях функтор не инлайнится — и что с того?
КЛ>Кроме того, Ваши задачи даны не в той постановке, как они встречаются на практике. Например, человек может зазубрить паттерны и красиво рисовать их UML-диаграммы, но стоит ему столкнуться с задачей, где потребуется Абстрактная Фабрика или Компоновщик, и он предпочтет switch или мешанину из dynamic_cast'ов. Лучшей дайте ему какое-нибудь практическое задание (взятое из Вашей практики) и попросите решить. А затем обсудите с ним решение, а заодно и паттерны. Из решения будет гораздо лучше видно, умеет человек проектировать (хотя бы на микроуровне) или нет. А абстрактные рассуждение ни о чем не говорят.
Не сочтите за хвастовство, но я сразу определяю вызубрил человек шаблоны проектирования или таки да понимает их и умеет использовать. Кстати, на собеседованиях я прошу кандидата описать те шаблоны, которые он реально использовал в своей практике. Да, приходят люди, которые утверждают что активно пользуются таким "баяном" как абстрактная фабрика. Но выясняется что это просто объект, которому делегировано создание других объектов. Или, ещё случай, что lightweight — это класс, в котором все члены — указатели.
Здравствуйте, landerhigh, Вы писали:
L>Здравствуйте, ZergIII, Вы писали:
ZII>>Уважаемый, мы брейнбенч-подобные вопросы используем только для предварительной фильтрации и не требуем 100% правильных ответов. Просто экономия времени. Мне кажется, что если человек из 20 вопросов по С++ правильно отвечает только на 10 (причем уверяю вас, мы не задаем супер сложные вопросы или вопросы с подковырками) то это говорит либо о том, что он только недавно начал учить С++, либо (если у него опыт на С++ 5 лет), что его желание развиваться и поднимать свой технический уровень под большим вопросом. L>К слову сказать, я вот сеньор. L>Только.. ну, как бы сказать, чтобы не обидеть. L>Контора, которая выдает браинбенч-подобные вопросы в лоб (не важно, для фильтрации ли или в каких других целях) моментально перемещается в мой собственный черный список. L>Так что смотрите, как бы чего лишнего не "отфильтровать"
Мне просто интересно, чем вас пугают брейнбенч-подобные вопросы? Кстати, а какие вопросы вы считаете таковыми?
Здравствуйте, Awaken, Вы писали:
A>>>-чем функтор лучше функции (в частности, эффективнее ли) A>>>-в каких случаях функцтор или функция не инлайнится?
DC>>Хм.. Насколько я понимаю сильно от компилятора зависит. Кроме того это вроде как рекомендация компилятору, но функтор встроится вероятнее. Наличие >ссылок на функию может повлиять, хотя — хз я не разработчик компиляторов.
A>инлайн это такая необязательная штука, которую компилятор может выполнять, а может и нет. A>например в VC++ целых три режима оптимизации, связанных только с инлайнами (+ __forceinline) A>имхо такие вопросы стоит задавать только разработчикам компиляторов, если хотите услышать внятный ответ. у остальных ответ будет A>носить характер домыслов
Указание inline для функции — совершенно бесполезная штука, по той простой причине что встраиваться код будет в контексте использования и польза от него может определяться только исходя из контекста использования. То есть и решение о встраивании можно принять только видя этот самый контекст. Но когда мы пишем функцию и объявляем её inline, мы то о контексте использования знать ничего не можем. Вот такой вот парадокс.
Здравствуйте, bkat, Вы писали:
B>Здравствуйте, ZergIII, Вы писали:
ZII>>Wow, прикольно почитать какое у нас сложное собеседование
B>Ну и как вы предлагаете "как избегать рейс кондишена при инициализации синглтона"? B>Я бы лично ответил, что синглтоны надо инициировать вручную до того, B>как будет создан второй поток. Наверное бы не прошел ваше интервью...
неа, недавно на такой же вопрос предложил использовать там мьютекс/критикал секцию, сингельтоны не так часто приходиться писать, чтобы за секунду вспомнить/придумать двойную проверку
Здравствуйте, Denis, Вы писали:
D>>>..."виртуальный конструктор"...
A>>
A>>class Base
A>>{
A>>public:
A>> virtual Base* Clone()=0; // это он
A>>};
A>>
D>хм... это помойму просто метод Clone , как минимум второй части понятия ("конструктор") я не вижу тут D>и второе, откуда взялся такой термит-то?
ага, с кодом напутали, это обычное клонирование, наверное скопировали не из того раздела вики
а виртульный конструкто взялся вот от этого "it deals with the problem of creating objects (products) without specifying the exact class of object that will be created."
Здравствуйте, Awaken, Вы писали:
A>-чем отличается критическая секция от мьютекса A>(это их любимый вопрос -я до сих пор НЕ ЗНАЮ, как внутри работает критическая секция, A>знаю только что она быстрее и ее нельзя шарить между процессами)
А при чем здесь C++? Это вообще-то вопрос про Win32. Есть системы, на которых C++ есть, а разделения на критические секции и мьютексы нету
Теперь про Win32.
Мьютекс это объект ядра. Программа имеет от него HANDLE, и любая операция с мьютексом требует переключения в kernel mode.
Критическая секция пытается не обращаться к ядру в типичном случае — на входе в незанятую критическую секцию (когда ожидание не требуется), и на выходе из критической секции, в которую никто больше не пытается войти (т.е., когда не надо никого будить). Делается это с помощью атомарных инкрементов и т.п. в user space.
Кроме того, на многопроцессорных системах на входе в занятую критическую секцию пытаются немного подождать с помощью цикла, прежде чем уже блокироваться по-настоящему. Очень велика вероятность, что секция занята потоком с другого процессора, и ее отпустят быстрее, чем ушло бы времени на то, чтобы войти/выйти в ядро. На однопроцессорных системах это не делают, поскольку все равно, пока управление не переключится на другой поток, нет шансов, что критическая секция освободится, а переключение управления на другой поток без ядра не обойдется — нет смысла откладывать посещение ядра на попозже, раз уж оно все равно неизбежно.
Если же доходит до блокировки, внутри себя критическая секция имет мьютекс или что-то в этом роде (я не знаю, какой в точности объект синхронизации там используется, но это и не суть важно). Именно его аллоцирует, промежду прочьего, InitializeCriticalSection(), и освобождает DeleteCriticalSection().
_O_>Я такой подход использовал при создании importer-а из Rational Rose в другой тул. Сей импортер должен был читать Rose файлы напрямую. Это потребовало создания внутреннего представления для файлов, которое как раз и является сложной разновидностью паттерна композит с перекрестным ссылками (в том числе и циклическими). Метамодель + вспомогательные шаблоны были написаны вручную (~ 4000 строк кода). Потом была нарисована UML модели внутреннего представления для Rose-файлов. Затем был написан небольшой кодогенератор (~2000 строк кода), который из этой модели генерил С++ классы + код, инициализирующий метамодель. Объем генеренного кода уже порядка 30 000 строк. В общем, за две недели получилось полноценное и эффективное внутреннее представление, с поддержкой таких операций, как сериализация/десеарилизация/клонирование/обход и т.д, которые зависят лишь от метамодели. Это позволило впоследствии дополнять и уточнять модель без переписывания этих методов.
Не знаю кому как, а мне почему-то захотелось пасть ниц