Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Как определить чего ты стоишь как программист.   Найти похожие ветки 

 
Матлабист   (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;
Скачать: CL | DM;

Наверх




Память: 0.85 MB
Время: 0.055 c
6-1078530063
teapot
2004-03-06 02:41
2004.05.02
как перенаправлять сетевой трафик на Делфи?


1-1082109537
defen
2004-04-16 13:58
2004.05.02
Редактирование файлов


3-1081414223
Аноним
2004-04-08 12:50
2004.05.02
MSAccess + TStream


1-1081856040
Olegka
2004-04-13 15:34
2004.05.02
Объединение ячеек в StringGrid


14-1081878366
Ig
2004-04-13 21:46
2004.05.02
Создание компонент в Delphi !?