Форум: "Потрепаться";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизКак определить чего ты стоишь как программист. Найти похожие ветки
← →
Матлабист (2004-04-06 16:12) [120]
> А эта...FindNext ?
Забыл. Привык к циклам repeat until False, что не отвыкнешь... Правильно, конечно же FindNext(SR) <> 0. И FindClose тоже надо. Привык, что если что неправильно --- то при отладке всплывет... Вообще с листа писать довольно-таки неприятно...
IMHO, результат довольно высокий
В смысле взяли бы?
← →
Юрий Зотов © (2004-04-06 16:23) [121]> Матлабист (06.04.04 16:12) [120]
При наличии соответствующего объема работы и фонда зарплаты - вне сомнений.
← →
nikkie © (2004-04-06 16:26) [122]>[113]
>4.3 +
имхо, здесь * больше соответствует. поскольку
1. надо передавать 0, а не Application.MainForm.Handle
2. соответственно DispatchMessage вызовет не MainWndProc, а WndProc окна, которому адресовано сообщение
3. комментарий к TranslateMessage неверный - эта функция совсем не ради акселераторов.
← →
Style © (2004-04-06 16:28) [123]уж, хотел было сказать что какие проблемы, сделай компонент с OnCreate :))
И понял, что на момент создания компонента, у него не будут еще присвоены свойства и собственно адрес на процедуру обработки события OnCreate..
← →
Юрий Зотов © (2004-04-06 16:31) [124]> nikkie © (06.04.04 16:26) [122]
Согласен.
← →
Юрий Зотов © (2004-04-06 16:34) [125]> Style © (06.04.04 16:28) [123]
Теперь оценили всю глубину и красоту вопроса?
:о)
← →
Style © (2004-04-06 16:51) [126]Юрий Зотов ©
точно :)
← →
Nous Mellon © (2004-04-06 16:52) [127]
> [125] Юрий Зотов © (06.04.04 16:34)
Я, честно признаюсь, при ответе на вопрос 1 использовал WinCalculator.
Просто совершенно забыл правила перевода с\с. Выходит претендент должен всегда помнить эти правила? Если так пойду повторять :) На будущее :)
А может здесь возможно решение проще вообще исключающее како-либо перевод?
← →
Тимохов © (2004-04-06 16:55) [128]Юрию Зотову.
Классынй тест, чесное слово.
Мне было он дал хорошее представление о будущем работнике...
← →
Vuk © (2004-04-06 17:04) [129]to Style © (06.04.04 16:28) [123]:
>уж, хотел было сказать что какие проблемы, сделай компонент с
>OnCreate :))
У TFrame можно сделать. Даже работать будет. Иногда. :o)
← →
Piter © (2004-04-06 18:57) [130]а можно я свое ламерство продемонстрирую. Сейчас читаю вопросы ЮЗ, дальше постов не читал, чем у вас там все закончилось не знаю (постов, видимо, много), но думаю сильно не помешаю. Отвечать буду прям по тексту...
1.1. Чему будет равно W после выполнения следующего кода 32-битным процессором семейства x86? Ответ объяснить.
type
PWord = ^word;
var
I: integer;
W: word;
begin
I := High(I) shr 8;
W := PWord(Integer(@I) + 2)^;
end;
итак,I := High(I) shr 8;
High(i) - это максимальное число, представимое Integer"ом. Вот проблема - я его не помню.
Это 4-х байтовое целое знаковое. Сейчас воспользуюсь калькулятором...
256^4=4294967296, всего может быть столько вариантов. Одно значение под ноль отводим.
Остается 4294967295 вариантов. Делим пополам = 2147483647,5
не делится. Но если не изменяет память, под минус на одно значение больше отводится. Тогда получается Integer это от -2147483648 до 2147483647
Соответственно, High(i) это 2147483647, если ничего не напутал.shr 8;
хм. Меня терзают смутные сомнения, что я зря вычислял максимальное значение Integer числом.
Идет сдвиг на 8 бит вправо.
High(I) это будет, наверное, в HEX виде 7F FF FF FF
Сдвигаем на 8 бит вправо... 00 7F FF FF
Не знаю сколько это будет в числовом виде. Попробуем работать так...
Значит, I=$007FFFFF после первой строчки.
@I - это адрес по которому расположен байт 00
Хотя нет, стоп... числа хранятся наоборот, значит @I указывает в памяти на последний байт FF.
Integer(@I) - адрес представляется в виде числа... блин... я уже путаюсь...
хм, вроде понятно зачем перевели в Integer, чтобы 2 прибавить. Соответственно
Integer(@I) + 2 - это адрес байта FF плюс еще два...
PWord(Integer(@I) + 2) - приводят к типу указателя на Word. Ну и так было указателем, наверное, ничего не изменится. Но адрес теперь +2.... эээ... значит теперь адрес указывает на байт ... черт.. в общем, в памяти хранится такое:
FF FF 7F 00 - и указатель ссылается на этот жирный 7F... вроде так. А теперь разыменовывают. Ага, но тип Word - двухбайтовый. Значит, берутся байты 7F 00, а теперь наоборот в виде числа 00 7F. Черт, а я не знаю сколько это будет, что-то у меня мозги совсем одурели.
В общем, если принимается, то мой ответ W=$007F
> Написать процедуру поиска в заданном каталоге и всех его подкаталогах всех файлов по маске A?.B*
ну там FindFirst, FindNext... но без справки я не помню... это мне кажется нечестно. В таких случаях в справку можно смотреть.
>3.1. В чем принципиальное различие между классами TLabel и TStaticText?
А я TStaticText не использую блин... судя по названию... наверное, нельзя менять его значение в Run-Time... Вот и отличие :)
Ну и TLabel не окно, и TStaticText, наверняка не окно... Оба не оконные комппоненты, значит. Произошли не от TWinContrlol...
черт знает чем они там принципиально отличаются
> 3.2. От какого класса наследуется класс TCollection и почему?
черт, по-моему в ТП это было... может, от класса, который позволяет в потоки сохранять свойства... или как-то так. В общем, не знаю :(
> 3.3. У каких компонентов есть событие OnCreate? Почему его нет у других компонентов?
Ну вот у формы есть... я думаю ответ на этот вопрос вытекает из вопроса "А зачем нужно событие OnCreate"... эх, не знаю
> .4. Написать модуль, содержащий класс, который позволяет создать только единственный экземпляр объекта этого класса
код писать не буду, не помню какие там параметры. Ну я думаю можно в конструкторе создавать мьютекс, если он уже существует - то в конструкторе возбуждать исключение, вот и все. А в деструкторе мьютекс закрывать. В общем, поступить как в случае, когда надо запускать только одну копию приложению.
Хотя может я задание неправильно понял...
> 4.1. Что такое объекты ядра? Перечислите несколько функций, в которых они используются.
Определение дать затрудняюсь. Ну вот эти мьютексы, семафоры, процессы, потоки являются объектами ядра.
ну и функцию соответствующие CreateProccess, CreateThread, TerminateProccess, CreateMutex и т.д.
> 4.3. Написать стандартный код цикла выборки сообщений
э-э-э... забыл, блин. Ну типа GetMessage, а потом не помню :(
> 4.4. Чем отличаются друг от друга функции SendMessage и PostMessage?
SendMessage посылает сообщение непосредственно оконной процедуре (через DispatchMessage что ли) и получает ответ. Ну а PostMessage просто кидает в очередь и тут же возвращает управление...
> 4.5. Как послать сообщение в безоконное приложение и как его там принять?
ух ты... а разве так можно... с другой стороны любое приложение будет иметь цикл выборки сообщений, на этом все и жиждится. Так и можно обрабатывать...
А вот как послать я не знаю Вроде SendMessage и PostMessage требуют handle окна...
> 4.6. Каково назначение функций GetStockObject и SelectObject? Нужно ли после их вызова вызывать функцию DeleteObject?
первый раз про такие функции слышу...
ДА.... в общем, я ламер, что и требовалось доказать... вот блин. Пойду читать остальные посты...
← →
Piter © (2004-04-06 19:22) [131]Ой, я забыл:
Юрий Зотов (06.04.04 03:01) [38]
4.2. Приводят ли вызовы функций LoadLibrary/FreeLibrary к загрузке/выгрузке DLL в/из ОЗУ?
если библиотеку больше никто не использует - то FreeLibrary приводит к выгрузке (это по вроде как по теории, на самом деле у меня твердая уверенность, что винда все там хитро кеширует, незря второй раз Дельфи грузится куда быстрее, чем первый)...
Ну а LoadLibrary приводит к загрузке библиотеки, если она еще на загружена другим процессом. Иначе просто проецируется на ВАП процесса...
← →
Тимохов © (2004-04-06 19:38) [132]Юрию Зотову.
Скажите, какой ответ вы бы хотели услышать на вопрос
"Напишите модуль, содержащий класс, который позволяет создать лишь один свой экземпляр."
Если я правильно понял вопрос решений то много...
Что вы считаете правильным?
← →
Игорь Шевченко © (2004-04-06 19:42) [133]
> Если я правильно понял вопрос решений то много...
Да вроде не очень много...
← →
Тимохов © (2004-04-06 19:46) [134]
> Игорь Шевченко © (06.04.04 19:42) [133]
Не понятно, что значит "позволяет": не дает делать вторую копию, или при создании второй копии подменяет ее первой.
Наверное, все-таки, первое. хотя не ясно.
От этого ответ зависит...
← →
Vuk © (2004-04-06 19:46) [135]to Тимохов © (06.04.04 19:38) [132]:
Не знаю, как Юрий, я обычно использую комбинацию близкую к той, что была здесь описана, с перекрытием метода NewInstance. В дополнение можно использовать специальную переменную экземпляра, которая нужна для того чтобы не допускать повторной инициализации в конструкторе. Ну и плюс можно добавить счетчик вызова NewInstance и, соответственно, уменьшение этого счетчика в FreeInstance. В принципе этот прием позволяет построить класс таким образом, чтобы клиент и не подозревал, что это синглетон.
← →
Piter © (2004-04-06 19:50) [136]А скажите комментария к моего ответу... а?! Нет, ну я понимаю, что ламер, но у меня есть хоть какие-нибудь шансы... черт побери
хоть на $300 я смогу устроиться в Москве.....
← →
Тимохов © (2004-04-06 19:52) [137]Зная хорошее знание Юрия потоков можно предположить, что он ожидает здесь потокобезопасную работу...
Я бы тоже делал через newinstence
Если нужно делать отлуп (т.е. не давать создавать вторую копию) то можно его делать и в конструкторе...
Я сам переодически с людьми беседую. Очень стало интересно, какие Юрий делает выводы из ответов на этот вопрос.
← →
Style © (2004-04-06 19:54) [138]>>Да вроде не очень много...
А мне кажеться можно столько напридумывать :)
например файл на диске С создать а в нем processid :0)
или в реестре сохранить информацию :)
Фантазируй как хош :)
← →
Юрий Зотов © (2004-04-06 19:56) [139]> Тимохов © (06.04.04 19:38) [132]
> какой ответ вы бы хотели услышать
Ну уж не через объект ядра, конечно - это уже стрельба из пушки по воробьям. IMHO, точнее всего условию задачи отвечает замещение NewInsance и FreeInstance с глобальной переменной в implementation.
← →
Vuk © (2004-04-06 19:56) [140]Если волнует потокобезопасность, то реальное создание экземпляра достаточно завернуть в критическую секцию...
← →
Тимохов © (2004-04-06 20:00) [141]
> Если волнует потокобезопасность, то реальное создание экземпляра
> достаточно завернуть в критическую секцию...
с этим никто не спорит.
У меня сложилось ощущение, что Юрий дает этот вопрос, не для того, чтобы получить конкретный ответ, а чтобы покопаться в знаниях будущего работника.
Хороший вопрос, говорит о знании ОПП в дельфи.
← →
Vuk © (2004-04-06 20:03) [142]to Тимохов © (06.04.04 20:00) [141]:
>Хороший вопрос, говорит о знании ОПП в дельфи.
Скорее о знании работы RTL.
← →
Тимохов © (2004-04-06 20:04) [143]
> Vuk © (06.04.04 20:03) [142]
У меня всегда были проблемой с терминами...
Согласен.
← →
Тимохов © (2004-04-06 20:06) [144]
> Piter © (06.04.04 19:50) [136]
меньше верьте тестам, больше в себя.
На денфи 300 очень сложно получать - такие работники просто никому не нужны - мы не настолько богаты, чтобы покупать дешевые вещи...
← →
Style © (2004-04-06 20:06) [145]
> Vuk © (06.04.04 17:04) [129]
> to Style © (06.04.04 16:28) [123]:
> >уж, хотел было сказать что какие проблемы, сделай компонент
> с
> >OnCreate :))
> У TFrame можно сделать. Даже работать будет. Иногда. :o)
Ну уж если очень захотеть можно в космос полететь )
А вообще можно и для наследника Panel сделать что то вроде OnCreate;
Ну предположим есть форма
type
TForm1 = class(TForm)
MyPanel1: TMyPanel;
procedure OnPanelCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
ну типа можно и компонент создать
TMyPanel = class(TPanel)
private
FOnCreate: TNotifyEvent;
public
constructor Create(AOwner: TComponent); override;
end;
constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if(integer(AOwner.MethodAddress("OnPanelCreate")) <> 0) then
@FOnCreate := AOwner.MethodAddress("OnPanelCreate");
if(Assign(FOnCreate)) then FOnCreate(Self);
end;
← →
Vuk © (2004-04-06 20:11) [146]to Style © (06.04.04 20:06) [145]:
Угу, а если захочется обработчик с другим имененм или на фрейм такой компонент сложить - все, кирдык. :o)
← →
Style © (2004-04-06 20:17) [147]Ну главное идея Ж8-)
Там уже можно что-нить еще придумать :) Может ресурсы покопать или еще чего :)
Сделать так чтобы имя обработчика бралось из ресурсов 8-)
Заодно плагин к Delphi написать чтобы это описание ввиде текста добавлялось к ресурсам самого EXE файла..
Я вот только не понял почему с фреймом не получится, у него что published свойств нет чтоли? :)))
← →
Suntechnic © (2004-04-06 20:19) [148]Тимохов © (06.04.04 20:00) [141]
У меня сложилось ощущение, что Юрий дает этот вопрос, не для того, чтобы получить конкретный ответ, а чтобы покопаться в знаниях будущего работника.
Хороший вопрос, говорит о знании ОПП в дельфи.
Это типичный вопрос практичеки любого интервью при приёме на работу программиста (неважно Delphi, C++ или С#). Это вопрос на знание патернов (Singleton pattern в данном конкретном случае). И если бы мне на такой вопрос ответили бы "какой ответ вы бы хотели услышать", то я бы сильно засомневался в опыте отвечающего как программиста.
← →
Piter © (2004-04-06 20:24) [149]
1.1.
High(I) = $7FFF FFFF
High(I) shr 8 = $007F FFFF
Ответ: $007F
как-то народ резво делает слишком. Имхо, самая проблема не в строчке High(I) shr 8. Это достаточно легко.
А вся проблема в смещении адреса + приведение к Word. А народ как-то этот этап пропускает, типа это очевидно и выдает ответ...
я не хочу никого обвинять, но кажется, что некоторые сначала получают ответ, а потом под него теорию подгоняют...
Да и в Help нет, нет, да заглянут... Помнить такие вещи наизусть - ну я просто завидую такой вместительной голове
← →
Vuk © (2004-04-06 20:25) [150]to Style © (06.04.04 20:17) [147]:
>Ну главное идея Ж8-)
У меня получше есть. Можно сделать обработчик OnLoaded. Везде будет работать. :o)
>Я вот только не понял почему с фреймом не получится, у него что
>published свойств нет чтоли? :)))
Есть, но у него владелец обработчика может не быть владельцем компонента.
← →
Игорь Шевченко © (2004-04-06 20:31) [151]Piter © (06.04.04 20:24)
Так вроде же написано: вопрос на знание в том числе и платформы x86. Как там байты с битами устроены. Очень хороший вопрос, кстати, я бы при желании такого компактного не придумал. Равно как и вопрос про OnCreate
← →
Piter © (2004-04-06 20:33) [152]Тимохов (06.04.04 20:06) [144]
На денфи 300 очень сложно получать - такие работники просто никому не нужны
да я слышал в некоторых новичкам и $100 платят... блин, нет, ну вы уже устроились, а что делать таким как я?! Нет опыта - никто не берет и возможностей нет. Попадаешь в левую фирму, где нелья поработать с хорошими людьми и набраться опыта. И что делать? эх...
← →
Piter © (2004-04-06 20:35) [153]Игорь Шевченко (06.04.04 20:31) [151]
Так вроде же написано: вопрос на знание в том числе и платформы x86
я не спорю - написано. Просто люди, когда объясняют, подробно расписывают вещи попроще, и совершенно не объясняют сложные вещи. Ведь строка PWord(Integer(@I) + 2)^;
сложнее, имхо, для понимания, чем
I := High(I) shr 8;
которую уже многие объяснили. А вот PWord(Integer(@I) + 2)^; просто ответ выдают, типа тут элементарнейшие вещи написаны, само собой разумеющееся
← →
Юрий Зотов © (2004-04-06 20:40) [154]> Piter © (06.04.04 19:50) [136]
> А скажите комментария к моего ответу... а?!
1.1 + (все очень четко, только на фига было с DEC мучиться)
2.1 - (скелет можно написать и без справки, это оговаривалось)
3.1 - (просто неверно)
3.2 * (ответ неполный)
3.3 - (практически не отвечено)
3.4 - (нет кода)
4.1 + (с небольшой натяжкой)
4.2 +
4.3 - (нет кода)
4.4 +
4.5 * (не сказано, как послать)
4.6 - (нет ответа)
Итого - примерно 5 очков из 12 (если звездочку считать за полбалла). Это неплохой результат. А на реальном собеседовании он, похоже, был бы повыше.
> Нет, ну я понимаю, что ламер,
Во-первых, Вы не ламер. Во-вторых, ламер, который понимает, что он ламер - он уже не ламер по определению. :о)
> хоть на $300 я смогу устроиться в Москве.
IMHO, без проблем. Но ведь Вы еще учитесь, а как же совмещать?
← →
Style © (2004-04-06 20:41) [155]2Vuk
Ну речь же шла об OnCreate :)
>>Есть, но у него владелец обработчика может не быть владельцем компонента.
т.е. владельцем может стать форма?
А на счет обработчика OnLoaded можно подробнее?
procedure TComponent.Loaded; virtual;
это Loaded нужно использовать??
← →
Verg © (2004-04-06 20:41) [156]function PiG( A, B : pointer ) : boolean;
begin
result := A > B;
end;
Как сделать, чтоб работало? :))
← →
Style © (2004-04-06 20:56) [157]Verg ©
function PiG( A, B : pointer ) : boolean;
begin
result := boolean(integer(A) > integer(B));
end;
← →
Verg © (2004-04-06 20:58) [158]
> Style © (06.04.04 20:56) [157]
Зачем boolean()?
Ладно, подождем еще вариантов :))
← →
Style © (2004-04-06 21:09) [159]2Verg
сам не знаю зачем )
Я даже не проверял :))
Да, хотя щас проверил все работает..
Pig(pointer(10), pointer(20)) = true;
result := integer(A) < integer(B);
хотя адрес в 4-х байтах может быть больше чем 7FFFFFFF
и тогда условие будет не верно, но можно попробовать использовать Cardinal
Pig(pointer(10), pointer($FFFFFFFF)) = true;
короче с integer такое будет работать не правильно
А вот так все рулит:
result := Cardinal(a) < Cardinal (B);
← →
panov © (2004-04-06 21:13) [160]>Verg © (06.04.04 20:58) [158]
-)
Самый простой способ:function PiG( A, B : PChar ) : boolean;
begin
result := boolean(integer(A) > integer(B));
end;
Страницы: 1 2 3 4 5 6 7 8 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.84 MB
Время: 0.07 c