Amazon Interview

User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Amazon Interview

Post by АццкоМото »

Мальчик-Одуванчик wrote: Давайте возьмем два класса Будильник и Чайник. [...]
Отвертка имеет функцию - покрутить.
Т.е. фактически три, причем расширяемый класс - отвертка - изначально спроектирован под расширение через шаблоны; даже более того - он и существовать-то нерасширенным не может. Тут-то все понятно и ок, вопрос был не в этом. Ну да и черт с ним.
-------------------------------------------------
А вот если кому вдруг интересно простая проблема по дизайну из реальной жизни. К моему стыду не могу решить ее элегантно. Внутренний голос говорит - чююювааак, это же просто! Но решения не вижу. Не буду в общем виде формулировать, сразу с конкретикой.
Вот есть у нас в Ондроеде такой класс Activity - грубо говоря, один экран с какими-то элементами энторфейса. А есть его сабкласс для экранов на основе ListView - ListActivity. Плюс у нас есть приложение состоящее из, скажем, сотни активностей, честь из них унаследованы от обычной Activity, а часть - от ListActivity. И вдруг в один из дней нам нужно добавить некую хункциональность всем существующим активностям, в данном случае нужно что-то сделать, если в течение какого-то времени юзер не делает никаких телодвижений, пальчиком не водит, кнопочки не давит. Вопрос, как это сделать элегантно? Понятное дело, что я могу сделать два класса MyStrangeActivity & MyStrangeListActivity и наследоваться от них, но эти два класса будут тупеньким копи-пейстом. Можно было бы сделать MyStrange<Activity> & MyStrange<ListActivity> но, во-первых, сигнатура у Activity на 20 экранов, а во-вторых это все равно не будет работать, потому что MyStrange - не потомок Activity. (Сделать его потомком Activity можно, но это уж совсем отвратительно)

Должно же быть простое и элегантное решение....

DISCLAIMER: Если вам не хочется давать бесплатную консультацию, не давайте, просто назовите меня дураком, тем более, что именно им я себя сейчас и ощущаю. С другой стороны, задача хоть и из основной работы, мое решение никто не увидит, за жлегантное решение не похвалит и за копи-пейст не наругает. Т.е. с этической стороной вроде все окей
Мат на форуме запрещен, блдж!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Amazon Interview

Post by Интеррапт »

АццкоМото wrote:Понятное дело, что я могу сделать два класса MyStrangeActivity & MyStrangeListActivity и наследоваться от них, но эти два класса будут тупеньким копи-пейстом.
Ну так создашь какой-то хелпер класс и в овверайднутых методах MyStrangeActivity и MyStrangeListActivity будешь вызывать соответствующие методы хелпера.

Или... или... или... Сделать намного круче, чтобы даже исходники твоих активити классов не пришлось вообще модифицировать. На сцену появляет Aspect Oriented Programming, а именно AspectJ, который таки можно использовать с Андроидом (как настраивать его под Андроид, читай тут: http://deansserver.co.uk/~dean/2011/07/ ... tegration/). Наикрутейшая вещь тут будет, что ты можешь свой код внедрять во всякие onCreate в Activity (и в Activity-derived классы, типа ListActivity) совершенно не меняя код самих классов. Вот для твоей задачи я пример с аспектами набросал:

Code: Select all

import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;

import android.app.Activity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;

/**
 * Activity aspect.
 */
@Aspect
public class ActivityAspect {

    private static final long IDLE_TIMEOUT = 5000L;       // 5 seconds idle timeout
    private static final HashMap<Activity, Timer> activityTimers = new HashMap<Activity, Timer>();

    /**
     * Activity.onCreate() handler. Handles Activity, ListActivity etc.
     */
    @After("execution(public void android.app.Activity+.onCreate(android.os.Bundle))")
    public void afterActivityOnCreateOperation(JoinPoint jp) throws Throwable {
        // Reference to our activity
        final Activity activity = (Activity)jp.getThis();
        // Get activity's root layout
        final View mainContent = activity.getWindow().getDecorView().findViewById(android.R.id.content);
        // Set UI event handlers
        mainContent.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // Canvas was touched - reset idle timer
                startIdleTimer(activity);
                return false;
            }
        });
        mainContent.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // Key was pressed - reset idle timer
                startIdleTimer(activity);
                return false;
            }
        });
        startIdleTimer(activity);
    }

    /**
     * Activity.onDestroy() handler.
     */
    @After("execution(protected void android.app.Activity+.onDestroy())")
    public void afterActivityOnDestroyOperation(JoinPoint jp) throws Throwable {
        System.out.println("Activity is being destroyed");
        final Activity activity = (Activity)jp.getThis();
        Timer timer = activityTimers.get(activity);
        if (timer != null) {
            timer.cancel();
            activityTimers.remove(activity);
        }
    }
    
    /**
     * Start/restart idle timer
     */
    private void startIdleTimer(final Activity activity) {
        System.out.println("Restarting timer...");
        Timer timer = activityTimers.get(activity);
        if (timer != null) {
            timer.cancel();
        }
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("User is idle long enough. Time to do something...");
                        // Restart idle timer
                        startIdleTimer(activity);
                    }
                });
            }
        }, IDLE_TIMEOUT);
        activityTimers.put(activity, timer);
    }
}
и собственно все, на всех вызовах любых твоих onCreate(), onDestroy() на любых Activity, ListActivity и т.п. активити - будут вызываться afterActivityOnCreateOperation и afterActivityOnDestroyOperation класса ActivityAspect.
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Amazon Interview

Post by АццкоМото »

Интеррапт wrote: Ну так создашь какой-то хелпер класс и в овверайднутых методах MyStrangeActivity и MyStrangeListActivity будешь вызывать соответствующие методы хелпера.
Ну это понятно, просто все равно как-то некошерно, особенно если рассматривать общий случай, когда может быть стопицот разных видов активностей на том же уровне, что и ListActivity.
Интеррапт wrote:Или... или... или... Сделать намного круче, чтобы даже исходники твоих активити классов не пришлось вообще модифицировать. На сцену появляет Aspect Oriented Programming, а именно AspectJ, который таки можно использовать с Андроидом
А вот это - супермегакруто! Я бы не додумался, даже если бы месяц думал - про aspectj не знал и до сих пор не вполне понимаю, как он работает under the hood, хотя как пользоваться стало понятно сразу. СПАСИБО!
Мат на форуме запрещен, блдж!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Amazon Interview

Post by Интеррапт »

АццкоМото wrote:Я бы не додумался, даже если бы месяц думал - про aspectj не знал и до сих пор не вполне понимаю, как он работает under the hood
Модифицирует байт код. В случае Андроида это происходит после javac, но перед dx. Единственное исключение для Андроида, это если ты классы грузишь динамически (в ран-тайме, например из сети качаешь класс файлы), то load-time weaving (ну т.е. модификация байт-кода при загрузке класса класслоадером) работать не будет, потому что библиотека эта не понимает Dalvik инструкции. Поэтому работает только compile-time weaving. Но я не думаю, что тебе с андроидом когда-нибудь понадобится load-time weaving.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Amazon Interview

Post by crypto5 »

Интеррапт wrote:
АццкоМото wrote:Я бы не додумался, даже если бы месяц думал - про aspectj не знал и до сих пор не вполне понимаю, как он работает under the hood
Модифицирует байт код. В случае Андроида это происходит после javac, но перед dx. Единственное исключение для Андроида, это если ты классы грузишь динамически (в ран-тайме, например из сети качаешь класс файлы), то load-time weaving (ну т.е. модификация байт-кода при загрузке класса класслоадером) работать не будет, потому что библиотека эта не понимает Dalvik инструкции. Поэтому работает только compile-time weaving. Но я не думаю, что тебе с андроидом когда-нибудь понадобится load-time weaving.
Конкуренты(Spring AOP) dynamic proxies юзают
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Amazon Interview

Post by Интеррапт »

crypto5 wrote:
Интеррапт wrote:
АццкоМото wrote:Я бы не додумался, даже если бы месяц думал - про aspectj не знал и до сих пор не вполне понимаю, как он работает under the hood
Модифицирует байт код. В случае Андроида это происходит после javac, но перед dx. Единственное исключение для Андроида, это если ты классы грузишь динамически (в ран-тайме, например из сети качаешь класс файлы), то load-time weaving (ну т.е. модификация байт-кода при загрузке класса класслоадером) работать не будет, потому что библиотека эта не понимает Dalvik инструкции. Поэтому работает только compile-time weaving. Но я не думаю, что тебе с андроидом когда-нибудь понадобится load-time weaving.
Конкуренты(Spring AOP) dynamic proxies юзают
Ага, только использования run-time weaving (а Spring AOP использует только run-time weaving) vs compile-time weaving (которое AspectJ умеет) - все-таки слегка может сказаться на производительности. Правда AspectJ можно и с Spring без проблем юзать.

Ну и конкуренты нам в случае Андроида не подходят. Spring AOP не может добавлять аспекты к классам, которые не были созданы через Spring factory, а AspectJ работает с любыми классами.
dmishe
Уже с Приветом
Posts: 111
Joined: 05 Jul 2011 23:58

Re: Amazon Interview

Post by dmishe »

То есть это такой формальный манкипатчинг?
poloko
Новичок
Posts: 32
Joined: 17 Dec 2009 12:39

Re: Amazon Interview

Post by poloko »

Прошу прощения, что отвлекаю от технической стороны беседы.

Недавно (практически 2 дня назад) проходил 2 телефонных интервью с Amazon, ради поддержания себя в форме для интервью.
Сильно удивил низкий уровень подготовки интервьюеров. Подумал, что сбой в отлаженной машине интервью в Amazone, но как оказывается я не один такой.

Господа с Amazon, что у вас там происходит?
Tarasik
Уже с Приветом
Posts: 762
Joined: 20 Jan 2005 00:27
Location: La Jolla, California

Re: Amazon Interview

Post by Tarasik »

poloko wrote:Прошу прощения, что отвлекаю от технической стороны беседы.

Недавно (практически 2 дня назад) проходил 2 телефонных интервью с Amazon, ради поддержания себя в форме для интервью.
Сильно удивил низкий уровень подготовки интервьюеров. Подумал, что сбой в отлаженной машине интервью в Amazone, но как оказывается я не один такой.

Господа с Amazon, что у вас там происходит?
Что именно было нижеплинтуса ? Какие вопросы задавали ?
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Amazon Interview

Post by Sergunka »

Tarasik wrote:
poloko wrote:Прошу прощения, что отвлекаю от технической стороны беседы.

Недавно (практически 2 дня назад) проходил 2 телефонных интервью с Amazon, ради поддержания себя в форме для интервью.
Сильно удивил низкий уровень подготовки интервьюеров. Подумал, что сбой в отлаженной машине интервью в Amazone, но как оказывается я не один такой.

Господа с Amazon, что у вас там происходит?
Что именно было нижеплинтуса ? Какие вопросы задавали ?
Да нормальные ребята... поюхисты. У меня опыт с Амазоном примерно следующий -- первый раз года два назад чувак позвонил из кафе, но там к сожалению вай фай не заработал пришлось прекратить интервью. И так как у меня уже был офер я решил дальше не заниматься с Амазоном.

Второй раз уже в прошлом году осенью - вместо одного позвонил другой, чувак попросил написать инсерт для БСТ я его изобразил довольно резво за минут двадцать, оставшиеся 15 минут просто поболтали не о чем.

Реально на мой взгляд в Амазон Сан Франциско работают недавние выпускники американцы и меня проинтервьюровали ради проформы. Но вцелом ребята мне по телефону понравились без напряга чувствуется раслабон :love:
"A patriot must always be ready to defend his country against his government." Edward Abbey
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Amazon Interview

Post by Zorkus »

Sergunka wrote:
Tarasik wrote:
poloko wrote:Прошу прощения, что отвлекаю от технической стороны беседы.

Недавно (практически 2 дня назад) проходил 2 телефонных интервью с Amazon, ради поддержания себя в форме для интервью.
Сильно удивил низкий уровень подготовки интервьюеров. Подумал, что сбой в отлаженной машине интервью в Amazone, но как оказывается я не один такой.

Господа с Amazon, что у вас там происходит?
Что именно было нижеплинтуса ? Какие вопросы задавали ?
Да нормальные ребята... поюхисты. У меня опыт с Амазоном примерно следующий -- первый раз года два назад чувак позвонил из кафе, но там к сожалению вай фай не заработал пришлось прекратить интервью. И так как у меня уже был офер я решил дальше не заниматься с Амазоном.

Второй раз уже в прошлом году осенью - вместо одного позвонил другой, чувак попросил написать инсерт для БСТ я его изобразил довольно резво за минут двадцать, оставшиеся 15 минут просто поболтали не о чем.

Реально на мой взгляд в Амазон Сан Франциско работают недавние выпускники американцы и меня проинтервьюровали ради проформы. Но вцелом ребята мне по телефону понравились без напряга чувствуется раслабон :love:
Так это был "большой" амазон, или A9?
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: Amazon Interview

Post by dotcom »

Zorkus wrote: Так это был "большой" амазон, или A9?
У них, кстати, еще есть большая команда в СФ, которая музыкальным облаком и клиентам занимается. То ли A3, то ли AZ3 называется. :D
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Amazon Interview

Post by Sergunka »

Zorkus wrote:
Sergunka wrote:
Tarasik wrote:
poloko wrote:Прошу прощения, что отвлекаю от технической стороны беседы.

Недавно (практически 2 дня назад) проходил 2 телефонных интервью с Amazon, ради поддержания себя в форме для интервью.
Сильно удивил низкий уровень подготовки интервьюеров. Подумал, что сбой в отлаженной машине интервью в Amazone, но как оказывается я не один такой.

Господа с Amazon, что у вас там происходит?
Что именно было нижеплинтуса ? Какие вопросы задавали ?
Да нормальные ребята... поюхисты. У меня опыт с Амазоном примерно следующий -- первый раз года два назад чувак позвонил из кафе, но там к сожалению вай фай не заработал пришлось прекратить интервью. И так как у меня уже был офер я решил дальше не заниматься с Амазоном.

Второй раз уже в прошлом году осенью - вместо одного позвонил другой, чувак попросил написать инсерт для БСТ я его изобразил довольно резво за минут двадцать, оставшиеся 15 минут просто поболтали не о чем.

Реально на мой взгляд в Амазон Сан Франциско работают недавние выпускники американцы и меня проинтервьюровали ради проформы. Но вцелом ребята мне по телефону понравились без напряга чувствуется раслабон :love:
Так это был "большой" амазон, или A9?
Это "музыкальный" Амазон как dotcom и сказал, если уж совсем точно то это a2z http://www.a2z.com/all-locations/san-francisco/ . Ребята реально классные если туда попасть то должно работаться легко, если нравится работать я бы советовал "молодежи" туда попробовать.
"A patriot must always be ready to defend his country against his government." Edward Abbey
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: Amazon Interview

Post by Zorkus »

Ага, спасибо, запишем.
poloko
Новичок
Posts: 32
Joined: 17 Dec 2009 12:39

Re: Amazon Interview

Post by poloko »

Sergunka wrote:
Tarasik wrote:
poloko wrote:Прошу прощения, что отвлекаю от технической стороны беседы.

Недавно (практически 2 дня назад) проходил 2 телефонных интервью с Amazon, ради поддержания себя в форме для интервью.
Сильно удивил низкий уровень подготовки интервьюеров. Подумал, что сбой в отлаженной машине интервью в Amazone, но как оказывается я не один такой.

Господа с Amazon, что у вас там происходит?
Что именно было нижеплинтуса ? Какие вопросы задавали ?
Да нормальные ребята... поюхисты. У меня опыт с Амазоном примерно следующий -- первый раз года два назад чувак позвонил из кафе, но там к сожалению вай фай не заработал пришлось прекратить интервью. И так как у меня уже был офер я решил дальше не заниматься с Амазоном.

Второй раз уже в прошлом году осенью - вместо одного позвонил другой, чувак попросил написать инсерт для БСТ я его изобразил довольно резво за минут двадцать, оставшиеся 15 минут просто поболтали не о чем.

Реально на мой взгляд в Амазон Сан Франциско работают недавние выпускники американцы и меня проинтервьюровали ради проформы. Но вцелом ребята мне по телефону понравились без напряга чувствуется раслабон :love:
Эти были с Сиэтла.
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Amazon Interview

Post by Alexandr »

poloko
а что спрашивали? интересно
poloko
Новичок
Posts: 32
Joined: 17 Dec 2009 12:39

Re: Amazon Interview

Post by poloko »

Sergunka wrote:
Tarasik wrote:
poloko wrote:Прошу прощения, что отвлекаю от технической стороны беседы.

Недавно (практически 2 дня назад) проходил 2 телефонных интервью с Amazon, ради поддержания себя в форме для интервью.
Сильно удивил низкий уровень подготовки интервьюеров. Подумал, что сбой в отлаженной машине интервью в Amazone, но как оказывается я не один такой.

Господа с Amazon, что у вас там происходит?
Что именно было нижеплинтуса ? Какие вопросы задавали ?
Да нормальные ребята... поюхисты. У меня опыт с Амазоном примерно следующий -- первый раз года два назад чувак позвонил из кафе, но там к сожалению вай фай не заработал пришлось прекратить интервью. И так как у меня уже был офер я решил дальше не заниматься с Амазоном.

Второй раз уже в прошлом году осенью - вместо одного позвонил другой, чувак попросил написать инсерт для БСТ я его изобразил довольно резво за минут двадцать, оставшиеся 15 минут просто поболтали не о чем.

Реально на мой взгляд в Амазон Сан Франциско работают недавние выпускники американцы и меня проинтервьюровали ради проформы. Но вцелом ребята мне по телефону понравились без напряга чувствуется раслабон :love:
А что вы делали 20 минут с BST? Балансировку черно-красного дерева?
tieboss
Уже с Приветом
Posts: 116
Joined: 12 Dec 2012 15:39

Re: Amazon Interview

Post by tieboss »

Было еще одно интервью с некой start-up фирмой из Полу-Ялты как вы ее здесь называете:)
Немного удивил или уровень или скорее подход что ли
С моей точки зрения важнее понимание сути
А тут много вопросов на знание конкретных комманд , классов и т.п.
Конечно это первый телефонный скрин , проверка основ и т.д ....
но как сам подход не очень понятен тем более для человека с опытом
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Amazon Interview

Post by Мальчик-Одуванчик »

Скорее всего на китайца нарвался
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Amazon Interview

Post by Мальчик-Одуванчик »

Интеррапт wrote: На сцену появляет Aspect Oriented Programming, а именно AspectJ,
Ну вот как раз обсуждаемый выше реккурентный шаблон неплохо комбинируется с плюсовой адаптацией AOP
В качестве примера:
struct MyNumber - контейнер, отвечающих только за хранение и доступ к значению
struct ArithmeticAspect - параметризованный классс, отвечающих за арифметич операции
struct LogicAspect - параметризованный классс, отвечающих за логические операции

class Number:public ArithmeticAspect<LogicAspect<Number> > - теперь становится интегральным типом.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Amazon Interview

Post by crypto5 »

Мальчик-Одуванчик wrote:
Интеррапт wrote: На сцену появляет Aspect Oriented Programming, а именно AspectJ,
Ну вот как раз обсуждаемый выше реккурентный шаблон неплохо комбинируется с плюсовой адаптацией AOP
В качестве примера:
struct MyNumber - контейнер, отвечающих только за хранение и доступ к значению
struct ArithmeticAspect - параметризованный классс, отвечающих за арифметич операции
struct LogicAspect - параметризованный классс, отвечающих за логические операции

class Number:public ArithmeticAspect<LogicAspect<Number> > - теперь становится интегральным типом.
А можно пару примеров сигнатур методов классов? Мне кажется это не аналог аспектов.
Я в с++ не профи, поэтому могу задавать глупые вопросы.
In vino Veritas!
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Amazon Interview

Post by Мальчик-Одуванчик »

думаю лучше прочитать развернутую статью на эту тему в июньском номере overloаd за прошлый год
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Amazon Interview

Post by Alexandr »

crypto5 wrote:
Мальчик-Одуванчик wrote:
Интеррапт wrote: На сцену появляет Aspect Oriented Programming, а именно AspectJ,
Ну вот как раз обсуждаемый выше реккурентный шаблон неплохо комбинируется с плюсовой адаптацией AOP
В качестве примера:
struct MyNumber - контейнер, отвечающих только за хранение и доступ к значению
struct ArithmeticAspect - параметризованный классс, отвечающих за арифметич операции
struct LogicAspect - параметризованный классс, отвечающих за логические операции

class Number:public ArithmeticAspect<LogicAspect<Number> > - теперь становится интегральным типом.
А можно пару примеров сигнатур методов классов? Мне кажется это не аналог аспектов.
Я в с++ не профи, поэтому могу задавать глупые вопросы.
я так понимаю, он дальше этот шаблон использует в коде в аспектоподобном виде, т.е. тут по сути Number использует ArithmeticAspect, который использует LogicAspect.

альтернативно должно быть что-то типа

Code: Select all

class Number : ArithmeticAspect<Number>, ConstraintCheckAspect<Number>, LogAspect<Number> { }
а в коде какого-то метода использование этих шаблонов для обработки каждого аспекта операции

Return to “Работа и Карьера в IT”