— давай попробуем
A>Раз у всех разные представления предлагаю сделать некую симуляцию. Например я буду претендентом на вакансию, а ты будешь пытаться выяснить мой уровень подготовки. Потом посмотрим какие вопросы были удачны, а какие нет. Может быть голосование проведем.
В крутую компанию требуется Anatolix со стандартным набором Windows скилзов:
— VC++
— COM, ATL
— MS SQL
— MFC
— ASP, ISAPI
Знания технологий .NET большой плюс.
Пиши резюме в виде перечисления скилов с указанием количества лет опыта.
Если нам не помогут, то мы тоже никого не пощадим.
— давай попробуем
A>>Раз у всех разные представления предлагаю сделать некую симуляцию. Например я буду претендентом на вакансию, а ты будешь пытаться выяснить мой уровень подготовки. Потом посмотрим какие вопросы были удачны, а какие нет. Может быть голосование проведем.
IT>В крутую компанию требуется Anatolix со стандартным набором Windows скилзов:
IT>- VC++ IT>- COM, ATL IT>- MS SQL IT>- MFC IT>- ASP, ISAPI
IT>Знания технологий .NET большой плюс.
IT>Пиши резюме в виде перечисления скилов с указанием количества лет опыта.
а вот ещё вопрос, может, кто подскажет: какие знания трбовать у инженеров по тестированию, не тупых кнопкожателей, а именно Quality Assurance Engineers ? кроме там Rational Clear Quest — это самой собой, Робота, Пьюрифая, Коверейжда... ???
OK давай начнем. Реальная подготовка у меня достаточно
далеко от тех вещей так что будем считать, что я просто
решил тебя на понт взять и устроиться на вашу крутую
работу. Сответственно не все в данном резюме соответствует
реальности.
Твоя задача
1) Определить где именно я наврал
2) Определить где именно моя подготовка соответствует заявленной
3) Определить мою адекватность, способность решать проблемы, и тп
4) Не дискредетировать при этом себя и фирму задачей подобной "лампочкам"
Будем считать что посередине дискуссии ты мне не будешь указывать
на дверь и кричтать "вон отсюда", нашел дырку в одном скилле,
просто переключаешься на следующий(будем считать у тебя кандидатов мало :)
Как мы будем считать проходить интервью, рядом стоит комп и я им пользуюсь
для ответов на вопросы(для интервью достаточно редкая ситуация, но к данной
ситуации будет ближе), либо его там нет и тогда я тоже здесь не буду
пользоваться MSDN и тп но тогда буду отвечать(притом иногда абсолютно
честно) "не помню, это наверняка есть в msdn:-) " ?
Как мы будем проводить опрос — все интервью потом разбор полетов,
либо вопрос — ответ — разбор — повторить(мне кажется что второе будет
лучше т.к. в первом случае мы рискуем тем что нам это надоест,
раньше чем дойдет до конца)
P.S. Ты кстати pls не пользуйся поиском в интернет а то я там
очень активно свечусь и набор скиллов можно просто с помошью
поиска достаточно точно установить.(поиск RSDN тоже касается).
Типа ты меня первый раз в жизни видишь.
P.P.S Все остальные тоже присоединяйтесь либо к группе
претендентов либо к группе тех кто на вопросы задает.
Attachment 1: resume.txt
-----------------------------------------------------------------
Anatolix.
Образование ****.
Семейное положение *****.
Знание языков программирования:
C/C++ — очень отлично — 8 лет
Object Pascal — отлично — 2 года
Java — хорошо — 0.5 года
Assembler — хорошо — 2.5 года опыта в Reverse Engeneering(хобби, эпизодически)
Знание средвств разработки
Microsoft Visual C++ — отлично — 3 года
Borland C++ Builder — Guru — 5 лет.
Borland Delphi — отлично — 1 год
Borland Java Builder — прилично — 0.5 года
Знание SQL серверов:
Interbase — отлично — 3 года.
Oracle — программирование — хорошо, администрирование — плохо — 1 год.
MS-SQL — видел — 1 неделя
Знание технологий, протоколов и библиотеки и т.п. т.д.
COM / ATL — хорошо — 1 год
SQL — отлично — 3 года
SSL — знаю, пользовал библиотеку OpenSSL — 1 месяц
XML — неплохо — 2 года(эпизодически)
DirectDraw, Direct3D, DirectShow — хорошо — 3 месяца
Qt — хорошо — 2 года
MFC — хорошо — 1 год
WinAPI — хорошо 2 года
Unix/Posix API — хорошо — 2 года
Операционные системы
Windows
Linux
FreeBSD
Понимание следующий вещей:
Интернет протоколы(NTTP, SMTP и другие *TP)
Внутреннее устройство OS Windows
Языки
Китайский(родной :)
Английский(письменный — свободно, устный плохое произношение)
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Твоя задача A>1) Определить где именно я наврал A>2) Определить где именно моя подготовка соответствует заявленной A>3) Определить мою адекватность, способность решать проблемы, и тп A>4) Не дискредетировать при этом себя и фирму задачей подобной "лампочкам"
Good.
A>Будем считать что посередине дискуссии ты мне не будешь указывать на дверь и кричтать "вон отсюда", нашел дырку в одном скилле, просто переключаешься на следующий (будем считать у тебя кандидатов мало
Ну если ты только не будешь рисовать куски исходных кодов на моих штанах
A>Как мы будем проводить опрос — все интервью потом разбор полетов, либо вопрос — ответ — разбор — повторить(мне кажется что второе будет лучше т.к. в первом случае мы рискуем тем что нам это надоест, раньше чем дойдет до конца)
Давай второй вариант.
Еще предложение — обходимся без мелких придирок.
Поехали.
A>C/C++ — очень отлично — 8 лет
Мда. Тут конечно спрашивать нечего, но для порядку начнём с него родного.
Есть следующий код:
class A
{
public:
void f1();
void f2();
};
class B: public A
{
public:
void f3();
void f4();
};
Вы как разработчик классов A и B не хотите, чтобы пользователи имели доступ к членам класса A, т.е. к функциям f1 и f2 через экземпляр класса B. Как этого можно добится.
Если нам не помогут, то мы тоже никого не пощадим.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>Или private А в чём разница между protected и private наследованием?
Соответственно ф-ии будут private/protected
(если вообще то private не доступны даже потомкам)
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>Или private А в чём разница между protected и private наследованием?
A>Соответственно ф-ии будут private/protected A>(если вообще то private не доступны даже потомкам)
Ok. Сами когда нибудь использовали эти средства?
Ещё один бестолковый вопросик и закончим с C++.
Что такое name decoration и зачем оно нужно?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>Ok. Сами когда нибудь использовали эти средства?
Иногда
IT>Что такое name decoration и зачем оно нужно?
Искажение имен в obj/lib/dll итп
для того чтобы поддерживать overloading,
проверку параметров при линковке
если в одном модуле функия описана
как void foo(int), а в другом void foo(char)
то не слинкуется(в классическом C
такое проходит и ошибку можно годами потом искать)
IT>Ещё один бестолковый вопросик и закончим с C++.
В смысле ты соглашаешься что у меня 8 лет
expirience C++ или ты всетаки сомневаешься?
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>Что такое name decoration и зачем оно нужно?
A>Искажение имен в obj/lib/dll итп
Я бы ещё упомянул (скорее всего ты это забыл сделать от волнения ) о extern "C".
IT>>Ещё один бестолковый вопросик и закончим с C++.
A>В смысле ты соглашаешься что у меня 8 лет expirience C++ или ты всетаки сомневаешься?
Я не могу точно определить твой experience, да в этом и нет необходимости. Он достаточный для продолжения разговора. А уж если ты закалённый Brainbench боец, то дальнейший разговор на эту тему тем более не имеет смысла.
Продолжим?
Есть ли какие-либо потенциальные проблемы в следующем псевдокоде на Java?
skipped A>Знание средвств разработки A>Microsoft Visual C++ — отлично — 3 года
skipped A>Знание технологий, протоколов и библиотеки и т.п. т.д. A>COM / ATL — хорошо — 1 год A>MFC — хорошо — 1 год
skipped
Внимание вопрос!
Чем человек занимался 2 года с Visual C++?
Здравствуйте Иван Цыгулёв, Вы писали:
ИЦ>Привет злобный HR Ткачёв
Здравствуйте, Ваня. Скажи спасибо, что я просто не знал о чём тебя в своё время спрашивать
ИЦ>вот тебе подсказка
ИЦ>Внимание вопрос! ИЦ>Чем человек занимался 2 года с Visual C++?
Ты подожди, мы до всего дойдём. И про ATL с COM'ом ещё поспрашаем. Вообще, опыт с наименьшим количесвом лет всегда вызывает подозрение.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Иван Цыгулёв, Вы писали:
ИЦ>>Привет злобный HR Ткачёв
IT>Здравствуйте, Ваня. Скажи спасибо, что я просто не знал о чём тебя в своё время спрашивать
Ага, сам не знал
Да и главное тогда было чтобы человек хороший был
ИЦ>>вот тебе подсказка
ИЦ>>Внимание вопрос! ИЦ>>Чем человек занимался 2 года с Visual C++?
IT>Ты подожди, мы до всего дойдём. И про ATL с COM'ом ещё поспрашаем. Вообще, опыт с наименьшим количесвом лет всегда вызывает подозрение.
Да не про минимальный опыт разговор, а о том что можно делать без ATL и MFC 2 года с Visual C++ ?
Здравствуйте Karimchik, Вы писали:
K>я бы за такой код поубивал перепишем его скажем так (ессно с тем же вопросом)
K>public void foo(){ K> RandomAccessFile f = new RandomAccessFile("test.txt","rw"); K> f.write("123"); K> f.close(); K>}
А я в Java без понятия и потом я же сказал псевдо-код. А убивать меня не надо, тем более что смысл то остался.
Если нам не помогут, то мы тоже никого не пощадим.
IT>А я в Java без понятия :) и потом я же сказал псевдо-код. А убивать меня не надо, тем более что смысл то остался.
ну так чего и добивались ;)
Re[5]: Требуется Anatolix...
От:
Аноним
Дата:
07.08.02 03:44
Оценка:
ИЦ>>>Внимание вопрос! ИЦ>>>Чем человек занимался 2 года с Visual C++? ИЦ>Да не про минимальный опыт разговор, а о том что можно делать без ATL и MFC 2 года с Visual C++ ?
Что угодно. Сервера. Сервисы. Драйверы. Игры. Библиотеки.
Тот-же гуй совсем необязательно делать на MFC или ATL.
Можно и на plain Win32 API, Qt, FLTK, etc.
А можно также прикрутить произвольные компайлер и линкер и разрабытывать под платформу,
где MFC или ATL никогда не было и не будет. Например, под DAP9800 с 1 мегом пямяти, оверлеями
и VermontView.
Z™>>Тут же горит табло "Ждите исключения", на что IT и намекает, без завязки на джаву.
IT>Ну тогда переписывай код как надо :), а Anatolix нам потом скажет знал он это или нет.
Кстати, на Java подобный код вообще не должен компилятся.
IT>Если не знал, то понятно, что Java у него липа.
Тяжело наверное собеседовать по теме, в которой сами не очень ориентируетесь.
Я, кстати, как раз сейчас народ по жабе собеседую, так что могу подбросить
более зубастых вопросов. А то этот какой-то совсем примитивный. Даже человек,
жабы не знающий вовсе может ответить. Кстати, по сишнику тоже слишком простые
вопросы, только на знание базовых вещей. Не выявляють.
Любимая тема — виртуальные наследования, виртуальные деструкторы... Скажем,
понимать, как устроены виртуальные функции и как их сэмулировать на С (не ++)
весьма полезно. А однажды спросили, что такое виртуальный конструктор — а я как
раз Элджера тогда обчитался, и стал судорожно скрипеть мозгами, припоминая, что
за это паттерн такой — виртуальный конструктор. Тут они и давай глумится — не
бывает, говорят, виртуальных конструкторов!
Народ! Не ломайте игру! Не высказывайтесь по вопросу, по которому Anatolix
еще не отстрелялся, а то неспортивно получается.
Здравствуйте Yampolski_Nikita, Вы писали:
YN>а вот ещё вопрос, может, кто подскажет: какие знания трбовать у инженеров по тестированию, не тупых кнопкожателей, а именно Quality Assurance Engineers ? кроме там Rational Clear Quest — это самой собой, Робота, Пьюрифая, Коверейжда... ???
Описать систему и попросить набросать план тестирования. Ткнуть пальцем в пункт плана и попросить детализировать до тест-кейсов. Проверить на полноту. Типа так.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>Что такое name decoration и зачем оно нужно?
A>>Искажение имен в obj/lib/dll итп
IT>Я бы ещё упомянул (скорее всего ты это забыл сделать от волнения ) о extern "C".
Нет об этом просто не спрашивали.
IT>Я не могу точно определить твой experience, да в этом и нет необходимости. Он достаточный для продолжения разговора. А уж если ты закалённый Brainbench боец, то дальнейший разговор на эту тему тем более не имеет смысла.
Как тебе сказать. Ты знаешь, но ты определил по этим 3 вопросам
то, что человек прочитал книжку о C++. Опыт работы здесь не нужен.
Я мог ответить на эти вопросы еще будучи студентом с 0 опытом
работы(я достаточно хорошо себя помню когда начинал). Ты знаешь
тот уровень я сейчас не считаю приемлимым для работы. Я тогда например
не знал вообще о dynamic_cast, о том что можно им интерфейсы в
бок кастовать вообще речи не было, да и четкого представления о
понятии интерфейса у меня не было. О smart pointer я узнал почти через
год. Единственный хороший вопрос был "используешь ли ты сам private/protected"
но на него ответ "да" напрашивается сам, так что он тоже
неудовлетворителен.
Вообщем я считаю что вопросы по С++ были неудовлетворительны. Но
вообще я в принипе понимаю что тебе на самом деле было просто лень
быть уменьшеной копией brainbench. В этой области меня действительно
сложно поймать(кстати ты в преф не играешь? У меня весь процесс
какую-то стойкую ассоциацию с расписыванием мизера вызывает)
Кстати знаешь откуда взялась цифра 8 лет experience? Я сначала
написал 10, а потом подумал что слишком круглое число. Если бы
ты видел нормальное резюме ты бы подумал что не может
у человека которому 22 года быть 8-летний опыт в чем либо.
IT>ЗЫ. В слове experience ты сделал ошибку, что ставит под сомнение твоё утверждение о свободном письменном
Это очепятка была, я знаю как это слово пишется.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Zilog™, Вы писали:
Z™>>Тут же горит табло "Ждите исключения", на что IT и намекает, без завязки на джаву.
IT>Ну тогда переписывай код как надо , а Anatolix нам потом скажет знал он это или нет. Если не знал, то понятно, что Java у него липа.
Меня код тоже сильно удивил так, что я как то про то что
файл может не открыться сначала забыл, но после наводящего вопроса
наверняка понял бы что от меня хотят, такие вещи я понимаю.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
IT>Ну тогда переписывай код как надо , а Anatolix нам потом скажет знал он это или нет. Если не знал, то понятно, что Java у него липа. dmz>Народ! Не ломайте игру! Не высказывайтесь по вопросу, по которому Anatolix dmz>еще не отстрелялся, а то неспортивно получается.
Сорри, я думал это он ответил, жаль что свое сообщение нельзя немедленно удалить.
Здравствуйте zuikov, Вы писали:
Z>Что угодно. Сервера. Сервисы. Драйверы. Игры. Библиотеки. Z>Тот-же гуй совсем необязательно делать на MFC или ATL. Z>Можно и на plain Win32 API, Qt, FLTK, etc.
Qt, на Windows собираем VC на unix gcc.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT> Вообще, опыт с наименьшим количесвом лет всегда вызывает подозрение.
Да это вообще здравая идея, я как то не подумал.
Надо было куда-нибуть 20 лет опыта вписать чтобы
вообще не спрашивали.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте George_Seryakov, Вы писали:
GS>Здравствуйте Yampolski_Nikita, Вы писали:
YN>>а вот ещё вопрос, может, кто подскажет: какие знания трбовать у инженеров по тестированию, не тупых кнопкожателей, а именно Quality Assurance Engineers ? кроме там Rational Clear Quest — это самой собой, Робота, Пьюрифая, Коверейжда... ???
GS>Описать систему и попросить набросать план тестирования. Ткнуть пальцем в пункт плана и попросить детализировать до тест-кейсов. Проверить на полноту. Типа так.
Спасибо, Григорий, я так и полагал, работая сам инженером по тестированию ))
'Предположим эти три таблицы заполняются одной SP на MS SQL сервере, но для упрощения сделаем так
SqlString = "INSERT #T1 VALUES(100)" & _
" INSERT #T2 VALUES(200)" & _
" INSERT #T3 VALUES(300)"
conn.Execute(SqlString)
Set rs1 = conn.Execute("SELECT * FROM #T1")
Set rs2 = conn.Execute("SELECT * FROM #T2") '<--- тут ошибка выполнения
Set rs3 = conn.Execute("SELECT * FROM #T3") %>
Здравствуйте 4auHuK, Вы писали:
HK>Вопрос: почему, такой простой код дает ошибку в указаном месте?
Да только в рамках этой и осталось впиховать
вопросы на которые никто не отвечает.
Рекомендую задать в соответствующей конфе
при этом саму ошибку написать
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Z™>>>Тут же горит табло "Ждите исключения", на что IT и намекает, без завязки на джаву.
IT>>Ну тогда переписывай код как надо :), а Anatolix нам потом скажет знал он это или нет. dmz>Кстати, на Java подобный код вообще не должен компилятся.
Ну это правда.
IT>>Если не знал, то понятно, что Java у него липа. dmz>Тяжело наверное собеседовать по теме, в которой сами не очень ориентируетесь. dmz>Я, кстати, как раз сейчас народ по жабе собеседую, так что могу подбросить dmz>более зубастых вопросов.
Ну и в этих 3-х строчках (причем я их переписал именно из псевдокода) есть целых 2 вещи, на которые человек должен обратить внимание ;) А насчет более зубастых вопросов, было бы интересно на них глянуть :)
dmz>Народ! Не ломайте игру! Не высказывайтесь по вопросу, по которому Anatolix dmz>еще не отстрелялся, а то неспортивно получается.
Здравствуйте dmz, Вы писали:
IT>>Если не знал, то понятно, что Java у него липа.
dmz>Тяжело наверное собеседовать по теме, в которой сами не очень ориентируетесь.
Не очень. Я не отвечаю на вопросы, я их задаю. Я бы мог и попросить его написать такой код, да за медлительностью развитя событий на виртуальном интервью не до этого.
dmz>Любимая тема — виртуальные наследования, виртуальные деструкторы... Скажем,
Пошло это. Надоело уже.
dmz>Тут они и давай глумится — не бывает, говорят, виртуальных конструкторов!
Вот-вот. Это и называется пальцы.
dmz>Народ! Не ломайте игру! Не высказывайтесь по вопросу, по которому Anatolix еще не отстрелялся, а то неспортивно получается.
А так же не забывайте, что всё что пока задано и отвечено в этом топике, это дело не более двух минут в реальной жизни. Пока это всё только разминка
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Anatolix, Вы писали:
IT>>Ну тогда переписывай код как надо , а Anatolix нам потом скажет знал он это или нет. Если не знал, то понятно, что Java у него липа.
A>Меня код тоже сильно удивил так, что я как то про то что файл может не открыться сначала забыл, но после наводящего вопроса наверняка понял бы что от меня хотят, такие вещи я понимаю.
Так напиши правильный код, в чём проблема? И пойдём дальше.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Anatolix, Вы писали:
IT>>Я бы ещё упомянул (скорее всего ты это забыл сделать от волнения ) о extern "C".
A>Нет об этом просто не спрашивали.
Но сказать можно было.
IT>>Я не могу точно определить твой experience, да в этом и нет необходимости. Он достаточный для продолжения разговора. А уж если ты закалённый Brainbench боец, то дальнейший разговор на эту тему тем более не имеет смысла.
A>Вообщем я считаю что вопросы по С++ были неудовлетворительны.
А кто тебе сказал, что они закончились? Мы выясняем твой уровень для принятия решения брать тебя в Крутую Контору или не брать. Мы не занимаемся ребусами. Хотя можно пройтись по списку стандартных для интервью вопросов, как делает мой шеф. Благо недоделанный список рядом http://rsdn.ru/article/interview/?cpp.xml. Так что расслабся и улыбайся, ты на интервью. Пока же ты нагло развалился на стуле и смотришь на интервьювера как на идиота, забывая о том, что при таком поведении твои шансы стремятся к нулю Ты ещё должен быть и nice guy, правильно?
A>Кстати знаешь откуда взялась цифра 8 лет experience? Я сначала написал 10, а потом подумал что слишком круглое число. Если бы ты видел нормальное резюме ты бы подумал что не может у человека которому 22 года быть 8-летний опыт в чем либо.
Откуда мне знать, сколько тебе лет? Тут как-то об этом спрашивать не принято.
IT>>ЗЫ. В слове experience ты сделал ошибку, что ставит под сомнение твоё утверждение о свободном письменном
A>Это очепятка была, я знаю как это слово пишется.
Да-да.
Если нам не помогут, то мы тоже никого не пощадим.
Либо если собираемся его дальше распространять
изменить спецификацию у функции
void foo() throw не помню что
{
}
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Пока же ты нагло развалился на стуле и смотришь на интервьювера как на идиота, забывая о том, что при таком поведении твои шансы стремятся к нулю Ты ещё должен быть и nice guy, правильно?
Нет не правильно, я на тесте сижу как надо еще и одет хорошо и
смотрю на тебя большими преданными глазами
А этот комментарий был уже отпущен не виртуальным кандидатом
на работу во время собеседования, а мной в рамках обсуждения
вопросов, договорились сразу обсуждать я и высказал мнение.
A>>Кстати знаешь откуда взялась цифра 8 лет experience? Я сначала написал 10, а потом подумал что слишком круглое число. Если бы ты видел нормальное резюме ты бы подумал что не может у человека которому 22 года быть 8-летний опыт в чем либо.
IT>Откуда мне знать, сколько тебе лет? Тут как-то об этом спрашивать не принято.
Это уже не в твой огород камень, я просто тебе об этом сообщаю.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>Понятно, с java у нас слабовато. Ответ не правильный. Этот вопрос на знание механизмов работы GC.
Хм не вижу связи с Garbage Collector.
Там про него вообще ничего определенного сказать
нельзя за исключением того что он плохой.
P.S. Можешь не в рамках интервью, а в рамках
обсуждения интерьвью объяснить мне и общественнсти
какое отношение это имеет к GC
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте IT, Вы писали:
A>P.S. Можешь не в рамках интервью, а в рамках A>обсуждения интерьвью объяснить мне и общественнсти A>какое отношение это имеет к GC
Если имеется ввиду что не стоит часто создавать удалять(бросать)
объекты то это зависит от контекста. По данному контексту
нельзя определить стоит здесь хранить объект или нет.
Может этот код у меня только 1 раз за всю программу вызывается.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>Понятно, с java у нас слабовато. Ответ не правильный. Этот вопрос на знание механизмов работы GC.
Здравствуйте Anatolix, Вы писали:
A>Хм не вижу связи с Garbage Collector. A>Там про него вообще ничего определенного сказать нельзя за исключением того что он плохой.
Правильно, хороший должен ты написать
A>P.S. Можешь не в рамках интервью, а в рамках обсуждения интерьвью объяснить мне и общественнсти какое отношение это имеет к GC
Проблема не в том, что файл не откроется (я могу обрабатывать это исключение и в вызывающей процедуре), а в том, что если он откроется и произойдёт исключение во время записи, то он уже никогда не закроется, точнее закроет его сборщик мусора. Это, кстати, первое разочарование C++ программеров, начинающих писать на Java или C#.
OK понятно. Тут рядом Java программер сказал, что да так оно обычно и делается.
Так что здесь ты меня подловил. Но это не значит что я совсем java не знаю.
У меня там вего 0.5 года experience написано. Продолжаем.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>А так же не забывайте, что всё что пока задано и отвечено в этом топике, это дело не более двух минут в реальной жизни. Пока это всё только разминка
Лучше бы вы писАли вопрос — ответ как пара сообщений. Иначе всё вытянется далеко-далеко.
- вопрос
|-ответ
- вопрос
|-ответ
- вопрос
|-ответ
Здравствуйте Anatolix, Вы писали:
A>OK понятно. Тут рядом Java программер сказал, что да так оно обычно и делается. A>Так что здесь ты меня подловил. Но это не значит что я совсем java не знаю. A>У меня там вего 0.5 года experience написано. Продолжаем.
В том то всё и дело. Человек с 10 летним опытом C++ может о таких вещах в Java ничего не знать, так же как и java-guy о protected/private наследовании.
Давай продолжим. Хочешь вопрос посложнее? Ok.
Допустим я спросил о том какие существуют способы синхронизации в Windows, ты мне ответил. Теперь я тебе даю вот такой код и прошу тоже найти в нём потенциальные проблемы. Названия классов и методов условные:
Дабы ускорить процесс, давай не будет полностью эмулировать жизнь, а попытаемся распараллелить это дело, я тебе дам сразу несколько вопросов.
A>COM / ATL — хорошо — 1 год
Для начала самый стандартный и, на мой взгляд, самый правильный по данной тематике вопрос. И хотя я его считаю несколько теоретическим, тем не менее.
Что такое STA и MTA и какая между ними разница?
Можешь отделаться определениями, можешь порассуждать.
Хорошая статья по данной теме есть на нашем сайте, но ты обещал не подглядывать.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Anatolix, Вы писали:
A>COM / ATL — хорошо — 1 год
Ты хочете (Вы хотишь) передать клиентской программе расширенную информацию об ошибке из COM сервера, написанного на ATL. Какие средства библиотеки и технологии Вы будете использовать.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>OK понятно. Тут рядом Java программер сказал, что да так оно обычно и делается. A>>Так что здесь ты меня подловил. Но это не значит что я совсем java не знаю. A>>У меня там вего 0.5 года experience написано. Продолжаем.
IT>В том то всё и дело. Человек с 10 летним опытом C++ может о таких вещах в Java ничего не знать, так же как и java-guy о protected/private наследовании.
IT>Давай продолжим. Хочешь вопрос посложнее? Ok.
IT>Допустим я спросил о том какие существуют способы синхронизации в Windows, ты мне ответил. Теперь я тебе даю вот такой код и прошу тоже найти в нём потенциальные проблемы. Названия классов и методов условные:
IT>
Интересный вопрос. Точного ответа не знаю имею только предположения... Жду не дождусь ответа
Это интервью изначально было интересно, а сейчас оно начинает становиться ООчень интересным. Ответы на эти вопросы ИМХО можно сразу куда-нить в Q&A помещать...
Здесь не стоит выносить critical section за класс,
т.к. получается, что если я заблокировал один экземпляров,
то все остальные в этот момент стоят курят, хотя могли
бы работать. Надо сделать CriticalSection одной из
переменных класса(не статистической)
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали: IT>Что такое STA и MTA и какая между ними разница?
Это так называемые апартаменты. COM берет на себя
заботу о синхронизации, если я передаю интерфейс
из одного апартамента в другой, то он на самом деле маршалится
и в другом апартаменте я получаю не сам интерфейс а заглушку
которая сериализует вызовы.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>COM / ATL — хорошо — 1 год
IT>Ты хочете (Вы хотишь) передать клиентской программе расширенную информацию об ошибке из COM сервера, написанного на ATL. Какие средства библиотеки и технологии Вы будете использовать.
надо реализовать какой-то интерфейс, имя без подсказки не помню
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>Assembler — хорошо — 2.5 года опыта в Reverse Engeneering(хобби, эпизодически)
IT>Имеется 300k дезассемблированной кода. По каким отличительным признакам можно определить на каком языке высокого уровня написана программа.
Несколько прямых признаков(метка компилятора, сигнатуры библиотек)
И много косвенных(конвенция вызовов(хорошо видно кто сохраняет регистры и чистит стек), формат строк(asciiz или pascal) )
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Странно, такое впечатление, что все задачи на одно и тоже.... а если exception случится в AddInternal.... а вот про "одной из класса" — так это не обязательно — если в одном месте пользуются(а тут не написано другого) то ничего и не будет....
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте IT, Вы писали:
IT>>Здравствуйте Anatolix, Вы писали:
IT>>
A>Здесь не стоит выносить critical section за класс, A>т.к. получается, что если я заблокировал один экземпляров, A>то все остальные в этот момент стоят курят, хотя могли A>бы работать. Надо сделать CriticalSection одной из A>переменных класса(не статистической)
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>Object Pascal — отлично — 2 года
IT>Эх, давно я не брал в руки шашки
IT>Как на паскале сделать forward объявление класса. Как то же самое сделать на C++.
Pascal
type MyClass=class;
(это в Object Pascal от Delphi, в классическом используется ключевое слово
object а не class)
C++
class MyClass;
В pascal если мы предварительно описали класс
мы обязаны его определить до конца модуля.
Не совсем понятное, но раздражающее ограничение.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Denis, Вы писали:
D>Странно, такое впечатление, что все задачи на одно и тоже.... а если exception случится в AddInternal.... а вот про "одной из класса" — так это не обязательно — если в одном месте пользуются(а тут не написано другого) то ничего и не будет....
Ага. Похожи все вопросы. И об ответе я почему-то также подумал, а вот о вынесенной критической секции нет.
Вопрос: А как бы тогда красиво переписать этот код?(try...catch? Interlocked...?)
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>MFC — хорошо — 1 год
IT>Если представить архитектуру Document/View в виде отношений один к одному/многим, как бы это выглядело? (не забудь и про CxxxFrame).
Sorry, но плохо помню такие вещи, уже семь лет не программировал
с MFC
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте IT, Вы писали:
IT>>Здравствуйте Anatolix, Вы писали:
A>>>Object Pascal — отлично — 2 года
IT>>Эх, давно я не брал в руки шашки
IT>>Как на паскале сделать forward объявление класса. Как то же самое сделать на C++.
A>Pascal
A>type MyClass=class; A>(это в Object Pascal от Delphi, в классическом используется ключевое слово A>object а не class)
наверное я совсем уже забыл паскаль, но что-то помниться там было такое ключевое слово forward?
И я подумал что должно быть че-нить вроде объявления функции с forward:
procedure Proc();forward;
Я не прав?
Когда первый раз сталкиваешься с мультипоточностью — это первые грабли на которые наступаешь. А я обычнов таких случаюях autolocker'ом пользуюсь — принцип такой же как и у смартпоинтера — в деструкторое Unlock
Да красивое решение! И запись покороче будет — класс только церлять надо будет где-нить...
D>Когда первый раз сталкиваешься с мультипоточностью — это первые грабли на которые наступаешь. А я обычнов таких случаюях autolocker'ом пользуюсь — принцип такой же как и у смартпоинтера — в деструкторое Unlock
D>Здравствуйте Slayer, Вы писали:
S>>Здравствуйте Denis, Вы писали:
D>>>Странно, такое впечатление, что все задачи на одно и тоже.... а если exception случится в AddInternal.... а вот про "одной из класса" — так это не обязательно — если в одном месте пользуются(а тут не написано другого) то ничего и не будет....
S>>Ага. Похожи все вопросы. И об ответе я почему-то также подумал, а вот о вынесенной критической секции нет. S>>Вопрос: А как бы тогда красиво переписать этот код?(try...catch? Interlocked...?)
Здравствуйте Denis, Вы писали:
D>Странно, такое впечатление, что все задачи на одно и тоже.... а если exception случится в AddInternal.... а вот про "одной из класса" — так это не обязательно — если в одном месте пользуются(а тут не написано другого) то ничего и не будет....
Да это иногда надо учитывать хотя достаточно редко.
Обычно библиотеки которые активно работают
с паралельностью не используют Exceptiионов
т.к. они плохо сочетаются с многопоточностью.
Плохо прокинутый exception обычно сразу завершает
дополнительный поток. Тогда как в основном потоке
он отображается пользователя тот нажимает OK
и все продолжается.
Но если это нужно то надо писать приблизительно
следующую вещь.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Slayer, Вы писали:
S>И я подумал что должно быть че-нить вроде объявления функции с forward: S>procedure Proc();forward; S>Я не прав?
Сейчас даже в функциях это обычно не используется,
просто функцию записываешь в разделе interface безо
всяких forward-ов и все.
Для классов это никогда не использовалось
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Не согласен про редко — MFC довольно часто любит чем нить покидаться, да и в С++ я люблю что бы new & malloc кидали exception. — нету тут связи между много поточностью и исключениями. Плохокинутый exception — завершает всё приложение, а не поток =), особенно если приложение не многопоточное. =)
Здравствуйте Denis, Вы писали:
D>Не согласен про редко — MFC довольно часто любит чем нить покидаться, да и в С++ я люблю что бы new & malloc кидали exception. — нету тут связи между много поточностью и исключениями. Плохокинутый exception — завершает всё приложение, а не поток =), особенно если приложение не многопоточное. =)
Позволю не согласится, поток просто дохнет без слов и все,
сам проверял, ну очень у меня многопоточная среда.
MFC кстати нельзя назвать хорошей системой которая
кидается exception-ами. Там почти все функции как в
WinAPI имеют коды возврата. Хотя бы на VCL посмотреть
где exception-ы даже почти ловить не надо их библиотека
сама обрабатывает и показывает юзеру в виде сообщения,
очень удобно.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
HK> Set rs1 = conn.Execute("SELECT * FROM #T1") HK> Set rs2 = conn.Execute("SELECT * FROM #T2") '<--- тут ошибка выполнения HK> Set rs3 = conn.Execute("SELECT * FROM #T3") %>
Кажется мне, что вопрос является ритарическим (не требующим ответа), но все равно хочется ответить.
Ошибка врзникает на самом деле здесь
Set rs1 = conn.Execute("SELECT * FROM #T1")
метод Execute предназначен для выполнения SQL выражений, которые НЕ ВОЗВРАЩАЮТ РЕЗУЛЬТАТ (набор записей),
чтобы ошибки не было надо указывать SQL выражение в методе ОРЕN рекордсета (еще необходимо связать рекордсет с соединением).
Re[2]: Хех, может вопрос по ASP+MS SQL подкинуть? :)
HK> Set rs1 = conn.Execute("SELECT * FROM #T1") HK> Set rs2 = conn.Execute("SELECT * FROM #T2") '<--- тут ошибка выполнения HK> Set rs3 = conn.Execute("SELECT * FROM #T3") %>
HK>Вопрос: почему, такой простой код дает ошибку в указаном месте?
А разво одновременно может быть открыто несколько рекордсетов?
Здравствуйте Denis, Вы писали:
D>Странно, такое впечатление, что все задачи на одно и тоже.... а если exception случится в AddInternal.... а вот про "одной из класса" — так это не обязательно — если в одном месте пользуются(а тут не написано другого) то ничего и не будет....
Исключения мы уже проехали, поэтому я и не сомневался, что о них будет речь, но услышать я хотел именно вот это:
A>>Здесь не стоит выносить critical section за класс, т.к. получается, что если я заблокировал один экземпляров, то все остальные в этот момент стоят курят, хотя могли бы работать. Надо сделать CriticalSection одной из переменных класса(не статистической)
Из чего мы делаем вывод о знании предмета и ставим +
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте IT, Вы писали:
IT>>Здравствуйте Anatolix, Вы писали: IT>>Что такое STA и MTA и какая между ними разница?
A>Это так называемые апартаменты. COM берет на себя заботу о синхронизации, если я передаю интерфейс из одного апартамента в другой, то он на самом деле маршалится и в другом апартаменте я получаю не сам интерфейс а заглушку которая сериализует вызовы.
Утверждение почти верное, но ответа на вопрос нет. Так в чём разница между STA и MTA?
Если нам не помогут, то мы тоже никого не пощадим.
странно тогда задан вопрос — это как раз то, что называется "плохим" собеседованием — когда спрашивающий не умеет правильно задавать вопросы =(. Из вопроса этого и не следовало — таким же успехом можно предположить, что одна и таже CS используется для различных частей — и тогда именно так и поступают....
Здравствуйте IT, Вы писали:
IT>Здравствуйте Denis, Вы писали:
D>>Странно, такое впечатление, что все задачи на одно и тоже.... а если exception случится в AddInternal.... а вот про "одной из класса" — так это не обязательно — если в одном месте пользуются(а тут не написано другого) то ничего и не будет....
IT>Исключения мы уже проехали, поэтому я и не сомневался, что о них будет речь, но услышать я хотел именно вот это:
A>>>Здесь не стоит выносить critical section за класс, т.к. получается, что если я заблокировал один экземпляров, то все остальные в этот момент стоят курят, хотя могли бы работать. Надо сделать CriticalSection одной из переменных класса(не статистической)
IT>Из чего мы делаем вывод о знании предмета и ставим +
Здравствуйте Anatolix, Вы писали:
A>>>COM / ATL — хорошо — 1 год
IT>>Ты хочете (Вы хотишь) передать клиентской программе расширенную информацию об ошибке из COM сервера, написанного на ATL. Какие средства библиотеки и технологии Вы будете использовать.
A>надо реализовать какой-то интерфейс, имя без подсказки не помню
Плохо дело. Сам интерфейс называется IErrorInfo, его имплементация полностью генерируется визардом. Т.е. если бы ты использовал ATL интенсивно, то этот интерфейс у тебя всегда был бы перед глазами.
Для формирования сообщения об ошибке используетяся метод из семейства CComCoClass::Error.
Тогда ещё вопрос.
Каким образом в COM реализуется механизм рассылки событий?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>Утверждение почти верное, но ответа на вопрос нет. Так в чём разница между STA и MTA?
STA — Single threaded apartament в нем всегда выполняется
1 поток, в MTA могут быть много.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>Имеется 300k дезассемблированной кода. По каким отличительным признакам можно определить на каком языке высокого уровня написана программа.
A>Несколько прямых признаков(метка компилятора, сигнатуры библиотек) A>И много косвенных(конвенция вызовов(хорошо видно кто сохраняет регистры и чистит стек), формат строк(asciiz или pascal) )
Вопросов нет
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Denis, Вы писали:
D>странно тогда задан вопрос — это как раз то, что называется "плохим" собеседованием — когда спрашивающий не умеет правильно задавать вопросы =(. Из вопроса этого и не следовало — таким же успехом можно предположить, что одна и таже CS используется для различных частей — и тогда именно так и поступают....
А это есть хороший стиль? если ты там где то внутри пользуешь
глобальную арену памяти например то лочь ее отдельно. В идеале
у нее должен быть свой mutex и он должен быть внутри класса арены.
ООП очень хорошо сочетается с многопоточностью.
Один объект один Mutex
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Pascal
A>type MyClass=class; A>(это в Object Pascal от Delphi, в классическом используется ключевое слово object а не class)
А как быть, если нужно рекурсивное использование классов, определённых в разных модулях? Т.е., например, в методе M1() класса A нужно работать с классамом B. А в классе B, в методе M2() нужно работать с классом A.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Каким образом в COM реализуется механизм рассылки событий?
Объект который хочет получать событие реализует интерфейс
и передает его объекту который рассылает событие.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>А как быть, если нужно рекурсивное использование классов, определённых в разных модулях? Т.е., например, в методе M1() класса A нужно работать с классамом B. А в классе B, в методе M2() нужно работать с классом A.
А никак. Ты даже uses там рекурсивный не имеешь право написать.
это тебе не заголовки в C++. Там к моменту компиляции одного
модуля нужно иметь скомпилированный tpu от другого модуля
(издержки соединения интерфейса и реализации в одном файле).
Понятно что при компиляции 2 файлов какой-то из них компилится
первым и в этот момент он не сможет поюзать второй.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>>>MFC — хорошо — 1 год
IT>>Если представить архитектуру Document/View в виде отношений один к одному/многим, как бы это выглядело? (не забудь и про CxxxFrame).
A>Sorry, но плохо помню такие вещи, уже семь лет не программировал с MFC
Ясно, не знал, да ещё забыл
Документ может представляться несколькими фреймами (несколькими MDI оконами) и несколькими view. Фрейм может включать несколько view.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Denis, Вы писали:
D>странно тогда задан вопрос — это как раз то, что называется "плохим" собеседованием — когда спрашивающий не умеет правильно задавать вопросы =(. Из вопроса этого и не следовало — таким же успехом можно предположить, что одна и таже CS используется для различных частей — и тогда именно так и поступают....
Ты, учитывая предыдущий разговор, аккуратно съехал на исключения и никак не упомянул overhead с экземплярами. Это говорит о том, что даже если ты об этом и знаешь, то особо дела никогда с этим не имел.
А переписать код и поговорить о всевозможных нюансах и так никто не мешает. На реальном интервью именно так и происходит. Я тебе даю код, ты его потрошишь как только можно.
Заметь, я пока обхожусь без ребусов, мне нужно простыми вопросами прощюпать знание технологий. На простой вопрос, должен быть простой ответ, если задать сложный, то за время интервью удастся обсудить только один.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте IT, Вы писали:
IT>>Здравствуйте Anatolix, Вы писали:
IT>>Утверждение почти верное, но ответа на вопрос нет. Так в чём разница между STA и MTA?
A>STA — Single threaded apartament в нем всегда выполняется A>1 поток, в MTA могут быть много.
не в нем выполняется, а он представляет
Re[3]: Хех, может вопрос по ASP+MS SQL подкинуть? :)
Здравствуйте BoikoRoman, Вы писали:
BR>Здравствуйте 4auHuK, Вы писали:
HK>> Set rs1 = conn.Execute("SELECT * FROM #T1") HK>> Set rs2 = conn.Execute("SELECT * FROM #T2") '<--- тут ошибка выполнения HK>> Set rs3 = conn.Execute("SELECT * FROM #T3") %>
BR>Кажется мне, что вопрос является ритарическим (не требующим ответа), но все равно хочется ответить.
BR>Ошибка врзникает на самом деле здесь
BR>Set rs1 = conn.Execute("SELECT * FROM #T1")
BR>метод Execute предназначен для выполнения SQL выражений, которые НЕ ВОЗВРАЩАЮТ РЕЗУЛЬТАТ (набор записей),
Ну это ты загнул.
Re[3]: Хех, может вопрос по ASP+MS SQL подкинуть? :)
Здравствуйте Lloyd, Вы писали:
L>Здравствуйте 4auHuK, Вы писали:
HK>> Set rs1 = conn.Execute("SELECT * FROM #T1") HK>> Set rs2 = conn.Execute("SELECT * FROM #T2") '<--- тут ошибка выполнения HK>> Set rs3 = conn.Execute("SELECT * FROM #T3") %>
HK>>Вопрос: почему, такой простой код дает ошибку в указаном месте?
L>А разво одновременно может быть открыто несколько рекордсетов?
Ну вы, блин, даете! Если бы открывался в первый рекодрсет, тогда да! А тут три разных!
Здравствуйте Anatolix, Вы писали:
IT>>Каким образом в COM реализуется механизм рассылки событий?
A>Объект который хочет получать событие реализует интерфейс и передает его объекту который рассылает событие.
Какие стандартные интерфейсы COM при этом необходимо задействовать?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>STA — Single threaded apartament в нем всегда выполняется 1 поток, в MTA могут быть много.
IT>А каким образом "COM берет на себя заботу о синхронизации" в STA и MTA?
Дает вместо интерфейса заглушку которая сериализует вызовы
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>Каким образом в COM реализуется механизм рассылки событий?
A>>Объект который хочет получать событие реализует интерфейс и передает его объекту который рассылает событие.
IT>Какие стандартные интерфейсы COM при этом необходимо задействовать?
IConnectionPoint IConnectionPointContainer
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Исключения мы уже проехали, поэтому я и не сомневался, что о них будет речь, но услышать я хотел именно вот это:
A>>>Здесь не стоит выносить critical section за класс, т.к. получается, что если я заблокировал один экземпляров, то все остальные в этот момент стоят курят, хотя могли бы работать. Надо сделать CriticalSection одной из переменных класса(не статистической)
Тогда немного странный вопрос. А если мне наоборот необходимо, чтобы все классы курили во время AddInternal(ptr) ?
Так что я бы ожидал другого ответа на этот вопрос.
Здравствуйте Anatolix, Вы писали:
IT>>А как быть, если нужно рекурсивное использование классов, определённых в разных модулях? Т.е., например, в методе M1() класса A нужно работать с классамом B. А в классе B, в методе M2() нужно работать с классом A.
A>А никак...
Понятно, значит за 10 лет так ничего и не изменилось.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Anatolix, Вы писали:
IT>>А каким образом "COM берет на себя заботу о синхронизации" в STA и MTA?
A>Дает вместо интерфейса заглушку которая сериализует вызовы
Несколько слов об этой самой заглушке можешь сказать?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Dima2, Вы писали:
D>Тогда немного странный вопрос. А если мне наоборот необходимо, чтобы все классы курили во время AddInternal(ptr) ?
Объясни мне в каком случае это может понадобится.
Я вот считаю что такого просто не нужно.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Karimchik, Вы писали:
IT>>Понятно, с java у нас слабовато. Ответ не правильный. Этот вопрос на знание механизмов работы GC.
K>Да уж, я бы сказал, что совсем слабовато
Ты что-то маленько не понимаешь у меня там ровно половину
резюме фальшивое, но это не от того что я глупый а из-за
того что мы пытаемся разобраться на сколько легко это
отлавливается при собеседовании. Потом я расскажу
что из этого реально а что нет и ты поймешь что этот
"наезд" был совсем не в тему.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Несколько слов об этой самой заглушке можешь сказать?
Ты хочешь слово маршалинг услышать? или
proxy/stub?
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
D>>Тогда немного странный вопрос. А если мне наоборот необходимо, чтобы все классы курили во время AddInternal(ptr) ?
A>Объясни мне в каком случае это может понадобится. A>Я вот считаю что такого просто не нужно.
Может понадобится, если доступ осуществляется к статическим данным (одним на всех) класса. Но в данном примере это не так.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Какие потенциальные проблемы согут возникнуть при использовании Connection Point?
Не совсем понял вопрос, я там особо проблем не вижу.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Может понадобится, если доступ осуществляется к статическим данным (одним на всех) класса. Но в данном примере это не так.
Такое редко бывает и там обычно подходит
Interlocked***
Если у класса какие-то сложые общие данные их правильней
выносить в отдельный класс и лочить его.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте Dima2, Вы писали:
D>>Тогда немного странный вопрос. А если мне наоборот необходимо, чтобы все классы курили во время AddInternal(ptr) ?
A>Объясни мне в каком случае это может понадобится. A>Я вот считаю что такого просто не нужно.
Ну ты даеш. Да при любом обращении к чему-то другому глобальному. Этим вопросом ты себя сдал с потрохами.
Представим что ф-я AddInternal(ptr) глобальная, которая соотвественно работает с глобальными переменными, и ты создаеш различные экземпляры твоего объекта в разных потоках, что тогда?
Здравствуйте Anatolix, Вы писали:
IT>>Какие потенциальные проблемы согут возникнуть при использовании Connection Point?
A>Не совсем понял вопрос, я там особо проблем не вижу.
Есть одна проблема, которая проявляется в распределённых приложениях, из-за которой иногда полностью приходится переписывать стандартную реализацию рассылки событий, а лучше от неё отказываться.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Dima2, Вы писали:
D>Представим что ф-я AddInternal(ptr) глобальная, которая соотвественно работает с глобальными переменными, и ты создаеш различные экземпляры твоего объекта в разных потоках, что тогда?
Глобальные объекты это плохо. Надо завернуть его в
класс запихав в private приделать нормальные функции
доступа и лочить mutex в этом классе уже внутри
функций.
Данный подход гарантирует что
1) никто не забудет полочить mutex
2) никто не полочит его на пол дня без необходимости.
И вообще на тему mutex-ов ты меня не переспоришь,
в программе над которой я сейчас работаю в среднем
100 потоков(в основном не мои правда, но как выглядит
работа с ними я очень хорошо представляю)
Т.е. вообщем главная идеология что объект должен
быть инкапсулировани и сам контролировать свою
синхронизацию.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>Какие потенциальные проблемы согут возникнуть при использовании Connection Point?
A>>Не совсем понял вопрос, я там особо проблем не вижу.
IT>Есть одна проблема, которая проявляется в распределённых приложениях, из-за которой иногда полностью приходится переписывать стандартную реализацию рассылки событий, а лучше от неё отказываться.
Понятно. С распределенным COM-ом опять же работал 7 лет назад
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Глобальные объекты это плохо. Надо завернуть его в A>класс запихав в private приделать нормальные функции A>доступа и лочить mutex в этом классе уже внутри A>функций.
При чем тут глобальные объекты? Ты можеш вызвать какую-нить ф-ю из какой-либо библ. стороннего производителя, который тебе в описании говорит, что его библа не поддерживает никакой синхронизации.
Здравствуйте Anatolix, Вы писали:
IT>>Есть одна проблема, которая проявляется в распределённых приложениях, из-за которой иногда полностью приходится переписывать стандартную реализацию рассылки событий, а лучше от неё отказываться.
A>Понятно. С распределенным COM-ом опять же работал 7 лет назад
Я понял Речь идёт об обрывах соединений или подвисании клиентской программы во время вызова callback функции события. В данном случае провиснуть может вся система, т.к. сервер будет ждать возврата из callback функции клиента и отвалится только по таймауту, котоый в DCOM несколько минут.
С COM ясно, знания есть, но не глубокие, скорее всего на уровне прочтения книжек.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>Несколько слов об этой самой заглушке можешь сказать?
A>>Ты хочешь слово маршалинг услышать? или proxy/stub?
IT>Я хочу услышать "очередь сообщений Windows" для STA
Это в принципе понятно если имеет право существовать только 1 поток
то это тот самый в котором выполняется очередь сообщений приложения,
там особо других средств синхронизации и нельзя придумать. Но на
поверхности это не лежит.
IT> и всё же выяснить, что в MTA синхронизацией занимается не COM,
а сам программист.
Это-то естественно, имеется ввиду что при вызове из MTA в STA
все будет сериализоваться. В других случаях это не делается т.к.
или не нужно (STA->STA) или пусть программист сам думает(MTA->MTA)
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Это-то естественно, имеется ввиду что при вызове из MTA в STA A>все будет сериализоваться. В других случаях это не делается т.к. A>или не нужно (STA->STA) или пусть программист сам думает(MTA->MTA)
Здравствуйте Anatolix, Вы писали:
A>Microsoft Visual C++ — отлично — 3 года
Пройдёмся по средам.
Каким образом в студии собираются большие проекты состоящие из нескольких exe- и dll-модулей.
A>Borland C++ Builder — Guru — 5 лет. A>Borland Delphi — отлично — 1 год A>Borland Java Builder — прилично — 0.5 года
А по этим проходится не будет, я в них ни бум-бум.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Каким образом в студии собираются большие проекты состоящие из нескольких exe- и dll-модулей.
Workspace.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Dima2, Вы писали:
A>>Глобальные объекты это плохо. Надо завернуть его в класс запихав в private приделать нормальные функции доступа и лочить mutex в этом классе уже внутри функций.
D>При чем тут глобальные объекты? Ты можеш вызвать какую-нить ф-ю из какой-либо библ. стороннего производителя, который тебе в описании говорит, что его библа не поддерживает никакой синхронизации.
А я об этом не спрашивал
Если нам не помогут, то мы тоже никого не пощадим.
A>Т.е. вообщем главная идеология что объект должен A>быть инкапсулировани и сам контролировать свою A>синхронизацию.
Идеологии бывают разные
И подходы к синхронизации тоже существуют разные — защищенный и синхронный (по терминологии Буча).
В первом случае обеспечение синхронизации ложится на плечи активных потоков, которые используют объект, во втором — объект обеспечивает ее сам.
Здравствуйте Dima2, Вы писали:
D>При чем тут глобальные объекты? Ты можеш вызвать какую-нить ф-ю из какой-либо библ. стороннего производителя, который тебе в описании говорит, что его библа не поддерживает никакой синхронизации.
Вот не вызываей ее из этой библиотека.
Сделай класс в котором будет защищенным образом
вызываться эта функция и вызывай ее только через
класс, тогда ты себя избавишь от 90% ошибок
до их появления. Нельзя отделять Mutex от
объекта который он защищает.
Т.е. я конечно понимаю что обходить грабли можно
легко но лучше их просто не разбрасывать.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Mink, Вы писали:
M>В первом случае обеспечение синхронизации ложится на плечи активных потоков, которые используют объект, во втором — объект обеспечивает ее сам.
Вот первый честно говоря череват ошибками и не особо нужен.
(там накладных расходов не много inline функции рулят)
Понятие 'инкапсуляция' в ООП прямо предполагает использование
втроого подхода.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Dima2, Вы писали:
D>Здравствуйте Anatolix, Вы писали:
A>>Это-то естественно, имеется ввиду что при вызове из MTA в STA A>>все будет сериализоваться. В других случаях это не делается т.к. A>>или не нужно (STA->STA) или пусть программист сам думает(MTA->MTA)
D>Неправильно.
Очень короткий и лаконичный комментарий.
аргументация будет?
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>Каким образом в студии собираются большие проекты состоящие из нескольких exe- и dll-модулей.
A>>Workspace.
IT>Блин, многословный ты наш, всё приходится из тебя вытаскивать. Что workspace? У него есть одна единственная полезная функция? Какая?
Я просто не понял что ты хочешь. Берешь несколько dsp засовываешь в
Workspace и делаешь Batch Build вот все и собралось.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>Блин, многословный ты наш, всё приходится из тебя вытаскивать. Что workspace? У него есть одна единственная полезная функция? Какая?
A>Я просто не понял что ты хочешь. Берешь несколько dsp засовываешь в Workspace и делаешь Batch Build вот все и собралось.
В каком порядке засовываешь, в алфавитном?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Anatolix, Вы писали:
A>Я просто не понял что ты хочешь. Берешь несколько dsp засовываешь в A>Workspace и делаешь Batch Build вот все и собралось.
Он просто хочет от тебя добиться того, чтоб ты сказал, что сложные проекты собираются с помощию задействования механизма прописывания зависимостей.
Batch Build всего-то говорит, что собирать, а не в каком порядке, кого к кому линковать, etc. Расставляю зависимости между проектами, можно достигнуть порядка в сборке отдельных составляющих таким образом, что никогда ты не получишь по рукам от линкера из-за того, что некая static lib или dll не скомпилирована/собрана к сему моменту.
Здравствуйте Dima2, Вы писали:
D>Здравствуйте IT, Вы писали:
D>Тогда ты должен был сказать кто такой AddInternal(ptr), или не сказать, а подождать встречного вопроса.
Да нет в данном контексте не важно, объект должен защищать
себя сам, а если функция обращается к внешнему то он тоже должен
защищать себя сам.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Kaa, Вы писали:
Kaa>Он просто хочет от тебя добиться того, чтоб ты сказал, что сложные проекты собираются с помощию задействования механизма прописывания зависимостей.
Садись, два. (за подсказку)
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>В каком порядке засовываешь, в алфавитном?
Можно в произвольном, но потом возможно придется зависимости руками
проставить.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Садись, два. (за подсказку)
Руки чесались. Больше не буду. Я пролсто поверил уже, что ты на том и закончишь. Не ждал неводящего вопроса. Сорри еще раз.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>В чём разница между inner join и left join?
В первом случае все записи для левой таблицы, для
которых не нашлось соотвествующей таблицы из правой
будут выкинуты, а во втором оставлены недостающие поля
из второй таблицы будут заполнены NULL.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Kaa, Вы писали:
Kaa>>Он просто хочет от тебя добиться того, чтоб ты сказал, что сложные проекты собираются с помощию задействования механизма прописывания зависимостей.
IT>Садись, два. (за подсказку)
Не боись, я этого ответа еще не прочитал когда свой писал.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>В каком порядке засовываешь, в алфавитном?
A>Можно в произвольном, но потом возможно придется зависимости руками проставить.
В принципе Kaa уже всё сказал. Batch не даёт возможности выбирать порядок. При этом если у тебя много dll (например, COM объектов), от которых зависит exe, то это не "приходится" делать, а это необходимо делать.
Далее можно было бы задать вопросы уже для гуру, Если хочешь отвечай, если нет, то не надо.
1. Что такое JIT-debugging.
2. Какие в студии существуют способы отладки dll.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>1. Что такое JIT-debugging.
Это когда приложение в нормальном режиме работает
но при Access Violation загружается отладчик и
можно отлажывать дальше или CallStack посмотреть.
IT>2. Какие в студии существуют способы отладки dll.
Если при запуске программы или Attach 2 process
в dll находится отладочная таблица то по ней
находятся исходники и можно отлаживаться как обычно.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>В чём разница между inner join и left join?
A>В первом случае все записи для левой таблицы, для которых не нашлось соотвествующей таблицы из правой будут выкинуты, а во втором оставлены недостающие поля из второй таблицы будут заполнены NULL.
А что такое новый и старый стиль объединения таблиц в запросе?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Anatolix, Вы писали:
IT>>1. Что такое JIT-debugging.
A>Это когда приложение в нормальном режиме работает но при Access Violation загружается отладчик и можно отлажывать дальше или CallStack посмотреть.
Не то.
IT>>2. Какие в студии существуют способы отладки dll.
A>Если при запуске программы или Attach 2 process в dll находится отладочная таблица то по ней находятся исходники и можно отлаживаться как обычно.
А если dll загружается уже после загрузки основного модуля, но тебе нужно поставить точку останова в самой dll? Обычно отладчик удаляет все такие точки останова после закрузки программы и выдаёт соответствующее предупреждение. Как быть?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>В чём разница между inner join и left join?
A>>В первом случае все записи для левой таблицы, для которых не нашлось соотвествующей таблицы из правой будут выкинуты, а во втором оставлены недостающие поля из второй таблицы будут заполнены NULL.
IT>А что такое новый и старый стиль объединения таблиц в запросе?
Не слышал такого термина, но наверное имеется
ввиду объеденения с явным inner join и объединение
where a.x=b.x
P.S. (поскольку вопрос об общем SQL а не конкретном сервере) кстати если ты думаешь что inner join, left/right join, и outer join есть в стандарте SQL92 то ты ошибаешься.
Например в Oracle left join выглядит вот так
select ... from a,b where a.x(+)=b.x
right join
select ... from a,b where a.x=b.x(+)
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>А что такое новый и старый стиль объединения таблиц в запросе?
A>Не слышал такого термина,
Это потому что ты мало работал с MSSQL.
A>но наверное имеется ввиду объеденения с явным inner join и объединение where a.x=b.x
Именно это.
A>P.S. (поскольку вопрос об общем SQL а не конкретном сервере) кстати если ты думаешь что inner join, left/right join, и outer join есть в стандарте SQL92 то ты ошибаешься.
А в SQL99?
A>Например в Oracle left join выглядит вот так
A>select ... from a,b where a.x(+)=b.x
A>right join A>select ... from a,b where a.x=b.x(+)
Ужас, т.е. ни о какой совместимости речи не может быть.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>1. Что такое JIT-debugging.
A>>Это когда приложение в нормальном режиме работает но при Access Violation загружается отладчик и можно отлажывать дальше или CallStack посмотреть. IT>Не то.
Хм ты знаешь но Just in time debugging есть и в BCB и в Delphi
так что я с ним знаком, объясни мне что ты хотел услышать.
IT>>>2. Какие в студии существуют способы отладки dll.
A>>Если при запуске программы или Attach 2 process в dll находится отладочная таблица то по ней находятся исходники и можно отлаживаться как обычно.
IT>А если dll загружается уже после загрузки основного модуля, но тебе нужно поставить точку останова в самой dll? Обычно отладчик удаляет все такие точки останова после закрузки программы и выдаёт соответствующее предупреждение. Как быть?
Хм. Здесь на вкидку без самой VC не скажу. Есть еще точки
остакнова которые расствалены в коде CC но я не знаю как
их расставить на dll (регулярными средствами Visual Studio .
Ты точно уверен что он их убирает он в теории должен
их помнить по адресам и снова ставить когда dll
загружается. По крайней мере все остальные отладчики
так делают.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Я думаю стандарт SQL больше не особо кому нужен.
и с SQL92 все были совместимы только на entry level.
Ты сам стандарт 99 видел что там сказано на счет
триггеров и хранимых процедур? Есть такое подозрение что
ничего, они не могут туда язык впихнуть. А это теперь
уже основная часть работы с SQL серверами.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>>>Это когда приложение в нормальном режиме работает но при Access Violation загружается отладчик и можно отлажывать дальше или CallStack посмотреть.
IT>>Не то.
A>Хм ты знаешь но Just in time debugging есть и в BCB и в Delphi так что я с ним знаком, объясни мне что ты хотел услышать.
Возможно здесь путаница в терминологии. То о чём ты говоришь это просто подключение отладчика к текущему процессу (хотя почему бы это не назвать jit debugging :) ) Это средство в VC используется ещё в куче OLE RPC Debugging для отладки out-of-proc COM серверов.
IT>>А если dll загружается уже после загрузки основного модуля, но тебе нужно поставить точку останова в самой dll? Обычно отладчик удаляет все такие точки останова после закрузки программы и выдаёт соответствующее предупреждение. Как быть?
A>Хм. Здесь на вкидку без самой VC не скажу. Есть еще точки остакнова которые расствалены в коде CC но я не знаю как их расставить на dll (регулярными средствами Visual Studio :).
Для этого существуют вкладка 'Additional Dll' в настройках проекта. Там можно перечислить dll, для которых отладочные символы будут загружены вместе с программой. В VS.NET этой проблемы уже нет.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Возможно здесь путаница в терминологии. То о чём ты говоришь это просто подключение отладчика к текущему процессу (хотя почему бы это не назвать jit debugging ) Это средство в VC используется ещё в куче OLE RPC Debugging для отладки out-of-proc COM серверов.
В смысле оно проходит вызовы из процесса в процесс?
Я то думал это только SoftIce умеет делать.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>Возможно здесь путаница в терминологии. То о чём ты говоришь это просто подключение отладчика к текущему процессу (хотя почему бы это не назвать jit debugging ) Это средство в VC используется ещё в куче OLE RPC Debugging для отладки out-of-proc COM серверов.
A>В смысле оно проходит вызовы из процесса в процесс? A>Я то думал это только SoftIce умеет делать.
Да. При необходимости загружается ещё одна копия отладчика и вперёд. Очень удобная штука.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>SSL — знаю, пользовал библиотеку OpenSSL — 1 месяц
IT>Где место SSL в ряду SSL, HTTP, TCP/IP, Sockets?
Ряд какой-то неправильный. что за протокол такой
sockets и TCP/IP. Есть отдельный протокол TCP
(с установлением соединения) и отдельный IP(ниже уровнем,
передача отдельных пакетов)
TCP/IP это не протокол а семейство протоколов.
Что такое Sockets я вообще не знаю. Socket это не протокол,
а конечная точка.
SSL идет сразу поверх установленного TCP соединения.
Т.е. создал socket подконнектился, потом инициализируешь
на нем протокол а дальше ничем от socket-ов не отличается
кроме того что ты юзаешь не read/write а SSLread SSLwrite.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>XML — неплохо — 2 года(эпизодически)
IT>Что такое well-formed xml document?
Все теги закрыты(хотя бы / перез >), и правильно вложены друг
в друга. Тег главного уровня 1.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>Qt — хорошо — 2 года
IT>А это что такое?
www.trolltech.com, кросплатформенная библиотека
(интерфес, базы данных, сеть, xml и тп)
работающая на следующих системах и компиляторах.
(список ниже)
откровенно рулит на unix т.к. там еще и бесплатная.
На Windows просто сильно лучше чем MFC.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>Интернет протоколы(NTTP, SMTP и другие *TP)
IT>Простите, что такое NTTP?
NNTP имелось ввиду. очепятка.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>Где место SSL в ряду SSL, HTTP, TCP/IP, Sockets?
A>Ряд какой-то неправильный. что за протокол такой sockets и TCP/IP.
Я же не говорил про протоколы. Меня интересовало именно кто в каком порядке кого вызывает/использует.
A>SSL идет сразу поверх установленного TCP соединения. A>Т.е. создал socket подконнектился, потом инициализируешь на нем протокол а дальше ничем от socket-ов не отличается кроме того что ты юзаешь не read/write а SSLread SSLwrite.
Т.е. SSL ближе к клиенту чем сокет или дальше?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте Anatolix, Вы писали:
IT>>Что такое well-formed xml document?
A>Все теги закрыты(хотя бы / перез >), и правильно вложены друг в друга. Тег главного уровня 1.
Т.е. любой xml документ должен быть well-formed. А что такое valid xml document?
Если нам не помогут, то мы тоже никого не пощадим.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Т.е. любой xml документ должен быть well-formed. А что такое valid xml document?
Наверное с DTD связано но сам не работал
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>Простите, что такое NTTP?
A>>NNTP имелось ввиду. очепятка.
IT>Ok, я так и понял. А из каких частей у нас состоит NNTP сообщение.
Заголовок а потом multipart обыкновенный
если с attachment-ами
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>Т.е. SSL ближе к клиенту чем сокет или дальше?
A>>Ближе, тот что дальше это TLS.
IT>Прикалваешься?
Нет TLS тоже существует, но он до IP еще идет
типа VPN
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>Ok, я так и понял. А из каких частей у нас состоит NNTP сообщение.
A>Заголовок а потом multipart обыкновенный если с attachment-ами
А как заголовок отделяется от тела сообщения?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>Какие объекты ядра могут быть использованы для синхронизации работы процессов, а какие только для потоков?
Mutex для процессов, Critical Section только для потоков.
IT>Как можно расшарить память между двумя процессами?
В 9X выделить после второго GB адресного пространства,
в NT много способов есть, один из них например Memory
Mapped Files но помоему есть и другие, притом дохрена.
Без MSDN не назову. надо смотреть в сторону VirtualAlloc
IT>А потоками?
Просто не включать в thread local storage
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>Ok, я так и понял. А из каких частей у нас состоит NNTP сообщение.
A>>Заголовок а потом multipart обыкновенный если с attachment-ами
IT>А как заголовок отделяется от тела сообщения?
Как всегда в MIME — пустой строкой.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
IT>>Какие объекты ядра могут быть использованы для синхронизации работы процессов, а какие только для потоков?
A>Mutex для процессов, Critical Section только для потоков.
Ну там есть ещё всякие Events.
IT>>Как можно расшарить память между двумя процессами?
A>В 9X выделить после второго GB адресного пространства,
Первый раз об этом слышу. Это же хак.
A>в NT много способов есть, один из них например Memory Mapped Files но помоему есть и другие, притом дохрена.
map-файлы замечательно работают и под W95.
A>Без MSDN не назову. надо смотреть в сторону VirtualAlloc
Все они скорее базируются на map-файлах.
IT>>А потоками?
A>Просто не включать в thread local storage
А зачем, она ж и так между ними расшарена
Если нам не помогут, то мы тоже никого не пощадим.
Давай наверно закругляться. Про китайский и инглиш спрашивать не буду, это из другой оперы. Но если хочешь, можешь написать на них любой из ответов
A>Твоя задача A>1) Определить где именно я наврал A>2) Определить где именно моя подготовка соответствует заявленной
Выводы представлю чуть позже.
A>3) Определить мою адекватность, способность решать проблемы, и тп
Тут без длинного разговора не обойтись. В онлайне это может занять несколько дней и всем надоест.
Ok?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>>>Как можно расшарить память между двумя процессами? A>>В 9X выделить после второго GB адресного пространства, IT>Первый раз об этом слышу. Это же хак.
Нет там вся память после 2GB общая, это документировано.
A>>в NT много способов есть, один из них например Memory Mapped Files но помоему есть и другие, притом дохрена.
IT>map-файлы замечательно работают и под W95.
Нихрена они не замечательно работают они не синхронизируются
мнгновенно если в них 2 разных процесса пишут.
A>>Без MSDN не назову. надо смотреть в сторону VirtualAlloc
IT>Все они скорее базируются на map-файлах.
Не факт. Есть еще часть posix-овского API.
Хотя хз как она там внутренне устроена.
A>>Просто не включать в thread local storage IT>А зачем, она ж и так между ними расшарена
Thread local storage это память которая у каждого потока
своя, томечается ключевым словом __thread в VC.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
A>>Твоя задача A>>1) Определить где именно я наврал A>>2) Определить где именно моя подготовка соответствует заявленной
IT>Выводы представлю чуть позже.
Ok предстваляй, а я потом представлю их правильность.
В идеале если ты мое "резюме" перепишешь с указанием
твоего предстваления о времени подготовки хотя бы с точностью
до порядка. (неделя, месяц, квартал, год, несколько лет)
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>>>В 9X выделить после второго GB адресного пространства,
IT>>Первый раз об этом слышу. Это же хак.
A>Нет там вся память после 2GB общая, это документировано.
А какие системные dll по каким адресам там находяться, тоже документировано?
A>>>в NT много способов есть, один из них например Memory Mapped Files но помоему есть и другие, притом дохрена.
IT>>map-файлы замечательно работают и под W95.
A>Нихрена они не замечательно работают они не синхронизируются мнгновенно если в них 2 разных процесса пишут.
Возможно. Никогда не проверял одновременную запись.
A>>>Просто не включать в thread local storage
IT>>А зачем, она ж и так между ними расшарена
A>Thread local storage это память которая у каждого потока своя, томечается ключевым словом __thread в VC.
Да сколько там той памяти? Хотя в принципе достаточно и 4-х байт
Если нам не помогут, то мы тоже никого не пощадим.
Выводы я делаю не только по вопросам ответам, но и по всему нашему трёпу в этом топике.
Знание языков программирования:
A>C/C++ — очень отлично — 8 лет
Нормально. Скил не бумажный. Несколько лет есть точно, мем более учитывая опыт с Юниксами (который я не могу проверить), где ни о чём другом речи быть не может.
A>Object Pascal — отлично — 2 года
Скорее всего с этим всё нормально.
A>Java — хорошо — 0.5 года
Нету Java.
A>Assembler — хорошо — 2.5 года опыта в Reverse Engeneering(хобби, эпизодически)
Нормально.
A>Microsoft Visual C++ — отлично — 3 года
Некоторый опыт есть, видимо на небольших проектах. И скорее всего это средство не является основным.
A>Borland C++ Builder — Guru — 5 лет. A>Borland Delphi — отлично — 1 год A>Borland Java Builder — прилично — 0.5 года
Без понятия.
A>Interbase — отлично — 3 года. A>Oracle — программирование — хорошо, администрирование — плохо — 1 год. A>MS-SQL — видел — 1 неделя A>SQL — отлично — 3 года
С этим всё нормально. Видимо так оно и есть.
A>COM / ATL — хорошо — 1 год
Думаю на уровне прочтения нескольких книжек и возможно небольших тестовых проектов.
A>SSL — знаю, пользовал библиотеку OpenSSL — 1 месяц
Может и больше. Вообще с протоколами всё нормально.
A>XML — неплохо — 2 года(эпизодически)
Так себе, скорее всего readonly. Учитывая то, что в XML нет ничего сложного и его использовать легко и просто, то о серьёзных его знаниях говорить не имеет смысла. Нужно переходить на SOAP, XSL или другие технологии, которые на нём базируются.
A>DirectDraw, Direct3D, DirectShow — хорошо — 3 месяца A>Qt — хорошо — 2 года
Об этом я не спрашивал, т.к. не знаю.
A>MFC — хорошо — 1 год
Возможно несколько раз запускал визарды + что-то слышал от других людей. Нормальных знаний нет.
A>WinAPI — хорошо 2 года
Очень широкое понятие, думаю, речь идёт не ознаниях, а об умении ориентироваться в WinAPI. Ok.
A>Unix/Posix API — хорошо — 2 года
Не проверял.
A>Интернет протоколы(NTTP, SMTP и другие *TP) A>Внутреннее устройство OS Windows
Нормально.
A>Китайский(родной :)
Не верю :)
A>Английский(письменный — свободно, устный плохое произношение)
Да бог с ним.
Жаль не могу проверить Юникс. Если с ним всё нормально, то могу сделать предположение, что ты на нём в основном и работаешь. Интенсивный опыт с базами данных. Возможно занимаешься интеграцией Unix и Windows на низком уровне. Технологии Windows больше идут как хобби, ну возможно ещё увлечение хаком.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Требуется Anatolix...
От:
Аноним
Дата:
08.08.02 18:22
Оценка:
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>>>Какие объекты ядра могут быть использованы для синхронизации работы процессов, а какие только для потоков?
A>>Mutex для процессов, Critical Section только для потоков.
IT>Ну там есть ещё всякие Events.
Простите, не могу пройти мимо. Насколько я помню, Critical Sections не являются объектами ядра.
Здравствуйте Аноним, Вы писали:
IT>>>>Какие объекты ядра могут быть использованы для синхронизации работы процессов, а какие только для потоков?
A>>>Mutex для процессов, Critical Section только для потоков.
IT>>Ну там есть ещё всякие Events.
А>Простите, не могу пройти мимо. Насколько я помню, Critical Sections не являются объектами ядра.
Не являются. Наверное нужно было сказать "Какие объекты синхронизации могут быть использованы для синхронизации...", но получается тавтология. Надо было как-то по другому сформулировать вопрос.
Если нам не помогут, то мы тоже никого не пощадим.
IT>Давай наверно закругляться. Про китайский и инглиш спрашивать не буду, это из другой оперы. Но если хочешь, можешь IT>написать на них любой из ответов :)
Ну, теперь можно. Как мне показалось данное собеседование.
Java. Качество (т.е. возможность что-то реально выяснить про человека)
собеседования близко к нулю. Дан один простой пример, при том, достаточно
некорректный — проблема, которая там должна быть обнаружена, легко могла
бы и отсутствовать в принципе — про класс TextFile мы ничего не знаем,
но поскольку он явно не относится к стандартному вводу-выводу, то можно
предположить, что он жрет все исключения внутри методов, и к примеру,
закрывает файлы сам по отлову исключения.
C++. По языку — не впечатляет. Многие вещи обойдены, единственный, не очень
тривиальный вопрос — декорация имен функций. В Страусе на эту тему ничего нет,
если мне память не изменяет, так что надо или иметь реальный опыт, либо внимательно
читать референсы.
MSVC. Бее :) Человек всю жизнь мог собирать проекты с помощью make,
а отлаживаться с помощью печати и WinICE в особо сложных случаях.
И не факт, как еще быстрее будет J. Грамотный логгинг + ассерты —
великая вещь! Требовать от него, что бы он вспомнил, куда для чего
там мышкой тыкать... Не концептуально. Я бы не стал даже и спрашивать...
ATL, COM. Нормально. Ситуацию прояснили — шпионы всегда прокалываются на мелочах.
Win32 API. Хорошо.
Но вообще, чем дальше я на все это смотрю, тем больше убеждаюсь, что
единственный относительно нормальный метод собеседовать людей — это давать
небольшие, но реальные, тестовые задания. По результатам сразу многое можно
будет о человеке сказать, если задачи грамотно поставлены.
А потом уже, имея результаты — разговаривать. Странно, но этот метод
мало кем практикуется. Всего в паре-тройке мест по моему опыту. Странно,
что и я, будучи по ту сторону баррикад, был настроен не связываться с
тестовыми задачами…Я так понимаю, что народ вообще такие вещи не жалует?
Зря.
В целом, тема порадовала. Все учту, если вдруг пойду собеседоваться,
а все к тому идет. :)
Здравствуйте Karimchik, Вы писали:
A>>в NT много способов есть, один из них например Memory A>>Mapped Files но помоему есть и другие, притом дохрена.
K>Товарищи, а как же интсрумент всех стран и народов — pipes?
А разве они позволяют расшаривать память?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Karimchik, Вы писали:
A>>>в NT много способов есть, один из них например Memory A>>>Mapped Files но помоему есть и другие, притом дохрена.
K>>Товарищи, а как же интсрумент всех стран и народов — pipes? ;)
IT>А разве они позволяют расшаривать память?
Абшипси :shuffle: Но с другой стороны шаринг памяти в основном нужен для обмена данными между потоками/процессами, а через пайпы.... — они для этого созданы :))
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
IT>Выводы я делаю не только по вопросам ответам, но и по всему нашему трёпу в этом топике.
Неспортивно! Выходит за рамки задачи. Идея была понять, можно ли с помощью
собеседования выяснить, нагнал человек у себя в резюме, или нет.
IT>Знание языков программирования:
A>>C/C++ — очень отлично — 8 лет
IT>Нормально. Скил не бумажный IT>Несколько лет есть точно...
Пожалуй. Хотя единственный реальный вопрос — про декорацию имен...
Но на 8 лет вопрос не тянет — года достаточно, пожалуй. Да даже и меньше.
A>>Java — хорошо — 0.5 года IT>Нету Java.
Он прокололся, что спрашивал у Java-guys, из чего следует
что сам он им не является. Вопрос был неккоректный, следовательно
судить нельзя.
A>>Assembler — хорошо — 2.5 года опыта в Reverse Engeneering(хобби, эпизодически) IT>Нормально.
Вписать что-ли ассемблер обратно в свое резюме?
A>>Microsoft Visual C++ — отлично — 3 года IT>Некоторый опыт есть, видимо на небольших проектах. IT>И скорее всего это средство не является основным.
У нас был проект, собиравшийся под MSVC, мегов так на 30
исходников. Собирался, по большей части, make-ом.
Т.е. при этом про среду свободно можно было бы не знать.
A>>COM / ATL — хорошо — 1 год IT>Думаю на уровне прочтения нескольких книжек и возможно небольших тестовых проектов.
Кстати, ATL/COM потрясающе хорошо забываются. Стоило год с ними не поработать — и все.
Напрочь. Хотя опыт был довольно большой. А все потому, что архитекрура корявая и
уродливая — сразу видно, что MS старалась...
A>>MFC — хорошо — 1 год
К MFC тоже относится
IT>Возможно несколько раз запускал визарды + что-то слышал от других людей. Нормальных знаний нет.
И хорошо MFC — в сад
A>>WinAPI — хорошо 2 года IT>Очень широкое понятие, думаю, речь идёт не ознаниях, а об умении ориентироваться в WinAPI. Ok.
А что можно вместо этого в резюме написать? Список всех функций API,
которыми приходилось пользоваться? Тоже не дело...
A>>Внутреннее устройство OS Windows
От тут можно было бы порезвится. Кольца там, драйверы, то-сё...
IT>Unix и Windows на низком уровне. Технологии Windows больше идут как хобби, ну возможно ещё увлечение хаком.
Ну я бы не сказал. IMHO, вполне может быть нормальный опыт. Даже и интересный — Qt там. Это вам не MFC смердящее.
Anatolix, а Qt под винды нынче дорог? Я бы глянул...
Здравствуйте dmz, Вы писали:
dmz>Java. Качество (т.е. возможность что-то реально выяснить про человека) собеседования близко к нулю. Дан один простой пример, при том, достаточно некорректный — проблема, которая там должна быть обнаружена, легко могла бы и отсутствовать в принципе — про класс TextFile мы ничего не знаем, но поскольку он явно не относится к стандартному вводу-выводу, то можно предположить, что он жрет все исключения внутри методов, и к примеру, закрывает файлы сам по отлову исключения.
Человек прокололся на самом простом вопросе, дальнеёший разговор не имел смысла. А про класс TextFile как минимум известно, что речь идёт о текстовом файле и у него есть методы закрытия и открытия. Т.е. это очень похоже на ресурс, которые после использования надо освобождать.
dmz>C++. По языку — не впечатляет. Многие вещи обойдены, единственный, не очень тривиальный вопрос — декорация имен функций. В Страусе на эту тему ничего нет, если мне память не изменяет, так что надо или иметь реальный опыт, либо внимательно читать референсы.
Нужен полный список вопросов от BrainBench? Некоторые так и делают. Сажают человека за комп, а сами содятся рядом и смотрят как человек сдаёт экзамен. Но на это нет времени. В принципе, было бы достаточно ещё попросить написать процедуру подсчёта битов в int и реверсии строки, но в этом не было необходимости.
dmz>MSVC. Бее Человек всю жизнь мог собирать проекты с помощью make,
У человека было заявлено средсво разработки, читай среда программирования. При этом её название было указано не верно. Вообще-то надо не Visual C++, а Visual Studio.
dmz>Но вообще, чем дальше я на все это смотрю, тем больше убеждаюсь, что единственный относительно нормальный метод собеседовать людей — это давать небольшие, но реальные, тестовые задания.
Возможно. Только к этому надо заранее готовится. А представь, если тебе принесли резюме и сказали проинтервьюировать человека, какие тут тестовые задания.
Кстати, все вопросы я придумывал по ходу дела, не именя ни плана, ни перечня вопросов.
dmz>В целом, тема порадовала. Все учту, если вдруг пойду собеседоваться, а все к тому идет.
Удачи.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте dmz, Вы писали:
IT>>Выводы я делаю не только по вопросам ответам, но и по всему нашему трёпу в этом топике.
dmz>Неспортивно! Выходит за рамки задачи. Идея была понять, можно ли с помощью собеседования выяснить, нагнал человек у себя в резюме, или нет.
Хорошо, переформулируем. По нашему с ним трёпу. А ты думаешь на собеседовании не бывает трёпа? Вопросы как раз и нужны для того, чтобы его организовать
dmz>Но на 8 лет вопрос не тянет — года достаточно, пожалуй. Да даже и меньше.
Я не могу определить возраст скила по нескольким вопросам. Да это и не имеет смысла. Возможно у меня опыт работы с C++ больше в два раза чем у Андрея Тарасевича, но тягаться я с ним не буду, т.к. у него другая подготовка и он уделает меня очень быстро. Но с другой стороны это же совсем не означает, что водитель троллейбуса плохой водитель, т.к. он не Шумахер. Его умений достаточно, чтобы управлять троллейбусом.
A>>>Java — хорошо — 0.5 года IT>>Нету Java. dmz>Он прокололся, что спрашивал у Java-guys, из чего следует что сам он им не является. Вопрос был неккоректный, следовательно судить нельзя.
Почитай внимательно. Он начал спорить совсем о другом.
A>>>Assembler — хорошо — 2.5 года опыта в Reverse Engeneering(хобби, эпизодически) IT>>Нормально. dmz>Вписать что-ли ассемблер обратно в свое резюме?
А чё. Я помнится тоже ешё на tasm'е что-то делал лет этак много назад
A>>>WinAPI — хорошо 2 года IT>>Очень широкое понятие, думаю, речь идёт не ознаниях, а об умении ориентироваться в WinAPI. Ok.
dmz>А что можно вместо этого в резюме написать? Список всех функций API, которыми приходилось пользоваться? Тоже не дело...
Можно писать конкретнее, например, multithreading, unicode и т.п. У меня, кстати, один мужик спрашивал, почему я не указал это явно в резюме.
A>>>Внутреннее устройство OS Windows dmz>От тут можно было бы порезвится. Кольца там, драйверы, то-сё...
Можо было бы, если бы тебе попался гуру, а если нет? Это было бы похоже на избиение младенца.
IT>>Unix и Windows на низком уровне. Технологии Windows больше идут как хобби, ну возможно ещё увлечение хаком.
dmz>Ну я бы не сказал. IMHO, вполне может быть нормальный опыт. Даже и интересный — Qt там. Это вам не MFC смердящее.
Хорошо, я переформулирую. Технологии Windows не первичные. Опять же с оговорками о Юникс. Мне почему то кажеться, что Anatolix там больше себя проявил. Возможно я ошибаюсь.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали: IT>А какие системные dll по каким адресам там находяться, тоже документировано?
Нет но любое свободное место ты там можешь юзать
IT>>>map-файлы замечательно работают и под W95. A>>Нихрена они не замечательно работают они не синхронизируются мнгновенно если в них 2 разных процесса пишут. IT>Возможно. Никогда не проверял одновременную запись.
Не смог вчера это в рихтере найти, хотя мне
кажется что-то было на эту тему хотя возможно я
и погнал.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Мда... Ответ настолько прост, что я смотрю никто и не задался вопросом, что означает conn.CursorLocation = 2.
2 — adUseServer — курсор открываемый на сервере(причем это значение идет как DEFAULT, смотрите MSDN Using Cursors with ADO). Все что нужно сделать, так это выставить conn.CursorLocation = 3 — adUseClient, открывать курсор у клиента,
а не на сервере(там курсор делает DEALLOCATE после первого же resultset).
И этот вопрос задан из практики. Помню я на нем день потерял. Мне нужно было вернуть расчеты из одной SP в разных таблицах, так как делал это еще с db-library.
Здравствуйте dmz, Вы писали:
A>>>Java — хорошо — 0.5 года IT>>Нету Java. dmz>Он прокололся, что спрашивал у Java-guys, из чего следует dmz>что сам он им не является. Вопрос был неккоректный, следовательно dmz>судить нельзя.
Я не прокололся. Объясняю: я здесь существовал одновременно в 2
ипостасях. Как человек которого интервьюируют и как участник
форума RSDN который комментирует процесс. Так вот комментарий
про JavaGuys был отпущен второй ипостасью а в собеседовании
этого типа не было.
dmz>Anatolix, а Qt под винды нынче дорог? Я бы глянул...
2100$ Professional и 700$ standart. Если хочешь
забирай trial в www.trolltech.com и смотри.
(Если достанут Nag screen пиши мне
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
A>>C/C++ — очень отлично — 8 лет IT>Нормально. Скил не бумажный. Несколько лет есть точно, мем более учитывая опыт с Юниксами (который я не могу проверить), где ни о чём другом речи быть не может.
На самом деле 3 года как и вообще общий период профессионального
программирования. На BrainBench рубился неоднократно
Transcript: 2239487. К сожалению не всегда получается
сдавать на Master-а чем сильно разочарован.
A>>Object Pascal — отлично — 2 года IT>Скорее всего с этим всё нормально.
Никогда не программировал на нем :-) но
знаю действительно неплохо. См комментарий
к Delphi.
A>>Java — хорошо — 0.5 года IT>Нету Java.
Книжка прочитанная на искосок и одна
поправленная чужая программа среднего объема
(VNC клиент на Java, надо было протокол изменить).
Когда вижу чужой код то по аналогии програмирую
достаточно уверенно, но без этого даже "hello, world"
не смог бы написать.
A>>Assembler — хорошо — 2.5 года опыта в Reverse Engeneering(хобби, эпизодически) IT>Нормально.
На самом деле Reverse Engeneering нормально, а Assembler хз.
Видинь ли ты реверсишь код который написано компилятором,
а тот пользует команд 30 от силы(самые умные 50).
A>>Microsoft Visual C++ — отлично — 3 года IT>Некоторый опыт есть, видимо на небольших проектах. И скорее всего это средство не является основным.
Сейчас основным, но пользуется в основном как компилятор.
A>>Borland C++ Builder — Guru — 5 лет.
Ну естественно не 5 а 3, т.к. такой суммарный опыт.
Сейчас являюсь Co-moderatorom конфы на http://www.softforum.ru/cbuilder уровень действительно
сильно высокий.
A>>Borland Delphi — отлично — 1 год
Вообще никогда не его не пользовал. Но знаю
очень хорошо, даже статья в журнале программист
есть моя по поводу Delphi. Объясняется это
тем что очень похож на CBuilder? За исключением
основного языка, но исходников на Object Pascal
я начитался выше крыши, вся VCL написана на pascal.
A>>Borland Java Builder — прилично — 0.5 года
Я его заставлял код генерить когда программировал на Java.
Лень было rtfm делать а с ним удобно, кнопки нарисовал
на форме, посмотрел какой код получился.
A>>Interbase — отлично — 3 года. A>>Oracle — программирование — хорошо, администрирование — плохо — 1 год. A>>MS-SQL — видел — 1 неделя A>>SQL — отлично — 3 года IT>С этим всё нормально. Видимо так оно и есть.
MSSQL никогда не видел и даже не устанавливал,
а остальное правда.
A>>COM / ATL — хорошо — 1 год IT>Думаю на уровне прочтения нескольких книжек и возможно небольших тестовых проектов.
На самом деле есть опыт вяких экспортов Word и тп.
Но на BCB это делается не средствами ATL. А при написании
ActiveX и Automation и тп BCB пользует свою слегка
модифицированную версию ATL при этом Wizard
там так круто все генерит что руками вообще
никто ничего не пишет. Использования COM в VC++
ограничивается прочтением книги Inside ATL.
Но было давно и ничего уже не помню, а прямо
перед экзаменом прочитать поленился, т.к. он
был не настоящий.
A>>SSL — знаю, пользовал библиотеку OpenSSL — 1 месяц IT>Может и больше. Вообще с протоколами всё нормально.
На самом деле неделя, один из левых(в смысле не по
основной работе) коммерческих
проектов потребовал его поюзать я и поюзал.
С протоколами действительно все в порядке.
A>>XML — неплохо — 2 года(эпизодически) IT>Так себе, скорее всего readonly. Учитывая то, что в XML нет ничего сложного и его использовать легко и просто, то о серьёзных его знаниях говорить не имеет смысла. Нужно переходить на SOAP, XSL или другие технологии, которые на нём базируются.
Да я здесь XSL и Xpath и не упоминал. Так использование парсеров
(правда много парсеров перепробовал). Сохранение конфигов
в XML и тп.
A>>DirectDraw, Direct3D, DirectShow — хорошо — 3 месяца
Юзал один месяц, тоже левый коммерческий проект.
A>>Qt — хорошо — 2 года
На самом деле пол года, ну не важно.
A>>MFC — хорошо — 1 год IT>Возможно несколько раз запускал визарды + что-то слышал от других людей. Нормальных знаний нет.
Так и есть.
A>>WinAPI — хорошо 2 года IT>Очень широкое понятие, думаю, речь идёт не ознаниях, а об умении ориентироваться в WinAPI. Ok.
Да примерно так.
A>>Unix/Posix API — хорошо — 2 года
На самом деле не плохо знаю но 2
года это эпизодически. Так в основном
левые работы и самостоятельное изучение.
Там правда и знать то нечего, там API
не впример проще чем виндовый.
A>>Интернет протоколы(NTTP, SMTP и другие *TP) A>>Внутреннее устройство OS Windows IT>Нормально.
Ok.
IT>Жаль не могу проверить Юникс. Если с ним всё нормально, то могу сделать предположение, что ты на нём в основном и работаешь.
Нет я не в основном в нем работаю. Даже сейчас
пишу кросплатформенное приложение на Windows.
Все таки удобнее. Потом его портирую(буквально
большие буквы на маленькие позаменяю в
#include и заработает)
IT>Интенсивный опыт с базами данных.
Это есть.
IT>Возможно занимаешься интеграцией Unix и Windows на низком уровне.
Не на низком. Так просто общение через socket-ы по сети.
IT>Технологии Windows больше идут как хобби, ну возможно ещё увлечение хаком.
Нет до этого 2.5 года писал на основной работе на Windows/BCB.
Как у меня в настоящем резюме написано "разработка средства
разработки бухгалтерских программ" т.е. буквально свой дизайнер
форм по классу не уступающий дельфовому и тп.
Сейчас пишу кросплатформенный IP телефон на Qt
тесно объединенный с системой написанной в Web
работающей на unix.
Выводы о unix ориентированности ты сделал не правильно.
Т.е. ты не проверил как раз unix и Delphi/BCB но посчитал
что я unix-оид (возможно уровень подготовки просто не
состыковался с твоим представлением 'дельфака позорного')
;)
По поводу общего, то да видимо уровень определить
задавая вопросы все-таки можно. Но на проядок больше
можно о человеке узнать просто спросив его что он делал
раньше и попросив описать свои проекты.
Там будет сразу понятно что и где ты пользовал. Если у
тебя написано Java — 1 год, а на вопрос где ты его использовал
ты говоришь "самоподготовка", то все сразу становится
понятно
P.S. Спасибо было интересно и поучительно.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте 4auHuK, Вы писали:
>(там курсор делает DEALLOCATE после первого же resultset).
Ты уверен в своей правоте?
[msdn]
The SQL Server ODBC driver does not support multiple active recordsets on the same connection when using the forward-only cursor. The OLE DB Provider for ODBC drivers attempts to work around this limitation by creating a second connection. Since temporary tables are only visible to the connection that created it, the application fails to find the table and returns a DB_E_NOTABLE HRESULT
С удовольствием читал и с нетерпением ждал продолжения. Иначе как героями дня (нескольких дней? недели?) вас назвать нельзя.
A>>>C/C++ — очень отлично — 8 лет IT>>Несколько лет есть точно, мем более учитывая опыт с Юниксами (который я не могу проверить), где ни о чём другом речи быть не может. A>На самом деле 3 года как и вообще общий период профессионального программирования.
Дело, наверное, не в том, сколько лет. Всё-таки есть разница между годами использования предмета, допустим, С/С++, человеком с опытом программирования и без оного.
A>По поводу общего, то да видимо уровень определить задавая вопросы все-таки можно. Но на проядок больше можно о человеке узнать просто спросив его что он делал раньше и попросив описать свои проекты. A>Там будет сразу понятно что и где ты пользовал. Если у тебя написано Java — 1 год, а на вопрос где ты его использовал ты говоришь "самоподготовка", то все сразу становится понятно
A>P.S. Спасибо было интересно и поучительно.
Здравствуйте Vi2, Вы писали:
Vi2>Дело, наверное, не в том, сколько лет. Всё-таки есть разница между годами использования предмета, допустим, С/С++, человеком с опытом программирования и без оного.
Мне тоже не совсем понятно как считаются года.
Например первый раз я на C программировал(не тривиальную
и в добавок коммерческую программу) в 11 классе(95 год)
Но записывать себе 7 лет экспы я как-то стесняюсь,
т.к. одно дело когда ты пишешь и думаешь о C++
минимум 50 часов в неделю, а другое когда 20 часов
в месяц.
Да и польза на самом деле различается, если я сейчас
например начну изучасть MFC то это будет совсем большая
разница по пользе, чем я бы начал это делать совсем без опыта.
Я думаю разница обретения опыта будет на порядок.
В принципе наверное правы люди на Source Forge которые
оценивают skill-ы по такой шкале
None
Want to learn
Competent
Wizard
Wrote a book
Wrote it
Разница более очевидна чем между 6 и 12 месяцами exp.
Сразу становится все понятно
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
Vi2>>Дело, наверное, не в том, сколько лет. Всё-таки есть разница между годами использования предмета, допустим, С/С++, человеком с опытом программирования и без оного.
A>Мне тоже не совсем понятно как считаются года.
Года считают очень просто. Например, размещает человек своё резюме на Монстре, допустим 10 лет назад он писал на C три года, затем пересел на C++, 5 лет назад начал писать на VC++, год назад на С#. Итого:
C - 3
C++ - 7
VC++ - 5
C# - 1
Сумарный опыт C/C++ — 10 лет. На монстре это всё записывается в одну строчку и получаем:
C/C++/VC++/C# - 10
Поисковик тамошний легко выдаёт человека с опытом C# — 10 лет И таких хитростей народ придумывает море, только бы резюме было выше в топе.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Поисковик тамошний легко выдаёт человека с опытом C# — 10 лет И таких хитростей народ придумывает море, только бы резюме было выше в топе.
Т.е. я тебя похоже даже не обманул
когда себе 8 лет экспы в C/C++ написал
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Выводы о unix ориентированности ты сделал не правильно. A>Т.е. ты не проверил как раз unix и Delphi/BCB но посчитал что я unix-оид (возможно уровень подготовки просто не состыковался с твоим представлением 'дельфака позорного')
Ых. Жалко, промазал.
A>По поводу общего, то да видимо уровень определить задавая вопросы все-таки можно. Но на проядок больше можно о человеке узнать просто спросив его что он делал раньше и попросив описать свои проекты. Там будет сразу понятно что и где ты пользовал. Если у тебя написано Java — 1 год, а на вопрос где ты его использовал ты говоришь "самоподготовка", то все сразу становится понятно
Естественно при наличии полного резюме всё видится по другому. Но и тут настоящие индейцы могут тебе подкинуть версию резюме специально заточенную под твои нужды
A>P.S. Спасибо было интересно и поучительно.
Мне тоже. Спасибо и тебе. Только вот переводы строк твои я устал удалять
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, Вы писали:
IT>Мне тоже. Спасибо и тебе. Только вот переводы строк твои я устал удалять
А зачем их удалять? Они мешаются чем-то? С ними вроде как даже лучше.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте IT, Вы писали:
IT>>Здравствуйте Anatolix, Вы писали:
A>>>Assembler — хорошо — 2.5 года опыта в Reverse Engeneering(хобби, эпизодически)
IT>>Имеется 300k дезассемблированной кода. По каким отличительным признакам можно определить на каком языке высокого уровня написана программа.
A>Несколько прямых признаков(метка компилятора, сигнатуры библиотек) A>И много косвенных(конвенция вызовов(хорошо видно кто сохраняет регистры и чистит стек), формат строк(asciiz или pascal) )
Можно добавить?
Часть информации неплохо видно в .exe'шнике невооруженным глазом. При просмотре в томже фар-манагере.
Здравствуйте Ghost, Вы писали:
IT>>>Имеется 300k дезассемблированной кода. По каким отличительным признакам можно определить на каком языке высокого уровня написана программа.
G>Можно добавить? G>Часть информации неплохо видно в .exe'шнике невооруженным глазом. При просмотре в томже фар-манагере.
Видишь здесь по условию код уже дизассемблированный
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Иван Цыгулёв, Вы писали:
ИЦ>Здравствуйте IT, Вы писали:
IT>>Здравствуйте Иван Цыгулёв, Вы писали:
ИЦ>>>Привет злобный HR Ткачёв
IT>>Здравствуйте, Ваня. Скажи спасибо, что я просто не знал о чём тебя в своё время спрашивать
ИЦ>Ага, сам не знал ИЦ>Да и главное тогда было чтобы человек хороший был
ИЦ>>>вот тебе подсказка
ИЦ>>>Внимание вопрос! ИЦ>>>Чем человек занимался 2 года с Visual C++?
IT>>Ты подожди, мы до всего дойдём. И про ATL с COM'ом ещё поспрашаем. Вообще, опыт с наименьшим количесвом лет всегда вызывает подозрение.
ИЦ>Да не про минимальный опыт разговор, а о том что можно делать без ATL и MFC 2 года с Visual C++ ?
А на них свет клином сошелся ?
Можно писать :
— парсеры
— semantic checker/name resolution
— import/export из/в другие языки
— кодогенераторы
— оптимищаторы генеренного кода
— библиотеки для кодогенераторов
— etc.
(вышеперечисленное не обязательно относится к разработке компиляторов,
он встречается во многих других областях, например в CASE системах для Real-Time систем. См фирмы I-Logix, Telelogic)
Интересная у вас дискуссия... )
IT>А как быть, если нужно рекурсивное использование классов, определённых в разных модулях? Т.е., например, в методе M1() класса A нужно работать с классамом B. А в классе B, в методе M2() нужно работать с классом A.
А это кстати можно сделать — вернее можно обойти это ограничение:
напиши еще пару классов — baseA и baseB — соответственно базовые для A и для B и вынеси туда все нужные тебе функции, сделай их виртуальными и переопредели а потомках..
т.е. надо просто не использовать методы других классов, а использовать виртуальные методы абстрактных базовых классов — тогда проблемы цикличесикх ссылок будет разрешена. да и вообще это более качественный и правильный подход к программированию.
Konstantin Trunin http://blog.trunin.com — эффективное управление людьми, проектами, собой
Здравствуйте Joker3D, Вы писали:
JD>Интересная у вас дискуссия... )
IT>>А как быть, если нужно рекурсивное использование классов, определённых в разных модулях? Т.е., например, в методе M1() класса A нужно работать с классамом B. А в классе B, в методе M2() нужно работать с классом A.
JD>А это кстати можно сделать — вернее можно обойти это ограничение: JD>напиши еще пару классов — baseA и baseB — соответственно базовые для A и для B и вынеси туда все нужные тебе функции, сделай их виртуальными и переопредели а потомках.. JD>т.е. надо просто не использовать методы других классов, а использовать виртуальные методы абстрактных базовых классов — тогда проблемы цикличесикх ссылок будет разрешена. да и вообще это более качественный и правильный подход к программированию.
Нет не качественный. Плодить сущности это не есть хорошо. То что ты привел я знаю, и это просто хак. Не стоит делать вид что так и надо.
Просто подумай что эти функции должны возвращать эти самые классы классы, притом не какой-то предок, а сам класс. В таком случае виртуальность тебя не спасет. Например подумай как реализовать ListView/ListViewItem если они были бы в разных модулях.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте Joker3D, Вы писали:
JD>>Интересная у вас дискуссия... )
IT>>>А как быть, если нужно рекурсивное использование классов, определённых в разных модулях? Т.е., например, в методе M1() класса A нужно работать с классамом B. А в классе B, в методе M2() нужно работать с классом A.
JD>>А это кстати можно сделать — вернее можно обойти это ограничение: JD>>напиши еще пару классов — baseA и baseB — соответственно базовые для A и для B и вынеси туда все нужные тебе функции, сделай их виртуальными и переопредели а потомках.. JD>>т.е. надо просто не использовать методы других классов, а использовать виртуальные методы абстрактных базовых классов — тогда проблемы цикличесикх ссылок будет разрешена. да и вообще это более качественный и правильный подход к программированию.
A>Нет не качественный. Плодить сущности это не есть хорошо. То что ты привел я знаю, и это просто хак. Не стоит делать вид что так и надо.
Я все-таки считаю что это хорошо! Очень часто в "умных" книжках слышал советы о том что реализация (код) должна быть только в конечных классах иерархии наслеования. Т.е. наследуйся конечно сколько тебе угодно и от кого угодно, НО вот новые интерфейсные методы (т.е. методы которые кто-то будет дергать снаружи) добавлять нельзя — добвлять им можно только в базовом абстрактном классе.
Я конечно не говорю что надо всегда так делать, но я считаю что это хороший тон программирования хотя и трудозатратный...
Посмотри на COM — там все построено на этом — есть чисто виртуальные классы (интерфейсы) и все дергают только за них — что тут плохого???
A>Просто подумай что эти функции должны возвращать эти самые классы классы, притом не какой-то предок, а сам класс. В таком случае виртуальность тебя не спасет. Например подумай как реализовать ListView/ListViewItem если они были бы в разных модулях.
Если ты хочешь именно ListViewItem и на базовый абстрактный класс не согласен(хоят и не понятно почему) то все равно очень просто:
1.pas:
class IListView
2.pas
uses 1.pas;
uses 3.pas;
class ListView : IListView
содержит методы и проперти возвращающие ListViewItem
3.pas
uses 1.pas
class ListViewItem
// при необходимости дергает все что ему нужно через IListView
Konstantin Trunin http://blog.trunin.com — эффективное управление людьми, проектами, собой
Здравствуйте Joker3D, Вы писали:
JD>Я все-таки считаю что это хорошо! Очень часто в "умных" книжках слышал советы о том что реализация (код) должна быть только в конечных классах иерархии наслеования. Т.е. наследуйся конечно сколько тебе угодно и от кого угодно, НО вот новые интерфейсные методы (т.е. методы которые кто-то будет дергать снаружи) добавлять нельзя — добвлять им можно только в базовом абстрактном классе.
Ни в одной правильной книжке так не написано. Видимо у тебя недостает опыта, слегка, в проектировании систем если ты так считаешь(без обид). На самом деле класс предок от которого наследуется только один класс это баг в дизайне, его нужно исправлять. Посмотри как написаны все нормальные библиотеки(та же VCL) и увидишь что там каждое наследование что-то в класс добавляет.
Вообщем здесь надо руководствоваться так называемым KISS principle (KISS = Keep It Simple, Stupid )
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте Joker3D, Вы писали:
JD>>Я все-таки считаю что это хорошо! Очень часто в "умных" книжках слышал советы о том что реализация (код) должна быть только в конечных классах иерархии наслеования. Т.е. наследуйся конечно сколько тебе угодно и от кого угодно, НО вот новые интерфейсные методы (т.е. методы которые кто-то будет дергать снаружи) добавлять нельзя — добвлять им можно только в базовом абстрактном классе.
A>Ни в одной правильной книжке так не написано.
"Наиболее эффективное использование C++" by Скотт Майерс стр. 266
там как раз есть тема "Делайте нетерминальные классы абстрактными" — это то про что я и говорил.
A>Видимо у тебя недостает опыта, слегка, в проектировании систем если ты так считаешь(без обид).
Оk. Без обид. Возможно, что у тебя опыта больше...
A>На самом деле класс предок от которого наследуется только один класс это баг в дизайне, его нужно исправлять. Посмотри как написаны все нормальные библиотеки(та же VCL) и увидишь что там каждое наследование что-то в класс добавляет.
В этом (насчет бага в дизайне) я с тобой не согласен. Я считаю что могу писать так как захочу (а обычно я хочу так как мне кажется правильней). Однако, лишний уровень абстракции обычно только упрощает (в плане удобства пользования, красоты дизайна и т.п.) дальнейшую разработку... хотя и тормозит ее (в плане временных и умственных трудозатрат).
A>Вообщем здесь надо руководствоваться так называемым KISS principle (KISS = Keep It Simple, Stupid )
Я же не спорю с kiss. Просто иногда когда проект растет возникают сложности...
Но как у тебя у самого сказано в подписи:
"Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев"
Konstantin Trunin http://blog.trunin.com — эффективное управление людьми, проектами, собой
Здравствуйте Joker3D, Вы писали:
A>>Ни в одной правильной книжке так не написано. JD>"Наиболее эффективное использование C++" by Скотт Майерс стр. 266 JD>там как раз есть тема "Делайте нетерминальные классы абстрактными" — это то про что я и говорил.
Это как раз не про это. Там говорится что надо делать абстрактными классы которые не имеют собственного смысла для того чтобы кто-нибудь не мог их создать. Притом обрати внимание что сказано "делайте существующие классы абстрактными". И там ничего что для каждого класса надо делать абстрактную пару.
A>>На самом деле класс предок от которого наследуется только один класс это баг в дизайне, его нужно исправлять. Посмотри как написаны все нормальные библиотеки(та же VCL) и увидишь что там каждое наследование что-то в класс добавляет. JD>В этом (насчет бага в дизайне) я с тобой не согласен. Я считаю что могу писать так как захочу (а обычно я хочу так как мне кажется правильней). Однако, лишний уровень абстракции обычно только упрощает (в плане удобства пользования, красоты дизайна и т.п.) дальнейшую разработку... хотя и тормозит ее (в плане временных и умственных трудозатрат).
Дизайн считается хорошим когда другие люди его понимают и принимают.
JD>"Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев"
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте Joker3D, Вы писали:
A>>>Ни в одной правильной книжке так не написано. JD>>"Наиболее эффективное использование C++" by Скотт Майерс стр. 266 JD>>там как раз есть тема "Делайте нетерминальные классы абстрактными" — это то про что я и говорил.
A>Это как раз не про это. Там говорится что надо делать абстрактными классы которые не имеют собственного смысла для того чтобы кто-нибудь не мог их создать. Притом обрати внимание что сказано "делайте существующие классы абстрактными". И там ничего что для каждого класса надо делать абстрактную пару.
Ладно, я согласен, что, конечно же, не надо делать для каждого класса его абстрактную пару — обычно это просто ни к чему (особенно если от этого класса никто не будет наследоваться).
Но иногда это надо (например в приведенном тобой примере из Дельфы) и, когда это надо, это не есть плохо!
Ты же к примеру не ругаешься, что тебе надо описывать интерфейс в IDL'ке, а потом реализовывать его в производном классе — это нормально — это технология такая. ну и тут это тоже технология — технология программирования в дельфи.
JD>>"Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев"
A>
Konstantin Trunin http://blog.trunin.com — эффективное управление людьми, проектами, собой
Здравствуйте Joker3D, Вы писали:
JD>Ладно, я согласен, что, конечно же, не надо делать для каждого класса его абстрактную пару — обычно это просто ни к чему (особенно если от этого класса никто не будет наследоваться). JD>Но иногда это надо (например в приведенном тобой примере из Дельфы) и, когда это надо, это не есть плохо! JD>Ты же к примеру не ругаешься, что тебе надо описывать интерфейс в IDL'ке, а потом реализовывать его в производном классе — это нормально — это технология такая. ну и тут это тоже технология — технология программирования в дельфи.
А я и не ругаюсь. Я абсолютно спокойно отношусь. У дельфи есть ограничение, ну и ладно.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
A>Здесь не стоит выносить critical section за класс, A>т.к. получается, что если я заблокировал один экземпляров, A>то все остальные в этот момент стоят курят, хотя могли A>бы работать. Надо сделать CriticalSection одной из A>переменных класса(не статистической)
А я бы создал класс CCriticalRegion, принимающий в консрукторе критическую секцию, и в нем же ее захватывающий, а в деструкторе ее освободающий. И пливать тогда на исключения. А что касается выноса секции за класс, то без контекста в котором это используется, нельзя ничего сказать о правильности этого решения. Хотя я бы внес все-таки внес эту переменную в класс как статическую. (это правильно с точки зрения архитектуры.)
Здравствуйте Lonely Dog, Вы писали:
LD>Хотя я бы внес все-таки внес эту переменную в класс как статическую. (это правильно с LD>точки зрения архитектуры.)
Помоему как раз надо вносить не как статистическую, когда она у тебя одна на все экземпляры класса вот это и есть архитектурная ошибка. Экземпляры классов блокируют друг друга хотя вполне могли бы работать
LD>PS: извините, что вмешался.
Да ничего основная дискусия уже давно закончилась, сейчас только обсуждение идет.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте IT, Вы писали:
IT>Здравствуйте Anatolix, Вы писали:
A>>Pascal
A>>type MyClass=class; A>>(это в Object Pascal от Delphi, в классическом используется ключевое слово object а не class)
IT>А как быть, если нужно рекурсивное использование классов, определённых в разных модулях? Т.е., например, в методе M1() класса A нужно работать с классамом B. А в классе B, в методе M2() нужно работать с классом A.
На самом деле все это можно реализовать
unit u1;
interface
type
A = class
public
procedure M1(AObject:TObject); // ничего не зная о u2
// можем передавать его объекты через "универсальный" классend;
implementation
uses u2; // мы можем использовать этот юнит только в
// разделе реализацииprocedure A.M1;
begin
if AObject is B then// что-то делаемend;
unit u2;
interface
uses u1; // в разделе интерфейса можно использовать только один из двухtype
B = class
public
procedure M2(AObject:A); // зная о u1 можем передавать экземпляры нужного классаend;
implementation
procedure B.M2;
begin// что-то делаемend;
Да никто и не утверждал что так нельзя сделать. Решений то миллиард есть. Просно на самом деле необходимость реализовать объявленный класс до конца модуля на самом деле ничем не обоснована, это и раздражает слегка
А данное решение вещь достаточно бесполезная. Обычно если эти 2 класса не могут друг без друга обходится это значит что не имеет смысла их разделять в разные модули т.к. их все равно сложно по отдельности поюзать. Вот поэтому их просто смело в одном модуле объявляют и не парятся. Вся VCL написана как раз в этом стиле.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте vav, Вы писали:
A> vav>>странно, что никто не заступился..
A>Да никто и не утверждал что так нельзя сделать. Решений то миллиард есть. Просно на самом деле необходимость реализовать объявленный класс до конца модуля на самом деле ничем не обоснована, это и раздражает слегка
A>А данное решение вещь достаточно бесполезная. Обычно если эти 2 класса не могут друг без друга обходится это значит что не имеет смысла их разделять в разные модули т.к. их все равно сложно по отдельности поюзать. Вот поэтому их просто смело в одном модуле объявляют и не парятся. Вся VCL написана как раз в этом стиле.
Ну не скажи. Например, в Дельфи — это стандартный ход, когда есть две формы, скажем одна вызывается из другой. А в другой в свою очередь нужны данные из первой. Обе формы в один исходник не запихнешь. А так — пожалуйста.
A>>В pascal если мы предварительно описали класс A>>мы обязаны его определить до конца модуля. IT>А по-моему даже жестче... Мы должны развернуть этот forward ДО ОКОНЧАНИЯ БЛОКА type.
Абсолютно точно для Delphi Object Pascal. Сам на это однажды напарывался
Вообще-то это только половина правды.
На самом деле (по крайней мере в VS.NET, я VS6.0 уже подзабыл) для проектов в Solution (то, что выросло из Workspace) можно задать Build Order, не проставляя зависимостей. Другое дело, что такой подход некрасив.