11.07.2015 Views

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ХАКЕР 04 /171/ 2013 Задачи на собеседованиях111} catch (ProcessingException | RuntimeException e) {auditService.audit("documentProcessingFailed", e);throw e;}}}Как можно увидеть в получившемся фрагменте кода, мы выделили интерфейсобработки документов и добавили еще одну его реализацию, осуществляющуюзапись в журнал.Это было необходимо, поскольку у нас используется декларативнаяразметка транзакций (причем, скорее всего, на стеке технологийSpring, а не JEE, иначе была бы использована аннотация TransactionAttribute), соответственно, вероятны ошибки, возникающие за пределамиметода processDocument, например в фазе commit. В новой реализациимы корректно обработаем такие ошибки и сделаем запись в журнал«documentProcessingFailed».Этот код будет работать исходя из предположения, что ошибки записив журнал аудита являются фатальными для системы, — именно поэтому исключения,возникающие в методе audit, не обрабатываются.Кроме того, новый код использует перегруженную версию метода auditсо следующей сигнатурой:public void audit(String messageKey, Object… params);Такой интерфейс позволяет делегировать формирование сообщенияиз прикладного кода метода processDocument в сервис аудита, в которомсообщение может быть построено, например, с помощью классаMessageFormat из стандартной библиотеки по заданному ключу в файлересурсов приложения.После реализации журнала работы мы получаем три возможных сценарияработы кода, на которые, соответственно, должно быть написано триприемочных теста.Код будет работать исходя из предположения,что ошибки записи в журнал аудита фатальныдля системы, — именно поэтому исключения,возникающие в методе audit, не обрабатываются1. Тест на обработку корректного документа. Проверяет, что документ сохраняетсяв БД, отсылается подтверждение и появляется соответствующаязапись в журнале работы.2. Тест на обработку заведомо некорректного документа, например с переопределеннымметодом isValid. Проверяет, что результатом обработкитакого документа является отосланное подтверждение documentInvalidи запись в журнале.3. Тест на обработку ошибок, например с перегруженным методомdocumentService.store, генерирующим исключение ServiceException.Проверяет, что в такой ситуации единственным результатом работы являетсязапись в журнале.Поскольку журнал работы сохраняется в базе данных, метод audit долженвыполняться в отдельной транзакции — иначе результаты его работымогут не сохраниться из-за отката основной бизнес-транзакции, если методaudit вызывался внутри нее.ЗАДАЧА ОТ КОМПАНИИ SOFTLINE № 1Что выведет данный скрипт? Объясните почему.РЕШЕНИЕПеред тем как начать пересчитывать предполагаемый результат функциидля параметра 100, проверим корректность реализации и вызова.ЧИТАТЕЛЬ!ПРИСЫЛАЙНАМ СВОИРЕШЕНИЯ, И МЫИХ ОПУБЛИКУЕМ!РУКОПИСИВОЗВРАЩАЮТСЯВ ПОМЯТОМИ ИСПОРЧЕННОМВИДЕ, ПОЭТОМУЛУЧШЕ ПОЛЬЗУЙСЯЭЛЕКТРОННОЙПОЧТОЙ.Обращаем внимание, что аргумент функциипринимается по ссылке (&$var), соответственно,корректно в нее можно передать только переменную.В нашем же случае в функцию передаетсяконстанта, поэтому ожидаемый результатработы скрипта — сообщение об ошибке:PHP Fatal error: Only variables can bepassed by referenceЗАДАЧА ОТ КОМПАНИИ SOFTLINE № 2Как можно сделать анимированную иконку средствамитолько CSS с анимацией части изображения,без использования растрового фона?РЕШЕНИЕИспользуется базовый класс с описанием параметровосновного блока — каркаса кружки,два класса с модификаторами :after и :beforeдля создания уровня жидкости и ручки, а такжекласс :hover для отображения состояния при наведениикурсора. В базовом классе указаны параметрыанимации — анимируемое свойство,скорость анимации и тип анимации:.mug_animate {}-webkit-box-shadow: inset 0 -3em 0 0#2C2C2C;box-shadow: inset 0 -3em 0 0#2C2C2C;margin: 0 auto;margin-bottom: 1em;height: 2.5em;margin-top: 1.25em;position: relative;width: 1.5em;-webkit-transition: all 1000mslinear;-moz-transition: all 1000ms linear;-o-transition: all 1000ms linear;-ms-transition: all 1000ms linear;transition: all 1000ms linear;.mug_animate:after {border: .25em solid #2C2C2C;border-right: none;border-radius: .75em 0 0 .75em;content: '';height: 1.5em;left: -1em;position: absolute;top: .25em;width: .75em;}.mug_animate:before {border-radius: 0 0 0.2em 0.2em;top: -0.5em;left: -0.25em;position: absolute;border: 0.25em solid #2C2C2C;height: 2.5em;width: 1.5em;content: "";}.mug_animate:hover {-webkit-box-shadow: inset 0 0em 00 #2C2C2C;}box-shadow: inset 0 0em 0 0 #2C2C2C;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!