3-4 ноября в Санкт-Петербурге пройдет крупнейшая ежегодная Java-конференция Joker 2017.

Она соберет более тысячи Java-специалистов и мировых экспертов. Как всегда будет два дня, много хардкорных практических докладов, несколько десятков крутейших спикеров, которые не только пишут на Java, но и создают Java-мир!

Вы сможете лично пообщаться с Евгением Борисовым, Барухом Садогурским, Виктором Гамовым, Алексеем Шипилевым и многими другими известными экспертами.

Регистрация уже открыта, можно купить билеты по низкой цене. А если использовать ключевое слово JokerRush при регистрации, цена станет еще ниже!

Подробности и регистрация: goo.gl/QNDDR3

К звездам через тернии

Челябинск. 2015 год. Пятый курс педагогического колледжа, преддипломная практика успешна завершена. Впереди два коротких месяца до… Неизвестности.

Конец лета 2016 года, Питер. Я веду внутренний спор сам с собою. Нет, нужно звонить родителям незамедлительно, такая новость, а они не верили. Но вдруг что-то пойдет не так? Лучше дождаться окончания испытательного срока, и вот тогда. Но целый год безуспешного поиска! Боже, как хочется рассказать всем. Но нельзя.

Сейчас я полон сомнений. Это ли мой путь?

Я помню весну 2015 года солнечной. Знакомые студенты, как впрочем и я сам, бегают в радостном волнении. Немного страшно, но хорошая погода, близость конца пятилетнего обучения пьянят. Все только и разговаривают о дипломе или о том, что дальше. Я возвращаюсь в общежитие, закрываю дверь в комнату. Действительно, а что же дальше? Я — будущий молодой учитель? Возможно во мне всегда было что-то, что говорило нет. Тут и мой цинизм, амбиции, тщеславие, — в общем все то, что хорошему учителю категорически запрещено. Я не пытаюсь оскорбить педагогов, но именно в нашей стране — это одна из тех профессий, от которых, если ты не абсолютный альтруист, нужно спасаться, как с идущего ко дну корабля.

Однажды, еще десятилетним мальчишкой, я зашел домой и — о чудо! — я увидел компьютер. Новенький, шумно жужжащий Pentium 3 или 4? В первый же день я побежал к друзьям за их играми — GTA, Need for Speed, Warcraft III. Теперь, спустя десяток лет с небольшим, я жалею, что мои родители, как вероятно многие родители тех времен, не увидели всех возможностей этого чуда 20 века, компьютеров. Поэтому, пройдя через бесчисленное количество ссор, запретов и обид, я стал всего лишь типичным подростком-геймером. Хотя можно выделить небольшой плюс: в силу того, что мой уже второй компьютер имел всего лишь 256 МБ оперативной памяти (и соответствующее ей остальное железо), мне постоянно приходилось искать способы повысить производительность в играх. Так, например, я научился переустанавливать Windows и прочий нужный софт и даже немного зарабатывал на этом, помогая студентам и знакомым с их компьютерами.

Не знаю, как так вышло, что лишь на последним курсе, перед лицом все нарастающей угрозы «стать никем», я задумался о том, чтобы попробовать себя в программировании. И я все еще иногда спрашиваю себя: почему не раньше? Первые попытки были не совсем удачными: в русском сегменте интернета были (и есть) в большей части лишь половинчатые статьи и примеры программ, которые лишь немного сложнее «Hello, World!», и почти не приносили какой либо практической ценности. Затем, в силу того, что по специальности я «учитель иностранных языков», я попробовал искать информацию на английском языке. Так я нашел потрясающий сервис Khan Academy с их курсом по Java Script, этим сервисом я пользуюсь и сегодня, но изучаю уже другие предметы. Не помню точно, но тогда еще на Khan Academy не было курсов по полноценному Web (либо я их не нашел), поэтому закончив их курс по JS, я оказался в очередном тупике. А затем я открыл для себя Javarush.

Как вероятно у многих, мои первые 10 уровней пролетели быстро. Меня очень удивил и понравился их стиль преподавания (учитель оценил). Оценил я и предприимчивость создателей сервиса — ведь до сих пор у JavaRush нет подобных по стилю и контенту конкурентов. А как, хотя это и очень банально, грели ум и сердце их истории в конце каждого уровня про успех, образование, заграницу! Поэтому, почти не раздумывая, я купил курсы.

Было особенно тяжело, когда я добрался до 15-16 уровней. Работа с потоками, нитями и прочими непонятными вещами, — все это обескураживало. Были моменты, когда я забрасывал учебу, потому что больно. Больно от того, что 20 попыток, а задача не проходит проверку. Явно грешил — копировал решения задач с github, при этом не всегда вдумываясь, что же я копирую. Так я добрался примерно до 25 уровня. На фоне неуверенности в себе, самокопания от того, что я не самый «честный» ученик, во мне зарождалось какое-то еще одно не очень приятное чувство. Что-то не давало мне покоя, пока наконец я не осознал что: я понял, что несмотря на 25+ уровень, я все еще ничего не знаю и не умею толком. Имеется ввиду именно то, что я до сих пор не мог просто сесть и написать что-то действительно важное и полезное. Не видел общую картину того, как строятся большие, мощные приложения. Одно дело решить интересную логическую задачу, и совсем другое — написать игру, мессенджер, свой сайт. Программирую, не умея программировать.
Здесь я принял одно из своих очень важных, но по наивности абсурдных, даже в каком-то смысле глупых, недалеких, решений: Я переезжаю в Питер.

Я переезжаю в Питер не просто так: в Челябинске нет вакансий Java программистов. Москва отпугивала количеством живущих там людей, ценами и всеми теми «байками», которыми любят делиться люди, никогда не жившие ни в одной из столиц. В то же время, Питер казался загадочным, манящим, эдаким застрявшим в 19 веке прибежищем для не нашедших себя романтиков.

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

Приехав, я сразу же записался на JPoint — конференцию для Java разработчиков (в тот раз специально для студентов). Не знаю для чего я пошел туда с моими-то знаниями, но скорее всего инстинктивно, для еще одного хорошего «пунктика» в резюме. Поиски начались в октябре 2015. Свою первую работу я нашел в августе 2016. В октябре и ноябре я был воодушевлен, коленки на первом собеседовании тряслись, а отказы расстраивали не так сильно — все-таки я же еще новичок? Настроение сильно ухудшилось зимой. К весне я нашел «стажировку мечты» в одной хорошей немецкой компании. Провал. Как раз в марте — ровно год покупки курсов на JavaRush. А теперь добавьте сюда еще отсутствие денег, коммуналку, в которой и врагу не пожелаешь жить, отсутствие работы вообще какой бы то ни было, а главное каких либо новых перспектив. И здесь я сдался. Забыл о программировании на 4 месяца. Не мог о нем думать. Малейшая мысль о том, чтобы «покодить», вызывало чувство паники, отвращения и тошноты.

И вот он я — промоутер на главной улице Петербурга. С дипломом учителя иностранных языков, с разбросанными по всему уму знаниями-ошметками про Java, SQL, Spring, Hibernate, HTML, JS, CSS. Да, наши экскурсии на теплоходах лучшие. Yes, we have blankets and english audio guide. Давайте я вас провожу к причалу. Нет, из-за того, что я вас провожу, цена билета не изменится.

Думая об этом сейчас, я понимаю, что был неправ — нужно было лучше готовиться к собеседованиям.

А затем как всегда, как это часто случается во всех банальных цитатах, в одинаковых как день фильмах и кричащих безвкусицей киосочных книгах — произошло чудо, которого ВОТ ПРЯМО СЕЙЧАС ты не ждал. Только, как в случаях с фильмами, я не влюбился — первая работа программистом нашла меня. В конце июля, начале августа, я решил «просто отправить пару резюме». Обычное тестовое задание, обычное собеседование. Обычное неверие, что мне хотя бы даже ответят. Правда времени дали немного, а с моими 14,5 часов сменами его еще меньше. Кое как успел, отправил и забыл. Потом, в самый обычный день, я зашел на почту и не поверил тому, что прочитал. Прочел еще раз. И еще. И еще.

Первые дни. Я всего боюсь. Какие-то люди, объясняют, что делать, из чего состоят наши сервисы, как все работает. Я киваю, запоминаю ровным счетом ничего. В конце рабочего дня я выжат, сил, как и желания что-то делать, нет. Успел выполнить первое задание за 3 недели (которое сейчас я сделал бы за день). Меня похвалили, сказали, что со следующего месяца я полноценный член команды. Здесь я даю себе волю похвастаться всем, кому хотел все это время, но не мог, так как боялся потерпеть еще одну неудачу. В голосе гордость. Вот, вы не верили, а я смог. Нет, мне не нужен институт, я сам. Не хочу терять время и деньги.
По улице иду улыбаясь, с превосходством и самодовольством поглядывая на «людишек». Не верю, что мне платят столько за то, что я… сижу перед компьютером. Это так странно. С каждым месяцем становится все легче; я уже не выжат как лимон в конце рабочего дня. Повышение. Нашу команду пригласили на хакатон для студентов. Иронично, что я один из менторов и студенты идут ко мне с вопросами. Чувствуешь, как твои знания ширятся, как земля под ногами становится тверже. Но вместе с этим я понимаю, как много еще я не знаю.

Попытки создать с другом свой проект. Первое понимание того, как сложно приложение довести хотя бы просто до работающего прототипа. И дело тут не в сложности. Нехватка времени, усталость от «кодинга» после работы, лень, другие отговорки. Замкнутый круг. Я вспоминаю лектора из той немецкой компании, из которой я с треском вылетел; он с горькой иронией рассуждал про то, как много молодых стартаперов действительно становятся таковыми в реальности, а не просто в своих мыслях.

Сейчас я полон сомнений. Это ли мой путь? Банально, но худа без добра не бывает. Вскоре я начал понимать, что хотя Java — очень мощный язык, возможности которого огромны, — его применение ограниченно. Мне мало, если так можно выразиться, Web Enterprise'a. Да и потом, я называю себя программистом, но действительно ли являюсь им, а самое главное — хочу ли? Скорее всего, это лишь одна из множества мелких остановок на пути к заветной, но едва ли выполнимой мечте — найти настоящего себя. Найти и проявить то, что не зависит от уровня зарплаты, престижности и нужности профессии сегодня.

В итоге я все же рад, что хотя и было тяжело, но я смог достичь цели — стать программистом, и это на фоне гуманитарного коллежского образования и отсутствия технического профильного. Но я знаю, что это не предел. Во мне все еще живет безумное желание двигаться дальше, учиться новому, искать себя. И даже если я решу посвятить свою жизнь изучению чего бы то ни было другого, мой опыт обязательно пригодится мне.
  • ,

Прошу объяснить какой закон математики здесь работает.

Уважаемые друзья, в одной из задач приведенным ниже кодом мы определяем пересеклись ли траектории объектов, вод выдержка из условия:
А еще нам нужно будет определять попал шарик в кирпич или в подставку.
Это будем делать так:
В этом же классе, создадим специальный метод: boolean isIntersec(BaseObject o)
Он будет определять — «пересеклись» объекты или нет. Если пересеклись — возвращать true, если нет — false.
Т.к. объекты мы условно считаем кругами, то предлагаю такую формулу взаимодействия
Если центр круга одного объекта попал в круг другого, то будем считать, что они столкнулись.
Или еще проще:
дистанция_между_объектами <= max (радиус_первого_объекта, радиус_второго_объекта)


код:
public boolean isIntersec(BaseObject o){
    double xDistance = this.getX() - o.getX();
    double yDistance = this.getY() - o.getY();
    double distance = Math.sqrt((xDistance*xDistance)+(yDistance*yDistance));
    return distance < Math.max(this.getRadius(), o.getRadius()) ;
}


1. Какой математический принцип(То что используется теорема Пифагора я и сам вижу, как она позволяет сделать вывод о дистанции между точками на плоскости?) используется в данном коде и почему мы считаем что код верно определит пересекались ли объекты.

2. Почему в данной задаче, как и в предыдущих, при наличии геттеров и сеттеров, валидатор пропускает только когда обращаешся непосредственно к переменным, как правильно все же? А главное почему?
  • ,

Можно ли где-то найти тестовое задание JavaRush?

Всем доброго времени суток.В общем то вся суть вопроса уже сказана в заголовке топика. Хочу хотя бы взглянуть, что нужно будет сделать, чтобы попасть на стажировку в JR, но пока возможности апнуть подписку не имеется. Возможно эти задания есть в свободном доступе? Заранее спасибо за ответы.

level19.lesson10.bonus01 Не проходит тестирование, помогите!

Перечитал кучу топиков, сделал решение которое работает, не могу понять в чем проблема! Никак не хочет проходить тестирование, воистину, самое сложно задание которое было до этого!!! Ребята, в чем проблема, почему не хочет принимать?:(((
Условие уже написал «исправленное», так как оригинальное условие содержит ошибку.
package com.javarush.test.level19.lesson10.bonus01;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/* Отслеживаем изменения
Считать в консоли 2 имени файла - file1, file2.
Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
Нужно создать объединенную версию строк, записать их в список lines
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME
Пример:
оригинальный   редактированный    общий
file1:         file2:             результат:(lines)

строка1        строка1            SAME строка1
cтрока2                           REMOVED строка2
строка3        строка3            SAME строка3
строка4                           REMOVED строка4
строка5        строка5            SAME строка5
               строка0            ADDED строка0
строка1        строка1            SAME строка1
строка2                           REMOVED строка2
строка3        строка3            SAME строка3
               строка5            ADDED строка5
строка4        строка4            SAME строка4
строка5                           REMOVED строка5
*/

public class Solution {
    public static List<LineItem> lines = new ArrayList<LineItem>();

    public static void main(String[] args) throws Exception {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String fileName1 = bufferedReader.readLine();
        String fileName2 = bufferedReader.readLine();

        bufferedReader.close();
        BufferedReader fileReader1 = new BufferedReader(new FileReader(fileName1));
        BufferedReader fileReader2 = new BufferedReader(new FileReader(fileName2));
        while (fileReader1.ready() || fileReader2.ready()) {
            if (fileReader1.ready() && fileReader2.ready()) {
                String s1 = fileReader1.readLine();
                String s2 = fileReader2.readLine();
                if (s1.equals(s2)) {
                    lines.add(new LineItem(Type.SAME, s1));
                } else if ("".equals(s1)) {
                    lines.add(new LineItem(Type.ADDED, s2));
                } else if ("".equals(s2)) {
                    lines.add(new LineItem(Type.REMOVED, s1));
                }
            } else if (!fileReader1.ready() && fileReader2.ready()) {
                String s2 = fileReader2.readLine();
                lines.add(new LineItem(Type.ADDED, s2));
            } else if (fileReader1.ready() && !fileReader2.ready()) {
                String s1 = fileReader1.readLine();
                lines.add(new LineItem(Type.REMOVED, s1));
            }
        }
        fileReader1.close();
        fileReader2.close();
    }

    public static enum Type {
        ADDED,        //добавлена новая строка
        REMOVED,      //удалена строка
        SAME          //без изменений
    }

    public static class LineItem {
        public Type type;
        public String line;

        public LineItem(Type type, String line) {
            this.type = type;
            this.line = line;
        }
    }
}
  • ,

Тестовое задание в одну из крупных IT компаний Беларуси

Всем привет! Как и обещала в комментарии к прошлой статье, выкладываю тестовое задание по J2SE и JavaEE которое мне прислали для зачисления на стажировку. Для его выполнения дается 30 минут. Правда, сохранить успела 12 из 14 вопросов.

— означает, что может быть несколько вариантов ответа
* означает, что может быть только один вариант ответа

  1. Вопрос
  2. Integer a = new Integer(2);
    Integer b = new Integer(2);
    
    What code will provide output: "false"? Check all that apply.
    
    Варианты ответов:
    - System.out.println(a.intValue() == b.intValue());
    - System.out.println(a.compareTo(b));
    - System.out.println(a.equals(b));
    - System.out.println(a == b);
  3. Вопрос
  4. Which HTTP methods are NOT considered idempotent (multiple execution of query
     will give the same result)? (Choose all that apply)
    
    Варианты ответов:
    - GET
    - POST
    - HEAD
    - PUT
  5. Вопрос
  6. How should servlet developers handle the HttpServlet's service() method when
     extending HttpServlet? (Choose all that apply).
    
    Варианты ответов:
    - They should override the service() method in most cases.
    - They should call the service() method from doGet() or doPost().
    - They should call the service() method from the init() method.
    - They should override at least one doXXX() method (such as doPost()).
  7. Вопрос
  8. Which methods are used by a servlet to handle form data from a client?
     (Choose all that apply)
    
    Варианты ответов:
    - HttpServlet.doHead()
    - HttpServlet.doPost()
    - HttpServlet.doForm()
    - ServletRequest.doGet()
    - ServletRequest.doPost()
    - ServletRequest.doForm()
  9. Вопрос
  10. Given the Product Bean:
    
    public class Product{
    public Product(String title, int size){
    this.title = title;
    this.size = size;
    }
    String title;
    int size;
    }
    
    How would servlet code from a service method (e.g. doPost()) pass a Product bean
     info to the jsp?
    
    Варианты ответов:
    * response.setAttribute("product", new Product("Shirt", t));</li>
    * response.setParameter("product", new Product("Shirt", t));</li>
    * request.setAttribute("product", new Product("Shirt", t));</li>
    * request.setParameter("product", new Product("Shirt", t));</li>
    
  11. Вопрос
  12. You have to create your own type of exception, named UserOperationExсeption.
     And you need to make it a checked exсepetion. What is the appropriate signature in
     this case? Check all that apply.
    
    Варианты ответов:
    - public class UserOperationExсeption extends RuntimeExсeption{...}
    - public class UserOperationExсeption extends Exсeption{...}
    - public class UserOperationExсeption extends IOExсeption{...}
    - public class UserOperationExсeption extends extends Error{...}
    
  13. Вопрос
  14. Given following classes hierarchy:
    
    public class Building {...}
    public class Warehouse extends Building {...}
    public class Shop extends Building {...}
    public class SportsShop extends Shop {...}
    
    and code:
    
    ...
    Building b1 = new Building();
    Building b2 = new Warehouse();
    ...
    
    What code will cause a ClassCastException to be thrown? Check all that apply.
    
    Варианты ответов:
    - Warehouse w1 = b2;
    - Warehouse w2 = (Warehouse) b2;
    - Warehouse w3 = new SportsShop();
    - Shop s1 = (Shop)b1;
    - Shop s2 = new SportsShop();
  15. Вопрос
  16. Given the method:
    
    public int shift(int value, int offset)
    {
    value += offset;
    return value;
    }
    
    What will be the output of following code:
    
    int v = 2;
    shift(v,5);
    System.out.println(v);
    
    Варианты ответов:
    * 2
    * 5
    * 7
    * 3
    
  17. Вопрос
  18. Given:
    
    public class Product {
    public Product(String title, int size){
    this.title = title;
    this.size = size;
    }
    String title;
    int size;
    
    public String toString()
    {
    return title + ":" + size;
    }
    }
    ...
    Set products = new HashSet();
    products.add(new Product("Hat", 3));
    products.add(new Product("Hat", 3));
    System.out.println(products);
    
    What items will be in the programm output, considering that Product class inherits
     equals() and hashCode() methods from Object?
    
    Варианты ответов:
    * Hat
    * [Hat:3, Hat:3]
    * [Hat:3]
    * RuntimeException about duplicate elements
  19. Вопрос
  20. What code is valid for creating immutable list?
    
    Варианты ответов:
    * List immutableItems = Collections.unmodifiableList(new ArrayList());
    immutableItems.add("i1");
    immutableItems.add("i2");
    
    * List items = new ArrayList();
    items.add("i1);
    items.add("i2");
    List immutableItems = Collections.unmodifiableList(items);
    
    * List items = new ArrayList();
    items.add("i1);
    items.add("i2");
    final List immutableItems = items;
    
    * List can't be immutable
  21. Вопрос
  22. What is complexity (Big 0 notation) of ArrayList contains() method?
    
    Варианты ответов:
    * 0(n^2)
    * 0(log(n))
    * 0(n)
    * 0(1)
    
  23. Вопрос
  24. Given and array of size n, suppose you need to write a program that
     calculates the sum of every second element of this array. What will be the
     complexity (Big 0 notation) of most optimal implementation of this algorithm?
    
    Варианты ответов:
    * 0(n^2)
    * 0(n/2)
    * 0(n)
    * 0(1)

Предлагаю обсудить какие варианты ответов правильные.
  • ,

Собеседование. Нужно ваше мнение

Всем привет! Вот и я уже дошла до 32 уровня JavaRush и решила закинуть удочку и поймать свою удачу на просторах вакансий Junior Java Developer.
Мне немного улыбнулась удача и мне прислали тестовое задание. Но перед ссылкой на его выполнение написали такое вот сообщение:
Добрый день! Спасибо, что заполнили нашу анкету!

Как и договорились, мы внесли Ваш профиль в список приглашенных к тестированию. Вот основные условия написания онлайн-теста:

Когда Вы начнете тест, Ваша попытка будет списана. Будьте внимательны и приступайте к тесту, когда будете готовы.
Время на написание теста: 30 минут.
Вопросы по Java приводятся на английском языке.
Структура теста: 10 вопросов J2SE, 4 вопроса J2EE. Рассчитайте Ваше время с учетом структуры теста.
По итогам анализа ответов теста, если Вы справитесь с 70-80% вопросов, мы пришлем Вам ссылку на следующее задание.
Мы просим Вас быть максимально внимательными, соблюдать регламент и быть предельно честными — для теста Вам необходимы только Ваши знания.

На JavaRush мы изучали JavaCore, а тут вопросы будут по J2SE + J2EE. Я не стала пока переходить по ссылке, т.к хочу понять стоит ли сейчас туда лезть с моими познаниями или стоит что-то дополнительно изучить.

Ребята, помогите понять.Кто знает J2SE + J2EE это тоже самое, что мы изучали или это что-то гораздо тяжелее? Если второе, то киньте ссылки на какие-нибудь источники, чтобы можно было дополнительно изучить J2SE и J2EE.

Здесь можно посмотреть тестовое задание, которое мне давали.

Приглашаем на конференцию JavaDay 2017 в Минске 3 июня!

В программе доклады и мастер-классы от супер-звёзд индустрии: Егора Бугаенко, Philipp Krenn, Александра Тарасова и многих других!

Отдавая должное популярности Java, на конференции речь пойдёт не только о ней, но и о практиках, инструментах, подходах и даже философии. Spring Boot, JWT, мониторинг контейнеров, правильная интеграция между микросервисами, Continuous Delivery – всё то, без чего Java Enterprise не может существовать в 2017 году.

Билеты и детали – на javaday.by/. #javadayby

level21.lesson16.big01 задание 15 : Метод getWinner не принимается

Ипподром(15)
В классе Hippodrome сделаем два метода:
public Horse getWinner() и public void printWinner()
Метод getWinner должен возвращать лошадь пробежавшую самую большую дистанцию.
Метод printWinner выводит на экран имя победителя в виде: Winner is !
Пример:
Winner is Lucky!

Валидатор выдает: Метод getWinner должен возвращать лошадь пробежавшую наибольшую дистанцию.

До этого задания все принято нормально. Я всего лишь добавил в Ippodrom 2 метода:

public Horse getWinner()
    {
        Horse winner=horses.get(0);
        for (int i=1;i<horses.size();i++)
        {
            if (winner.getDistance()<=horses.get(i).getDistance())
                winner=horses.get(i);
        }
        return winner;
    }

    public void printWinner()
    {
        System.out.println("Winner is "+ getWinner().getName()+"!");
    }


Ну и в самом main() добавил вызов: game.printWinner();

Все выдает правильно, проверено раз 20 уже. Пробовал getWinner() делать через for-each, и обращаться к списку через game.getHorses вместо напрямую horses, менял знаки равенства. Куда копать то?


package com.javarush.task.task21.task2113;

import java.util.ArrayList;
import java.util.List;

public class Hippodrome {

    private ArrayList<Horse> horses=new ArrayList<>();
    public static Hippodrome game;

    public Hippodrome (ArrayList<Horse> horses) {this.horses=horses;}

    public List<Horse> getHorses(){return horses;}

    public static void main(String[] args) throws InterruptedException {
        game = new Hippodrome(new ArrayList<Horse>());
        game.getHorses().add(new Horse("Burenka",3,0));
        game.getHorses().add(new Horse("Mustang",3,0));
        game.getHorses().add(new Horse("Przhevalsk",3,0));
        game.run();
        game.printWinner();

    }

    public Horse getWinner()
    {
        Horse winner=horses.get(0);
        for (int i=1;i<horses.size();i++)
        {
            if (winner.getDistance()<=horses.get(i).getDistance())
                winner=horses.get(i);
        }
        return winner;
    }

    public void printWinner()
    {
        System.out.println("Winner is "+ getWinner().getName()+"!");
    }

    public void run()  {
        for (int i=1; i<=100;i++)
        {
            move();
            print();
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public void move() {
        for (Horse h: horses)  {    h.move();  }
    }
    public void print() {
        for (Horse h: horses) { h.print(); }

        for (int i=1;i<=10;i++) System.out.println();

    }

}

История трудоустройства

Всем привет!

На этой неделе заканончился мой испытательный срок и я решил написать свою историю трудоустройства.

И для начала расскажу как все начиналось. В 2008 году я поступил в вуз, на физтех. На первом курсе у нас был С++ и скажу честно, первые полгода я не особо понимал программирование. Но уже во втором полугодии я вник в азы и на экзамене в конце года получил 95 баллов из 100. И на этом вроде как история программирования закончилась. Но до тех пор, пока я в 2013 не вернулся в Россию…

Это был обычный день и я как и все листал ленту в ВК и нечаянно наткнулся на рекламу JavaRush. Что-то типа – лиши мозг девствености, научись программировать. Меня это действительно заинтересовало и я начал учить Java. Так как от С++ не особо отличалось, я быстро прошел первые 9 уровней и летом 2013 попытался устроиться хотя бы стажером. Откликов на мое резюме было и вовсе мало, если не сказать что их не было. Тогда я сам нашел вакансию стажера(тестировщика) в Яндексе и получил тестовое задание(проверить через Junit тесты, что данные 3 точки на плоскости представляют из себя вершины прямоугольного треугольника). Успешно его пройдя мне позвонили и… разъяснили, что (далее цитирую) – Нам нужно потратить на вас полгода, чтобы вы стали специалистом, так что до свидания.

Скажу честно, я сильно разочаровался в этой компании и забросил всю эту идею на полгода. Через следующие полгода я возобновил поиски, но они ничего не давали. Наверно потому что в моем резюме стояло 2 поля – С++ и Java. И так продолжалось до 2016. Время от времени я что-то учил, решал задачи на JavaRush и кстати купил подписку в том же году(под новый год по акции 2013) и дошел до 15 уровня. Еще я нашел курс по андроиду – как сделать свою первую игру(так как я владею английским языком было несложно найти такие курсы). Но все было бестолку, до марта 2016…

Посмотрев требования к вакансиям Java Junior я понял, что на одной Java не выйдешь и решил, что надо учить что-то еще. И я начал учить JavaScript, HTML, CSS, SQL. В этот период я работал репетитором, так что у меня было несколько часов по утрам и по вечерам. Которые я тратил на изучение языков, чтение книг(Путь программиста, чистый код, идеальный программист, Шилдт – Java 8 полное руководство, Что нас на самом деле мотивирует, Сила воли). И говоря простым языком, я начал усердно трудиться. Каждый день я решал задачи на JavaRush, постил их на GitHub, проходил по главе из каждой книги по другим языкам и по главе из других книг.

После прохождения курса Первая мобильная игра, я написал свою игру Арканоид на андроид, потом появилась идея написать вторую игру. Позже я решил написать крестики нолики на Java для консоли, далее переписал ее на JavaScript и конечно же написал для андроид. Но всего этого было мало, очень мало…

Тогда я понял, что устроиться Java Junior слишком сложно для меня и я решил полностью уйти в Андроид. В начале я хотел уйти в геймдев. Но неожиданно понял, что почти нет вакансий разработчика игр на андроид на Java. Изучил LibGDX, но и это не помогло…

Тогда я решил писать приложения на Андроид. В этом мне помогла книга HeadFirst Android и курс StartAndroid на YouTube(и еще 100500 англоязычных сайтов). Так как я ярый фанат Маяковского, посмотрел в Google Play какие есть приложения с его стихами. И не найдя ничего достойного, решил что могу сам создать достойное приложение. Именно с этого и началась белая дорога. Точнее, выкладывая на GitHub я начал получать приглашения на собеседования, но их не проходил, да и было их всего пару штук. Тогда я решил писать тестовые задания разных компаний и публиковать их на GitHub, также в мой собственный блог(johnnyblog.ru). Написав около 12 приложений(тестовых заданий и своих) я начал получать приглашения на собеседования, но их опять же было очень мало, по сравнению с отказами(за полгода мою анкету просмотрели около 500 раз)…

Я заметил, что в большинстве требований к кандидатам есть строка – наличие своих приложений на Google Play и как бы вы думали? Как только я опубликовал в магазине свои 2 приложения, предложений по работе стало гораздо больше. В общем я сходил на собеседования меньше 10 раз. На каждом собеседовании меня спрашивали из того, чего я не знал. Но зачастую дело и не доходило до приглашения на собеседование, отказывали просто узнав что я не являюсь гражданином РФ…

Итак, вроде как дела шли хорошо – я ходил на собеседования, получал отказы все чаще и больше (зачастую просто игнорировали и ничего не отвечали). Я планировал найти работу до конца лета. Но, увы, так и не нашел. И тогда я полностью разочаровался во всем и решил забить на поиски. И знаете, однажды мне на почту пришло письмо. Да да, именно то письмо, которое и стало началом моей истории. Я получил приглашение на собеседование. И знаете, если раньше я ходил на собеседования с мыслью, что – вот опять будут спрашивать какие-то каверзные вопросы и не возьмут, ну и Бог с ними, особо и не хочу я у них работать — то на этот раз я очень хотел, чтоб меня взяли на работу…

Итак, в назначенный день я пришел на собеседование. Если кому интересно, то спрашивали про многопоточность, коллекции, базовые методы класса Object. В большинстве своем я давал правильные ответы на вопросы и мне пообещали позвонить через день. И это был именно тот случай, когда действительно работодатель обещал и позвонил. Сказали, что я их устраиваю как кандидат. И вот через месяц после собеседования я вышел на работу на испытательный срок в 3 месяца. И на днях этот срок закончился. Скажу сразу, что я усердно трудился, зачастую перерабатывал, бывало что и выходил в выходной день. Но все это не зря. Труды дали свои плоды и теперь я работаю 5/2 (с 11.00 – 20.00) в офисе на Кутузовской, напротив Moscow City и пишу приложение Сбербанк Онлайн на компьютере iMac 27”, с 8 ядрами и 24 гигами озу.

upd. незамеченная история, дата публикации изменена для вывода в топ.