Тестовые вопросы для программистов

1 23
vbgm
На сайте с 26.03.2009
Offline
164
#21

типатаво )


; --------------------------------------------------------------
; Прототипы процедур
;---------------------------------------------------------------
WinMain Proto :DWORD, :DWORD, :DWORD, :DWORD
AddLog Proto :DWORD
AddNumberInLog Proto :DWORD
CloseResouses Proto
CreateLog Proto :DWORD
CreateScene Proto
DestroyDirect3D Proto
GetCurrentTime Proto
InitDirect3D Proto
InitFont Proto :DWORD
InitRender Proto
LdCoreCfgFile Proto
LdLogMesFile Proto
LogOutInFile Proto
LogOutInText Proto
RenderScene Proto
SetupCore Proto

; #############################################################################
RGB macro red, green, blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm

; #############################################################################
SYSTEMTIME STRUCT
wYear WORD ?
wMonth WORD ?
wDayOfWeek WORD ?
wDay WORD ?
wHour WORD ?
wMinute WORD ?
wSecond WORD ?
wMilliseconds WORD ?
SYSTEMTIME ENDS

; #############################################################################
.CONST
RoutStart EQU 0 ; Старт игры
RoutMainMenu EQU 1 ; В главном меню
RoutLoading EQU 2 ; Загрузка игры
RoutSerfing EQU 3 ; Передвижение по карте
RoutInventory EQU 4 ; В инвентаре
RoutPDA EQU 5 ; Находимся в ПДА
RoutDialog EQU 6 ; В режиме диалога
; ------------------------------------------------------------------------
; Система вывода логов
; ------------------------------------------------------------------------
NoLogs EQU 0 ; Нет прохода к выводу логов
LogCreate EQU 00000001b ; Создание лога
LogOutText EQU 00000010b ; Вывод лога на экран
LogOutBoth EQU 00000011b ; Вывод лога туда-сюда
; ------------------------------------------------------------------------
; Константы сообщений логов
; ------------------------------------------------------------------------
OK EQU 0
ERROR EQU 1
EXIT EQU 2
LOG_RADIUM_START EQU 3
LOG_CORE_SETUP EQU 4
LOG_CORE_CFG_LOADING EQU 5
LOG_CORE_CFG_OPEN EQU 6
LOG_CORE_CFG_ERROR EQU 7
LOG_HEAPALLOC_OK EQU 8
LOG_HEAPALLOC_ERROR EQU 9
LOG_CORE_CFG_READ EQU 10
LOG_CORE_CFG_READ_ERROR EQU 11
LOG_CORE_CFG_INDEXED EQU 12
LOG_BYTES_STORED EQU 13
; #############################################################################
.DATA
ClassName DB "R3DEClass", NULL ; Имя класса окна
szAppName DB "Radium 3D Engine V1.05", NULL ; Титл окна
WinX DD ? ; Ширина окна
WinY DD ? ; Высота окна

Clearcolor DD 0
Zvalue DD 1.0f
; ------------------------------------------------------------------------
; Система вывода логов
; ------------------------------------------------------------------------
LogLength DD 160 ; Максимальная длина строки
BufferLogs DD ? ; Адрес буфера строк для логов
OffsetBuffer DD ? ; Смещение на адрес на текущую строку лога
OffsetBufferTime DD ? ; Смещение на адрес первого ->
; -> символа после даты\времени
LogColor DD 0F0B0F0F0h ; Цвет шрифта логов
CurrentProcNumber DD ? ; Текущая процедура для логов
; ------------------------------------------------------------------------
; Числовые форматы для wsprintf
; ------------------------------------------------------------------------
DefaultFormat DB "%d ", 0
DigitSFormat DB "%d ", 0 ; Формат для простого числа
Digit3Format DB "%03d", " - #", 0 ; Формат для миллисекунд
DigitProcFormat DB "%08X", " - " ; Формат для номера процедуры
NumberString DB 20 DUP (0) ; Буфер для даты\времени
; ------------------------------------------------------------------------
; D3DPRESENT_PARAMETERS
; ------------------------------------------------------------------------
BackBufferWidth DD 0 ; Ширина BackBuffer
BackBufferHeight DD 0 ; Высота BackBuffer
BackBufferFormat DD D3DFMT_X8R8G8B8 ; Формат используемой поверхности
BackBufferCount DD 3 ; число Back буферов.
MultiSampleType DD 0 ; уровни мультисэмплинга картинки. (обычно от 2-ух и выше)
MultiSampleQuality DD 0 ;
SwapEffect DD D3DSWAPEFFECT_FLIP ; Эффект обмена поверхностей (BackBuffer)
hDeviceWindow DD 0 ; ID нашего окошка
Windowed DD 0 ; 0 - полноэкранный, 1 - в окошке
EnableAutoDepthStencil DD TRUE ; 1 - Direct3D создает Z + Stencil буфер. Если 0 - ничего не будет создано
AutoDepthStencilFormat DD D3DFMT_D24S8 ; Формат используемой поверхности
Flags DD 0 ; 0 или D3DPRESENTFLAG_LOCKABLE_BACKBUFFER=1
FullScreen_RefreshRateInHz DD 0 ; Частота обновления экрана в Hz
FullScreen_PresentationInterval DD 0 ; Интервал показа на экране backbufferа. 1 = Ждать обратного хода луча

EyeVector D3DVECTOR <0.0f, 3.7f, -9.35f> ; Координаты камеры в пространстве
LookAtVector D3DVECTOR <0.0f,6.0f, 0.0f> ; Указывает куда смотрит камера
UpVector D3DVECTOR <0.0f, 1.0f, -0.0f> ; Верх камеры. Обычно берется 0.0,1.0,0.0

FieldOfView DD 1.7953981635f ; D3DX_PI4 ;0.7853981635f. Поле обзора камеры в радианах обычно берется (D3DX_PI/4)
AspectRatio DD NULL ; AspectRatio
NearViewPlanZ DD 1.0f ; Передняя отсекающая плоскость
FarViewPlanZ DD 100.0f ; Задняя отсекающая плоскость
; ------------------------------------------------------------------------
; LOGFONT - Параметры шрифта
; ------------------------------------------------------------------------
lfHeight DD 0 ; Размер
lfWidth DD 0 ;
lfEscapement DD 1 ;
lfOrientation DD 0 ;
lfWeight DD 0 ;
lfItalic DB 1 ; Кириллица поддерживается здесь
lfUnderline DB 0 ;
lfStrikeOut DB 0 ;
lfCharSet DB ANSI_CHARSET ; Кодировка по умолчанию
lfOutPrecision DB 0 ;
lfClipPrecision DB 0 ;
lfQuality DB 1 ;
lfPitchAndFamily DB 0 ;
lfFontName DB "tahoma", 0 ; Имя шрифта
; ------------------------------------------------------------------------
; Секция имен файлов
; ------------------------------------------------------------------------
nLogMessagesFile DB "config\log.msgs", NULL
nLogFile DB "log.txt", NULL
nCoreCfgFile DB "config\core.cfg", NULL

; #############################################################################
.DATA?
pd3d DD ? ; или LPDIRECT3D9
pd3dDevice DD ? ; или LPDIRECT3DDEVICE9

WorldMatrix D3DMATRIX <?> ; Мировая матрица
ViewMatrix D3DMATRIX <?> ; Матрица вида
ProjectionMatrix D3DMATRIX <?> ; Матрица проекции

pd3dFont DD ? ; Указатель на шрифт

TextLeftSet DD ? ; Установка для вывода текста
TextUpSet DD ? ; -

TextLeft DD ? ; Прямоугольник для вывода текста
TextUp DD ? ; -
TextRight DD ? ; -
TextBottom DD ? ; -

StringHeight DD ? ; Высота строки на экране
; ------------------------------------------------------------------------
; Состояние игры
; ------------------------------------------------------------------------
; 0 - Старт
; 1 - Главное меню
; 2 - Загрузка
; 3 - Передвижение по территории
; 4 - Инвентарь
; 5 - ПДА (карта, задания, статистика)
; 6 - Диалоги
; ------------------------------------------------------------------------
CurrentGameRoutine DD ?
; ------------------------------------------------------------------------

; ########################################################################
; Все коды ошибок в EBX. В EAX -
; 0 - Нет ошибок
; 1 - Ошибка создания D3DX9
; 2 - Ошибка создания устройства D3DX9
; 3 - Ошибка создания шрифта
;

Пришлось чуть урезать...

Памятники из мрамора и гранита (http://pamyat59.ru) Охота на медведя на овсах (http://ohota59.ru)
edogs software
На сайте с 15.12.2005
Offline
775
#22
Artisan:
Комментарии описывают простые действия,
без пояснения зачем нужны эти действия.

Т.е. так a=a+1; // добавляем к a единичку

а не так b=b+2; // что бы увеличить скорость на 2

Уверены?

vbgm:
Спасибо!
1. Что есть K&R?

http://en.wikipedia.org/wiki/Indent_style#K.26R_style

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Artisan
На сайте с 04.03.2005
Offline
352
#23
vbgm:
Спасибо!

1. Что есть K&R?

2. Это не инлайн процедура в сикоде. Это одна из асм-процедур в асм-программе. Весь движок будет на асме.
Там пока 30Кб кода и еще 12Кб в inc-файле всяческих прототипов, макросов, констант, структур и т.д.

3. У меня все предусмотрено. В читаемых файлах последняя строка неудаляемая.

4. Нельзя. В eax содержится код ошибки последней выполненной функции для выходного лога. GetLastError - не вариант.

1.

http://en.wikipedia.org/wiki/The_C_Programming_Language

The C Programming Language (sometimes referred to as K&R, after its authors' initials) is a well-known computer programming book written by Brian Kernighan and Dennis Ritchie, the latter of whom originally designed and implemented the language, as well as co-designed the Unix operating system with which development of the language was closely intertwined. The book was central to the development and popularization of the C programming language and is still widely read and used today. Because the book was co-authored by the original language designer, and because the first edition of the book served for many years as the de facto standard for the language, the book was regarded by many to be the authoritative reference on C.

http://ru.wikipedia.org/wiki/Язык_программирования_Си_(книга)

«Язык программирования Си» (англ. The C Programming Language, также известная как K&R) — книга Брайана Кернигана и Денниса Ритчи, причём последний — один из непосредственных авторов и разработчиков языка Си. Книга стала основой для разработки и популяризации Си, до сих пор имеет спрос[1] и широко используется в качестве «классического» учебника по языку. Она долгое время была единственным справочным руководством и де-факто — стандартом языка.

2. Проще все на C наваять, и будет

лучше читаемость и переносимость.

3. Кто-нибудь "умный" сделает

последнюю строку без LF знака.

4. eax обычно используют для

крайнего кода, а тащить код из

глубины лучше в других регистрах.

Сами потом запутаетесь.

edogs:
Т.е. так a=a+1; // добавляем к a единичку
а не так b=b+2; // что бы увеличить скорость на 2
Уверены?

Автор хотел критику, я ему

написал, что мне не нравится.

; Умножаем на 8 байт (2 по 4)

Вместо того, чтобы написать,

что готовим место для указателя

и длины для каждой строки.

www.leak.info / ДАРОМ линки конкурентов и забытых доменов
edogs software
На сайте с 15.12.2005
Offline
775
#24
Artisan:
Автор хотел критику, я ему
написал, что мне не нравится.

; Умножаем на 8 байт (2 по 4)

Вместо того, чтобы написать,
что готовим место для указателя
и длины для каждой строки.

Спасибо что пояснили, а то поначалу Вас поняли полностью наоборот (что Вы советуете, а не критикуете) и сильно удивились:)

Кстати, если решать ТУ задачу в лоб, то мы бы назвали компромиссом

if(x=220 || x=0) x^=220; else {и вот тут по желанию или ничего или эксепшен}

Ибо если значения не предусмотренные ТЗ, то мы их как минимум не будем менять их - делая их неопределенными по сути, а как максимум предупредим о проблеме.

Нашли заодно свой тест для php-шников, который еще больше 10 лет назад использовали (так что делаем поправку на реалии тех лет) http://abazaba.ru/temp/test.zip . В начале в комментах небольшая "легенда". Так вот проблема в том, что даже на 90% его не выполняли 90% пхп-шников, при этом не было ни одного оценивающего свой уровень ниже 8 баллов... как-то так.

Надо будет стряхнуть с него пыль и еще раз где-нибудь на фрилансе запулить, посмотреть изменилось ли что-то за 10 лет с лишним:)

Artisan
На сайте с 04.03.2005
Offline
352
#25
edogs:
Спасибо что пояснили, а то поначалу Вас поняли полностью наоборот
(что Вы советуете, а не критикуете) и сильно удивились:)

В советах есть слова надо,

лучше, и другие типа таких.

edogs:
Кстати, если решать ТУ задачу в лоб, то мы бы назвали компромиссом
if(x=220 || x=0) x^=220; else {и вот тут по желанию или ничего или эксепшен}
Ибо если значения не предусмотренные ТЗ, то мы их как минимум не будем менять
их - делая их неопределенными по сути, а как максимум предупредим о проблеме.

Я предпочитаю писать

проще по возможности.

Если задача кривая, то

лучше уточнить задачу,

чем писать кривизну.

edogs:
Нашли заодно свой тест для php-шников, который еще больше 10 лет назад использовали (так что делаем поправку на реалии тех лет) http://abazaba.ru/temp/test.zip . В начале в комментах небольшая "легенда". Так вот проблема в том, что даже на 90% его не выполняли 90% пхп-шников, при этом не было ни одного оценивающего свой уровень ниже 8 баллов... как-то так. Надо будет стряхнуть с него пыль и еще раз где-нибудь на фрилансе запулить, посмотреть изменилось ли что-то за 10 лет с лишним:)

/* Скрипт брошен слегка недоделанным

предыдущим программистом, является частью

бОльшей системы, но сам по себе независим.

логин пользователя на входе в скрипт

передается в печеньях в переменной user_login

md5 хэш пароля хранится в печеньях

в переменной user_pwd */

Я бы ответил, что хранить plain text пароли

на сервере опасно, в прянике для сеанса надо

хранить не md5 пароля, а случайную строку,

которая генерится при начале сеанса,

и нет времени на такие тесты.

vbgm
На сайте с 26.03.2009
Offline
164
#26

Ладно, херли тут строить из себя крутых программистов... 🤣

Artisan, постараемся не запутатся.

Вот, собсно, сам проект.

_
На сайте с 24.03.2008
Offline
381
#27
Flector:
в реальной задаче я бы проверял любые значения напряжения.
у меня сейчас ИБП питания показывает входящее 215в.

В реальной задаче надо проверять не любые, а в коридорах определенных ГОСТом.

Коммутация оборудования на 220V "триггером" при наличии в сети 400+V (а так бывает) - это

в общем-то крупная катастрофа.

Соискатель, который ткнул бы меня в это носом без сомнения заработал бы немало баллов.

---------- Добавлено 16.03.2015 в 18:30 ----------

ЗЫ. И да, в свой время в тесте по С был клёвый вопрос

Что будет результатом (дальше шло чумовейшее выражение со сдвигами итп) и место куда вписать ответ.

Правильным ответом было: Немедленное увольнение. Но некоторые пытались вычислять.

Тут вопрос кто нужен - кодер, те да, пусть вычисляют. Разработчики не должны вычислять фигню,

они должны сделать так, чтобы её не было :)

Artisan
На сайте с 04.03.2005
Offline
352
#28
_SP_:
В реальной задаче надо проверять не любые, а в коридорах определенных ГОСТом. Коммутация оборудования на 220V "триггером" при наличии в сети 400+V (а так бывает) - это в общем-то крупная катастрофа. Соискатель, который ткнул бы меня в это носом без сомнения заработал бы немало баллов.

Катастрофа с жертвами,

а без жертв только авария.

Про жертвы я уже написал выше, если

вдруг появится 220 Вольт вместо нуля.

Для точного оборудования даже

~ 1 % может привести к авариям.

Ограничивать напряжение в

рабочих пределах должно железо,

а программа должна делать то, что

она может делать лучше железа.

Для этого есть молниеотводы,

заземление, плавкие предохранители,

автоматические выключатели,

и дальше по списку.

Если хозяин воткнул гаечный

ключ на место предохранителя,

сгорел АЦП, и отдает программе

нули, то программист уже

ничем не поможет.

Не надо плодить

лишние сущности.

_SP_:
ЗЫ. И да, в свой время в тесте по С был клёвый вопрос. Что будет результатом (дальше шло чумовейшее выражение со сдвигами итп) и место куда вписать ответ. Правильным ответом было: Немедленное увольнение. Но некоторые пытались вычислять. Тут вопрос кто нужен - кодер, те да, пусть вычисляют. Разработчики не должны вычислять фигню, они должны сделать так, чтобы её не было :)

Правильно, читайте пункт первый

выше про 400 Вольт напряжение.

Я уже писал выше, что лучше уточнить

кривую задачу, чем писать кривизну.

Не надо плодить

лишние сущности.

W
На сайте с 04.04.2006
Offline
276
#29

Очень интересно, не ожидал что в теме ваще что-то будет. Ранее создавал похожую тему на форуме программистов, отзыва по существу практически не было.

Вот может кому-то будет интересно, общие моменты подбора кандидата на работу

http://local.joelonsoftware.com/wiki/%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D1%8C%D1%8E

ТОП3 Яндекса за 1-2 дня - это реально. Без роботности.
87793
На сайте с 12.09.2009
Offline
661
#30
edogs:
Надо будет стряхнуть с него пыль и еще раз где-нибудь на фрилансе запулить, посмотреть изменилось ли что-то за 10 лет с лишним:)

Было бы очень хорошо, если б Вы тут ещё о результатах тут отписались бы.

Наше дело правое - не мешать левому!
1 23

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий