Здравствуйте, 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.
это вы серьёзно написали?