Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.06 c
7-1078936426
HepB
2004-03-10 19:33
2004.05.02
Проблема с ini-файлом


7-1078989964
Richo
2004-03-11 10:26
2004.05.02
звонилка


14-1081437031
E1
2004-04-08 19:10
2004.05.02
интересный IRC бот :)


1-1082035946
siriusP
2004-04-15 17:32
2004.05.02
Масштабирование Canvas при печати.


14-1081343604
geg
2004-04-07 17:13
2004.05.02
Помогите найти работу в Питере





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский