-
Тут народ несколько раз интересовался, есть ли где в интернете тесты, по которым можно оценить своё знание Delphi. Теперь есть :) В честь случившегося недавно 10-летнего юбилея Королевства Delphi открылся раздел "Квинтана", содержащий такие тесты. Кому интересно, заходите. http://www.delphikingdom.com/quintana/
-
Надеюсь, там в вопросах нет двусмысленности из-за которой люди даже отлично знающие предмет иногда тесты не проходят.
-
> DVM © (23.11.08 17:42) [1]
Мы старались без двусмысенностей. Судя по тому, что пока была только одна жалоба такого рода на один вопрос, да и та спорная, в целом это удалось. По крайней мере, специально подлавливать на неточных формулировках мы не стремились.
Цель этих тестов несколько другая. Там к каждому вопросу прилагается комментарий, который становится виден только после прохождения теста. Если человек ответил неправильно, он сразу поймёт, в чём именно он ошибся, а в такой ситуации это объяснение запоминается гораздо лучше, чем если просто дать человеку прочитать теорию. Так что главная цель этого теста - чтобы если не с первого, то со второго раза человек не только правильно ответил на все вопросы, но и мог обосновать каждый ответ.
Ну, а если где-то найдёте двусмысленность, неточность, ошибку и т.п., пишите, поправим.
-
> Григорьев Антон © (23.11.08 19:23) [2]
там есть вопрос в классах такой, на котором я задумался:
Есть переменная Obj: TSomeClass. Каким условием можно проверить, ссылается ли Obj на какой-то объект или нет? Варианты ответов: 1) if Obj <> nil then ... 2) if Assigned(Obj) then ... 3) if obj <> Null then ... 4) Это невозможно проверить
Ответ я конечно знал заранее (к тому же 1) и 2) почти одно и тоже, а выбран может быть только один, так что они отпадают оба), но задумался все же, а так ли однозначно можно сказать, что 4) правильный ответ.
Ведь можно определить, что переменная НЕ ссылается на какой либо объект.
-
> если где-то найдёте двусмысленность, неточность, ошибку > и т.п.
"Использование DLL" Вопрос №1
Нет безусловно верного ответа.
Ответы "Ошибок нет" и "В списке импортируемых модулей отсутствует ShareMem" верны (равно как и не верны) лишь условно.
-
> DVM © (23.11.08 19:35) [3]
> Ведь можно определить, что переменная НЕ ссылается на какой > либо объект.
Можно определить, что переменная ссылается на какое-то место в памяти, п объект-ли это и уж тем более того-же конкретного класса, в общем случае, не возможно...
По сабжу: прошел пока только первый тест - 9 из 13... Расстроился... :-(
-
> в общем случае, не возможно...
Ну да, именно в общем случае. В частном же возможно. Наверное так стоит написать:
4) Это в общем случае невозможно проверить.
-
> DVM © (23.11.08 19:51) [6] > Наверное так стоит написать: > > 4) Это в общем случае невозможно проверить.
Принято, сейчас исправлю.
> Сергей М. © (23.11.08 19:42) [4] > Ответы "Ошибок нет" и "В списке импортируемых модулей отсутствует > ShareMem" верны (равно как и не верны) лишь условно.
Что-то не понял, в чём условность. Если в параметрах есть string'и, в uses должен быть ShareMem или его аналог. Вы имели ввиду добавку про аналог? Или то, что string - это может быть ShortString?
-
Неплохо бы явно указать кодировку страницы UTF-8. Иначе IE при автомате неверно отображает
-
Хех. На 7 вопросе в разделе классы я попался. Хороший вопрос. Вопрос №7
Что произойдёт при выполнении следующего кода?
type
TSomeClass = class
public
procedure ShowMsg;
end;
procedure TSomeClass.ShowMsg;
begin
ShowMessage('Это метод TSomeClass.ShowMsg');
end;
...
var
Obj: TSomeClass;
begin
Obj.ShowMsg;
...
end;
-
> blackman © (23.11.08 20:08) [8] > Неплохо бы явно указать кодировку страницы UTF-8. Иначе > IE при автомате неверно отображает
Странно... Заходил с разных машин, везде IE, и нигде проблем с кодировкой не видел. Правда, IE везде 6-ой, 7-ой я не тестировал. У вас какая версия?
-
> Григорьев Антон ©
На мой взгляд спорный верный ответ в 6 вопросе в разделе Потоки.
Вопрос №6 Метод Execute класса TSomeThread, унаследованного от TThread, содержит не имеющий параметров метод DoSomething, а метод Execute у него реализован следующим образом
procedure TSomeThread.Execute; begin while not Terminated do Synchronize(DoSomething); end;
Содержит ли этот код ошибки, и если да, то какие? Варианты ответов: 1) Код не содержит ошибок 2) Код не содержит формальных ошибок, но смысла не имеет 3) Прототип метода DoSomething не подходит для передачи в Synchronize 4) В методе Execute отсутствует вызов метода Execute предка
Вообще говоря, код ошибок не содержит. А имеет ли он смысл или не имеет - об этом можно сказать, если знать что внутри метода DoSomething. Может там как раз обновление интерфейса? В вопросе же не указано что там! Надо либо привести реализацию DoSomething, либо верный ответ - 1)
-
Григорьев Антон © (23.11.08 20:21) [10] 7. Но думаю, что не в этом дело. Не могу посмотреть код вашей страницы http://www.delphikingdom.com/quintana/quintana.aspЕсть ли там строка <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> Если нет и в IE установлено Кодировка=Автовыбор, отбражаться будет крякозябрами
-
> DVM © (23.11.08 20:19) [9]
тест не читал, но на первый взгляд AV :)
-
> Но думаю, что не в этом дело. Не могу посмотреть код вашей > страницы > http://www.delphikingdom.com/quintana/quintana.asp > Есть ли там строка > <meta http-equiv="Content-Type" content="text/html; charset=utf- > 8"> > Если нет и в IE установлено Кодировка=Автовыбор, отбражаться > будет крякозябрами >
ИЕ очень нервничает из-за хедеров - либо их неправильного составления, либо несоответствия кодировки хедера и в тегах. В данном случае в хедерах неверный формат (указан только тип документа, без CP)
-
> antonn © (23.11.08 20:40) [13]
> тест не читал, но на первый взгляд AV :)
Я тоже так решил, не подумав. Потом проверил. Все будет работать. О как.
-
> DVM © (23.11.08 20:36) [11] > Вообще говоря, код ошибок не содержит. А имеет ли он смысл > или не имеет - об этом можно сказать, если знать что внутри > метода DoSomething. Может там как раз обновление интерфейса? > В вопросе же не указано что там! Надо либо привести реализацию > DoSomething, либо верный ответ - 1)
По этому поводу категорически не согласен. Такая реализация Execute не имеет смысла независимо от того, что содержится в DoSomething. В комментарии к вопросу я это специально написал:
Таким образом, при данной реализации нить TSomeThread не делает никаких действий, кроме подачи сигналов главной нити и ожидания выполнения ею метода DoSomthing, т.е. никакого распараллеливания не происходит, и всю работу выполняет главная нить. Поэтому приведённый здесь код формально правильный, но смысла не имеет.
Я утверждаю, что такая реализация Execute только нагружает процессор бесполезной работой по переключению нитей и не даёт никакого выигрыша. Если вы с этим не согласны, прошу привести такой пример реализации DoSomething, когда это имеет смысл.
-
> Григорьев Антон © (23.11.08 20:48) [16]
Хотя, вы правы. Такую странную конструкцию никому в голову использовать не придет. Я почему то думая над вопросом, представлял себе что-то вроде такого:
procedure TSomeThread.Execute; begin while not Terminated do begin .... Synchronize(DoSomething); .... end; end;
-
> Григорьев Антон © (23.11.08 20:48) [16]
Но все же вот такая конструкция работоспособна и смысл иметь может: unit Unit2;
interface
uses
Windows, Classes, SysUtils;
type
TSomeThread = class(TThread)
private
protected
procedure Execute; override;
procedure DoSomething;
procedure Synchronize(Method: TThreadMethod); overload;
end;
implementation
uses
Unit1;
procedure TSomeThread.Synchronize(Method: TThreadMethod);
begin
sleep(10);
inherited Synchronize(Method);
end;
procedure TSomeThread.DoSomething;
begin
Form1.Label1.Caption := inttostr(GetCurrentThreadID) end;
procedure TSomeThread.Execute;
begin
while not Terminated do
begin
Synchronize(DoSomething);
end;
end;
end.
-
> DVM © (23.11.08 21:00) [17] > Такую странную конструкцию никому в голову > использовать не придет.
Тут вы, к сожалению, опять не правы. Придёт в голову не только использовать, но и другим советовать. В книге Архангельского "Программирование в Delphi 6" такой совет приводится. Вот, Игорь Шевченко об этой книге писал здесь: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1082Так что этот код не с потолка взят, он реально в вопросах на форумах встречается.
|