Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Обсуждение работ > Не сайты

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.07.2013, 02:23
AtomicFlasher вне форума Посмотреть профиль Отправить личное сообщение для AtomicFlasher Найти все сообщения от AtomicFlasher
  № 1  
Ответить с цитированием
AtomicFlasher

Регистрация: Jul 2011
Сообщений: 11
По умолчанию Тестовое задание.

Здравствуйте.
Ищу работу AS3 программиста. Сделал тестовое задание, но оно не было принято. Причина: не оптимизированный код. Прошу вас о небольшом code review. Что именно здесь не так?
TestTask.swf   (14.8 Кб)
Вложения
Тип файла: txt Задание.txt (1.1 Кб, 240 просмотров)
Тип файла: zip src.zip (2.7 Кб, 84 просмотров)
Тип файла: swf TestTask.swf (14.8 Кб, 224 просмотров)

Старый 02.07.2013, 13:36
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Ну, в плане оптимизации здесь это не особо критично. Просто видимо хотели проверить знания по разным нюансам.
К примеру, длину массива не нужно просчитывать в цикле каждый раз.
То есть лучше написать так:
Код AS3:
var length:int = planets.length;
for (var i:int = 0; i < length; i++) {
   planets[i].update(target);
}
а не так:
Код AS3:
for (var i:int = 0; i < planets.length; i++) planets[i].update(target);
Плюс у цикла должно быть тело, чтобы было удобнее читать. Ведь этот код не для себя пишется.

Второе. Известно, что доступ к константам всегда медленнее, чем доступ к локальным переменным.
Поэтому можно было часто используемые константы внутри функций "прилепить" к локальным переменным.
К примеру не использовать везде в функции вызов Math.PI
а сначала присвоить ее значение локальной переменной
var pi:Number = Math.PI;
а потом уже использовать ее.

По-поводу оператора switch. Здесь уже были темы с таким обсуждением, и приходили к выводу, что в ас3, if / else работает быстрее, чем switch. В отличие от некоторых других языков. Так что свич я бы тоже выкинул.

Так же есть такая мелочь как вид записи
Код AS3:
if(moon)
неявное приведение к типу Boolean.
По логике, должна быть проверка типа, и после этого приведение к типу Boolean
Код AS3:
if(moon != null)
А так должна сразу приводить к Boolean
Во многих языках первый тип записи вообще не позволит программе скомпилироваться.


Это так, то, что можно сказать на вскидку

Старый 02.07.2013, 14:28
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 3  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
А на мой взгляд - работодатель не прав. В задании нет ни единого намёка на оптимизацию кода. А идеально оптимизированным кодом, для такого простого примера, вряд ли кто-то заморачивается, только конечно если это не очень опытный программер, у которого уже просто привычка оптимизировать всё что только можно.
Уверен, если бы в задании был намёк на оптимизацию, то код товарища AtomicFlasher был бы другим.

Старый 02.07.2013, 17:30
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А на мой взгляд - работодатель не прав.
На мой тоже. Просто это был наверное вежливый способ отделаться от кандидата.

Старый 02.07.2013, 19:16
max123456789 вне форума Посмотреть профиль Отправить личное сообщение для max123456789 Найти все сообщения от max123456789
  № 5  
Ответить с цитированием
max123456789

Регистрация: Jun 2008
Сообщений: 76
Пусть Ваш работодатель курит нервно в сторонке....
Начните свой проект! Не заморачивайтесь на этих жизненных мелочах. Нужно идти вперед. Станьте инди разработчиком. Поверьте пройдет время и вы поймете, что жизнь дает Вам шанс.

Код достаточно хорош. А оптимизация - это отговорка...

P.S. Нужна срочная работа, выйдите на фриланс-сайты

Старый 03.07.2013, 12:32
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Если придираться, то я вижу здесь 3 недостатка:
1. Отрисовка графиксом, а не битмапами (хотелось бы видеть ваш фпс на 5000 объектов).
2. Отсутствие инвалидации. Т.е. отрисовка идёт каждый фрэйм независимо от сохранности данных.
3. Нет явного MVC, хотя по сути
Main - это контроллер, Planet - это модель, а Gui и Universe это вьюшки (рендереры)

Но код достаточно понятный и чистый.
__________________
Отряд Котовскага

Старый 03.07.2013, 14:39
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
В ТЗ ничего этого нет

Старый 03.07.2013, 17:52
AtomicFlasher вне форума Посмотреть профиль Отправить личное сообщение для AtomicFlasher Найти все сообщения от AtomicFlasher
  № 8  
Ответить с цитированием
AtomicFlasher

Регистрация: Jul 2011
Сообщений: 11
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Просто видимо хотели проверить знания по разным нюансам.
Спасибо за развернутый ответ, но мне кажется, что все это экономия на спичках.

Цитата:
Сообщение от Котяра Посмотреть сообщение
1. Отрисовка графиксом, а не битмапами (хотелось бы видеть ваш фпс на 5000 объектов).
2. Отсутствие инвалидации. Т.е. отрисовка идёт каждый фрэйм независимо от сохранности данных.
3. Нет явного MVC, хотя по сути
Main - это контроллер, Planet - это модель, а Gui и Universe это вьюшки (рендереры)
1. Вы предлагаете при создании новых кругов отрисовывать их в BitmapData, а потом в EnterFrame рисовать их через copyPixel()?
2. Наверно не очень поможет - почти все двигается почти всегда. Но я подумаю об этом.
3. По-моему достаточно явное Как можно сделать его явнее в контексте такого маленького примера, чтобы это не выглядело как оверинжениринг?

Наверно стоит пропускать отрисовку кругов, которые полностью закрыты каким-нибудь другим бОльшим кругом. Это легко проверять и, мне кажется, что это сильно уменьшит реально отрисовываемое количество объектов. Я выложу результаты, когда они будут готовы, если кому-то интересно.

Старый 03.07.2013, 19:19
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Спасибо за развернутый ответ, но мне кажется, что все это экономия на спичках.
В данном случае, да. Но если проект большой и таких операций происходит в сотни раз больше, то об этом стоит задуматься.

Старый 04.07.2013, 00:28
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 10  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Спасибо за развернутый ответ, но мне кажется, что все это экономия на спичках.
Дело в том, что код не обязательно должен следовать ТЗ. Особенно на собеседовании.
Сам принимал много тестовых заданий, причём со схожей тематикой.
И просто по коду видно, как человек относится к некоторым вещам. Кто-то явно прописывает MVC-роли в именах классов, кто-то начинает подключать всякие фрэймворки, кто-то оптимизирует отрисовку блиттингоми и использует всякие инвалидации. Не всегда получившийся оверхед таких решений хорош для решения конкретной задачи, но иногда очень неплох для определения кругозора тестируемого.
Одно из лучших решений просмотренных тестовых заданий на моём веку - это было решение от товарища ChuwY - он расписал по каждой задаче несколько вариантов решений, написал бенчмарктесты и описал в комментах лучшие и плохие стороны решения.

Добавлено через 37 минут
Цитата:
Как можно сделать его явнее в контексте такого маленького примера,
Просто выделить явно сущности - Main - пусть будет контроллер.
MainModel - содержит количество планет и лун
PlanetModel, содержит соответственно модель планеты и лун.
UniverseRenderer или MainView - рендерер вселенной
GUIView - гуи.
Когда имена сущностей более явные - сразу понятно, что некоторые вещи им нельзя позволять делать.
__________________
Отряд Котовскага

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:55.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.